LINUX.ORG.RU

http://clojure.org/

Clojure is a dynamic programming language ...

Очевидно это плата за динамику и высокоуровневость.

Norgat ★★★★★ ()

Clojure делает дофига всего, чего не делает java. Например, диспетчеризацию вызовов в runtime. Вообще, упоминалось, что если в функции на clojure расставить декларации типов, то получится производительность, идентичная яве.

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

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

Вообще, упоминалось, что если в функции на clojure расставить декларации типов, то получится производительность, идентичная яве.

В «именованной функции» - да. Причём «в функции на clojure расставить декларации типов» - это не определить параметры, это расставить типы везде, где только можно. Но как только дело касается лямбд/инструкций с ними работающими либо к ним приводящие - здравствуй [ан]боксинг в полный рост.

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

ну и что? sbcl по скорости чуть медленнее явы

Кто кого медленнее в этой паре - это еще вопрос.

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

sbcl все-таки не в жабу компилируется.

А во что же такое JIT компилирует как не в машкод?

k_andy ★★★ ()

Суть Java - явные действия. Но не удивляйся если в Clojure цикл создаст штук 5 обьектов. В принципе из-за механизма eden в Java new - стоит пару инструкций, а сборка мусора для быстро умершего обьекта стоит 0, но лучше так с gc не играться.

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

Более высокий уровень абстракции. Далеко не каждый программист на java сможет записать то, что может обычный программист написать на clojure. Примерно из той же оперы, почему иногда программа на java может быть быстрее, чем на Си. Просто хрен напишешь точно такую же на Си :)

Что касается самой clojure, то там делается упор на функциональный стиль, а это подразумевает чистые функции, а также персистентные данные, которые могут разделятся между потоками одновременно. Все это позволяет довольно эффективно реализовать software transactional memory (stm) для concurrency.

Тут можно вспомнить big fail с реализацией stm в .NET - там просто нет подходящей почвы. Такой же fail, вероятно, ожидал бы и чистую java, возникни там желание реализовать stm.

Наконец, определенно есть класс задач, где stm показывает себя в хорошем свете. Там и может clojure бить java.

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