metaclass: (Default)
[personal profile] metaclass
Вспомнил один срач на тему однопроходных компиляторов, где 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)

Date: 2012-09-03 06:39 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Вот, а я только когда в это самое уперся при кодогенерации SQL - дошло таки, что имел в виду Yegge.

И главное ж, ничего не сделаешь - SQL в общем случае не идемпотентен и не является декларативным описанием, в отличие от какого-нибудь кода на C#.

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

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

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

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

Date: 2012-09-03 08:38 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
Там по-другому никак. У них макросы раскрываются в тайпере, а биндинги резолвятся на фазу раньше, в ренеймере. Если бы не этот хак, вообще бы ссылки на топ левел в том же файле не работали. Народ не раз пытался победить, но в третьей папере они просто забили и объявили это фичей.

Date: 2012-09-04 01:40 pm (UTC)
From: [identity profile] migmit.livejournal.com
То бишь, по-русски говоря, монада Q не является инстансом MonadFix.

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

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

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

Date: 2012-09-03 08:55 pm (UTC)
From: [identity profile] theiced.livejournal.com
а вот вы лучше объясните нахуя скала если есть кложура. ну мне так, интересно.

Date: 2012-09-03 09:07 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Ломается при рефакторинге. Без типизации в проектах со сложными структурами данных будет жопа.

Date: 2012-09-04 03:06 pm (UTC)
From: [identity profile] nivanych.livejournal.com
А в зависимо-типовых можно относительно недорого иметь _гарантию_ корректности рефакторинга.

Date: 2012-09-03 09:24 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
вероятно потому что полезная система типов (аргументы за и против типизации я приводить здесь не буду) + лично мне нравится как сделана модульность. я немного писал в каментах к недавнему посту Димы: http://my-clojure.blogspot.ch/2012/09/clojure-1-2012.html и у себя в ЖЖ.

впрочем я с clojure глубоко не разбирался, поэтому мое мнение наверняка неполное. если вы ребе смотрели в сторону скалы, будет интересен ваш взгляд. вот мне в лиспах нравится репл в живую программу. это классно. еще со мной можно на ты, если так будет удобнее.

Date: 2012-09-03 10:06 pm (UTC)
From: [identity profile] golikov konstantine (from livejournal.com)
если правильно понимаю, но того же самого можно достичь используя костыли -- jrebel
но если не прав, поправьте
Edited Date: 2012-09-03 10:07 pm (UTC)

Date: 2012-09-03 10:12 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
я если честно jrebel не юзал никогда, поэтому не могу ничего сказать. кстати что он делает с уже существующими в памяти объектами измененных классов? (с надеждой) прозрачно подменяет класс на новый?

Date: 2012-09-03 10:44 pm (UTC)
From: [identity profile] golikov konstantine (from livejournal.com)
уже инстанциированные объекты ведут себя как старый класс, новые объекты ведут себя как новый подгруженный класс

Date: 2012-09-19 07:48 pm (UTC)
From: [identity profile] anton-arhipov.livejournal.com
неверно. уже существующие экземпляры получают то же самое поведение, т.е новые методы и константы будут доступны всем.
новые поля в существующих объектах не будут проинизиализированы только, тк jrebel не перезапускает конструктор

Date: 2012-09-19 09:13 pm (UTC)
From: [identity profile] golikov konstantine (from livejournal.com)
спасибо за исправление

хотел спросить когда можно будет перегружать суперклассы, а вы оказывается уже это поправили в новом jrebel'е
прямо вау-вау

Date: 2012-09-20 04:56 am (UTC)
From: [identity profile] anton-arhipov.livejournal.com
супер классы сейчас не перегружаются

видимо у вас небольшое приложение, и сервер сам перезагрузил его так что вы не заметили.

Date: 2012-09-04 06:28 am (UTC)
From: [identity profile] theiced.livejournal.com
я считаю статическую типизацию объективным злом.

Date: 2012-09-04 07:00 am (UTC)
From: [identity profile] xeno-by.livejournal.com
а что насчет остального, если есть желание прокомментировать?

Date: 2012-09-04 01:41 pm (UTC)
From: [identity profile] migmit.livejournal.com
> я считаю ... объективным ...

Взаимоисключающие параграфы.

Date: 2012-09-05 05:30 am (UTC)
From: [identity profile] blackyblack.livejournal.com
+1. Но в то же время я считаю кложурь объективным говном.

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

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

Date: 2012-09-03 09:52 pm (UTC)
From: [identity profile] golikov konstantine (from livejournal.com)
и оно же с пояснениями

http://stackoverflow.com/questions/12184997/scala-and-forward-references

Date: 2012-09-03 09:57 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
ага, есть такое. но это только для валов

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

Date: 2012-09-05 12:56 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Я ебошу на трех работах, чтобы накопить бабла на упомянутый там RF-frontend.
Вернее, чтобы его покупка не была большим ударом по семейному бюджету :)

Date: 2012-09-05 01:04 pm (UTC)
From: [identity profile] berezovsky.livejournal.com
На каких таких трёх работах?

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 4th, 2025 09:13 pm
Powered by Dreamwidth Studios