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] metaclass.livejournal.com 2010-03-09 05:12 am (UTC)(link)
Ну все это - вывод типов, каррирование, функции высшего порядка, паттерн матчинг.
В хаскеле это все гораздо нагляднее и менее многословно.

[identity profile] dmzlj.livejournal.com 2010-03-09 05:18 am (UTC)(link)
Ну и занудности можно сказать, что вывод типов в хаскелле более ограниченный чем в *ML и типы принято указывать, каррирование - это не когда ты что-то пишешь, а наоборот, когда что-то не пишешь. А HOF они на то и HOF, что специального синтаксиса для них не требуется.

Т.е мне наоборот, хаскелл кажется в плане синтаксиса гораздо более развесистым -- там больше всего, в т.ч. разных вещей, что бы сделать одно и то же. let и where блоки, например, когда в ML только let. Или там do и стрелочная нотация. Или разделения ; и отступами. Т.е. напихано в язык прямо всего что бывает.

А ML --- некий голый базис функциональных языков. Как ФЯ не придумывай, ML получается.
Edited 2010-03-09 05:21 (UTC)

[identity profile] lionet.livejournal.com 2010-03-09 05:34 am (UTC)(link)
Ну и занудности можно сказать, что вывод типов в хаскелле более ограниченный чем в *ML и типы принято указывать

Менее ограниченный, чем в *ML. У него более мощная система типов, которая не всегда справляется с выводом (хотя справляется с более широким классом проблем, чем выводилка в том же OCaml), и поэтому [иногда!] требует подсказки.

А ML --- некий голый базис функциональных языков. Как ФЯ не придумывай, ML получается.

SML, да ;) А то в камле тоже много всего напихано, те же streams, ocamlp4, etc.

[identity profile] dmzlj.livejournal.com 2010-03-09 05:43 am (UTC)(link)
Ну э... Система типов богаче, вывод типов --- менее употребим. Это как бы нормально, но писать при этом получается больше. И аннотации типов для функций --- в хаскелле вроде бы и-д-е-о-м-а-т-и-ч-н-ы.

В окамл понапихали, да. Сделали перл.

[identity profile] lionet.livejournal.com 2010-03-09 05:48 am (UTC)(link)
Аннотации типов в хаскеле идиоматичны поскольку документирующие. В окамле без них иногда долго думаешь, о чём это они все. В хаскеле без них можно не хуже чем в окамле — они нужны только там, докуда в окамле вообще даже с аннотациями не доберёшься.

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

[identity profile] metaclass.livejournal.com 2010-03-09 07:13 am (UTC)(link)
Вот F# натурально выглядит как "сделали перл" :)

[identity profile] potan.livejournal.com 2010-03-09 08:31 am (UTC)(link)
bash$ ocaml -rectypes
        Objective Caml version 3.10.2

# type f = f -> int;;
type f = f -> int
# 

[identity profile] awson.livejournal.com 2010-03-09 09:51 am (UTC)(link)
И чо?

[identity profile] ygrek.myopenid.com (from livejournal.com) 2010-03-09 09:38 am (UTC)(link)
Согласен что sml более фундаментальный, но контрпримеры выбраны неудачные.
Те же streams к языку вообще не имеют никакого отношения, это просто внешняя либа. Тот же camlp4 в принципе это просто отдельный препроцессор, и с языком жёстко не связан (что можно наглядно наблюдать на примере camlp5).
Странно вообще, то жалуются что stdlib у камля бедный, то сильно богатый :)

[identity profile] metaclass.livejournal.com 2010-03-09 07:10 am (UTC)(link)
В F# напихан такой боб с горохом, что никакой хаскель не сравнится :)
И в нем и в окамле вроде тоже вообще две варианта синтаксиса.
Типы в хаскеле указываются сильно гуманнее, чем в F# и далеко не всегда нужны.

[identity profile] thesz.livejournal.com 2010-03-11 01:49 am (UTC)(link)
>Как ФЯ не придумывай, ML получается.

У меня, кстати, обычно получается нечто среднее между Хаскелем и Агдой. ;)