Size: a a a

Compiler Development

2020 January 26

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
Думается, эффект будет особенно заметен для сравнительно многословных, но тем не менее весьма безопасных языков типа Go.
Haskell они тоже посчитали. Там есть небольшой эффект от строгости, но не такой уж и фееричный. И скорее это эффект от иммутабельности (или от того, что на Haskell пишут seniorы), потому на Clojure тоже меньше багов в среднем.
источник

AT

Alexander Tchitchigin in Compiler Development
Михаил Бахтерев
Haskell они тоже посчитали. Там есть небольшой эффект от строгости, но не такой уж и фееричный. И скорее это эффект от иммутабельности (или от того, что на Haskell пишут seniorы), потому на Clojure тоже меньше багов в среднем.
Но там и программы не идентичные, наверное, сравнивали, да? 😉
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
Но там и программы не идентичные, наверное, сравнивали, да? 😉
Ну. По семантике нет, а по структуре коммитов (истоия там, зрелость) старались выбрать похожие
источник

AT

Alexander Tchitchigin in Compiler Development
Михаил Бахтерев
Ну. По семантике нет, а по структуре коммитов (истоия там, зрелость) старались выбрать похожие
Они будут разные не только по семантике, но и по архитектуре, дизайну и объёму функционала (в единицах функционала, например). Что должно сильно влиять.
Как, например, посчитать количество багов на 100 строк кода в C++ реализции Darcs, которую авторы вообще не осилили написать? 😉
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
Они будут разные не только по семантике, но и по архитектуре, дизайну и объёму функционала (в единицах функционала, например). Что должно сильно влиять.
Как, например, посчитать количество багов на 100 строк кода в C++ реализции Darcs, которую авторы вообще не осилили написать? 😉
Тогда заявить, что сравнивать вообще бессмысленно, и качество языка определяется только пользователем в конкретном проекте?
источник

AT

Alexander Tchitchigin in Compiler Development
Т.е. лично мне всё ещё не очевидно, что в Rust реализации даже при в несколько раз большем объёме кода не может быть меньше ошибок благодаря, например, на порядок меньшей частоте их появления.
источник

AT

Alexander Tchitchigin in Compiler Development
Михаил Бахтерев
Тогда заявить, что сравнивать вообще бессмысленно, и качество языка определяется только пользователем в конкретном проекте?
Нет. Общий вывод-то я нисколько не оспариваю. Чем меньше строк - тем меньше багов. Более того, количество багов на 100 строк более-менее постоянно для конкретного программиста на конкретном языке.
источник

AT

Alexander Tchitchigin in Compiler Development
А вот сравнивать между языками и программистами - реально тяжело и недостоверно... 😞
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
Т.е. лично мне всё ещё не очевидно, что в Rust реализации даже при в несколько раз большем объёме кода не может быть меньше ошибок благодаря, например, на порядок меньшей частоте их появления.
А как это доказать? Перепутать ссылки легко и в Rust, и в Си, и в Haskell. Поэтому утверждение не особо конструктивно.
источник

AV

Alexander Vershilov in Compiler Development
Вот согласен с тем, чтоколичество багов пропорционально количеству кода
источник

AV

Alexander Vershilov in Compiler Development
При этом я не уверен, что коэффициенты одинаковые для команды, языка, проекта
источник

AT

Alexander Tchitchigin in Compiler Development
Михаил Бахтерев
А как это доказать? Перепутать ссылки легко и в Rust, и в Си, и в Haskell. Поэтому утверждение не особо конструктивно.
А что именно "доказать"? Результаты такого опыта могут различаться в обе стороны в зависимости от кода и программистов. На самом деле, влияние других практик - типа TDD, Model-Based Design, Requirements Tracing и т.п. - отдельный интересный открытый вопрос.
источник

AV

Alexander Vershilov in Compiler Development
Поэтому иногда увеличение числа строк может легко уменьшить число багов в программе. Если взять какой-нибудь экстремум то на j будет мало строк и символов (проектов правда тоже мало)
источник

А⚙

Антон ⚙️ in Compiler Development
Михаил Бахтерев
А как это доказать? Перепутать ссылки легко и в Rust, и в Си, и в Haskell. Поэтому утверждение не особо конструктивно.
В смысле "перепутать ссылки"?
источник

AT

Alexander Tchitchigin in Compiler Development
Alexander Vershilov
При этом я не уверен, что коэффициенты одинаковые для команды, языка, проекта
Я весьма уверен (на 98%), что коэффициенты разные. Или даже сильно разные, с большой сигмой.
источник

AT

Alexander Tchitchigin in Compiler Development
Alexander Vershilov
Поэтому иногда увеличение числа строк может легко уменьшить число багов в программе. Если взять какой-нибудь экстремум то на j будет мало строк и символов (проектов правда тоже мало)
Экстремум тогда, скорее уж, какой-нибудь NASA-код, в котором очень много строк C-кода, но близкое к 0 количество багов. По понятным причинам.
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
А что именно "доказать"? Результаты такого опыта могут различаться в обе стороны в зависимости от кода и программистов. На самом деле, влияние других практик - типа TDD, Model-Based Design, Requirements Tracing и т.п. - отдельный интересный открытый вопрос.
Ну вот сажусь я решать задачу X. Как мне выбрать язык, на котором я сделаю наиболее эффективно? Сейчас даже аргумент с-runtime/без-runtime не особо работает, потому что народ научился в 5 килобайтов кода впихивать мощные сборщики мусора.
источник

AV

Alexander Vershilov in Compiler Development
Набрать необходимый опыт, кажется
источник

AT

Alexander Tchitchigin in Compiler Development
Антон ⚙️
В смысле "перепутать ссылки"?
Это когда НЕ пользуешься state monad и благодаря копипасте передаёшь ссылку на устаревший стейт. 😂
источник

AV

Alexander Vershilov in Compiler Development
Это ж личное
источник