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] metaclass.livejournal.com 2012-11-07 10:34 am (UTC)(link)
А что будет, если есть два импортированных класса с операторами &&& и implicit-конверсией - какой из них используется в этом случае?

[identity profile] isorecursive.livejournal.com 2012-11-07 11:02 am (UTC)(link)
Если подходит первый (по типами и сигнатуре), то он, если нет - будет попытка использовать конверсию.
И это, наверное, самый сложный и хитрый момент в имплицитных конверсиях. По мне, лучше воздерживаться от них, и использовать только обогащения (новые implicit class, но их пока нет на scalakata), и только такие, которые не создают конфликтов имён.
И самое плохое в имплицитных конверсиях, что люди думают, будто имплицитные значения (type-directed скоупинг) - что-то близкое по духу, и тоже стрёмное.

[identity profile] xeno-by.livejournal.com 2012-11-07 11:31 am (UTC)(link)
+1 про implicit vals

[identity profile] xeno-by.livejournal.com 2012-11-07 11:31 am (UTC)(link)
Если подходят оба, будет ошибка компиляции.

[identity profile] thesz.livejournal.com 2012-11-11 01:34 am (UTC)(link)
Язык Ада, в прямом и переносном смысле этого слова. В Аде точно такие же правила.

[identity profile] xeno-by.livejournal.com 2012-11-11 08:25 am (UTC)(link)
В переносном смысле вы имеете ввиду, что это что-то плохое?

[identity profile] thesz.livejournal.com 2012-11-11 10:09 am (UTC)(link)
Да.

Я писал разбор VHDL и писал на нем самом. VHDL это суперсет первой Ады.

[identity profile] xeno-by.livejournal.com 2012-11-11 10:12 am (UTC)(link)
Про имплиситы мы когда-то обсуждали с уважаемым [livejournal.com profile] tonsky: http://tonsky.livejournal.com/264738.html?thread=2082338#t2082338. Интересно, сохраните ли вы свое мнение о них с учетом слинкованной дискуссии.

[identity profile] thesz.livejournal.com 2012-11-11 11:04 am (UTC)(link)
Мнение сохраню, конечно же. Ибо я эту дискуссию читал.

Неявное преобразование с наличием подтипов не вызывает у меня никакой симпатии вообще.

Опять же, это решение проблем Java, не проблем программирования.