Опыт применения Nemerle
От: hi_octane Беларусь  
Дата: 14.02.08 12:19
Оценка: 34 (8)
FGR>Я вижу много энтузиастов и просто любителей функционального подхода.
FGR>Но что насчет корпоративного уровня? Готова ли, например, ваша компания для какого-либо нового проекта попробовать F# ?

Полгода делаем один из проектов на Nemerle, оставив на шарпе только GUI. Проект прошёл тестирование и в пред-продакшене, перспективы самые радужные. За всё время работы было найдено 2 глюка компилятора немерла (и не надо гнать что компилятор сырой, глюки были в синтаксических конструкциях которых в шарпе просто нет и вряд-ли будут, и в выводе типов, который у шарпа опять таки отсутствует — var это лажа а не вывод типов), оба исправил Дмитрий Иванков. Респект ему и уважуха. За время работы был написан всего один макрос, весь остальной код -- C# + новые фичи Nemerle.

Когда проект только начинался рассматривали F#, учитывали что за ним MS и бабло. За Nemerle были удобство программирования и фичи ФП.
Nemerle — power of advanced functional, object-oriented and imperative features in a single statically-typed NET language

19.02.08 14:58: Ветка выделена из темы Каково будущее Nemerle / F# ?
Автор: FallenGameR
Дата: 13.02.08
— Хитрик Денис
19.02.08 14:58: Перенесено модератором из 'Философия программирования' — Хитрик Денис
Re: Опыт применения Nemerle
От: Курилка Россия http://kirya.narod.ru/
Дата: 14.02.08 12:42
Оценка: +1 :)
Здравствуйте, hi_octane, Вы писали:

[cut]
_>Когда проект только начинался рассматривали F#, учитывали что за ним MS и бабло. За Nemerle были удобство программирования и фичи ФП.
Т.е. по-вашему в F# не хватает "фич ФП"?
Re: Опыт применения Nemerle
От: lemmure  
Дата: 14.02.08 15:25
Оценка: +2
Здравствуйте, hi_octane, Вы писали:

_>Полгода делаем один из проектов на Nemerle,


Если не секрет, то какого типа проект? Есть ли метрика — сколько классов, размер исходников, строк кода?

_>За время работы был написан всего один макрос, весь остальной код -- C# + новые фичи Nemerle.


Какие преимущества Немерле показались самые удобные?
Re[2]: Опыт применения Nemerle
От: hi_octane Беларусь  
Дата: 15.02.08 11:30
Оценка: +1
_>>Когда проект только начинался рассматривали F#, учитывали что за ним MS и бабло. За Nemerle были удобство программирования и фичи ФП.
К>Т.е. по-вашему в F# не хватает "фич ФП"?

Фич ФП наверняка у F# хватает (с тех пор как взялись за Nemerle, я на него забил, и куда он развивается уже не знаю), но вот удобства программирования и использования этих фич -- имхо, нет, особенно для программиста который писал на шарпе. Получалось что на Nemerle можно было сразу писать, и даже копипастить куски кода из уже имеющихся наработок, или натыренных из рефлектора, чуть-чуть их менять (большинство изменений -- замена имени типа на def, или перенос их на ": имя_типа" в объявлениях функций. С F# в плане копи-паста из существующего кода C# было слишком сложно.
Nemerle — power of advanced functional, object-oriented and imperative features in a single statically-typed NET language
Re[2]: Опыт применения Nemerle
От: hi_octane Беларусь  
Дата: 15.02.08 12:16
Оценка: 46 (4)
L>Если не секрет, то какого типа проект? Есть ли метрика — сколько классов, размер исходников, строк кода?

Умный разбор данных поступающих с множества компов в VPN-сетке (в реале они могут быть очень далеко друг от друга). Умный наверное слишком сильно сказано, но есть даже небольшой движок уточнения и вывода новых значений из того что нам присылают, по-типу сильно упрощённого пролога.

L>Какие преимущества Немерле показались самые удобные?


Самое главное преимущество — плавность перехода с C#, и совместимость с C# кодом чуть-ли не на уровне синтаксиса. В контексте нашей задачи сильно помогала иммутабельность переменных по-умолчанию и локальные функции. При написании сильно асинхронного кода (в нормальной нагрузке ~100 активных коннекшонов, а у нас потоков лишь по 2-3 на один процессор + GUI) изменяемых переменных может быть одна на два экрана кода, да и сам код просто читается последовательно, будто это обычный синхронный -- супер-удобно.

Ещё очень помогает частичная подстановка аргументов, вот простой пример: есть метода запуска задач из внутреннего пула. Метод принимает Guid и функцию которую нужно запустить с одним параметром — строкой конфигурации типа сonneection string, указывающую, с какого компа брать данные. В шарпе примерно так:


void QueueTask(Guid id, StringVoidDelegate method)
{
    где-то здесь вызывается 
    method(Provider.ConnectionString);
}

в Nemerle вот как (запись делегата, кстати, уже нагляднее):

QueueTask(id : Guid, method : string->void) : void
{
    method(Provider.ConnectionString);
}


И кто-то это очень успешно вызывал из кучи мест, передавая свои string->void методы... Через два месяца понадобилось передать в функцию ещё параметр, например int. В шарпе пришлось бы выворачиваться через анонимный делегат (в лучшем случае лямбду), или делать специализированную версию метода QueueTask, а в Nemerle тот кто вызывает, делает так:


newMethodToQueue(con : string, number : int) : void
{
}

...

QueueTask(id, newMethodToQueue(_, 10));


И не отходя от кассы получили параметризированный string->void из string*int->void. Существующие места работают как работали, параметр 10 подставлен, и когда функция будет вызвана -- она всё что ей передали получит и прочитает. Может на маленьком примере удобства этой фичи и не видно, но всю силу этого наверное только в реальной работе ощутишь. Например QueueTask вызывает InitContext, та вызывает ещё что-то, и все они внутри вызывают Log(...), а Log вообще ничего не пишет, а собирает все вызовы себя. Запись Log создаст только если внутри метода который вызвали вылетит исключение. В итоге каждый свободно добавляет свои параметры, а запись в логе при этом одна. Там где раньше городили цепочку получения IServiceProvider теперь расставляем _ в местах где аргументов пока нет и передаём дальше

После такого все выкрунтасы .NET в виде object context последним параметром во всяких Thread.Start выглядят столь убого, что для всего до чего руки дошли врапперы написали.
Nemerle — power of advanced functional, object-oriented and imperative features in a single statically-typed NET language
Re[3]: Опыт применения Nemerle
От: Curufinwe Украина  
Дата: 15.02.08 13:05
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>Умный разбор данных поступающих с множества компов в VPN-сетке (в реале они могут быть очень далеко друг от друга). Умный наверное слишком сильно сказано, но есть даже небольшой движок уточнения и вывода новых значений из того что нам присылают, по-типу сильно упрощённого пролога.


А если не секрет:
1. Сколько человек работало над проектом?
2. Какой у них общий опыт программирования (функционального програм.)?
3. Сколько времени ушло на изучение Nemerle?
4. Проект внутренний/аутсорс/коробочный? Насколько критичный для вашей компании?
... << RSDN@Home 1.2.0 alpha rev. 693>>
Re[4]: Опыт применения Nemerle
От: hi_octane Беларусь  
Дата: 18.02.08 11:51
Оценка: 80 (7)
C>1. Сколько человек работало над проектом?
ПМ (я, упоминаю, потому что сам в код тоже лажу), 2 постоянно работают только с немерловым кодом, один человек пополам — GUI на C# и всё что нужно для этого GUI на Nemerle. Сейчас GUI можно и на Nemerle делать, но когда мы начинали поддержка WinForms в интеграции была в зачаточном состоянии.

C>2. Какой у них общий опыт программирования (функционального програм.)?

Общее представление о функциональном программирование было у всех, у одного программиста был опыт с SML.NET (некоммерческий, но приличный), и опыт программирования на lisp (~год, коммерческий). Он и посмотрел все языки кандидаты и сделал мини-презентации для остальных когда стоял вопрос выбора.

C>3. Сколько времени ушло на изучение Nemerle?

Сложно сказать. Сразу читали статьи и начали писать примерно как на C# + кто что понял из статей, т.е. времени отведённого на изучение как бы и не было. Просто единственный функциональщик в конце дня тратил час или два на ревью того что написали и объяснение того как можно ещё или как было бы лучше. Плюс я готовил одну "лекцию" в неделю для объяснения различных фокусов (не только Nemerle). Код рефакторили очень мало, во время рефакторинга было парное программирование.

C>4. Проект внутренний/аутсорс/коробочный? Насколько критичный для вашей компании?

Аутсорс. Для нас проект важный (контора маленькая, каждая просадка это проблема), но клиент постоянный. Если бы задержка в 1 месяц случилась — прошло бы спокойно. Если бы в первый месяц поняли что Nemerle не для нас — перешли бы к плану Б — всё на C#. По итогам сделаем постмортем и будем решать ограничиться подобными проектами или расширять использование Nemerle на всё подряд. Пока опережение сроков по сравнению с оценкой весьма существенное.
Nemerle — power of advanced functional, object-oriented and imperative features in a single statically-typed NET language
Re[5]: Опыт применения Nemerle
От: Curufinwe Украина  
Дата: 18.02.08 13:18
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>Аутсорс. Для нас проект важный (контора маленькая, каждая просадка это проблема), но клиент постоянный. Если бы задержка в 1 месяц случилась — прошло бы спокойно. Если бы в первый месяц поняли что Nemerle не для нас — перешли бы к плану Б — всё на C#. По итогам сделаем постмортем и будем решать ограничиться подобными проектами или расширять использование Nemerle на всё подряд. Пока опережение сроков по сравнению с оценкой весьма существенное.


Спасибо за ответы

А клиент не возражал против Nemerle или ему язык реализации совсем безразличен?
... << RSDN@Home 1.2.0 alpha rev. 693>>
Re[6]: Опыт применения Nemerle
От: hi_octane Беларусь  
Дата: 19.02.08 09:55
Оценка: :))
C>А клиент не возражал против Nemerle или ему язык реализации совсем безразличен?

Их тех. директора и руководителя отдела внедрения предупредили что разработка будет вестись на языке который больше подходит для задачи (сами правда тогда ещё в этом уверены не были), но там всем, похоже, настолько всё равно, что их технические спецы даже не потрудились уточнить на каком. А мы для себя решили что если клиент таки будет возражать, и при этом окажется что Nemerle для нас очень подходит, то перед сдачей декомпилируем в C# и переименуем всё генерённое в КрасивыеИмена да приложим рядом реальный исходник с текстовиком на русском о том как именно был получен сорец на шарпе. Из расчёта что если дорабатывать будем не мы, но кто-то из соотечественников — то прочитают смогут понять и нас и Nemerle, и доработают спокойно. Если индусы/китайцы — то навалятся толпой и доведут шарповый сорец до обычного индусокода. Всё одно, 90% что дорабатывать будем мы же.

На деле никаких фокусов с перегоном в C# не понадобилось. Молча взяли архив, не уверен что даже проверили открывается ли.
Nemerle — power of advanced functional, object-oriented and imperative features in a single statically-typed NET language
Декомпиляция Немерля
От: Блудов Павел Россия  
Дата: 19.02.08 12:31
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>при этом окажется что Nemerle для нас очень подходит, то перед сдачей декомпилируем в C# и переименуем всё генерённое в КрасивыеИмена

Вам очень-очень повезло. Не родился ещё декомпилятор, способный разобрать то, что компилирует Немерль.
У него же нет statements, только expressions. Поясню, чем это чревато.
Вот такой код на C# невозможен:
    bool b = 1 < 2? true: throw new InvalidOperationException();

И такой невозможен:
    (if 1 < 2 true else false).ToString();


А для Немерля это всё нормально. А поскольку все декомпиляторы расчитаны на декомпиляцию c#, то от Немерля им плохеет на простейшем коде.
Попробуйте взять сейчас свой проект нв Немерле и прогнать его через Рефлектор, ДисШарп или Саламандер.
Компиляемый IL-код получить ещё можно, а c#-вого не получится.
... << RSDN@Home 1.2.0 alpha rev. 788>>
Re[5]: Опыт применения Nemerle
От: Dr.Gigabit  
Дата: 26.02.08 08:54
Оценка:
Здравствуйте, hi_octane, Вы писали:

C>>4. Проект внутренний/аутсорс/коробочный? Насколько критичный для вашей компании?

_>Аутсорс. Для нас проект важный (контора маленькая, каждая просадка это проблема), но клиент постоянный. Если бы задержка в 1 месяц случилась — прошло бы спокойно. Если бы в первый месяц поняли что Nemerle не для нас — перешли бы к плану Б — всё на C#. По итогам сделаем постмортем и будем решать ограничиться подобными проектами или расширять использование Nemerle на всё подряд. Пока опережение сроков по сравнению с оценкой весьма существенное.

Как Maintanance продали?
... << RSDN@Home 1.2.0 alpha rev. 790>>
Re[6]: Опыт применения Nemerle
От: hi_octane Беларусь  
Дата: 27.02.08 13:38
Оценка:
DG>Как Maintanance продали?
Ещё нет — сначала 3 месяца гарантийной поддержки и только потом отдельный договор на дальнейшую поддержку и развитие.
Nemerle — power of advanced functional, object-oriented and imperative features in a single statically-typed NET language
Re[7]: Опыт применения Nemerle
От: Dr.Gigabit  
Дата: 28.02.08 08:57
Оценка:
Здравствуйте, hi_octane, Вы писали:

DG>>Как Maintanance продали?

_>Ещё нет — сначала 3 месяца гарантийной поддержки и только потом отдельный договор на дальнейшую поддержку и развитие.

Т.е. на старте разработки не было разговора о поддержке? Хороший у вас заказчик. А если я хочу отдать поддержку другому сервис-провайдеру? Большие риски для бизнеса.
... << RSDN@Home 1.2.0 alpha rev. 790>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.