К версии 0.23 язык представлял собой весьма наивный концепт быстрого и простого языка.
И это было очень удобно при разработке микросервисов, таких же простых, как на Ruby, но более быстрых, чем на Go (в большинстве применений).
К сожалению, в языке (вернее, в его стандартной библиотеке) нашлось несколько проблем, мешающих использовать его в современном мире. Основная проблема — HashDoS.
Я подошёл к этому с одной стороны, реализовав нормализацию чисел, например, но тут свыше пришел ангел по имени @funny-falcon, и уютный мирок Crystal офигел. Один pull request, учитывающий особенности LLVM, генерации хэшей, сами хэши, JSON и кучу иного — стал предметом обсуждений более чем на 200 комментариев, что для маленького проекта вообще нонсенс.
В итоге pull request закрыт (дикая нагрузка).
Но почти все его идеи уже реализованы и находятся в Crystal master.
Теперь на нем уже можно писать код, который можно отдавать наружу.
И это было очень удобно при разработке микросервисов, таких же простых, как на Ruby, но более быстрых, чем на Go (в большинстве применений).
К сожалению, в языке (вернее, в его стандартной библиотеке) нашлось несколько проблем, мешающих использовать его в современном мире. Основная проблема — HashDoS.
Я подошёл к этому с одной стороны, реализовав нормализацию чисел, например, но тут свыше пришел ангел по имени @funny-falcon, и уютный мирок Crystal офигел. Один pull request, учитывающий особенности LLVM, генерации хэшей, сами хэши, JSON и кучу иного — стал предметом обсуждений более чем на 200 комментариев, что для маленького проекта вообще нонсенс.
В итоге pull request закрыт (дикая нагрузка).
Но почти все его идеи уже реализованы и находятся в Crystal master.
Теперь на нем уже можно писать код, который можно отдавать наружу.
Комментарии (6)
antage
27.11.2017 03:26таких же простых, как на Ruby, но более быстрых, чем на Go (в большинстве применений)
А за счёт чего они получаются более быстрыми, чем на Go?
akzhan Автор
27.11.2017 22:10Crystal является frontend-компилятором для LLVM, который сам по себе является высококачественной инфраструктурой для компиляции и исполнения. Ресурсов в качество работы LLVM вложено очень много.
Для сборки мусора используется консервативный сборщик мусора BoehmGC, который достаточно неплохо себя зарекомендовал (хотя появляются интересные конкуренты — https://github.com/crystal-lang/crystal/issues/5271) .
Собственно, максимальный профит по производительности мы получаем от LLVM.
Плюс постоянная оптимизация stdlib (и она, и сам компилятор, написаны на Crystal, что резко уменьшает стоимость владения).
Coocos
Многопоточность появилась? В документации нашел только Fiber (все в одном потоке ОС) и Fork (не понятно как синхронизироваться между процессамии).
akzhan Автор
в процессе, для IO-bound пока некритично.