В предыдущем посте
я разочаровывался в Clojure, а точнее в тех задачах, которые хочу на ней решать. С языком-то все нормально, он ровно то, за что себя выдает. Просто до какого-то момента и для каких-то задач на это удобно закрывать глаза, ну а мне уже не удобно.
Ну и что я сделал. Я пошел учить Rust. Не, ну интересно же, как компьютеры сегодня
(
Read more... )
Comments 119
https://github.com/serioga/icfpc2019
Правда level/load-level занимает почти столько же времени, как и solve, но эту часть я не копал.
Основное проседание было на хранении рекордов Point в мапе, решается заменой на deftype.
Там ещё по коду много где смешаны Point и [x y], если везде перейти на Point, должно быть ещё шустрее.
Включение unchecked math помогает, но незначительно.
Избавление от :warn-on-boxed тоже практически ничего не даёт.
Помогает доставание из мапов напрямую (.valAt m k).
Также конструкция (< 1 2 3) раз в пять медленнее, чем (and (< 1 2) (< 2 3)).
Поэтому, если раст в 30× раз быстрее, то после такой оптимизации уже только в 10, что звучит более адекватно.
Ну а так профилирование и оптимизация узких мест в приложении - довольно интересная задача.
Reply
Reply
Подожди, чем deftype эффективнее defrecord в данном случае?
> Также конструкция (< 1 2 3) раз в пять медленнее, чем (and (< 1 2) (< 2 3)).
Хе-хе, я этот баг лично репортил в 2016 https://clojure.atlassian.net/browse/CLJ-2075
> Ну а этот товарищ вообще монстр, в 10× ускорил
Ага, ну как я и говорил, он уже по сути не на Кложе пишет, а на Java.
Reply
алгоритмом вычисления hashCode
это всё хорошо видно при профилировании
> Ага, ну как я и говорил, он уже по сути не на Кложе пишет, а на Java.
он хорошо разложил по полочкам методологию
Reply
Leave a comment