Comments 13
Раз уже есть
yield return
, наверное самое время сделать на базе этого поддержку async/await
-образных механизмов точно так же как сделал Джефри Рихтер в библиотеке PowerThreading.Котлин имеет множество различных синтаксических сладостей
Если в нём даже yield и synchronized встроенных в язык нету, то это вызывает у меня некоторый скепсис.
промазал с ответом, вот habrahabr.ru/post/168571/#comment_5848879
synchronized не нужен, т.к. такая функция есть в stdlib, а выглядит 1 в 1 как в Java. Насчет честного yield — вот комментарий Андрея Бреслава confluence.jetbrains.com/display/Kotlin/Functions?focusedCommentId=40703888#comment-40703888
По поводу сахара я в первую очередь сравнивал язык с той же Джавой, в которой подобная реализация выглядит как запутанный моток лески на рыбалке.
По поводу сахара я в первую очередь сравнивал язык с той же Джавой, в которой подобная реализация выглядит как запутанный моток лески на рыбалке.
Здорово!
Подходит чтобы портировать какие-то алгоритмы использующие yield и некритичные по времени.
На практике эта штука приведёт к тормозам.
Подходит чтобы портировать какие-то алгоритмы использующие yield и некритичные по времени.
На практике эта штука приведёт к тормозам.
Прикольно конечно, но это полныая жесть. В нормальных языках yield реализуется совсем по-другому. Нитка в жаве очень дорогая штука, при создании на 32-битной выделяется на стек 512кб, а на 64-бинтной мегабайт. Я уже не говорю, про код, который должен в одной нитке выполянться (обращения к ThreaLocal)
Да! Я указал в заключении, что такой подход вряд ли можно использовать в большинстве случаев. Например в .Net yield используется повсюду в методах расширения коллекций, однако это вполне нормально, т.к. итератор сгенерированный компилятором C# выполняет пользовательский код в том же потоке, как выше указано — это реализация основана на конечных автоматах.
Цель данной статьи — не сама реализация yield, а пример того, что Kotlin позволяет реализовать многие привычные конструкции на уровне кода так, чтобы они выглядели будто встроены в язык. Это позволяет избавиться от кучи мусора в коде (еще раз для сравнения — представте подобную реализацию в Java)
Цель данной статьи — не сама реализация yield, а пример того, что Kotlin позволяет реализовать многие привычные конструкции на уровне кода так, чтобы они выглядели будто встроены в язык. Это позволяет избавиться от кучи мусора в коде (еще раз для сравнения — представте подобную реализацию в Java)
Мне кажется крутость котлина можно было бы лучше показать полезными его фичами, например описав то, как работает веб фреймворк kara: github.com/TinyMission/kara
Можно писать так:
В kotlin.concurrent есть еще другие полезности…
...
private val thread = thread {
//do something
}
...
В kotlin.concurrent есть еще другие полезности…
Рекомендую посмотреть статьи в блоге http://jamie.mccrindle.org/, в частности, в этой статье решается похожая «проблема».
Еще можно заглянуть в комьюнити на г+
Еще можно заглянуть в комьюнити на г+
Пустые фигурные скобочки у трейтов и классов можно опусакть, например так:
private trait Message
private class ValueMessage(public val value: Any): Message
Sign up to leave a comment.
Реализация yield в Kotlin