lomeo: (лямбда)
Из дискуссии с [livejournal.com profile] sassa_nf.

В java локальные переменные метода не собираются сборщиком мусора, пока мы не выйдем из метода (наверх, разумеется, а не глубже). Это важно, потому что Scala'вские Stream из-за этого часто становятся бесполезны.

Вот имеем мы некий Stream, который любят сравнивать с Haskell'евским списком. И начинаем его обрабатывать. А обработка через некоторое время завешается с OutOfMemoryError:
val messages = Stream continually nextMessage
for (message <- messages) doSomething(message)

А теперь перепишем это так:
for (message <- Stream continually nextMessage) doSomething(message)

и обработка у нас будет вестись вечно.

А всё потому, что первый способ генерит astore, который создаёт локальную переменную. А второй — нет.

UPD: [livejournal.com profile] sassa_nf всё же заставил java работать правильно. За что ему отдельное спасибо!

Scala 2

Mar. 30th, 2006 03:11 pm
lomeo: (лямбда)
Вышла Scala 2.
Теперь она поддерживает примитивный двумерный синтаксис:

    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.

Profile

lomeo: (Default)
Dmitry Antonyuk

December 2015

S M T W T F S
  12345
6789101112
131415 16171819
20212223242526
2728293031  

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 24th, 2017 03:54 pm
Powered by Dreamwidth Studios