Berkus
-__-
> We decided to fix this by rewriting it in Rust. REEEEEEEEEEEEEEEEEEEE
>multiplayer server Я уж думал игру написали.
պլհկ
> What we did about it: We ended up converting all errors to strings immediately and then using a macro that includes the line and column of the failure in the string. This was verbose but got the job done.
պլհկ
Loo
Loo
Я знаю эту уникальную технику
Andrei
но памяти жрет все равно
понятно, что жрёт, но в неё хотя бы денег на пару порядков больше вкачано
Berkus
write-only coders, хули
պլհկ
Задали бы вопрос на стековерфлоу
Berkus
опять читать ответы придется, не комильфо
պլհկ
Я с их лендинга тоже не понял что они делают
պլհկ
Дримвэйвер какой-то?
Alex
сервис стрижки для собак наверное
Антон
Я с их лендинга тоже не понял что они делают
Кооперативное прототипирование приложений онлайн
Berkus
https://blog.mozilla.org/nnethercote/2018/04/30/how-to-speed-up-the-rust-compiler-in-2018/ вот это норм тема
պլհկ
https://www.invisionapp.com/ ?
Αλεχ
короче я понял в чем проблема раста
Berkus
Я с их лендинга тоже не понял что они делают
там на медиуме внизу подписано Collaborative design tool
Αλεχ
чтобы на нем нормально писать в команде не должно быть идиотов
Αλεχ
а таких команд почти не бывает
Berkus
чтобы на нем нормально писать в команде не должно быть идиотов
команды с идиотами вредны, по возможности избегайте
Αλεχ
да не
Αλεχ
если мы про более-менее крупный проект
Αλεχ
то на нем есть 2-3 хороших разраба
Αλεχ
штук 5 средних
Αλεχ
и еще несколько дегенератов
Αλεχ
на обычных языках вроде тех же шарпов от последних много вреда не будет
Αλεχ
а на расте получаются примеры как выше
Dmitriy
Еще и как будет
Αλεχ
ну это так, мысли вслух
Αλεχ
ну по моему опыту не будет
Dmitriy
Дегенераты в состоянии сломать все что угодно
Dmitriy
Причем очень и очень быстро
պլհկ
Ну а чо за вред? Они просто заебали сами себя
պլհկ
Если б был хотя бы 1 адекватный чел, он бы нагуглил фэйлур и всех перевел
Berkus
Зачем фэилур если есть еррор чейн
потому что если почитать то error chain обсолетится и его заменяет failure
Αλεχ
Зачем фэилур если есть еррор чейн
зачем эррор ченйн, если можно возвращать строки
Cat
зачем эррор ченйн, если можно возвращать строки
зачем строки, если можно возвращать числа
Αλεχ
в строку можно еще добавить номер строки и столбца
Αλεχ
а в числа нельзя
Cat
пфф
Cat
int error_id_mask = ... int line_mask = ... int column_mask = ... lookup(error | error_id_mask)
Cat
ну ты понял
Berkus
в строку можно еще добавить номер строки и столбца
это числа, их можно добавить в числа, смотри, line * 1000000 + column * 10000 + error_code
Cat
ну или так
պլհկ
☝️
Αλεχ
у этих чуваков явно весь код в одном, максимум паре файлов
Αλεχ
так что твой подход вызовет переполнение
Cat
uint128
Berkus
в u128 нормально всё влезает
Αλεχ
ты почему-то взял что больше 100 стобцов кода не может быть
Berkus
ты почему-то взял что больше 100 стобцов кода не может быть
потому что я напечатал два числа не считая нолики, ну и в форматтере указано что больше 100 столбцов не бывает и всё тут
Αλεχ
Плюс нужно кастомное сообщение еще впилить
Αλεχ
типа "should never throw"
Αλεχ
или "magic. do not touch"
Berkus
тебе скучно что ли
Cat
или "magic. do not touch"
это комментами
Berkus
Плюс нужно кастомное сообщение еще впилить
на вот почитай http://smallcultfollowing.com/babysteps/blog/2018/04/24/rust-pattern-precise-closure-capture-clauses/
Cat
а ошибка должна определяться так: lookup(error | error_id_mask) => "see comment on LINE:COL" LINE = error | line_mask COL = = error | lcolumn_mask
Cat
по-моему, почти robust способ
Cat
отдам забесплатно
Αλεχ
Чет вы заморочились
Αλεχ
короче надо -1 везде возвращать
Αλεχ
и все
Cat
-1 слишком неоднозначно
Cat
а если это возврат в ОС?
Cat
чему равно -1?
պլհկ
exit(1)
Αλεχ
но я не понял к чему ты это?
Αλεχ
кстати я не понял
Αλεχ
impl Context { fn process(&mut self, values: &[String]) { self.output.extend( values .iter() .map(|v| self.input.get(v).cloned().unwrap_or(0)), ); } }