C
C
CG Artist2021-03-30 01:53:00
Programming
CG Artist, 2021-03-30 01:53:00

Crystal (similar to Ruby) - is it worth learning this programming language?

Wikipedia about 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 поддерживает ассемблерные вставки и прямое обращение по указателям — это считается небезопасной практикой, но не запрещено, поскольку необходимо, в частности, и для взаимодействия с функциями из внешних библиотек.


Description on the developers website
Автоперевод с сайта разработчиков

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

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

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

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

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

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

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


Overview article on Habré
Вышел язык программирования 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, которая много лет ведет разработку электромобилей, но пока так и не представила рабочий прототип. Но зато сам язык вполне рабочий и его уже можно использовать в своих проектах.


Greetings!
I would like to ask experienced programmers their assessment of the Crystal programming language.
They write that it is easy to learn - this is just what novice programmers need.
But is it worth spending time and effort to study it? Will it also be actively developed in the future?
Or is it better to immediately learn something more serious, like C ++?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Saboteur, 2021-03-30
@Sannyasin

There are no oracles here.
No one will tell you about a highly specific language.
You can try to find out from the authors of the language what they are going to do with it. And "experienced" programmers will not help you here.
The language is not easy. It's simple in comparison to c++/java.
It will be of interest to those who have written professionally in ruby/java and see what it has to offer.
And for a beginner, it is completely useless for various reasons:
* there are no ready-made public projects on it in a large number
* the language itself has a very small community (a couple of hundred people against millions on c++/java/c#/js/bash/basic/etc)
* vacancies for him once or twice and counted in the world
With similar questions, do not bother, learn python

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question