metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-03-08 10:37 pm
Entry tags:

Эпический ад

Написал таки кусок кодогенератора на F#. Сначала в лоб, просто конверсией моих типов в последовательность строк SQL запроса для создания таблиц, а потом мне резко разонравилось отсутствие разделения модели и представления и я прикрутил AST для SQL, заодно заменив выходной результат на string seq, то бишь IEnumerable<string>.
Завтра буду прикручивать AST для дельфей, если мне не откозлопитонируют мозг какой-нибудь срочно-капец-нужно-вчера хреновиной.

Теперь понимаю, чего [livejournal.com profile] zabivator устроил хаскель-срач - когда над головой не висит чистота и ленивость, но есть discriminated unions, вывод типов и это дело корректно интегрировано в привычную среду, можно особо не задумываясь писать всякий мрак.

Но при этом однозначно начинать надо с хаскеля, а для F# - еще и дотнет знать, потому что иначе этот безумный бред понять затруднительно. Хаскель лаконичен, там те же самые идеи не заслоняются синтаксисом.

[identity profile] gds.livejournal.com 2010-03-09 09:27 am (UTC)(link)
про аннотации для ловли ошибок типизации -- о да! Недавно решил одно ast описать чисто полиморфными вариантами (да ещё и с перекрывающимися конструкторами), так без аннотаций ловил весьма долго.

Отсутствие перегрузки по типам -- есть такое дело. Кстати, я шёл с C (до этого -- с осемблира), затем чуть поковырял C++, потом понял, что ocaml это то, что нужно, но вот тоже не хватало перегрузки. Кусал локти сначала. Потом как-то научился обходиться без неё. И только потом понял, что кое-где эмулируется вариантными типами, кое-где объектами, кое-где всякими deriving'ами.

Мутабельность и ленивость -- ок :)

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

Про венду -- чего там грустно с ocamlfind? У меня он работает чотко. Даже кучу других библиотек скомпилял, даже типа-дистр виндовый сделал.

GODI я тоже не смотрел, именно из-за того, что оно не умело под mingw работать в своё время.

Насчёт lwt же -- очень странно. Мой билд-скрипт для него (для довольно старого 1.1.0) состоит из "$MAKE && $MAKE install", правда вот зависимость от ocaml-ssl есть.

Процессы -- советую глянуть JoCaml, это даже интереснее ырланка (ибо типизация).

[identity profile] zamotivator.livejournal.com 2010-03-09 09:37 am (UTC)(link)
Про венду -- чего там грустно с ocamlfind?
Ой, а можно мануал, как мне получить на выходе omake + ocamlfind + ocaml + batteries? Под mingw, пожалуйста, и без cygwin!
И вообще просто шикарно - если ещё и с lwt

Насчёт lwt же -- очень странно. Мой билд-скрипт для него (для довольно старого 1.1.0) состоит из "$MAKE && $MAKE install", правда вот зависимость от ocaml-ssl есть.
Под вендовый cmd? Если под bash - то какой - cygwin или таки MSYS?

Процессы -- советую глянуть JoCaml, это даже интереснее ырланка (ибо типизация).
ВОТ ЭТО НИХУЯ СЕБЕ ПРОСТИТЕ ЗА ВЫРАЖЕНИЯ ТИПИЗИРОВАННЫЙ ERLANG ПЫЩПЫЩПЫЩ!

О дааааааа, надо заценивать, если оно годное - то срочно OTP портировать под такое щастье!!!
Edited 2010-03-09 09:39 (UTC)

(Anonymous) 2010-03-09 09:44 am (UTC)(link)
> Ой, а можно мануал, как мне получить на выходе omake + ocamlfind + ocaml + batteries? Под mingw, пожалуйста, и без cygwin!

Зачем нужен неподдерживаемый omake когда есть ocamlbuild? ocamlfind just works. ocaml бинарный с сайта - без проблем. насчёт батареек не знаю. Вообщем "у меня всё работает". Покажи конкретную проблему.

[identity profile] zamotivator.livejournal.com 2010-03-09 09:50 am (UTC)(link)
Батарейки собираются omake, и как минимум для этого omake нужен.
+ он мне больше ocamlbuild нравится.

Дальше, что значит "неподдерживаемый"? Разрабатывается аж с 2004 года, солидная история релизов и багфиксов, есть пакеты под все платформы, что с ним не так?

Ну вот я не смог собрать вместе ocaml, ocamlfind, omake под mingw так, чтобы они заработали.
Пришлось собирать всё тоже самое под cygwin, всё из сорцов.
+ вылезли грабли с camomile.
Когда попробую ещё раз попозже, и отпишусь про конкретные проблемы

[identity profile] ygrek.myopenid.com (from livejournal.com) 2010-03-09 10:06 am (UTC)(link)
Насчёт "неподдерживаемый" скорее субъективно, когда я хотел его пощупать - все ссылки на скачивание были дохлые. А omake в батарейках это какая-то диверсия, изначально оно камлобилдом собиралось, странно.

А зачем пересобирать ocaml и omake когда они в бинарниках есть? Конкретно в тулчейне проблем не должно быть, но в общем согласен - большинство камловых библиотек обычно не собираются с полпинка в каждом из портов (cygwin/mingw/msvc). Это легко понять так как кому охота всё это тестировать, а во-вторых повальная любовь к хитровывернутым bash-скриптам. Вот камлобилд тем и хорош что даёт некий общий базис и "из коробки".

[identity profile] zamotivator.livejournal.com 2010-03-09 10:41 am (UTC)(link)
А зачем пересобирать ocaml и omake когда они в бинарниках есть? Конкретно в тулчейне проблем не должно быть, но в общем согласен - большинство камловых библиотек обычно не собираются с полпинка в каждом из портов (cygwin/mingw/msvc). Это легко понять так как кому охота всё это тестировать, а во-вторых повальная любовь к хитровывернутым bash-скриптам. Вот камлобилд тем и хорош что даёт некий общий базис и "из коробки".
Как минимум, нужно чтобы ocamlfind смотрел "куда надо".
Подробно проблемы не помню, когда вернусь к этой теме - отпишусь подробней.

[identity profile] gds.livejournal.com 2010-03-09 10:10 am (UTC)(link)
проблема с omake в том, что нет официальной версии под mingw (мои патчи -- не официальная версия). Другая проблема -- багфиксы распространяются в виде патчей, у каждой ОС свои (например, в бсд багфиксы лежат в портах). Последний релиз -- 2007г, но не из-за того, что omake идеально работает -- так как работает omake не идеально, видимо есть другие причины не выпускать новые версии.
Кроме того, ocamlbuild включён в дистрибутив окамла, что означает его кошерность (его будут допиливать, так или иначе).

[identity profile] gds.livejournal.com 2010-03-09 09:50 am (UTC)(link)
под mingw+msys без cygwin -- всё есть (с omake натрахался вприсядку, вспомню -- вздрогну), но без батареек пока, ибо и мне лично не надо было, и никому из знакомых не надо было. Так-то, конечно, могу добавить и батарейки.
Но засада в том, что я вон попробовал своё оверблд на нетбуке завести, и что-то не завелось сходу (отвалилось в линковке с tcl/tk, но, чувствую, проблема глобальнее), и руки не доходили разобраться (как и сейчас не особо доходят, впрочем).
А у одного знакомого вроде как завелось замечательно, да и на локально-доступных мне компах проблем не замечал. Так что стоит попробовать, вот внешние зависимости (если не страшно, то тривиальная инструкция по сборке там рядом).

Сборку окамла падвенду осуществляю msys'овским башем.

Насчёт эрланга -- агаа :) Но там не всё так идеально, и нужно просто посмотреть, устраивает ли. А так -- оно вполне живое.

[identity profile] zamotivator.livejournal.com 2010-03-09 10:03 am (UTC)(link)
Надо бы это хозяйство всё доупаковывать, чтобы получить инсталлятор аля cygwin под венду и набор пакетов аля GODI/dpkg/apt под динукс....

[identity profile] gds.livejournal.com 2010-03-09 10:16 am (UTC)(link)
я-то из-под полы раздавал это хозяйство в виде бинарных билдов, но, так как патчу компилятор, это является нарушением лицензии. А без патченья компилятора не знаю, как завести ocamlnet/mingw, например. И смысла в том оверблде будет почти ноль.
Если бы не лицензия, всё было бы сильно проще. Сейчас это хозяйство представляет собой максимально простой способ распространять окамл и библиотеки без нарушений.

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