metaclass: (Default)
[personal profile] metaclass
http://vit-r.livejournal.com/679524.html?thread=3691364#t3691364
решили на прошлой работе трое таки попробовать Хаскель, для неспешной задачи. генерация DDL, DML c скриптами SQL. Бились, бились, - но сделали, и был восторг! Потом, затянула обычная работа, через месяцок нужно было добавить кое-чего... и никто из троих не смог понять как оно работает, и как же добавить.

Звучит похоже на правду. Хотя у меня и F# и Clojure в подобных задачах живут и развиваются без проблем.

Date: 2013-09-14 02:31 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Я сравниваю код, который я вижу в разных проектах и от разных людей. Это раз.

Во-вторых, для тех же Си с крестами существуют методики, позволяющие гарантированно получать качественный код в промышленных мастабах. Разговоры о методиках с представителями хардкорного функционального программирования заканчиваются... хм... ну да. Попытками измерения интеллекта.

Date: 2013-09-14 02:37 pm (UTC)
From: [identity profile] metaclass.livejournal.com
А что за методики? И применяет ли их кто-нибудь на практике?

Date: 2013-09-14 02:59 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Ответ на последний вопрос - да! Применяют. Потому что много таких мест, где, если не будут применять, им не дадут бумажку, без которой они заказ в принципе не получат.

Насчёт же первого вопроса - их дофига. Сейчас вот вижу, как люди из Simulink код генерируют. Видел разные адаптации структурных методов. Видел самодельные. Хороший стандарт о том, как можно и нельзя делать софт - это толстый том с многими сотнями правил и разъяснений. Плюс есть тулы, которые позволяют проконтролировать всё, вплоть до значений регистров на целевой платформе.
Edited Date: 2013-09-14 03:02 pm (UTC)

Date: 2013-09-14 03:54 pm (UTC)
From: [identity profile] metaclass.livejournal.com
А, это значит только с деньгами из тумбочки и бесконечными проектами работает.
У обычных софтовых контор ни времени ни бюджета не будет на то, чтобы епамские индусы этим стандартам следовали да тулы изучали.

Date: 2013-09-14 05:17 pm (UTC)
From: [identity profile] theiced.livejournal.com
да не слушай ты - видно же что пидорас-попильщик.

Date: 2013-09-14 06:09 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Ну не то, чтобы из тумбочки, и не то, чтобы бесконечными, но на проект выделяется столько, сколько он стоит. Потому что цена ошибки на порядок выше любых методов её предотвращения.

И индусов там нет, по крайней мере в тех местах, где это работает. В одном месте даже дали индусам написать быстро и дёшево прототип, а потом его выкинули и сделали как положено.

Кстати, конторы тоже не "софтверные", а что-то реально производящие. Чаще всего, в железе.
Edited Date: 2013-09-14 06:11 pm (UTC)

Date: 2013-09-14 06:18 pm (UTC)
From: [identity profile] berezovsky.livejournal.com
А в бетоне есть?

Date: 2013-09-14 06:51 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Мне переодически приходит рассылка с конференциями по аграрной информатике... Так что есть всё, но я отвечаю только за то, что видел.

Date: 2013-09-14 04:58 pm (UTC)
From: [identity profile] thesz.livejournal.com
Методики уменьшения дефектов (любого рода) не имеют отношения к языку программирования.

Date: 2013-09-14 06:40 pm (UTC)
From: [identity profile] thesz.livejournal.com
Потому, что это практика уменьшения дефектов. Приемы ее работают вне зависимости от ЯП.

Пересмотр кода перед компиляцией уменьшает количетво дефектов, пересмотр кода перед коммитом или отправкой на код ревю уменьшает еще, непрерывные интеграционные тесты еще уменьшают и тп.

ЯП вносят определенные ошибки, которые надо выявлять после разбора причин пропущенного дефекта. Дефекты, опять же, специфичны для предметной области - где-то деление на два вместо трех вполне пройдет. Опять же, здесь нет жесткого задания ЯП.

Date: 2013-09-14 06:49 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Если мы говорим о железе, без конкретного языка не обойтись. То же будет, если требования по производительности или чему-то подобному.

Насчёт предложенных практик я комментировать не буду, но имелось ввиду что-то более существенное.

Date: 2013-09-14 07:10 pm (UTC)
From: [identity profile] thesz.livejournal.com
О каком железе? Какие требования по производительности?

"Более существенное" (видимо - подробное?) сильно зависит от проекта. Натурально.

Date: 2013-09-14 07:39 pm (UTC)
From: [identity profile] antilamer.livejournal.com
Какие Вы знаете элементы процессов разработки надёжного ПО на си, которые не применимы к хаскелю? (ну, кроме "наличия компилятора, сертифицированного государством")

P.S. Интересно, какими процессами пользуется http://corp.galois.com/about-us/ , пишущие вроде как сверхнадёжный софт, и пишущие его в основном на хаскелле.
Edited Date: 2013-09-14 07:45 pm (UTC)

Date: 2013-09-14 07:57 pm (UTC)
From: [identity profile] vit-r.livejournal.com
которые не применимы к хаскелю?

Ну, например, построчная проверка заказчиком. :-D

Я с Хаскелем не работаю, так что не знаю, что там есть. Пока что на вопросы про сто процентное покрытие кода тестами и про графическое представление структуры программы вразумительных ответов я не получил.

А "вроде бы сверхнадёжный софт" - это сколько часов наработки на отказ и какая цена ошибки?

Date: 2013-09-14 08:25 pm (UTC)
From: [identity profile] antilamer.livejournal.com
Coverage есть http://www.haskell.org/haskellwiki/Haskell_program_coverage#What_is_hpc.3F
Про софт можно на сайте почитать и в списке заказчиков.

Date: 2013-09-14 08:28 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Вопрос был не про "покрытие", а про "стопроцентное покрытие". Это вещи разные принципиально.

Date: 2013-09-14 08:34 pm (UTC)
From: [identity profile] antilamer.livejournal.com
В чём разница?

Date: 2013-09-14 08:37 pm (UTC)
From: [identity profile] vit-r.livejournal.com
В том же, в чём разница между надёжностью .99 и .999 - в сложности достижения.

(no subject)

From: [identity profile] antilamer.livejournal.com - Date: 2013-09-14 08:46 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2013-09-14 09:02 pm (UTC) - Expand

(no subject)

From: [identity profile] antilamer.livejournal.com - Date: 2013-09-14 09:10 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2013-09-14 09:38 pm (UTC) - Expand

(no subject)

From: [identity profile] geniepro.livejournal.com - Date: 2013-09-16 10:19 am (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2013-09-16 11:06 am (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2013-09-16 11:08 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2013-09-16 03:56 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2013-09-16 04:10 pm (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2013-09-16 04:25 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2013-09-16 09:20 pm (UTC) - Expand

(no subject)

From: [identity profile] rdia.livejournal.com - Date: 2013-09-16 06:07 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2013-09-16 09:31 pm (UTC) - Expand

Date: 2013-09-15 04:42 am (UTC)
From: (Anonymous)
Статические анализаторы кода для Хаскеля есть?

В Хаскеле, к примеру, не нужно ставить const перед ссылками на структуры, которые передаются в функции. И не нужно опасаться неявного приведения типов.

Date: 2013-09-16 03:58 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
>Статические анализаторы кода для Хаскеля есть?

Да, они там называются "компилятор".

Date: 2013-09-16 06:04 pm (UTC)
ext_646638: (Default)
From: [identity profile] rdia.livejournal.com
> Да, они там называются "компилятор".

Т.е. нет. В отличие от компилятора, статический анализатор

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;;

Ну и тому подобные, формально верные конструкции, которые часто могут быть следствием опечатки.

И, хотя, Хаскел значительно лучше С, от подобных вещей он не защищает.

Date: 2013-09-16 07:24 pm (UTC)
From: [identity profile] geniepro.livejournal.com
Был как-то тест, в котором в программы на разных языках вносили случайные опечатки, и смотрели, у кого компилятор больше таких ошибок обнаружит.
Хаскелл оказался защищён от таких ошибок гораздо хуже, чем с++ )))

Date: 2013-09-16 09:20 pm (UTC)
From: [identity profile] thesz.livejournal.com
data X
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)

From: [identity profile] rdia.livejournal.com - Date: 2013-09-16 09:43 pm (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2013-09-17 04:24 am (UTC) - Expand

(no subject)

From: [identity profile] rdia.livejournal.com - Date: 2013-09-17 01:21 pm (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2013-09-17 01:47 pm (UTC) - Expand

Date: 2013-09-16 07:28 pm (UTC)
From: [identity profile] geniepro.livejournal.com
Есть что-то типа того:

http://hackage.haskell.org/package/hlint

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 4th, 2025 03:35 pm
Powered by Dreamwidth Studios