![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Читаю книжку Одерского, до основной шизы еще не добрался, но такое ощущение, что в скале чрезмерно много синтаксического сахара. Типа "тут вы можете скобки опустить, а тут вместо скобок использовать фигурные скобки, а тут мы прямо в параметрах класса сделаем их полями, а в multiline string literal вы можете сделать отступ и stripMargin" и прочая и прочая в том же духе.
Основное из этого, видимо - function literals и вызов методов в стиле a methodName b, без точек и скобок, что делает код более лаконичным, одновременно позволяя при желании превратить код в нечитабельный ад.
Заодно по наводке
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
По-моему, это уже достаточно сложно, чтобы увлечь психов и стать новыми крестиками. Вот
xeno_by еще приделает макросы - и совсем хорошо станет.
Основное из этого, видимо - function literals и вызов методов в стиле a methodName b, без точек и скобок, что делает код более лаконичным, одновременно позволяя при желании превратить код в нечитабельный ад.
Заодно по наводке
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Примеры там, конечно, знатный abuse возможностей языка и вычислений на типах, типа extraction-директив с HList в качестве параметра типа.
Clojure по сравнению с этим выглядит более простой и логичной, хотя я не уверен, можно ли сравнивать совершенно разные языки, общего у которых только функциональщина и иммутабельность иногда.
PS: Вот, к примеру:
https://github.com/spray/spray/blob/master/docs/documentation/spray-routing/code/docs/HttpServiceExamplesSpec.scala
В SimpleService HttpResponse реализован как html-код написанный прямо внутри скала-кода.
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]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
no subject
Date: 2012-11-06 02:00 am (UTC)no subject
Date: 2012-11-06 05:03 am (UTC)no subject
Date: 2012-11-06 08:34 am (UTC)no subject
Date: 2012-11-06 05:43 am (UTC)Ну, по сравнению с лиспами, согласен.
@ вызов методов в стиле a methodName b, без точек и скобок,
Я для себя решил использовать это, если methodName match {
case [слово] (например, "getOrElse") => только в тривиальных выражениях (например, состоящих из одной аппликации)
case [оператор] (например, ">>", "+", "<*>") => всегда
}
@ По-моему, это уже достаточно сложно, чтобы увлечь психов и стать новыми крестиками
В крестиках же нет ничего прогрессивного и полезного. Там "психи" делают тривиальные вещи замороченными трюками.
По мне, если что-то сложное используется для решения каких-то сложных задач - это нормально, если для простых - изврат.
@ type-infix-operators
Есть в хаскеле и, можно сказать, во всех ml-подобных функциональных языках ("->" в "f: a -> b").
@ implicit evidence
Конструктивный теорем-прувинг по Карри-Говарду аля Агда. Это же хорошо, что такие вещи потихоньку начинают внедрять ИРЛ.
Да и вообще, хаскельные тайпклассы и агдовые/скальные имплициты - это (наконец-то) использование типов для более интересных вещей чем просто статическая верификация структурных инвариантов.
no subject
Date: 2012-11-06 06:18 am (UTC)уно) http://yz.mit.edu/wp/true-scala-complexity/
дос) http://www.reddit.com/r/haskell/comments/zxcks/haskell_vs_f_vs_scala_a_highlevel_language/c68ybn1
no subject
Date: 2012-11-06 08:39 am (UTC)Есть куча высказываний на тему "я попытался сделать в Скале как в Хаскелле и получилась какая-то фигня". Эти высказывания многими считаются критикой Скалы. Но в обратную сторону это почему-то не работает. "Я попытался сделать в Хаскелле трейты как в Скале и получилась какая-то фигня" - такого в интернетах не видел ни разу.
no subject
Date: 2012-11-06 09:20 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-11-06 06:24 am (UTC)no subject
Date: 2012-11-06 07:41 am (UTC)(no subject)
From:no subject
Date: 2012-11-06 08:42 am (UTC)Также интересно, что ты думаешь про трейты в общем смысле и про кейк-паттерн в частности. Были ли бы они для тебя полезны? Есть ли для них аналог в восьмой джаве?
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Насчет сложности Скалы и причем здесь макросы
Date: 2012-11-06 08:33 am (UTC)no subject
Date: 2012-11-06 08:34 am (UTC)no subject
Date: 2012-11-06 10:06 am (UTC)Something(...) это вызов метода apply на companion object
Something(...) = ... это вызов метода update на companion object
Map(1 => 2, 3 => 4) опять же не какой-то особый синтаксис, 3 => 4 это 3.=>(4), который возвращает tuple (3,4)
И так далее, можно продолжать
no subject
Date: 2012-11-06 10:14 am (UTC)основательная такая хрень получилась
no subject
Date: 2012-11-06 05:52 pm (UTC)Map(1 -> 2, 3 -> 4)
"=>" это про другое
(no subject)
From:no subject
Date: 2012-11-06 10:07 am (UTC)no subject
Date: 2012-11-06 10:16 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2012-11-15 04:46 am (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-11-06 11:02 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-11-06 06:24 pm (UTC)можно вот тут поподробней?
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-11-06 01:41 pm (UTC)ну если сравнивать с AST-дампом компилятора в виде S-выражений, то да, действительно много:)
а если с каким-нибудь хипсторуби - то вполне ок
no subject
Date: 2012-11-06 01:45 pm (UTC)no subject
Date: 2012-11-06 02:22 pm (UTC)no subject
Date: 2012-11-06 02:25 pm (UTC)no subject
Date: 2012-11-07 08:38 am (UTC)Scala: Call-by-Need
Date: 2012-11-07 03:57 pm (UTC)