Size: a a a

2020 March 08

p

polunin.ai in rust_offtopic
Alex Zhukovsky
выдержка из https://habr.com/ru/post/193722/

При эксплуатации уже написанной программы интересует ровно одно: как часто оно падает, бибикает и всё портит. Так вот, в сравнении с python — несравнимо реже. Да, при должной обработке напильником можно словить утёкший в toplevel exception, но вероятность этого крайне мала (я видел один раз за всё время использования среди всех программ).

Вероятность глупых ошибок значительно меньше. И когда я говорю «значительно», это это не в теории, а на практике, то есть по наблюдению за одним и тем же продуктом, написанным большей частью одними и теми же людьми на Хаскеле и Питоне.

Питон, как и любой другой динамически типизированный язык — это сплошная мина замедленного действия. Обо всех плохих ситуациях надо думать явно, плюс никто не страхует от мелких локальных ошибок или небрежностей. Ошибки либо проявляются в рантайме, либо их можно либо прятать в неявное except: pass (что ещё хуже). Object of type 'NoneType' has no method — наше всё. А если эта ошибка оказывается в редкой ветке — тогда мина получается совсем замедленная и срабатывает тогда, когда код уже давно «стабильный и хорошо себя показавший», и вообще, 300 дней аптайма.

Тесты, которые «покрывают весь код», к сожалению, совсем не покрывают «все возможные типы входных данных» (которые, внезапно, динамические) и совсем не спасают от ошибок типизации.

На Хаскеле таких ошибок, ошибок уровня «ой, в этом ветвлении забыл проверить» или «перепутал возвращаемый тип» в программах не появляется. Программисты это аргументируют удобной системой типов, которая позволяет на этапе компиляции отловить большую часть таких ошибок, плюс язык, позволяющий писать главное, не отвлекаясь на счёт индексов массивов и временные переменные. Им виднее.

По опыту разборов найденных ошибок я могу сказать, что большая часть ошибок, с которыми мы сталкивались — это либо ошибка в ТЗ (то есть ошибка вашего покорного слуги), либо неправильно понятое ТЗ программистами. Но не локальная ошибка или забывчивость.

Из этого вытекает парадоксальный вывод: баги в программе на Хаскеле фиксить сложнее, чем в языках с динамической типизацией, потому что в языке с динамической типизацией очередное место, где вдруг внезапно вылез NoneType, поправил и ладушки, а на Хаскеле надо с алгоритмом разбираться да по повводу неясности ТЗ с другими людьми ругаться.
К чему это
источник

DF

Dollar Føølish in rust_offtopic
Бля опять унылый срач
источник

Т8

Т-34 85 in rust_offtopic
я поверить не могу, что там реально будут думать, как же написать так, чтобы оно скомпайлилось в сейфе
источник

AZ

Alex Zhukovsky in rust_offtopic
Т-34 85
не только. Ещё его можно юзать, когда сдался борров чекеру
нельзя
источник

AZ

Alex Zhukovsky in rust_offtopic
polunin.ai
К чему это
что в хаскелле действительно остаются ошибки с логикой "разраб не так понял ТЗ", но и всё
источник

p

polunin.ai in rust_offtopic
Alex Zhukovsky
системы типов делают чтобы они 99% кейсов ловили, потому что для 100% будет слишком иноплаетно все выглядеть
Ну я не встречал ещё 1% где борроу чекер пиздел не по делу
источник

Т8

Т-34 85 in rust_offtopic
Alex Zhukovsky
нельзя
а кто запретит? Компилятор не запрещает
источник

AZ

Alex Zhukovsky in rust_offtopic
_других_ ошибок в программе не остается
источник

AZ

Alex Zhukovsky in rust_offtopic
polunin.ai
Ну я не встречал ещё 1% где борроу чекер пиздел не по делу
я это и сказал
источник

AZ

Alex Zhukovsky in rust_offtopic
Т-34 85
а кто запретит? Компилятор не запрещает
я выше линковал. очень легко получить уб
источник

AZ

Alex Zhukovsky in rust_offtopic
и ты вряд ли сделаешь правильно
источник

Т8

Т-34 85 in rust_offtopic
Alex Zhukovsky
что в хаскелле действительно остаются ошибки с логикой "разраб не так понял ТЗ", но и всё
именно поэтому хаслелл и не в мейнстриме - сложно на нём писать
источник

G

Gymmasssorla in rust_offtopic
Т-34 85
покажи, как их юзать в Java или в JavaScript
Для тайпскрипта нашёл: http://goto.ucsd.edu/~pvekris/docs/RefScript-pldi16-talk.pdf
источник

Т8

Т-34 85 in rust_offtopic
Alex Zhukovsky
я выше линковал. очень легко получить уб
а когда это волновало хуяк-хуяк конторы?
источник

AZ

Alex Zhukovsky in rust_offtopic
Т-34 85
именно поэтому хаслелл и не в мейнстриме - сложно на нём писать
ну да, фашисты, заставляют ошибки не писать
источник

AZ

Alex Zhukovsky in rust_offtopic
Т-34 85
а когда это волновало хуяк-хуяк конторы?
меня не волнуют хуяк конторы, я там работать не планирую)
источник

Т8

Т-34 85 in rust_offtopic
Alex Zhukovsky
меня не волнуют хуяк конторы, я там работать не планирую)
то есть, тебя не волнует то, что ты будет продолжать юзать багованный софт. Или не ты, а твои родственники. Или просто другие незнакомые люди
источник

p

polunin.ai in rust_offtopic
Alex Zhukovsky
ну да, фашисты, заставляют ошибки не писать
Научиться писать теоремы сложнее чем тесты, т-34 прав
источник

p

polunin.ai in rust_offtopic
Т-34 85
то есть, тебя не волнует то, что ты будет продолжать юзать багованный софт. Или не ты, а твои родственники. Или просто другие незнакомые люди
Вопрос: а что можно сделать?
источник

DS

Doge Shibu in rust_offtopic
polunin.ai
Научиться писать теоремы сложнее чем тесты, т-34 прав
Так писать просто, доказывать вот уже может быть сложнее.

Но тут мы верем в SMT солверы и помогающую нам параметричность
источник