Хаскельное
http://vit-r.livejournal.com/679524.html?thread=3691364#t3691364
решили на прошлой работе трое таки попробовать Хаскель, для неспешной задачи. генерация DDL, DML c скриптами SQL. Бились, бились, - но сделали, и был восторг! Потом, затянула обычная работа, через месяцок нужно было добавить кое-чего... и никто из троих не смог понять как оно работает, и как же добавить.
Звучит похоже на правду. Хотя у меня и F# и Clojure в подобных задачах живут и развиваются без проблем.
решили на прошлой работе трое таки попробовать Хаскель, для неспешной задачи. генерация DDL, DML c скриптами SQL. Бились, бились, - но сделали, и был восторг! Потом, затянула обычная работа, через месяцок нужно было добавить кое-чего... и никто из троих не смог понять как оно работает, и как же добавить.
Звучит похоже на правду. Хотя у меня и F# и Clojure в подобных задачах живут и развиваются без проблем.
no subject
Плохой код можно найти везде. Вы сравниваете код, который вы контролируете (с комментариями) и чей-то ещё. Контролируйте код на Хаскеле, все будет хорошо.
no subject
Во-вторых, для тех же Си с крестами существуют методики, позволяющие гарантированно получать качественный код в промышленных мастабах. Разговоры о методиках с представителями хардкорного функционального программирования заканчиваются... хм... ну да. Попытками измерения интеллекта.
no subject
no subject
Насчёт же первого вопроса - их дофига. Сейчас вот вижу, как люди из Simulink код генерируют. Видел разные адаптации структурных методов. Видел самодельные. Хороший стандарт о том, как можно и нельзя делать софт - это толстый том с многими сотнями правил и разъяснений. Плюс есть тулы, которые позволяют проконтролировать всё, вплоть до значений регистров на целевой платформе.
no subject
У обычных софтовых контор ни времени ни бюджета не будет на то, чтобы епамские индусы этим стандартам следовали да тулы изучали.
no subject
no subject
И индусов там нет, по крайней мере в тех местах, где это работает. В одном месте даже дали индусам написать быстро и дёшево прототип, а потом его выкинули и сделали как положено.
Кстати, конторы тоже не "софтверные", а что-то реально производящие. Чаще всего, в железе.
no subject
no subject
no subject
no subject
no subject
Пересмотр кода перед компиляцией уменьшает количетво дефектов, пересмотр кода перед коммитом или отправкой на код ревю уменьшает еще, непрерывные интеграционные тесты еще уменьшают и тп.
ЯП вносят определенные ошибки, которые надо выявлять после разбора причин пропущенного дефекта. Дефекты, опять же, специфичны для предметной области - где-то деление на два вместо трех вполне пройдет. Опять же, здесь нет жесткого задания ЯП.
no subject
Насчёт предложенных практик я комментировать не буду, но имелось ввиду что-то более существенное.
no subject
"Более существенное" (видимо - подробное?) сильно зависит от проекта. Натурально.
no subject
P.S. Интересно, какими процессами пользуется http://corp.galois.com/about-us/ , пишущие вроде как сверхнадёжный софт, и пишущие его в основном на хаскелле.
no subject
Ну, например, построчная проверка заказчиком. :-D
Я с Хаскелем не работаю, так что не знаю, что там есть. Пока что на вопросы про сто процентное покрытие кода тестами и про графическое представление структуры программы вразумительных ответов я не получил.
А "вроде бы сверхнадёжный софт" - это сколько часов наработки на отказ и какая цена ошибки?
no subject
Про софт можно на сайте почитать и в списке заказчиков.
no subject
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(Anonymous) 2013-09-15 04:42 am (UTC)(link)В Хаскеле, к примеру, не нужно ставить const перед ссылками на структуры, которые передаются в функции. И не нужно опасаться неявного приведения типов.
no subject
Да, они там называются "компилятор".
no subject
Т.е. нет. В отличие от компилятора, статический анализатор
1. не ограничен во времени => может проводить более глубокую проверку кода.
2. имеет право на ошибку - предупреждения статического анализатора любой степени серьёзности могут быть ложными.
Поэтому статический анализатор может, в отличие от компилятора, ругнуться на условный код
let 2d_distance_from_origin {x : float; y : float; z : float} in
let x = p.x in
let y = p.z in
x^2 + x^2;;
Ну и тому подобные, формально верные конструкции, которые часто могут быть следствием опечатки.
И, хотя, Хаскел значительно лучше С, от подобных вещей он не защищает.
no subject
Хаскелл оказался защищён от таких ошибок гораздо хуже, чем с++ )))
no subject
data Y
data Z
data Coord c a = C a -- c - phantom type, does not add runtime overhead.
instance Num a => Num (Coord c a) where ... -- you cannot add Coord X Float and Coord Y Float
type Vec a = (Coord X a, Coord Y a, Coord Z a)
field :: XYZ b => Vec a -> b -> Coord b a
field = ...
f p = let x = field p X; y = field p Z in x*x + castFromY (y*y) -- compiler error
(no subject)
(no subject)
(no subject)
(no subject)
no subject
http://hackage.haskell.org/package/hlint