Не поток ответов здесь :), но, по-видимому, некоторый интерес, поэтому я постараюсь ответить на свой собственный вопрос с тем, что я узнал за последние несколько дней:
- С подходом оптимизации 1.1 (примитивы Java и изменяемые массивы) ~ в 4 раза медленнее, чем оптимизированная Java, примерно так же быстро, как и сейчас.
- Конструкции 1.2
definterface
и deftype
в раза более быстры, чем , в ~ 1,7 раза (+ 70%) от Java с более коротким, простым и чистым кодом, чем для 1.1.
Вот реализации:
Подробнее включая «извлеченные уроки», версию JVM и скриншоты профилирования.
Субъективно, оптимизация кода 1.2 была легче, чем оптимизация 1.1, так что это очень хорошая новость для сокращения числа Clojure. (На самом деле близко к удивительному:)
В тестировании 1.2 использовалась текущая основная ветвь, я не пробовал ни одну из новых числовых ветвей. Из чего я могу извлечь новые идеи, обсуждаемые в настоящее время
- может сделать неоптимизированные числа быстрее
- может ускорить 1.1 версию этого теста
- , вероятно, не ускорит версию 1.2, она уже настолько "близка к металлу", насколько это возможно.
Отказ от ответственности:
- Clojure 1.2 еще не выпущен, поэтому результаты тестов 1.2 являются предварительными.
- Это один конкретный эталон по физическим расчетам. Это относится к обработке чисел с плавающей запятой, но не имеет отношения к производительности в таких областях, как разбор строк, параллелизм или обработка веб-запросов.