metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-01-08 07:33 pm
Entry tags:

Знаете ли вы, что

Scala - это Haskell в жабьей шкуре?

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

Язык знатно безумный, я почти Programming in Scala дочитал. И кое-какие вещи там сильно похожи на решение некоторых проблем с наследованием и зависимостями типов друг от друга, которых мне не хватало в дельфи и дотнетах :)

[identity profile] isorecursive.livejournal.com 2013-01-09 06:47 pm (UTC)(link)
Под "a n" я подразумевал всего-лишь взятие элемента массива в ST.

[identity profile] thesz.livejournal.com 2013-01-09 06:51 pm (UTC)(link)
>Just undefined, Just (fix id).

В Scala они ловятся типизацией?.. 8O

[identity profile] thesz.livejournal.com 2013-01-09 06:56 pm (UTC)(link)
В Скале, как я понимаю, можно сделать f x = f (g x), но нельзя сделать f x = g x; g x = f x.

Первое - хвостовая рекурсия, второе - хвостовой вызов.

[identity profile] thesz.livejournal.com 2013-01-09 07:30 pm (UTC)(link)
Это вообще делается комбинаторами, если часто делается.

Не забывайте, Хаскель ленивый по умолчанию. Поэтому гораздо более ссылочно прозрачный, чем Scala.

[identity profile] golikov konstantine (from livejournal.com) 2013-01-09 09:00 pm (UTC)(link)
String with NotNull кстати не даст ли кучу анонимных классов?

[identity profile] dmytrish.livejournal.com 2013-01-09 09:24 pm (UTC)(link)
+1

В Скале много плюшек, это да, но неструктурированность фич и возможность писать как угодно, в том числе и в хардкорном ООП-стиле, делают ее подозрительно похожей на С++. Впрочем это мое любительское мнение.

[identity profile] permea-kra.livejournal.com 2013-01-09 10:32 pm (UTC)(link)
нет. TCO-это оптимизация хвостового вызова, он не обязательно рекурсивный. Группой взаимно рекурсивных функций, например, удобно парсер записывать.

[identity profile] thedeemon.livejournal.com 2013-01-10 03:36 am (UTC)(link)
Часто макросы используете?

[identity profile] Игорь Петров (from livejournal.com) 2013-01-10 07:34 am (UTC)(link)
Они там появились, если я ничего не путаю, в 2.10, т.е. 4 дня назад.

[identity profile] Игорь Петров (from livejournal.com) 2013-01-10 07:41 am (UTC)(link)
Implicits - да полезно, а про синтаксис - это шутка?
Нет, не соглашусь, синтаксис хаскеля намного лучше, с-образный синтаксис вообще для языков с фя-элементами не подходит (про полноценные фя я и не говорю).

[identity profile] thedeemon.livejournal.com 2013-01-10 07:53 am (UTC)(link)
Вот и мне так казалось. Хотя побаловаться с ними энтузиасты могли и до релиза.

[identity profile] dmzlj.livejournal.com 2013-01-10 02:10 pm (UTC)(link)
лучше найдите меня, я как раз учусь доказывать, что хаскелл это такой питон.
на сдачу докажу, что скала это такая жаба (и, следовательно, не нужна)

[identity profile] dmzlj.livejournal.com 2013-01-10 02:12 pm (UTC)(link)
+2

[identity profile] isorecursive.livejournal.com 2013-01-10 07:32 pm (UTC)(link)
Я пока так и не понял, в чём суть вопроса, потому отвечать буду по наиболее вероятному предположению:
макросы нужны не только для тех вещей, которые можно было встроить в компилятор, и даже для этих, я думаю,
решение с их использованием может быть (например, если в компиляторе это всё делалось отдельными фазами, или плагинами, опирающимися на их порядок, и вынужденными думать, как не испортить при обработке предположения о коде следующей фазы и т.д.) существенно выигрышнее, чем реализация того же в компиляторе. То есть, макросы можно рассматривать и как модульные расширения компилятора, абстрагированные до уровня кода. Я слышал, что некоторые вещественные доказательства такой выигрышности уже есть, и знаю, что ещё несколько находятся в процессе разработки. Из юзкейсов макросов, которые вообще никак не могли быть учтены в хост-языке, наиболее очевидные - пользовательские оптимизации и вложения разной глубины подъязыков, всяческих логик и систем типов. Вкладываемость только на очень-очень поверхностном и стартовом уровне захватывается всякими RebindableSyntax.

[identity profile] isorecursive.livejournal.com 2013-01-10 07:36 pm (UTC)(link)
В этом есть доля шутки, но что касается лямбда-блоков(кроме Scala такое ещё имеется в Ruby), тут я на полном серьёзе считаю, что это большой выигрыш конкретно для ФП блокового синтаксиса по сравнению с отступным. В хаскеле, конечно, добавили недавно LambdaCase, но оно реабилитирует только часть преимуществ, которая не связана непосредственно с блоковостью.

[identity profile] kurilka.livejournal.com 2013-01-10 07:46 pm (UTC)(link)
Дак насколько часто-то?

[identity profile] isorecursive.livejournal.com 2013-01-10 08:12 pm (UTC)(link)
Ну вот в одном хобби-проекте вся суть в том, чтобы их заиспользовать для лучшей реализации продолжений.
В другом есть планы поэкспериментировать с развязанными модульными вложениями statement-абстракторов аля do и proc и вообще подъязыков, когда разберусь с тем, как там всё оттипизировать.

[identity profile] isorecursive.livejournal.com 2013-01-10 08:29 pm (UTC)(link)
Если точнее, по итогам последней недели, в среднем получается 1.4 макроса в день.

[identity profile] thesz.livejournal.com 2013-01-10 09:02 pm (UTC)(link)
Это означает, что вы используете язык низкого уровня.

(см. Мифический Человеко-Месяц)

[identity profile] isorecursive.livejournal.com 2013-01-10 09:15 pm (UTC)(link)
Это может означать что-угодно, потому я и пытался искать какой-то метафорический смысл в изначальном вопросе.
В данном случае это значило, что несколько макросов я написал чтобы прощупать некоторые аспекты,
а ещё пару - для проекта, который заключается в том, чтобы заменить компиляторный плагин решением на макросах.

[identity profile] thesz.livejournal.com 2013-01-10 09:18 pm (UTC)(link)
То есть, МЧМ вы не читали. Поздравляю.

[identity profile] isorecursive.livejournal.com 2013-01-10 09:29 pm (UTC)(link)
Обязательно почитаю, спасибо за совет. На всякий случай, если мне посчастливилось угадать отсылку
по описанному в вики закону: замена готового и работающего на альтернативное, но лучшее - это всё-таки другое.

[identity profile] thesz.livejournal.com 2013-01-10 09:55 pm (UTC)(link)
Нет.

Если вам требуется метапрограммирование, то ваш инструмент слишком низкого уровня.

[identity profile] isorecursive.livejournal.com 2013-01-11 07:08 pm (UTC)(link)
Если речь идёт о реализации языковой фичи, это будет в любом случае метапрограммирование, просто можно жонглировать AST в компиляторе, жестко завязываясь на его инфраструктуру и правила игры, а можно этим заниматься сбоку при помощи макросов.
Кстати, если "мета" понимать в более общем смысле, например, как в понятии "метаматематика" или "металогика", то, например, всякие паттерны вроде функторов и монад - тоже вполне метапрограммирование. Просто не символьное а структурное.

[identity profile] thesz.livejournal.com 2013-01-11 08:23 pm (UTC)(link)
Я десяток EDSL реализовал на Хаскеле, не используя макросов. Что я делаю не так?

Page 3 of 4