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

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

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

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-06 09:33 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-06 09:57 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-06 11:11 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-06 11:13 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-06 17:00 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 08:03 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 09:51 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 11:04 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-11 01:30 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 08:26 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-11-06 10:15 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-06 11:03 (UTC) - Expand

(no subject)

[identity profile] udpn.livejournal.com - 2012-12-17 15:49 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-12-17 20:25 (UTC) - Expand

(no subject)

[identity profile] udpn.livejournal.com - 2012-12-18 10:51 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-12-18 11:53 (UTC) - Expand

(no subject)

[identity profile] udpn.livejournal.com - 2012-12-19 11:06 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-12-19 12:19 (UTC) - Expand

(no subject)

[identity profile] udpn.livejournal.com - 2012-12-19 19:48 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-12-19 20:24 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-12-19 20:37 (UTC) - Expand

(no subject)

[identity profile] sum-erman.livejournal.com - 2012-11-06 10:05 (UTC) - Expand

(no subject)

[identity profile] udpn.livejournal.com - 2012-12-19 11:29 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-12-19 11:32 (UTC) - Expand

(no subject)

[identity profile] udpn.livejournal.com - 2012-12-19 12:16 (UTC) - Expand

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

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

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-06 13:05 (UTC) - Expand

(no subject)

[identity profile] stdray.livejournal.com - 2012-11-06 20:04 (UTC) - Expand

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

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

[identity profile] golikov konstantine (from livejournal.com) 2012-11-06 05:52 pm (UTC)(link)
Вообще Map(1 => 2, 3 => 4) не сработает

Map(1 -> 2, 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:16 am (UTC)(link)
я приятно удивился, что он там вобще есть, но конечно с эрланговским pattern matching ему не сравнится

(no subject)

[identity profile] golikov konstantine - 2012-11-06 18:10 (UTC) - Expand

(no subject)

[identity profile] golikov konstantine - 2012-11-06 18:30 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-06 21:13 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-11-06 21:22 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-06 21:28 (UTC) - Expand

(no subject)

[identity profile] golikov konstantine - 2012-11-06 22:45 (UTC) - Expand

(no subject)

[identity profile] andy legkiy - 2012-11-06 23:19 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 08:23 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-07 08:37 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 08:52 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-07 09:00 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 09:33 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-07 09:46 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 10:01 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 10:32 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 11:22 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-07 12:36 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 13:54 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-07 12:38 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 13:53 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-11-07 14:12 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 14:29 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 16:09 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 19:10 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-07 19:47 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-09 04:20 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-09 09:25 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-10 09:37 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-10 10:45 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-11 00:57 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-11 01:23 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-11 03:10 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-11 10:04 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-11 03:31 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-11 10:18 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-12 05:47 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-12 06:27 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-12 08:55 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-12 09:00 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-12 11:46 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-12 19:25 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-13 02:23 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-11-13 04:19 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-14 03:46 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-11-14 08:21 (UTC) - Expand

(no subject)

(Anonymous) - 2012-11-15 04:46 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-11-15 10:21 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-15 12:21 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-11-15 20:44 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-16 02:12 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-11-16 08:31 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-16 09:54 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-11-16 11:00 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-16 11:36 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-11-16 13:08 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-16 13:45 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-11-16 17:47 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-17 03:41 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-11-17 04:05 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-17 07:18 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-11-17 18:01 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-18 04:03 (UTC) - Expand

(no subject)

[identity profile] migmit.livejournal.com - 2012-11-18 11:11 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-25 12:53 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-13 10:20 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-14 03:49 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-14 08:29 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-15 04:54 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-15 08:53 (UTC) - Expand

(no subject)

[identity profile] berezovsky.livejournal.com - 2012-11-15 09:16 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-15 10:54 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-15 12:01 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-11 03:38 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-11 01:29 (UTC) - Expand

(no subject)

[identity profile] valentin budaev - 2012-11-11 03:01 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-11-07 10:34 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-07 11:31 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-07 11:31 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-11 01:34 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-11 08:25 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-11 10:09 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-11 10:12 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-11 11:04 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-06 21:30 (UTC) - Expand

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

(no subject)

[identity profile] sum-erman.livejournal.com - 2012-11-06 11:12 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-06 11:15 (UTC) - Expand

(no subject)

[identity profile] sum-erman.livejournal.com - 2012-11-06 11:22 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-06 11:42 (UTC) - Expand

(no subject)

[identity profile] sum-erman.livejournal.com - 2012-11-06 11:47 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-06 13:07 (UTC) - Expand

(no subject)

[identity profile] sum-erman.livejournal.com - 2012-11-06 13:24 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-06 13:32 (UTC) - Expand

(no subject)

[identity profile] sum-erman.livejournal.com - 2012-11-06 13:37 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-06 13:45 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-06 13:46 (UTC) - Expand

(no subject)

[identity profile] sum-erman.livejournal.com - 2012-11-06 20:46 (UTC) - Expand

(no subject)

[identity profile] xeno-by.livejournal.com - 2012-11-06 13:43 (UTC) - Expand

(no subject)

[identity profile] sum-erman.livejournal.com - 2012-11-06 21:09 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-11-06 13:03 (UTC) - Expand

(no subject)

[identity profile] golikov konstantine - 2012-11-06 17:57 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2012-11-06 22:42 (UTC) - Expand

[identity profile] golikov konstantine (from livejournal.com) 2012-11-06 06:24 pm (UTC)(link)
"а необходимость указывать типы во вложенных функциях"
можно вот тут поподробней?

(no subject)

[identity profile] sum-erman.livejournal.com - 2012-11-06 19:21 (UTC) - Expand

(no subject)

[identity profile] golikov konstantine - 2012-11-06 19:24 (UTC) - Expand

(no subject)

[identity profile] sum-erman.livejournal.com - 2012-11-06 20:23 (UTC) - Expand

[identity profile] v-l-a-d.livejournal.com 2012-11-06 01:41 pm (UTC)(link)
>в скале чрезмерно много синтаксического сахара

ну если сравнивать с AST-дампом компилятора в виде S-выражений, то да, действительно много:)
а если с каким-нибудь хипсторуби - то вполне ок

[identity profile] sum-erman.livejournal.com 2012-11-06 01:45 pm (UTC)(link)
В хипсторуби — меньше

[identity profile] metaclass.livejournal.com 2012-11-06 02:22 pm (UTC)(link)
Вот к руби оно неоправданно близко :)

[identity profile] bydl0coder.livejournal.com 2012-11-06 02:25 pm (UTC)(link)
Все так, но самая главная сложность - сочетание ООП с функциональщиной, тут тебе и обычные классы, и алгебраические типы, и ленивость и хер знает что еще. В руби сахара тоже полно, но там он не мешает, очередной ОО-язык осваивается за неделю.

[identity profile] divine-assass1n.livejournal.com 2012-11-07 08:38 am (UTC)(link)
http://ro-che.info/ccc/17.html :)

Scala: Call-by-Need

[identity profile] livejournal.livejournal.com 2012-11-07 03:57 pm (UTC)(link)
User [livejournal.com profile] isorecursive referenced to your post from Scala: Call-by-Need (http://isorecursive.livejournal.com/1482.html) saying: [...] Во время дискуссии [...]