С высоты-2

Jul 08, 2019 17:25


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

Ну и что я сделал. Я пошел учить Rust. Не, ну интересно же, как компьютеры сегодня ( Read more... )

Leave a comment

Comments 119

ext_1315491 July 20 2019, 18:07:55 UTC
Я поигрался и вроде как ускорил функцию icfpc.bot/solve раза в три.
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

ext_1315491 July 20 2019, 18:13:05 UTC
Ну а этот товарищ вообще монстр, в 10× ускорил https://www.reddit.com/r/Clojure/comments/cb02xs/datascriptrum_author_goodbye_clojure_same_loc_17x/eu0gu72/

Reply

tonsky July 22 2019, 10:35:15 UTC
> Основное проседание было на хранении рекордов Point в мапе, решается заменой на deftype.

Подожди, чем deftype эффективнее defrecord в данном случае?

> Также конструкция (< 1 2 3) раз в пять медленнее, чем (and (< 1 2) (< 2 3)).

Хе-хе, я этот баг лично репортил в 2016 https://clojure.atlassian.net/browse/CLJ-2075

> Ну а этот товарищ вообще монстр, в 10× ускорил

Ага, ну как я и говорил, он уже по сути не на Кложе пишет, а на Java.

Reply

ext_1315491 July 22 2019, 10:57:42 UTC
> Подожди, чем deftype эффективнее defrecord в данном случае?

алгоритмом вычисления hashCode
это всё хорошо видно при профилировании

> Ага, ну как я и говорил, он уже по сути не на Кложе пишет, а на Java.

он хорошо разложил по полочкам методологию

Reply


Leave a comment

Up