В предыдущем посте
я разочаровывался в Clojure, а точнее в тех задачах, которые хочу на ней решать. С языком-то все нормально, он ровно то, за что себя выдает. Просто до какого-то момента и для каких-то задач на это удобно закрывать глаза, ну а мне уже не удобно.
Ну и что я сделал. Я пошел учить Rust. Не, ну интересно же, как компьютеры сегодня
(
Read more... )
И “Reflection warning” тоже имеются.
Также непонятно, с какими параметрами java это всё запускалось, и, кажется, всё запускалось через lein без aot, что тоже может иметь отношение к производительности.
И если уж выделять именно overhead, то надо было брать JVM язык для сравнения, тем более что ты уже пишешь на котлине.
Reply
Ну это же Clojure, пойди ее убеди примитивы между функциями передать. На Java можно было бы, на Clojure почти невозможно в любой не-игрушечной программе
> И “Reflection warning” тоже имеются.
Хде?
> через lein без aot, что тоже может иметь отношение к производительности
ну-ка, просвяти меня, какое отношение aot имеет к производительности?
> И если уж выделять именно overhead, то надо было брать JVM язык для сравнения, тем более что ты уже пишешь на котлине.
Ты наверное неправильно понял. Мы взяли что взяли и сравнили что было. Было бы круто сравнить все возможные языки между собой? Конечно. Но у нас есть то что есть. Хочешь чего-то другого - пожалуйста, код открыт
Reply
блин, опять меня подвел repl. (set! *warn-on-reflection* true) не работает, надо через lein ставить. Имеются, в общем. Но не принципиальные - время не уменьшается
Reply
но оно не во всех файлах включено
Reply
Reply
ну сказал глупость по незнанию, с кем не бывает.
> Ну это же Clojure, пойди ее убеди примитивы между функциями передать.
вроде как в основном расстановка тайпхинтов, как на Java :-)
> Ты наверное неправильно понял.
Да, цели описанного исследования не очень понятны, поэтому вот так.
Если показать что кложа даёт оверхед к яве - это одно.
Если показать, что ява медленнее раста - другое.
Или забить на boxed math - и разбирайтесь сами, какой вклад тут на производительность.
Ни цели, ни методология не ясны, зато драматизм в полный рост :-)
Reply
Нет. Есть два типа тайп хинтов. Одни убирают рефлекшн. Это просто компилятор не знает какой из N перегруженных методов позвать. Но в коде написанном на Clojure рефлекшна как правило нет или почти нет. Зато такие хинты всегда просто расставить.
Другие тайп хинты - примитивные типы. Они нормально работают внутри функций, но между функциями почти что не работают. То есть в цикле ты еще можешь long-ом оперировать, но хочешь передать его наружу или наоборот вызвать какую-то функцию внутри - не получится.
> Если показать что кложа даёт оверхед к яве - это одно.
> Если показать, что ява медленнее раста - другое.
Показать что Кложа медленнее раста
Reply
Пример c long вроде как неудачен,
https://clojure.org/reference/java_interop#optimization,
> All arguments are passed to Clojure fns as objects, so there’s no point to putting arbitrary primitive type hints on fn args (excepting primitive array type hints, and long and double as noted)
("int" - "нельзя", "long" - типа "можно", функция с такими хинтами создаётся и вызывается)
(до сегодняшнего дня думал, что можно передавать только объекты)
Reply
Reply
Leave a comment