... на тему "Haskell как rapid development/prototyping tool in real life"?
Тут у жены на работе народ пишет некую софтину, работающую с данными сложной структуры и больших объемов.
Формат данных описыватся на неком местном DSL (domain-specific language), представляющем собой горячечный бред на тему EBNFи ASN.1. Соответственно, интегральной частью софтины является парсер файлов-описаний формата, и проверка/обработка этих описаний в соответсвии с некоторым набором бизнес-правил (достаточно простых, типа "все поименованные поля должны быть где-то упомянуты")..
Язык - java, парсер и сопредельные структуры данных и алгоритмы - на основе javacc. Этот кусок пишется среднепотолочным програмистом на ява в течении двух недель (грамматика - около 150 продукций).
После написания встает вопрос проверки того, что написали. Заказчики стали присылать примеры файлов, и с каждой новой пачкой примеров стали вылазить какие-то изменения в грамматике, при внесении которых в код стал ломаться парсинг старых файлов и т.п. В результате наступил момент, когда на руках имелся код, неизвестно - работающий или нет, описание грамматики - неизвестно, валидное или нет, и некоторое кол-во файлов-примеров.
Тут я предложил провести эксперимент. Мы сели и я за вечер (часа 3-4) написал парсер этого DSL (haskell, parsec), который успешно парсил все имеющиеся на руках примеры. В процессе было выловлено с десяток лаж в описании грамматики.
После этого, за два следующих вечера (тоже по 3-4 часа) был написан (haskell, QuickCheck) генератор псевдослучайных правильных и неправильных файлов, на которых тестировался парсер, написаный на java. В процессе было выловлено несчетное кол-во лаж и разнообразных corner cases, на которые либо не был рассчитан javacc "в стандартной конфигурации", либо о которых попросту никто не думал.
В результате java-девелоперы неделю фиксили баги в режиме "мы все починили! - а ну-ка, сгенерим новую порцию в 100 файлов и еще раз проверим. - ой, опять что-то поломалось",
Жена заработала код без багов. Я заработал "респект и уважуху", кучу моральных бонусов и опыт использования QuickCheck для генерации тестовых примеров.
UPD: статью написал, выложил на haskellwiki. Читать можно тут
Тут у жены на работе народ пишет некую софтину, работающую с данными сложной структуры и больших объемов.
Формат данных описыватся на неком местном DSL (domain-specific language), представляющем собой горячечный бред на тему EBNFи ASN.1. Соответственно, интегральной частью софтины является парсер файлов-описаний формата, и проверка/обработка этих описаний в соответсвии с некоторым набором бизнес-правил (достаточно простых, типа "все поименованные поля должны быть где-то упомянуты")..
Язык - java, парсер и сопредельные структуры данных и алгоритмы - на основе javacc. Этот кусок пишется среднепотолочным програмистом на ява в течении двух недель (грамматика - около 150 продукций).
После написания встает вопрос проверки того, что написали. Заказчики стали присылать примеры файлов, и с каждой новой пачкой примеров стали вылазить какие-то изменения в грамматике, при внесении которых в код стал ломаться парсинг старых файлов и т.п. В результате наступил момент, когда на руках имелся код, неизвестно - работающий или нет, описание грамматики - неизвестно, валидное или нет, и некоторое кол-во файлов-примеров.
Тут я предложил провести эксперимент. Мы сели и я за вечер (часа 3-4) написал парсер этого DSL (haskell, parsec), который успешно парсил все имеющиеся на руках примеры. В процессе было выловлено с десяток лаж в описании грамматики.
После этого, за два следующих вечера (тоже по 3-4 часа) был написан (haskell, QuickCheck) генератор псевдослучайных правильных и неправильных файлов, на которых тестировался парсер, написаный на java. В процессе было выловлено несчетное кол-во лаж и разнообразных corner cases, на которые либо не был рассчитан javacc "в стандартной конфигурации", либо о которых попросту никто не думал.
В результате java-девелоперы неделю фиксили баги в режиме "мы все починили! - а ну-ка, сгенерим новую порцию в 100 файлов и еще раз проверим. - ой, опять что-то поломалось",
Жена заработала код без багов. Я заработал "респект и уважуху", кучу моральных бонусов и опыт использования QuickCheck для генерации тестовых примеров.
UPD: статью написал, выложил на haskellwiki. Читать можно тут
(no subject)
Date: 2006-01-17 05:42 am (UTC)Пацан сказал - пацан сделал :)
Date: 2006-01-18 10:48 pm (UTC)Я вот в раздумиях, стоит ли наливать больше воды. или и так пойдет?
Re: Пацан сказал - пацан сделал :)
Date: 2006-01-19 07:34 am (UTC)