Sannyasin
@Sannyasin
3D, Digital Art

Crystal (подобный Ruby) – стоит ли изучать этот язык программирования?

Википедия о Crystal
Википедия:

Класс языка: язык программирования и объектно-ориентированный язык программирования
Появился: 2014 г.
Разработчик: Арье Боренвейг
Расширение файлов: .cr
Выпуск: 0.36.1 (2 февраля 2021)
Испытал влияние: Ruby, Си, C#, Python, Go и Rust
Лицензия: Apache
Сайт: crystal-lang.org
Платформа: IA-32, Intel Architecture и x86_64
ОС: macOS, Linux и FreeBSD

Crystal — объектно-ориентированный язык программирования общего назначения. Развивается сообществом из более 300 разработчиков. Обладает Ruby-подобным синтаксисом, но, в отличие от Ruby, является компилируемым и статически типизированным языком, использующим вывод типов (в связи с чем явное объявление типов, как и в Ruby, не обязательно). Распространяется как свободное и открытое программное обеспечение под лицензией Apache версии 2.0.

Программы на Crystal компилируются средствами LLVM, при этом утрачены некоторые динамические аспекты, имеющиеся в Ruby, но эффективность программ намного выше, а производительность сравнима с программами на Си[3][4][5]. Язык использует сборщик мусора Бёма[en], обладает системой макросов, поддерживает обобщённое программирование, перегрузку методов и операторов. Реализован интерфейс вызова функций из двоичных библиотек на Си и C++, при этом синтаксис взаимодействия с такими библиотеками максимально упрощён, что позволяет легко создавать библиотеки-обёртки, а не писать весь код с нуля. Также Crystal поддерживает ассемблерные вставки и прямое обращение по указателям — это считается небезопасной практикой, но не запрещено, поскольку необходимо, в частности, и для взаимодействия с функциями из внешних библиотек.


Описание на сайте разработчиков
Автоперевод с сайта разработчиков

СИНТАКСИС
Синтаксис Crystal сильно вдохновлен синтаксисом Ruby, поэтому он чувствует себя естественно читать и легко писать, и имеет дополнительное преимущество более низкой кривой обучения для опытных разработчиков Ruby.

ТИПОВАЯ СИСТЕМА
Crystal статически проверяется на тип, поэтому любые ошибки типа будут пойманы компилятором на ранней стадии, а не завершатся неудачей во время выполнения. Кроме того, чтобы сохранить язык чистым, Crystal имеет встроенный вывод типов, поэтому большинство аннотаций типов не нужны.

ПРОВЕРКА НУЛЕВЫХ ССЫЛОК
Все типы не являются нилируемыми в Кристалле, и нилируемые переменные представлены как объединение между типом и нулем. Как следствие, компилятор будет автоматически проверять наличие нулевых ссылок во время компиляции, помогая предотвратить ужасную ошибку стоимостью в миллиард долларов.

МАКРОСЫ
Ответом Crystal на метапрограммирование является мощная макросистема, которая варьируется от базового шаблонирования и проверки AST до проверки типов и запуска произвольных внешних программ.

МОДЕЛЬ ПАРАЛЛЕЛИЗМА
Кристалл использует зеленые нити, называемые волокнами, для достижения параллелизма. Волокна связываются друг с другом с помощью каналов, как в Go или Clojure, без необходимости обращаться к общей памяти или блокировкам.

C-ПРИВЯЗКИ
Crystal имеет специальный синтаксис для легкого вызова собственных библиотек, устраняющий необходимость переопределения низкоуровневых задач.

ЗАВИСИМОСТИ
Кристаллические библиотеки упаковываются в виде осколков и распространяются через Git без необходимости централизованного хранилища. Встроенные команды позволяют легко определять зависимости через файл YAML и извлекать их из соответствующих репозиториев.


Обзорная статья на Хабре
Вышел язык программирования Crystal версии 1.0: до...

Что это за язык такой?
Если вы не слышали о проекте раньше, то вот краткое его описание. Crystal — это высокоуровневый объектно-ориентированный язык программирования. Его синтаксис очень похож на синтаксис Ruby, но отличается от своего конкурента тем, что компилируется в машинный код посредством LLVM.
По словам разработчиков и сторонних компаний, которые уже протестировали язык, производительность приложений, написанных на Crystal сравнима с приложениями на С. Последний считается более сложным для освоения, чем Ruby. Таким образом, создатели Crystal убивают сразу двух зайцев — дают возможность писать быстрые приложения, и обеспечивают низкий порог входа в разработку.

Что особенного в Crystal?
В первую очередь, то, что это язык со статической типизацией. Этим он отличается от Ruby. На практике это означает, что ошибки несоответствия типов переменных выявляются компилятором уже на стадии переработки исходного кода в машинный, а не в процессе его выполнения интерпретатором.
При этом язык не нуждается в указании конкретных типов переменных либо аргументов метода. Дело в том, что компилятор выводит их самостоятельно при помощи специализированного механизма. Разработчики предусмотрели проблему автоматического управления памятью за счет использования «консервативного» сборщика мусора (garbage collector) Boehm GC. Язык поддерживает как макросы, так и дженерики, плюс способен работать с перегрузкой методов и операторов.
Преимущество Crystal в том, что он, как и Ruby, предлагает независимую от ОС реализацию многопоточности. Легковесные потоки в Crystal называются «волокнами» (fibers). Потоки, как и в языках Go и Clojure, могут взаимодействовать друг с другом посредством каналов, без необходимости прибегать к использованию общей памяти либо же блокировкам.
В Crystal реализован интерфейс вызова функций из библиотек языка С. При этом синтаксис взаимодействия простой — соответственно, с использованием Crystal можно создавать библиотеки-обертки, без необходимости писать код с нуля.
Стандартная библиотека языка представляет широкий спектр типовых функций, включая средства для обработки CSV, YAML, и JSON, компоненты для создания HTTP-серверов и поддержки WebSocket. В процессе разработки предлагается использовать команду «crystal play» которая формирует web-интерфейс (по умолчанию localhost:8080) для интерактивного выполнения кода на языке Crystal.

Что изменилось с релизом 1.0?
Изменений не так много, но их можно назвать критически важными.
Во-первых, в кортежах (tuples) теперь можно обращаться к элементам отличающихся типов по индексу. Компилятор в состоянии определить, к какому типу каждый из них относится.
Во-вторых, стандартную библиотеку очистили от устаревших и не рекомендованных к использованию определений. Это, например, методы:
HTTP::Request,
HTTP::WebSocket,
HTTP::LogHandler,
URI#full_path,
Time::Span#duration.

В-третьих, разработчики изменили принцип обработки cookie. В финальном релизе метод HTTP::Cookies.from_headers разделен на отдельные серверную и клиентскую версии. Соответственно, значения и имена файлов не кодируются/декодируются из соображений безопасности.
Есть и изменения, которые уже внесены, но пока что не поддерживаются официально. В их числе — многопоточность, которая активируется в среде с многоядерным процессором при помощи флага -Dpreview_mt, поддержка ОС Windows и процессоров с архитектурой ARM.

Есть и несколько менее значительных изменений:
В строковых и символьных литералах запрещено использование суррогатных сокращений в escape-последовательностях Unicode, таких как "\uD834". Для кодирования произвольных значений следует использовать нотацию "\x".
Метод округления по умолчанию изменен на TIES_EVEN («округление банкира», до ближайшего целого, а для пограничных ситуаций до ближайшего четного числа). В Number#round добавлен параметр RoundingMode, позволяющий выбрать метод округления. Среди доступных методов: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
В коллекциях обеспечена работа Enumerable#flat_map и Iterator#flat_map с элементами смешанных типов.
При сериализации последовательностей Enum теперь используется представление в форме строк с подчеркиванием.
Типы, определенные в модуле XML, переведены с использования struct на class.

Ну и немного истории
Как и говорилось выше, разработка языка началась еще 10 лет назад. Авторы проекта — основатели аргентинской компании Manas Technology Solutions. Изначально язык назывался Joy, а компилятор для него был создан на Ruby. Чуть позже, в 2013 году, он был переписан уже на Crystal.
Официальная версия языка была выпущена в 2014 году. С течением времени Crystal стал проектом с открытым исходным кодом, который распространяется на условиях лицензии Apache License 2.0.
Разработка ведется на деньги инвесторов, среди которых — компания Nikola, которая много лет ведет разработку электромобилей, но пока так и не представила рабочий прототип. Но зато сам язык вполне рабочий и его уже можно использовать в своих проектах.


Приветствую!
Хотелось бы узнать у бывалых программистов их оценку языка программирования Crystal.
Пишут, что он простой для изучения – это как раз то, что нужно начинающим программистам.
Но стоит ли тратить время и силы, чтобы его изучать? Будет ли он также активно развиваться в будущем?
Или лучше сразу учить что-то посерьёзнее, вроде C++ ?
  • Вопрос задан
  • 641 просмотр
Решения вопроса 3
saboteur_kiev
@saboteur_kiev Куратор тега Программирование
software engineer
Тут не оракулы.
Ни про один узкоспецифический язык вам никто не скажет.
Можете попробовать выяснить у авторов языка, что они собираются с ним сделать. А "бывалые" программисты вам тут не помощь.

Язык не простой. Он просто в сравнении с c++/java.
Он будет интересен тем, кто профессионально писал на ruby/java и посмотреть что он предложит.

А новичку он совершенно бесполезен по разным причинам:
* на нем нет готовых публичных проектов в большом количестве
* у самого языка очень небольшое сообщество (пара сотен человек против миллионов на с++/java/c#/js/bash/basic/etc)
* вакансий на него раз-два и обчелся в мире

С подобными вопросами, не заморачивайтесь, учите python
Ответ написан
samodum
@samodum
Какой вопрос - такой и ответ
Начинающему трудно начинать с C++.
Про Crystal я впервые слышу, хотя программирую давно. Думаю, для начинающего вполне подойдёт.
Но я бы рекомендовал как первый язык Python, C# или Go
Ответ написан
@potan
Функциональный программист
C++ с появлением Rust учить вообще особого смысла нет.
Crystal интересный язык, можно попробовать. Но я не уверен, что он достаточно простой для первого языка.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы