LINUX.ORG.RU

Вышел Crystal 0.34.0

 , ,


3

5

Вышла новая версия Crystal, компилируемого языка программирования с синтаксисом Ruby, главные особенности которого — рантайм с «вмонтированным» event loop’ом, в котором все операции ввода-вывода асинхронны, поддержка многопоточности (пока включается флагом при компиляции) и исключительно простая и удобная работа с библиотеками на Си.

Начиная с версии 0.34.0, язык официально начинает твёрдой поступью двигаться в сторону первого настоящего релиза (т.е. версии 1.0).

В новой версии Crystal можно отметить следующие изменения и улучшения в порядке их важности:

  • В API добавлена новая библиотека журналирования Log, которая, в отличие от старой, умеет направлять сообщения в разные бекенды и по-разному эти сообщения фильтровать в зависимости от «источника».

  • Рудименты из мира разработки на Си, Errno и WinError, использовавшиеся для примитивов ввода-вывода, уходят в прошлое благодаря иерархии исключений IO::Error (впрочем, использовать Errno никто пока не запрещает).

  • Убрана автоматическая подстановка else nil из оператора case/when/else. Это сделано для того, чтобы исключить случайный пропуск разработчиком одной из веток when при матчинге по детерминированным случаям наподобие enum’ов и прохода по типам из Union’а. Т.е., проще говоря, вот такой код больше работать не будет без указания ещё одного when (when Char) или задания else-ветки:

a = 1 || 'x' || "foo"
case a
when Int32
  # ...
when String
  # ...
end
  • Опция компилятора disable_overflow больше недоступна. Для операций с переполнением используйте методы &+, &-, &*.

  • Array#fill теперь летает быстрее пули, благодаря замене туповатого цикла на один простой memset;

  • Менеджер шардов (пакетов), называющихся, как это ни парадоксально, shards, теперь использует более быстрый и эффективный алгоритм удовлетворения зависимостей Molinillo, подсмотренный в CocoaPods (Swift) и Builder (Ruby).

  • Добавлена поддержка LLVM 10, что по идее даст нам некий рост производительности, стабильности, etc.

… и множество других, на мой субъективный взгляд, менее существенных улучшений.

Хотелось бы отметить, что Crystal — это построенный на LLVM язык, позволяющий писать приложения порой быстрее, проще и лаконичнее, чем на его интерпретируемых «собратьях», и при этом получать на выходе довольно шустрый бинарник. На фоне Golang выделяется абсолютно полноценным ООП, поддержкой дженериков и очень простым и понятным синтаксисом. По своему назначению во многом аналогичен Nim, но при этом явным образом ориентирован на практическое применение «здесь и сейчас», благодаря чему имеет в своём API-арсенале множество нормально документированных удобных и качественных инструментов, поддерживаемых разработчиками языка и потому весьма стабильных.

>>> Анонс в блоге Crystal

★★★★★

Проверено: cetjs2 ()

Crystal, компилируемого языка программирования с синтаксисом Ruby

Прекрасно, что делают такой язык.
Но практика прикладного программирования в отличие от академической мастурбации требует полного набора прикладных библиотек:

1) базы данных (SQLite, Firebird, MySQL)
2) графический интерфейс (Fox, Gtk2/3, Qt4/5)
3) криптография (OpenSSL)
4) кроссплатформенность библиотек (Unix, Win, Mac)

Ни одного из этих пунктов нет в Crystal!
Поэтому язык, к сожалению, бесполезен в продуксьёне:

язык без библиотек - это конь в вакууме!

Novator ★★★★ ()
Ответ на: комментарий от Novator

язык без библиотек - это конь в вакууме!

«здесь и сейчас», говорили они…

в kotlin хитрее сделали - там можно на жабьих библиотеках паразитировать

anonymous ()
Ответ на: комментарий от Novator
  1. базы данных (SQLite, Firebird, MySQL)

Как же нет?
Использование Си функций из библиотек возможно.
Так что, например с SQLite можно работать.

anonymous ()
Ответ на: комментарий от provaton

Можно заюзать адт в таком случае (Option/Maybe).

Можно, но это коряво. Option делали чтоб как раз null не было, а так получилось «может есть значение, может нет, может null». Часть языков это вообще явно запрещает.

upcFrost ★★★★★ ()
Ответ на: комментарий от anonymous

Проще говоря, можно использовать любую сишную библиотеку.

anonymous ()
Ответ на: комментарий от Novator

Язык должен сразу со всеми этими библиотеками появляться, или что?

Алсо, в продуксьёне полно проектов, которым всё названное нафиг не нужно.

anonymous ()
Ответ на: комментарий от anonymous

Язык должен сразу со всеми этими библиотеками появляться, или что?

Частично он прав.
Похоже для использования сишных библиотек нужно ваять bindings.
Впрочем могу быть и не прав.
Как на самом деле?

anonymous ()
Ответ на: комментарий от anonymous

… Be able to call C code by writing bindings to it in Crystal.

Так что bindings все же нужно писать.

anonymous ()
Ответ на: комментарий от stasolog

Ок, пункт с базами вычеркиваем.
Но всего остального - нет.

Novator ★★★★ ()
Ответ на: комментарий от anonymous

Для сишных библиотек не сложно разработать утилиту, которая может сгенерировать исходник bindins. Кто это сделает?

Вот в чем вопрос

Владимир

anonymous ()
Ответ на: комментарий от stasolog

Gtk есть, OpenSSL встроенный

Пруфы?

Что насчет компиляции под виндой?

Novator ★★★★ ()
Ответ на: комментарий от Novator

Пруфы?

Я же кидал ссылки.

Что насчет компиляции под виндой?

Без понятия. Нужна ли эта устаревшая платформа? Приложения давно запускаются в браузере.

stasolog ()
Ответ на: комментарий от anonymous

Для сишных библиотек не сложно разработать утилиту, которая может сгенерировать исходник bindins.

Для C++ кстати также возможно.
Лет пять назад для всего API из MSDN сгенерировал *.h, *.cpp и *.idl.

ЛОЛ.
Через какое-то время решил не использовать API Microsoft.

Владимир

anonymous ()
Ответ на: комментарий от anonymous

Лет пять назад для всего API из MSDN сгенерировал *.h, *.cpp и *.idl.

По существу реализовал ActiveX для дергания любого API Microsoft из COM /для 1С/.

Владимир

anonymous ()
Ответ на: комментарий от stasolog

Я же кидал ссылки.

Это ссылки на либы, а рабочих приложений нет - практика написания прикладных приложений на Crystal не наработана, а это значит в нём куча ошибок и недоделок. Язык сейчас годится только в качестве игрушки для студентов.

Приложения давно запускаются в браузере.

Убогое хипстерское заблуждение.

Вебня - это рабская (клиент-серверная by design) технология, развитие которой в 2020 году полностью ведут корпорации.

А мне нужно десктопное p2p-приложение полностью подконтрольное пользователю.

Так что Crystal (при том, что замах хороший) сегодня практически неприменим. Увы.

Novator ★★★★ ()
Ответ на: комментарий от Novator

Это ссылки на либы

Да, про приложения ты ничего не говорил же.

Вебня - это рабская (клиент-серверная by design) технология, развитие которой в 2020 году полностью ведут корпорации.

PWA, Electron. Да и сервера могут быть свободны, так вот Crystal серверный язык.

Так что Crystal (при том, что замах хороший) сегодня практически неприменим. Увы.

Наверное, я не интересовался им никогда.

stasolog ()
Ответ на: комментарий от Novator

язык без библиотек - это конь в вакууме!

язык без библиотек - это конь без яиц!

anonymous ()
Ответ на: комментарий от Novator

а это значит в нём куча ошибок и недоделок

Посмотрите на номер версии. Самый-самый-самый базовый функционал языка будет реализован к версии 1.0. Именно это пока что не позволяет языку набрать популярность сопоставимую с тем же Питоном. Тем не менее, на нём уже много что есть, а Википедия поясняет какой перед нами GNU Hurd язык будущего:

Несмотря на схожесть синтаксиса, Crystal намного эффективнее, чем Ruby, компилируется в машинный код, используя LLVM, жертвуя при этом динамическими аспектами языка. По результатам тестов Crystal показывает схожую с языком С производительность[7][8][9]. Язык использует Boehm garbage collector, обладает системой макросов, поддерживает дженерики, а также перегрузку методов и операторов.

В Crystal реализован интерфейс вызова функций из двоичных библиотек на языках C, C++ и пр., при этом синтаксис взаимодействия с такими библиотеками максимально упрощён, что позволяет легко создавать библиотеки-обёртки, а не писать весь код с нуля. Также Crystal поддерживает ассемблерные вставки и прямое обращение по указателям - это считается unsafe, но не запрещено, поскольку необходимо, в частности, и для взаимодействия с функциями из внешних библиотек.

saahriktu ★★★★★ ()
Ответ на: комментарий от anonymous

Язык должен сразу со всеми этими библиотеками появляться, или что?

да, теперь порог вхождения для заинтересовывания языком возрос, ибо выросла конкуренция, все сразу требуют готовые библиотеки, ide, поддержку встраиваемых устройств, совместимость между версиями, стабильное корпоративное финансирование и т.д.

anonymous ()
Ответ на: комментарий от abcq

Инкапсюляция, наследование, полиморфизм Что вы там собрались натягивать? Сову на глобус

anonymous ()
Ответ на: комментарий от anonymous

да, теперь порог вхождения для заинтересовывания языком возрос, ибо выросла конкуренция, все сразу требуют готовые библиотеки, ide, поддержку встраиваемых устройств, совместимость между версиями, стабильное корпоративное финансирование и т.д.

Обобщим.
Ныне имеется некая набор софта, технологий, библиотек, … которые используются многими разработчики «дефакто».
Поэтому если новый язык программирования не обеспечивает bindings к этому «добру», то разработчики не будут его использовать.

Ныне «хороший тон» при разработке любой библиотеки сразу предоставить с десяток bindings для популярных языков программирования.
Вообщем

Снежный ком, падающий с горы

Владимир

anonymous ()

А для чего нужно было создавать новый компилируемый язык с «синтаксисом Ruby» вместо того, чтобы просто компилятор для Ruby на LLVM «запилить»? Выкатили же вон в 2012 RubyMotion для iOS, который прекрасно компилировал код Ruby в нативные macho бинарники. Сейчас он уже научился и в OS-X c Android…

awoland ()
Последнее исправление: awoland (всего исправлений: 3)
Ответ на: комментарий от anonymous

Инкапсюляция, наследование, полиморфизм

2020 году не нужно, пишите в процедурном стиле.

anonymous ()
Ответ на: комментарий от Virtuos86

Ах, да, ты же анонимус и вынужден жрать дефолтное гогно, сочувствую.

Маме своей посочувствуй, убогий.

anonymous ()
Ответ на: комментарий от anonymous

Разгадай еще разок капчу, дрочун на анонимность.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от awoland

А для чего нужно было создавать новый компилируемый язык с «синтаксисом Ruby» вместо того, чтобы просто компилятор для Ruby на LLVM «запилить»?

А зачем нужен aot компилятор руби? И как его сделать без радикального урезания возможностей языка я не очень представляю. А jit уже и так есть из коробки. Но он предсказуемо бесполезен. Авторы кристала изначально заявили, что совместимость с руби целью не является. Языки внешне похожи, но они сильно разные на самом деле.

bread ()
Ответ на: комментарий от Novator

Ок, пункт с базами вычеркиваем. Но всего остального - нет.

Там и с базами туго. Но это все и не нужно пока нет стабильной версии. Сейчас только развлекаться с базовой поставкой. Там кстати довольно приличная «коробка». Вряд ли кристал взлетит, но мало ли. Кто-то же оплачивает его разработку фултайм. Может и какие-то либы со временем напишут компетентные люди за денежку.

bread ()
Ответ на: комментарий от bread

А зачем нужен aot компилятор руби?

Быстрее скорость, проще развертка приложения. man Go

И как его сделать без радикального урезания возможностей языка я не очень представляю.

Ничего урезать не нужно. Всё как обычно: type inference, data/control flow analysis…

А jit уже и так есть из коробки. Но он предсказуемо бесполезен.

Jit курильщика действительно бесполезен.

anonymous ()
Ответ на: комментарий от anonymous

Всё как обычно: type inference, data/control flow analysis…

Что там можно вывести если половина (утрирую) кода у рубистов генерится в рантайме. В кристале всю эту магию выкинули заменив на макросы времени компиляции. И получился совсем другой язык. И кстати без аннотаций не обошлось, местами они требуются, хоть и полный вывод типов. В руби просто нет синтаксиса аннотаций. Так что ничего не выйдет. Не знаю что за RubyMotion такой, подозреваю там встроенный в бинарь интерпретатор.

bread ()
Ответ на: комментарий от bread

у рубистов генерится в рантайме

И у него выводишь типы. Да, очевидно, что это вся эта возня намного сложнее статики, но не вижу ничего невозможного.

без аннотаций не обошлось, местами они требуются, хоть и полный вывод типов

Можно пример где без аннотаций никак?

В руби просто нет синтаксиса аннотаций.

Не путай вывод типов нужный программисту и достаточный для компиляции. Для первого нужно как ты говоришь и он сложнее, а для второго достаточно проследить чтобы вызывались допустимые методы, писались/читались нужные поля и.т.д. Я не настоящий сварщик в Ruby, могу ещё на примере JS пояснить.

anonymous ()
Ответ на: комментарий от Novator

А мне нужно десктопное p2p-приложение полностью подконтрольное пользователю.

Так ты так и говори что нужно тебе, кроме тебя есть еще люди в мире прикинь да.

Вот есть веб-приложение с бекендом на кристале с ssl, базой и всем что необходимо https://github.com/omarroth/invidious

Так что у кого есть скилл - делают, остальные лишь орут что ненужно.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.