Scala

Nov. 6th, 2012 04:15 am
metaclass: (Default)
[personal profile] metaclass
Читаю книжку Одерского, до основной шизы еще не добрался, но такое ощущение, что в скале чрезмерно много синтаксического сахара. Типа "тут вы можете скобки опустить, а тут вместо скобок использовать фигурные скобки, а тут мы прямо в параметрах класса сделаем их полями, а в 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 еще приделает макросы - и совсем хорошо станет.

Date: 2012-11-07 06:32 pm (UTC)
From: [identity profile] isorecursive.livejournal.com
@ Такое делают все, кто хочет разобраться с ленивыми вычислениями
Просто в других энергичных языках для этого надо будет всюду ручками писать delay/force.

@ С помощью такого приема вы не сделаете их без переписывания.
Сделаем: http://www.scalakata.com/509aa82be4b093f3524f3a16

Date: 2012-11-07 07:10 pm (UTC)
From: [identity profile] thesz.livejournal.com
>Сделаем

Это и называется "переписать все".

>Просто в других энергичных языках для этого надо будет всюду ручками писать delay/force.

В C# точно нет.

Date: 2012-11-07 07:33 pm (UTC)
From: [identity profile] isorecursive.livejournal.com
@ Это и называется "переписать все".
Не понял. Если речь о "~>", его семантика не изменилась - просто я нашёл более краткий синтаксис, который захватывает отложенную инициализацию, которую я делал вручную.
Updated: а, понятно. Я сначала подумал, что под переписыванием подразумевается мутабельность на завязывании узлов. Но в текущем смысле, это какое-то странное замечание. Вы разве не вкурсе, что в хаскеле любую структуру данных реализуют отдельно в энергичном и ленивом вариантах c полным переписыванием?

@ В C# точно нет.
В C# первый пример кода выглядел бы примерно так:
int lazyInR(int x, Lazy[int] y) = {
  var a = x + 5 * y.Value
  var b = y.Value - 5 * x
  return a * b
}

Lazy[int] x = new Lazy[int](() => {
  Console.WriteLine("I'm printed once!");
  return 2;
});

lazyInR(1, x)

То есть, вручную надо погружать термы типа T в Lazy[T], и вручную вызывать Value.
Edited Date: 2012-11-07 07:42 pm (UTC)

Date: 2012-11-07 07:47 pm (UTC)
From: [identity profile] thesz.livejournal.com
>Вы разве не вкурсе, что в хаскеле любую структуру данных реализуют отдельно в энергичном и ленивом вариантах c полным переписыванием?

Да вы что! Прямо-таки любую?

Вот моё эссе на эту тему: http://thesz.livejournal.com/906786.html

Сделать тип энергичным можно более простым способом, чем сделать его ленивым.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 3rd, 2025 12:33 am
Powered by Dreamwidth Studios