Использование эффективного языка, такого как Crystal, поможет вам снизить затраты на оборудование и улучшить восприятие реакции пользователей. Кроме того, это означает, что вы можете запускать все меньше и меньше экземпляров вашего приложения для обработки того же объема обработки.
Давайте взглянем на простую реализацию алгоритма сортировки выбором, написанную на Crystal:
def selection_sort(arr)
# Для каждого индекса элемента...
arr.each_index do |i|
# Найдите наименьший элемент после него
min = (i...arr.size).min_by { |j| arr[j] }
# Поменяйте местами позиции с наименьшим элементом
arr[i], arr[min] = arr[min], arr[i]
end
end
# Создайте перевернутый список из 30 тысяч элементов.
list = (1..30000).to_a.reverse
# Отсортируйте его, а затем распечатайте его голову и хвост select_sort(list)
p list[0...10]
p list[-10..-1]
В этом примере уже показаны некоторые интересные особенности Crystal:
• Прежде всего, он относительно небольшой. Основной алгоритм состоит всего из четырех строк.
• Это выразительно. Вы можете перебирать списки со специализированными блоками или использовать диапазоны.
• Не существует единого обозначения типа. Вместо этого компилятор выводит каждый тип, включая аргумент метода.
Удивительно, но этот же код действителен и в Ruby. Воспользовавшись этим, если мы возьмем этот файл и запустим его как Ruby
На следующем графике показано сравнение этого алгоритма сортировки выбором, написанного для разных языков. Здесь вы можете видеть, что Crystal соревнуется на вершине, проигрывая C и очень близко приближаясь к Go. Важно отметить, что Crystal — безопасный язык: он имеет полную поддержку обработки исключений, отслеживает границы массивов, чтобы избежать небезопасного доступа, а также проверяет переполнение при целочисленных математических операциях. С другой стороны, C — небезопасный язык, и он ничего из этого не проверяет. Безопасность достигается за счет незначительного снижения производительности, но, несмотря на это, Crystal остается очень конкурентоспособным:
Сортировка выбором в перевернутом списке из 30 тыс. элементов
Рисунок 1.2. Сравнение реализации простой сортировки выбором на разных языках.
Сравнение различных языков и сред выполнения в таких синтетических тестах, как этот, не отражает реальную производительность. Правильное сравнение производительности требует более реалистичной задачи, чем сортировка выбором, и широкого обзора кода экспертами по каждому языку. Тем не менее, разные проблемы могут иметь очень разные характеристики производительности. Итак, рассмотрите возможность сравнительного анализа для вашего варианта использования. В качестве справочного материала для комплексного теста можно изучить тесты TechEmpower Web Framework (https://www.techempower.com/benchmarks).
Сравнение веб-серверов
Crystal не только отлично подходит для выполнения вычислений в небольших случаях, но также хорошо работает в более крупных приложениях, таких как веб-сервисы. Язык включает в себя богатую стандартную библиотеку со всем понемногу, и вы узнаете о некоторых ее компонентах в Главе 4 «
require "http/server"