TG Telegram Group & Channel
Scala bin | United States America (US)
Create: Update:

Недавно с удивлением узнал, что в Scala есть продолжения (continuations), аналогичные оным в языках Scheme и Ruby. Добавить их можно с помощью специального плагина и флага компилятора.

Продолжения в каком-то роде представляют из себя функциональный аналог goto, позволяя передавать управление вне текущего блока, а потом снова в него возвращаться. Вот так, например, с их помощью можно реализовать простейший итератор в Scala:

reset {
def iterate() = shift { f: (Int => Int) =>
println("start")
val x = f(0)
println(s"i $x")
x + 1
}
iterate()
iterate()
iterate()
}

Относятся к продолжениям неоднозачно - в JRuby, к примеру, их отказались поддерживать. Незавидная участь, по видимому, ожидает их и в Scala - последнее обновление для соответствующего плагина выходило 2 года назад и даже тогда не было заметно его активного использования в проектах.

Причина забвения проста - чтобы разобраться в коде с их использованием, нужно приложить значительные усилия. К примеру, попробуйте догадаться, что напечатает в консоль вышеприведённый код.

Недавно с удивлением узнал, что в Scala есть продолжения (continuations), аналогичные оным в языках Scheme и Ruby. Добавить их можно с помощью специального плагина и флага компилятора.

Продолжения в каком-то роде представляют из себя функциональный аналог goto, позволяя передавать управление вне текущего блока, а потом снова в него возвращаться. Вот так, например, с их помощью можно реализовать простейший итератор в Scala:

reset {
def iterate() = shift { f: (Int => Int) =>
println("start")
val x = f(0)
println(s"i $x")
x + 1
}
iterate()
iterate()
iterate()
}

Относятся к продолжениям неоднозачно - в JRuby, к примеру, их отказались поддерживать. Незавидная участь, по видимому, ожидает их и в Scala - последнее обновление для соответствующего плагина выходило 2 года назад и даже тогда не было заметно его активного использования в проектах.

Причина забвения проста - чтобы разобраться в коде с их использованием, нужно приложить значительные усилия. К примеру, попробуйте догадаться, что напечатает в консоль вышеприведённый код.


>>Click here to continue<<

Scala bin




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)