Scala native.
Думаю, что каждый, кто знаком и со скалой и с питоном замечал, что скала работает намного быстрее, чем питон, а
программировать сложные алгоритмы на языке скала проще, так как не приходится избавляться от хвостовой рекурсии,
добавляя чисто технические переменные управления циклом, либо используя батутную реализацию хвостовой рекурсии.
В то же время, скала - это не просто оболочка над JVM - это полноценный язык, который имеет реализацию для
JavaScript (scala.js) и для llvm (scala native)
Попробуем запустить простенькую программу в нативном режиме на scala и сравнить её с программой на scala работающей в JVM.
В качестве подопытного кролика возьмём алгоритм из https://pmkitten.com/why
Что имеем:
Реализация на scala отрабатывает для 1000000 за 24 секунды вместе с запуском среды исполнения, реализация на питоне
за 3 минуты.
Теперь то же самое с scala native
1. ставим clang:
sudo apt install clang
2. создаём проект scala native
sbt new scala-native/scala-native.g8
Далее перебиваем текст с картинки в файл Main.scala и выполняем сборку бинарника
sbt nativeLink
И получаем, сначала для 100000
time ./target/scala-3.1.3/prime-out 100000
1299709
real 0m6,376s
user 0m6,372s
sys 0m0,004s
В то же время, для JVM реализации время будет в 6 раз меньше:
time scala Main 100000
1299709
real 0m0,663s
user 0m0,912s
sys 0m0,053s
получаем:
-- время выполнения для бинарника scala native для 100000-чного числа время выполнения 6 секунд,
-- а для scala, работающей поверх jdk 17 0.6 секунд, то есть, в 10 раз быстрее.
Для 1000000 уже не имеет смысла гонять программу - и так всё понятно, что JVM победит.
Получили результат, в два раза более медленный, чем в питоне.
Попробуем поправить sbt
Для 100000 результат уже лучше - приближен к JVM, и намного лучше питона.
Теперь можно попробовать и для 1000000 не опасаясь, что придётся ждать вечность:
Всё равно медленнее, чем JVM, но это уже терпимо.
Таким образом, рекорд быстродействия связки Scala и JVM не побит, но полученный результат показывает, что это не питон так сильно тормозит - это Scala на JVM так быстро работает.
Так что не зря для реализации алгоритмов обработки больших данных используется именно она, а не питон, который служит, скорее запускалкой алгоритмов.
И видно, что не всё нативное быстрое.
Это следует понимать и сторонникам реализации математических алгоритмов на чистом C для подключения их к питону.
Вы реально уверены, что с вашей нативной реализацией не повторится та же самая история, что мы наблюдаем с нативной
реализацией от scala native?
Однако, у нативного варианта есть и преимущество - памяти он занял для работы всего 8 мегабайт, а для скалы на JVM
потребовалось 80 мегабайт, то есть, в 10 раз больше.
Это может быть полезно при запуске на хостинге с малым объёмом памяти.
https://pmkitten.com/articles/native-scala.txt/view