metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-11-06 04:15 am
Entry tags:

Scala

Читаю книжку Одерского, до основной шизы еще не добрался, но такое ощущение, что в скале чрезмерно много синтаксического сахара. Типа "тут вы можете скобки опустить, а тут вместо скобок использовать фигурные скобки, а тут мы прямо в параметрах класса сделаем их полями, а в multiline string literal вы можете сделать отступ и stripMargin" и прочая и прочая в том же духе.
Основное из этого, видимо - function literals и вызов методов в стиле a methodName b, без точек и скобок, что делает код более лаконичным, одновременно позволяя при желании превратить код в нечитабельный ад.

Заодно по наводке [livejournal.com profile] jdevelop глянул на http://spray.io/ https://github.com/spray/spray/wiki
Примеры там, конечно, знатный abuse возможностей языка и вычислений на типах, типа extraction-директив с HList в качестве параметра типа.

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

PS: Вот, к примеру:
https://github.com/spray/spray/blob/master/docs/documentation/spray-routing/code/docs/HttpServiceExamplesSpec.scala

В SimpleService HttpResponse реализован как html-код написанный прямо внутри скала-кода. Сижу уже 30 минут ищу, где это преобразование реализовано и как. Т.е. не видя отдельных литералов и их типов (которые без загрузки всего оного кода с зависимостями в IDE/интерпретатор еще и не увидишь), с ходу догадаться, что происходит, достаточно сложно. XML literals, встроенные в язык и где-то implicit для конверсии.

PPS: implicit evidence:
http://jim-mcbeath.blogspot.com/2008/11/scala-type-infix-operators.html
http://stackoverflow.com/questions/3427345/what-do-and-mean-in-scala-2-8-and-where-are-they-documented

По-моему, это уже достаточно сложно, чтобы увлечь психов и стать новыми крестиками. Вот [livejournal.com profile] xeno_by еще приделает макросы - и совсем хорошо станет.

[identity profile] berezovsky.livejournal.com 2012-11-06 02:00 am (UTC)(link)
охх

[identity profile] thedeemon.livejournal.com 2012-11-06 05:03 am (UTC)(link)
Что скала - это такой С++ для JVM, давно уже говорят. И еще больше будут. Нагромождение фич не способствует простоте.

[identity profile] isorecursive.livejournal.com 2012-11-06 05:43 am (UTC)(link)
@ в скале чрезмерно много синтаксического сахара
Ну, по сравнению с лиспами, согласен.

@ вызов методов в стиле a methodName b, без точек и скобок,
Я для себя решил использовать это, если methodName match {
case [слово] (например, "getOrElse") => только в тривиальных выражениях (например, состоящих из одной аппликации)
case [оператор] (например, ">>", "+", "<*>") => всегда
}

@ По-моему, это уже достаточно сложно, чтобы увлечь психов и стать новыми крестиками
В крестиках же нет ничего прогрессивного и полезного. Там "психи" делают тривиальные вещи замороченными трюками.
По мне, если что-то сложное используется для решения каких-то сложных задач - это нормально, если для простых - изврат.

@ type-infix-operators
Есть в хаскеле и, можно сказать, во всех ml-подобных функциональных языках ("->" в "f: a -> b").

@ implicit evidence
Конструктивный теорем-прувинг по Карри-Говарду аля Агда. Это же хорошо, что такие вещи потихоньку начинают внедрять ИРЛ.
Да и вообще, хаскельные тайпклассы и агдовые/скальные имплициты - это (наконец-то) использование типов для более интересных вещей чем просто статическая верификация структурных инвариантов.
Edited 2012-11-06 06:16 (UTC)

[identity profile] evil-invader.livejournal.com 2012-11-06 06:24 am (UTC)(link)
Согласен. Начал изучать скалу, потому что не хватало функциональщины в джаве (скучно стало, душа просит). Но как только узнал, что собираются добавить в java 8, то теперь уже особой надобности (для себя) в скала я не вижу. Интересная штучка, но не более.

[identity profile] jakobz.livejournal.com 2012-11-06 07:41 am (UTC)(link)
О, почитал. Из Java будут делать C#. Как показывает практика, получается ничего так - ФП не сильно расползается, можно давать индусне.

Насчет сложности Скалы и причем здесь макросы

[identity profile] livejournal.livejournal.com 2012-11-06 08:33 am (UTC)(link)
User [livejournal.com profile] xeno_by referenced to your post from Насчет сложности Скалы и причем здесь макросы (http://xeno-by.livejournal.com/79953.html) saying: [...] ительную реакцию по поводу сложности Скалы. Уважаемые френды отпостились у себя в бложеках: раз [...]

[identity profile] xeno-by.livejournal.com 2012-11-06 08:39 am (UTC)(link)
Спасибо за примеры. Они неплохо подчеркивают то, что я хотел сказать, но не знал в каком контексте это представить.

Есть куча высказываний на тему "я попытался сделать в Скале как в Хаскелле и получилась какая-то фигня". Эти высказывания многими считаются критикой Скалы. Но в обратную сторону это почему-то не работает. "Я попытался сделать в Хаскелле трейты как в Скале и получилась какая-то фигня" - такого в интернетах не видел ни разу.

[identity profile] evil-invader.livejournal.com 2012-11-06 08:40 am (UTC)(link)
Ну так отличненько же. Тем более индусне совсем не обязательно влезать в дебри новых фичь.

[identity profile] xeno-by.livejournal.com 2012-11-06 08:42 am (UTC)(link)
А можно подробнее про что именно впечатлило в джаве 8? Только лямбды или что-то еще?

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

[identity profile] migmit.livejournal.com 2012-11-06 09:20 am (UTC)(link)
Ну, собственно, и "я попытался сделать в C++ как в Хаскелле и получилась какая-то фигня" тоже предостаточно, а вот наоборот - не видел.

[identity profile] xeno-by.livejournal.com 2012-11-06 09:33 am (UTC)(link)
И какой следует вывод?

[identity profile] thesz.livejournal.com 2012-11-06 09:57 am (UTC)(link)
Видимо, что у Хаскеля с типами получше будет?

[identity profile] sum-erman.livejournal.com 2012-11-06 10:05 am (UTC)(link)
Я, как человек не слишком искушённый, совершено не понимаю когда использовать object, когда class, когда abstract class, когда trait, когда наследоваться, когда расширять прямо в new %) Что характерно скала-курс перед подобным выбором не ставит :)
Edited 2012-11-06 10:42 (UTC)

[identity profile] divine-assass1n.livejournal.com 2012-11-06 10:06 am (UTC)(link)
Читаю ту же книгу. Для того, что в скалу насували, нормально получилось. Значительная часть синтаксиса и не синтаксис вовсе, а вызовы методов

Something(...) это вызов метода apply на companion object
Something(...) = ... это вызов метода update на companion object

Map(1 => 2, 3 => 4) опять же не какой-то особый синтаксис, 3 => 4 это 3.=>(4), который возвращает tuple (3,4)

И так далее, можно продолжать

[identity profile] sum-erman.livejournal.com 2012-11-06 10:07 am (UTC)(link)
Сей пост чуть менее чем полностью передаёт мои ощущения от языка. Добавлю что паттерн матчинг в его нынешнем виде неудобен и многословен, а необходимость указывать типы во вложенных функциях это просто садизм :)

[identity profile] divine-assass1n.livejournal.com 2012-11-06 10:14 am (UTC)(link)
впрочем, да, это не лисп :)
основательная такая хрень получилась

[identity profile] migmit.livejournal.com 2012-11-06 10:15 am (UTC)(link)
Что Scala находится примерно на уровне C++.

[identity profile] divine-assass1n.livejournal.com 2012-11-06 10:16 am (UTC)(link)
я приятно удивился, что он там вобще есть, но конечно с эрланговским pattern matching ему не сравнится

[identity profile] xeno-by.livejournal.com 2012-11-06 11:02 am (UTC)(link)
Можете.пожалуйста пояснить что не так с паттерн матчингом?

[identity profile] xeno-by.livejournal.com 2012-11-06 11:03 am (UTC)(link)
Ок

[identity profile] xeno-by.livejournal.com 2012-11-06 11:11 am (UTC)(link)
А я бы сказал, что надо пользоваться идиоматичными конструкциями языка.

[identity profile] sum-erman.livejournal.com 2012-11-06 11:12 am (UTC)(link)
Очень многобуков по сравнению с haskell/erlang, нельзя заматчить например пару(X,X), нету охранных выражений или я просто пока не сталкивался (понять что за шаманство использовано в очередном скало-коде (буквально только что увидел this: Foo with Bar => посреди класса) это песня почище haskell :) )

Page 1 of 7