Matwey
Как перестать бояться и полюбить Nom?
Антон
A64m
сначала показалось, что Nim
Matwey
Но зачем?
Антон
Но зачем?
Чтобы осознать, что такое parser combinators
Alexander
хорошо, что не неформальное объединение молодежи
Matwey
https://www.youtube.com/watch?v=EdZrr3OtAGU
Cuno
ну если честно у раста пока производительность не очень для языка того класса, которым он является
Много оптимизаций, которые могли бы использоваться на растокоде, не используются, но в общем и целом код же примерно той же скорости, что и у clang'а, например. Что здесь не так?
Alexander
да были тут соревновария по перекачиванию файла в /dev/null (грубо говоря)
A64m
ну, все-же у языков, которые используют ллвм как бекенд производительность кода получается не как у кланга, ллвм-ный оптимизатор тупит на всем, что как-то от плюсов отличается.
A64m
но у раста-то с этим не так много проблем как у ФЯ, конечно
Alexander
там преобразование внутри было
Alexander
cross product столбцов
Alexander
т.е. там попарсить, память повыделять похранить данные нужно было
A64m
наверное, single threaded обгонит
думаю, если аллокаций много, то раст соснет
Cuno
Шо значит "подход другой"?
Cuno
Оптимизатор знать не знает ни про какие владения и заимствования.
A64m
Растокод сильно от плюсов отличается?
не сильно но отличается же, оптимизатор затачивается на конкретный язык с конкретными идиомами, в такой ситуации шаг в сторону и можно сдорово с производительностью получаемого кода пролететь
Cuno
Ну в общем-то тогда непонятно где там ожидания не оправдываются.
A64m
я не разбирался с производительностью раста, я просто знаю, в том числе и из опыта, что языки использующие оптимизатор для другого языка обычно с такими проблемами сталкиваются
A64m
потому мои ожидания в том заключаются, что производительность раста будет похуже плюсов с тем же бекендом, не считая других причин
A64m
если есть доказательства обратного, я, естественно такое мнение изменю
Антон
С чего бы? В идиоматичном Rust-коде ссылки не алиасятся
Антон
Например
Cuno
С чего бы? В идиоматичном Rust-коде ссылки не алиасятся
Оптимизатор это не использует пока-что, увы
A64m
С чего бы? В идиоматичном Rust-коде ссылки не алиасятся
ллвм-ный оптимизатор этого может просто не понимать
Cuno
https://github.com/rust-lang/rust/pull/31545 https://github.com/rust-lang/rust/issues/31681
Антон
https://github.com/rust-lang/rust/pull/31545 https://github.com/rust-lang/rust/issues/31681
Смешно. Для решения бага нужно пофиксить баги в LLVM. Патч готов, а его до сих пор рассматривают
Нави
Не раньше сингулярности
А сингулярность штука вымышленная, да ещё и относительная, в некотором плане сингулярность уже наступила в прошлом)
Evgenii
Recent Advances in Neural Program Synthesis https://arxiv.org/abs/1802.02353
Нави
вот автоматическое написание программ и создаст ту сингулярность, которую все так ждут) После челловек оканчательно перейдёт в потребителя, ведь тысячи мозгочасов непоспеют за быстрым ускорением автоматики
Нави
Ты на это надеешься, чтобы не приходилось доучивать раст? 😁
я как раз на расте и напишу прогу, которая будет сама дальше писать)))
Max
Эхх
Max
https://github.com/iron/iron/commit/9e5bccb407b1ec8daef51b0d7494627e5c5fc307
պլհկ
ну наконец-то
doc
https://github.com/ansible/ansible/issues/36095
Нави
такой банальный вопрос, как правильно передавать данные в отделльный поток? let a = "qwerty"; thread::spawn(|| { println!("{}", a); });
Max
Arc, Mutex
Антон
Хотя, это зависит от ситуации
Cuno
Arc, Mutex
Это крайний случай.
Нави
spawn(move || { да, сработало
Cuno
такой банальный вопрос, как правильно передавать данные в отделльный поток? let a = "qwerty"; thread::spawn(|| { println!("{}", a); });
Все зависит от конкретной ситуации, правильно говорят. Обычно move в замыкание или каналы решают проблему. Иногда нужен crossbeam.
Нави
пока цель лижбы работтало)
Маjко
Arc, Mutex
Это если шейрить надо, а не просто отправить владение
Антон
spawn(move || { да, сработало
Просто учти, что тем самым ты владение a перемещаешь в замыкание, поэтому после спавна потока ты эти данные уже не получишь
Антон
&'static str же, так что конкретно эти вроде как получит
Ну, это да, но @NaviArh, я думаю, в своём реальном коде не литералы в треды отправляет
Нави
потоки запускаются внутри: for x in cfg.markets.iter() { и это другая проблема (указывает на.iter() ): error[E0495]: cannot infer an appropriate lifetime for lifetime parameter in function call due to conflicting requirements
Нави
но это уже моя проблема встроил потоки в линейную последовательность наверно)
Нави
для структур переуступка не происходит, да же если заного создаю структуру: let cfg = cfg_thr; error[E0495]: cannot infer an appropriate lifetime due to conflicting requirements
Filipp
Чё за переуступка
Нави
...so that expression is assignable
Anonymous
Ребята можно учебник?
Нави
Раст не эрланг(((
պլհկ
Сюрприз
Anton
Раст не эрланг(((
А чО не хватает?
Нави
А чО не хватает?
Да той простоты и легкости
պլհկ
Попробуй го
Anton
Я думал гринтредов)
Anton
Да той простоты и легкости
А как в эрланге джон генерится?
Нави
Легковесных процессов, да
Нави
Но расту изменять не стану)
Marat
Раст не эрланг(((
Неожиданно конечно. Оказывается раст это системный язык
Нави
Иначе бы плюсы или даже си