С высоты-2

Jul 08, 2019 17:25


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

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

Leave a comment

Comments 119

anonymous July 8 2019, 14:39:34 UTC
Переписать готовую логику с кложи или питона на раст конечно несложно. Ты это уже писал один раз, недавно, всё хорошо помнишь как работает. Прототипировать и растить программу на расте значительно сложнее, чем на кложепитонорубях.

Reply

tonsky July 8 2019, 14:40:51 UTC
почему? что мешает прототипировать на расте?

Reply

anonymous July 8 2019, 14:58:21 UTC
Типы и злобность компилятора. Тут думать о домене пытаешься, а раст такой - неее, так думать нельзя, думай только сяк.

Попробуй что-то новое нетривиальное написать на расте, чего ты заранее не знаешь и полностью не понимаешь, замеряй время написания, а потом то же самое напиши на Кложе, когда ты уже знаешь доменную область. Разница по времени написания будет колоссальная

Reply

tonsky July 8 2019, 15:22:29 UTC
я допускаю что будет некая разница, даже если сравнивать яблоки с яблоками: новый код на расте и новый код на кложе. Но я же не говорю что это бесплатно. Я говорю что результат того стоит

Reply


(The comment has been removed)

anonymous July 8 2019, 15:12:32 UTC
Стоит сказать, та девушка написала такой код, который никто не хотел бы иметь в продакшене годами, в том числе она сама

Reply

tonsky July 8 2019, 15:43:32 UTC
Короче это конечно здорово, а что насчет скорости?

Reply

(The comment has been removed)


blackyblack July 8 2019, 15:08:48 UTC
Щас появится человек, который расскажет, что кложу тоже можно снять с ручника.

Reply

tonsky July 8 2019, 15:20:27 UTC
появлялся уже, только после перехода на конкретику слился сразу. Махать в воздухе руками все могут https://tonsky.livejournal.com/322258.html?thread=5453010#t5453010

Reply

blackyblack July 8 2019, 20:21:07 UTC
Никита, посмотри на либу Specter. Реализация работы с данными на нем иногда в 10ки раз ускоряет работу, по сравнению с ванильными Clojure функами. Да новый DSL, но тем не менее.
https://gist.github.com/nathanmarz/b7c612b417647db80b9eaab618ff8d83

Reply

tonsky July 9 2019, 07:55:58 UTC
нужно очень умудриться чтобы ускоряла

Reply


diente_de_lion July 8 2019, 15:40:02 UTC
Вот теперь было бы интересно написать это на С++ и посмотреть сколько максимально можно было выжать из этого железа :)

Reply

tonsky July 8 2019, 16:11:57 UTC
сколько?

Reply

urod July 8 2019, 19:28:08 UTC
А нет особой разницы у приплюснутых си с Ржавым.

Один фиг

Reply

diente_de_lion July 8 2019, 19:51:19 UTC
любопытно, спасибо

Reply


anonymous July 8 2019, 15:47:38 UTC
A https://github.com/rayon-rs/rayon можно было использовать?
Это work-stealing параллельные итераторы, через них должна и семантика `doall` упроститься, и потенциально ещё и перформанс подрастёт (потому что тамошние итераторы стараются более последовательные куски работы брать, что должно быть более cache-firendly с меньшим количеством блокировок, чем наивная реализация).

Ну и с разбегу кажется, что там много `self.path +=` где-нибудь в "горячем" цикле, если перейти от строк к векторам энумов - станет заметно быстрее, строки довольно небесплатные. Ну или преаллоцировать кусочек памяти хотя бы, `String::with_capacity` вместо `String::new` в `Drone::new`

Это всё совершенно навскидку, не запуская код и даже не вдумываясь в него, конечно.

Reply

tonsky July 8 2019, 16:11:40 UTC
Ну у меня параллелизация довольно тупая - есть 300 задач, каждый тред берет по одной и считает в одно рыло. Мне кажется тут особо не намудришь, какие бы умные итераторы ни бы ли. Данные они не шарят между собой никакие. self.path не в хот лупе, преаллокация тут особо роли не играет.

Reply

anonymous July 9 2019, 19:32:33 UTC

Leave a comment

Up