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

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

Date: 2013-09-16 10:23 am (UTC)
From: [identity profile] geniepro.livejournal.com
http://snapframework.com/docs/style-guide

весьма известный style-guide для хаскелла

Date: 2013-09-16 11:05 am (UTC)
From: [identity profile] vit-r.livejournal.com
Maximum line length is 78 characters.

Why?

Date: 2013-09-16 07:13 pm (UTC)
From: [identity profile] geniepro.livejournal.com
Ну а сколько нужно?
В сях/сишарпе мне действительно часто приходится писать длинющие строки по 120 символов, но в хаскелле почему-то нет -- идентификаторы обычно короткие, так что сильно вправо код не лезет. Зато удобно два разных модуля на одном широкоформатном экране редактировать...

Date: 2013-09-16 09:35 pm (UTC)
From: [identity profile] vit-r.livejournal.com
идентификаторы обычно короткие,

Можно подумать, что это хорошо.

Date: 2013-09-17 04:25 am (UTC)
From: [identity profile] geniepro.livejournal.com
Идентификаторы не нужны сами по себе, и они должны отражать какую-то сущность. А в хаскелле чаще всего функции полиморфны, ну какие там сущности у их параметров? Имена вида x:xs достаточны в 80% случаев, имхо...

Date: 2013-09-17 05:32 am (UTC)
From: [identity profile] vit-r.livejournal.com
Я рад, что имена "ХЗ" достаточны для пишущих на Хаскеле. Я говорю про реальные задачи, где нужно писать что-то вроде "дополнительный коэффициент накопления поправки 1998 года"

Date: 2013-09-17 10:12 am (UTC)
From: [identity profile] thesz.livejournal.com
Кусок реальной программы:
-- | Вид блока памяти (для карты памяти)
data StoreKind addr where
    SKRegFile   :: StoreKind Int
    -- | Отображение внутренних переменных ядра в память (SPH, SPL, SREG)
    SKCPUVars   :: AVRCPU a =>
                   -- список переменных для отображения изменений в
                   -- отладочной печати (можно было бы и автоматом
                   -- извлекать из выражений)
                   [CPUVar (AVR a)] ->
                   StoreKind (AVRExpr a SIZE8, -- read expr
                              [Stat (AVR a)])  -- write stats
    SKSRAM      :: StoreKind Int
    SKFlash     :: StoreKind Int
    SKIO        :: StoreKind Int
    -- Внешняя память, с идентификатором
--    SKExternal  :: String -> StoreKind Int
    SKUndefined :: StoreKind ()
Есть ли вопросы?

Date: 2013-09-17 10:30 am (UTC)
From: [identity profile] kurilka.livejournal.com
А комментарии на английском и русском сразу не смущают?

Date: 2013-09-17 12:35 pm (UTC)
From: [identity profile] thesz.livejournal.com
Я пишу на английском, коллеги пишут на русском. Что поделать. ;)

Date: 2013-09-17 08:46 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Ну и зачем начинать? Вопросы, естественно, есть. И они, естественно, не понравятся.

Date: 2013-09-17 09:18 pm (UTC)
From: [identity profile] thesz.livejournal.com
Так задавайте.

Date: 2013-09-17 09:26 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Не вижу смысла.

Но в реальном проекте среднего размера количество подобных сокращений быстро переваливает за несколько тысяч, превращая расшифорвку кода в ад.

Date: 2013-09-17 09:34 pm (UTC)
From: [identity profile] thesz.livejournal.com
Реальный проект среднего размера - это сколько?

Код, что выше, из проекта в 4.5K строк. На C/C++ это будет от 13.5K до 36К строк, ожидается всего в пять раз больше, то есть, 22.5K.

Проект на C/C++ в 22K строк - средний? Год работы программиста IBM, все же.

Date: 2013-09-18 06:07 am (UTC)
From: [identity profile] vit-r.livejournal.com
Какие вообще проблемы могут быть в проекте размером 1 человекогод?

Научного определения я не знаю, но для меня средние начинаются где-то с объёма в десяток человеколет и десятка человек в команде. Из тех проектов, что я обычно вижу, десяток человеколет - это просто постановка задачи.

Причём, софт в конце проекта не выбрасывается, а продолжает жить в системе, накапливая изменения с разных проектов. Так что я совершенно не удивляюсь, если вижу модуль, переписанный тридцать лет назад с Фортрана.

Date: 2013-09-18 11:31 am (UTC)
From: [identity profile] thesz.livejournal.com
Вот уже интересно. 10 человеколет на постановку задачи.

Что за область деятельности?

Date: 2013-09-18 08:30 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Десяток плюс-минус - это какой-нибудь Data Warehouse в приличном концерне, нетривиальная система в автомобиле или подсистема управления поездом. Если поезд брать целиком, вместе с электричеством, железом и начинкой, тут спокойно и сотня наберётся.

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

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 Aug. 30th, 2025 08:43 pm
Powered by Dreamwidth Studios