Вышел язык программирования Crystal версии 1.0: достоинства, возможности и немного истории
В мире существует около 8 тысяч языков программирования, если учитывать вообще все связанное с языками прямо или косвенно. На днях вышла версия 1.0 еще одного языка — Crystal. Создатели утверждают, что он является простым, как Ruby, и быстрым, как С. Разбираемся в материале Selectel, зачем нужен язык и в чем его особенности.
Справочно. Назвать язык новым нельзя, поскольку разрабатывается он с 2011 года, именно как альтернатива Ruby. Авторы проекта заявляют, что язык теперь готов к использованию в обычных условиях, и является стабильным.
Что это за язык такой?
Если вы не слышали о проекте раньше, то вот его краткое описание.
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, которая много лет ведет разработку электромобилей, но пока так и не представила рабочий прототип. Но зато сам язык вполне рабочий и его уже можно использовать в своих проектах.
Не пропускайте новые материалы, подписывайтесь на блог Selectel.
Он может состоять примерно из 200 тысяч биткоинов, заявил спецпредставитель по ИИ и криптовалютам Дэвид Сакс.
Компания говорит, что в них включают по чётким критериям. Собеседники издания — что попасть в список можно, просто если не понравился менеджеру.
Платформа временно приостановила все операции, включая вывод средств.
Сегодня рынок находится под давлением геополитики и низких цен на нефть. Замедление инфляции не оказало должного эффекта на настроения инвесторов. Волатильность зашкаливает, поэтому надо быть крайне осмотрительными при осуществлении сделок на фондовом рынке. Индекс Московской биржи в "денежный четверг" падает на 📉-1,71% до 3 207,70 пунктов, а днем…
Мне интересно , а если сравнивать с Го , какая разница будет в производительности, на сколько критична она будет. Если мы получим не большую разницу , то не вижу в нем никакого смысла , попытаться стать ещё одним хайповым языком ?
Комментарий недоступен
Так и не понял зачем он нужен... Компилируемый язык для веб?
Видимо, просто конкурент Руби в его же нише.
Что им мешало повернуть логотип...
Зачем
Наверное, интуитивное понимание, что можно обойтись без «мудрых» советов от местечковых экспертов по всем вопросам в мире (и, по совместительству, мелких пропагандистов)