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 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 - в сложности достижения.

Date: 2013-09-14 08:46 pm (UTC)
From: [identity profile] antilamer.livejournal.com
Я не понимаю. Для хаскеля есть инструмент, позволяющий измерять покрытие. Хотим .999 - покрываем тестами, пока он не покажет .999. Где тут разница между хаскелем и си?

Date: 2013-09-14 09:02 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Измерять - это не проблема. Проблема - сделать. На си и си с крестами я 100% видел.

Date: 2013-09-14 09:10 pm (UTC)
From: [identity profile] antilamer.livejournal.com
То есть вопрос не в языке и инструментарии, а в том, какие проекты на этом языке лично Вы видели?

Date: 2013-09-14 09:38 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Вопрос в том, что я не предстваляю, как то же самое сделать на Хаскеле. Вопросы к гурам дают ответы как по ссылке в другой ветке.

Date: 2013-09-16 10:19 am (UTC)
From: [identity profile] geniepro.livejournal.com
библиотека SQLite, написанная на сях, имеет покрытие в 1084 строк тестов на каждую строку кода, но и это не спасает её от того, что время от времени в ней таки находятся баги...

Date: 2013-09-16 11:06 am (UTC)
From: [identity profile] vit-r.livejournal.com
Тестами нелзя доказать отсутствие багов. По-моему, это азбука.

Date: 2013-09-16 11:08 am (UTC)
From: [identity profile] vit-r.livejournal.com
Да, и "покрытие 100%" - это не соотношение строк тестов к строкам кода, а доказательство, что в тестах проверятся каждая строка кода.

(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

Date: 2013-09-16 09:43 pm (UTC)
ext_646638: (Default)
From: [identity profile] rdia.livejournal.com
Это, безусловно, классный приём, но что делать, если в 3-х местах не нужно складывать, а в 4-м нужно складывать координаты? Как норму считать - ещё пару вызовов вставить?

Подобную же штуку можно криво-косо сделать на С++, только овчинка выделки не стоит. Из-за раздутия кода вы сделаете ещё пару ошибок и т.д. Ухудшите ясность.

Я не спорю, что проверки в Хаскелле значительно круче, чем проверки в С++. Но в любом языке остаётся круг ошибок, которые не являются достойными занесения в компилятор, но вполне известны и часто повторяемы.

Date: 2013-09-17 04:24 am (UTC)
From: [identity profile] thesz.livejournal.com
Я потерял вашу мысль.

В Хаскеле я могу ограничить круг пропускаемых ошибок чрезвычайно малым числом. Библиотекой, не компилятором. Ну, и что, что в C++ так нельзя?

Насчет "как норму считать" - отдельной функцией, верифицированной. Как это делается в обычных библиотеках.

Date: 2013-09-17 01:21 pm (UTC)
ext_646638: (Default)
From: [identity profile] rdia.livejournal.com
> В Хаскеле я могу ограничить круг пропускаемых ошибок чрезвычайно малым числом.

Со стат. анализатором наверняка можно будет ещё больше ограничить. Но пока, видимо, кол-во ошибок слишком мало по сравнению с конкурентными языками. Поэтому создание стат. анализатора для Хаскеля нерентабельно.

Date: 2013-09-17 01:47 pm (UTC)
From: [identity profile] thesz.livejournal.com
Вы про зависимые типы слышали? Хаскель движется в ту сторону.

В зависимых типах вы можете ограничить себя так, как хотите и компилятор совершенно эквивалентен статическому анализатору.

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. 22nd, 2025 06:05 am
Powered by Dreamwidth Studios