![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Вышла Scala 2.
Теперь она поддерживает примитивный двумерный синтаксис:
Появились нормальные for-comprehensions:
Параметры классов теперь можно явно описывать как имеющие только getter (val) или также и setter (var) методы:
Изменениям также подверглись mixins.
Но больше всего мне понравились implicit parameters и flexible typing of pattern matching с case classes, которые позволяют делать на Scala что то вроде Haskell classes и ADT.
Теперь она поддерживает примитивный двумерный синтаксис:
def foo(x: int) = {
val y = x * x
println("square is " + y)
y
}
Появились нормальные for-comprehensions:
def threeDice = {
val roll = List.range(1,6)
for {
val x <- roll
val y <- roll
val z <- roll
x >= y
y >= z
} yield Triple(x,y,z)
}
Параметры классов теперь можно явно описывать как имеющие только getter (val) или также и setter (var) методы:
class C(x: int, val y: String, var z: List[String])
val c = new C(1, "abc", List())
c.z = c.y :: c.z
Изменениям также подверглись mixins.
Но больше всего мне понравились implicit parameters и flexible typing of pattern matching с case classes, которые позволяют делать на Scala что то вроде Haskell classes и ADT.
no subject
Date: 2006-03-31 03:38 am (UTC)no subject
Date: 2006-03-31 07:46 am (UTC)Вот их пример (реализация loop/unless):
Создаем класс - оболочку для нашей конструкции с методом unless.
Теперь к экземпляру этого класса можно обращаться obj unless cond.
Выставляем наружу интерфейс для этого класса, которая, собственно, и выглядит как конструкция.
Теперь obj = loop body будет создавать экземпляр нашего класса.
А вот и использовании - здесь ничего уже не торчит и все выглядит как одна конструкция.
Если же мы захотим генерить код во время компиляции - то тут пока ничего нет, к сожалению.
Но я и этому рад - для JVM не так уж много ФЯ есть, а хороших и вообще раз-два и обчёлся.
no subject
Date: 2006-03-31 10:37 am (UTC)Пока всё что приходит на ум укладывается в infix/postfix и closures.
Единственное, что вызывает подозрение, это то, что dsl в принципе могут быть очень извращенскими чтобы уложиться в эту схему.
Вот может быть это:
Обычно конечно разбивают на 3 инфиксных оператора, но ведь это можно мыслить и как тернарный предикат.
То, что для JVM мало хороших ФЯ согласен абсолютно. Прям беда :-)
no subject
Date: 2006-03-31 12:21 pm (UTC)А так - насчет
a < x < b
согласен - хороший пример.А JVM мое больное место в силу специализации :-(
no subject
Date: 2006-04-01 07:31 am (UTC)% У меня тоже JVM - больное место.
no subject
Date: 2006-04-06 04:27 am (UTC)ну и там конечно синтаксис тоже этот ...
лучше я буду CL со схемой на JVM пользовать, если вообще конечно придется что-то еще :)
no subject
Date: 2006-04-07 07:18 am (UTC)А где CL на JVM? Я что то такого не встречал.
no subject
Date: 2006-04-07 07:22 am (UTC)и на нем кстати написан хороший текст. редактор
http://armedbear-j.sourceforge.net/
no subject
Date: 2006-04-07 07:32 am (UTC)