Pull to refresh

Comments 13

Раз уже есть yield return, наверное самое время сделать на базе этого поддержку async/await-образных механизмов точно так же как сделал Джефри Рихтер в библиотеке PowerThreading.
Котлин имеет множество различных синтаксических сладостей

Если в нём даже yield и synchronized встроенных в язык нету, то это вызывает у меня некоторый скепсис.
synchronized не нужен, т.к. такая функция есть в stdlib, а выглядит 1 в 1 как в Java. Насчет честного yield — вот комментарий Андрея Бреслава confluence.jetbrains.com/display/Kotlin/Functions?focusedCommentId=40703888#comment-40703888

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

По-моему Java как язык уже не актуальна в качестве объекта сравнения. Всё-таки более уместно сравнивать новые языки такого типа со Scala и C#.
Здорово!
Подходит чтобы портировать какие-то алгоритмы использующие yield и некритичные по времени.
На практике эта штука приведёт к тормозам.
Прикольно конечно, но это полныая жесть. В нормальных языках yield реализуется совсем по-другому. Нитка в жаве очень дорогая штука, при создании на 32-битной выделяется на стек 512кб, а на 64-бинтной мегабайт. Я уже не говорю, про код, который должен в одной нитке выполянться (обращения к ThreaLocal)
Да! Я указал в заключении, что такой подход вряд ли можно использовать в большинстве случаев. Например в .Net yield используется повсюду в методах расширения коллекций, однако это вполне нормально, т.к. итератор сгенерированный компилятором C# выполняет пользовательский код в том же потоке, как выше указано — это реализация основана на конечных автоматах.
Цель данной статьи — не сама реализация yield, а пример того, что Kotlin позволяет реализовать многие привычные конструкции на уровне кода так, чтобы они выглядели будто встроены в язык. Это позволяет избавиться от кучи мусора в коде (еще раз для сравнения — представте подобную реализацию в Java)
Мне кажется крутость котлина можно было бы лучше показать полезными его фичами, например описав то, как работает веб фреймворк kara: github.com/TinyMission/kara
Согласен. Но я не разбирался с Kara, и пока особого желания нет, т.к. не люблю веб.
Можно писать так:
...
private val thread = thread {
   //do something
}
...


В kotlin.concurrent есть еще другие полезности…
Пустые фигурные скобочки у трейтов и классов можно опусакть, например так:

private trait Message
private class ValueMessage(public val value: Any): Message
Sign up to leave a comment.

Articles