metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-09-03 09:31 pm
Entry tags:

Привет из 80х годов прошлого века

Вспомнил один срач на тему однопроходных компиляторов, где Steve Yegge критиковал Clojure за то, что в ней объявления видны не во всем модуле, а только ниже объявления. (Ну, за исключением declare которые что-то вроде forward-объявлений).
Сижу приделываю новую фичу к кодогенератору на F# - и таки внезапно оказывается, что это не только в Clojure, но так же и F#, и, что самое печальное, - в долбаном SQL, который я генерирую.
Сижу вот, сортирую объекты из которых генерируется SQL по зависимостям.

А как с этим дела обстоят в Scala?
Я тут подумываю, что надо бы провести сравнение F# и Scala на моих задачах, все равно уже полная работа JVM и жаб, так может, выводилка типов в Scala для меня окажется более приемлемой, чем дикий ад в F# (теперь я понимаю, почему его [livejournal.com profile] thesz критикует). Ну и макросы в скале [livejournal.com profile] xeno_by прикрутил вроде уже.
Хотя единственное, что мне приходит в голову на тему приличного использования макросов - это при их выполнении долбится в БД или модель этой БД и генерировать код.
(deleted comment) (Show 1 comment)

[identity profile] prote-je-moi.livejournal.com 2012-09-03 07:20 pm (UTC)(link)
пуся, да адахни ты уже. иди лучше посмотри, какие я ботиночки купила клёви.

[identity profile] golikov konstantine (from livejournal.com) 2012-09-03 07:21 pm (UTC)(link)
> это при их выполнении долбится в БД или модель этой БД и генерировать код.
знакомься, http://slick.typesafe.com/

[identity profile] max630.livejournal.com 2012-09-03 07:48 pm (UTC)(link)
в ocaml то же самое

[identity profile] max630.livejournal.com 2012-09-03 07:49 pm (UTC)(link)
и даже в хаскеле (!!!), если TH в топлевеле использовать

[identity profile] xeno-by.livejournal.com 2012-09-03 08:36 pm (UTC)(link)
В скале форвард декларации работают в топ левеле и на уровне мемберов класса, но обычно не канают внутри тел методов. Я не знаю спеки на этот счет, но из-за этого пришлось один метод переписать в локальный объект (пример слинкую как приеду домой).

Если надо генерировать классы или методы из макросов, да еще так, чтобы их было видно снаружи, надо ждать января 2013 года. Пока что это не поддерживается по техническим причинам, но в январе у нас дедлайн по тайп макросам, поэтому технические причины к тому времени будут пофикшены. Тогда же скорее всего в транк приземлятся и макро аннотации.

[identity profile] xeno-by.livejournal.com 2012-09-03 08:41 pm (UTC)(link)
Макро аннотации будут в некотором роде как декораторы в питоне, только статически типизированные. Мне кажется весьма полезным. Еще можно делать имплисит макросы для генерации инстансов тайп классов. Аннотации будут только через несколько месяцев, а имплисит макросы должны работать прямо сейчас. Там есть свои проблемы, которые не было времени починит, но тайп классов они не должны коснуться.

[identity profile] xeno-by.livejournal.com 2012-09-03 08:44 pm (UTC)(link)
А да не знаю как с этим в шарпе, но у нас тайп инференс требует вручную написанные сигнатуры для методов.

[identity profile] gds.livejournal.com 2012-09-03 09:42 pm (UTC)(link)
"ниже объявления" -- полезно для rebinding'а и для композиционируемости исходников.

[identity profile] nivanych.livejournal.com 2012-09-05 10:03 am (UTC)(link)
Не в тему, но должно понравиться.
Привет из 50-х годов прошлого века —
http://nag.ru/articles/article/22460/telekomiks-pyatidesyatyie.html