Использовал библиотеку jyield. Но здесь меня не устраивает, что требуется дополнительная обработка Java кода, выполнения
java -javaagent:../../jyield-0.0.6-jar-with-dependencies.jar над исходниками или байт кодом, что создает некоторый геморрой при сборке, запуске тестов и т.д.
Кто нидь библиотеку не требующий выполнения -javaagent может сказать? Или придется самому лисапед писать?
Если что, Java 8, Spring 4 — все фичи доступны.
Re: Библиотеку, делающую эмуляцию yield не подскажете?
Здравствуйте, elmal, Вы писали:
E>Использовал библиотеку jyield. Но здесь меня не устраивает, что требуется дополнительная обработка Java кода, выполнения E>java -javaagent:../../jyield-0.0.6-jar-with-dependencies.jar над исходниками или байт кодом, что создает некоторый геморрой при сборке, запуске тестов и т.д. E>Кто нидь библиотеку не требующий выполнения -javaagent может сказать? Или придется самому лисапед писать? E>Если что, Java 8, Spring 4 — все фичи доступны.
Под yeild имеется ввиду Continuation? Где-то видел прикольную версию для Java. Но, по-моему без инструментации не получится. javaagent просто даёт runtime инструментацию. Можно тоже самое но в compile time провернуть.
Re[2]: Библиотеку, делающую эмуляцию yield не подскажете?
Здравствуйте, Blazkowicz, Вы писали:
E>>Если что, Java 8, Spring 4 — все фичи доступны.
Собственно вот подборка альтернатив http://stackoverflow.com/questions/1456083/continuations-in-java
Возможно какая-то из них захаченый байткод имеет внутри фрейверка, так что не требует изменений в клиентском коде. Надо почитать.
Re[2]: Библиотеку, делающую эмуляцию yield не подскажете?
Здравствуйте, Blazkowicz, Вы писали:
B>Под yeild имеется ввиду Continuation? Где-то видел прикольную версию для Java.
Да я ее и привел скорее всего. Лучшее что я видел, по синтаксису полностью устраивает.
Но, по-моему без инструментации не получится. javaagent просто даёт runtime инструментацию. Можно тоже самое но в compile time провернуть.
Очень бы не хотелось инструментации.
Скорее всего так было раньше. А вот с выходом Java 8 есть вероятность что способ появился. Да и с помощью аспектов спринга скорее всего возможно что можно сделать. На производительность и оверхед мне вообще пофик, будет выполняться меньше секунды — нормально .
Re[3]: Библиотеку, делающую эмуляцию yield не подскажете?
Здравствуйте, elmal, Вы писали:
E>Да я ее и привел скорее всего. Лучшее что я видел, по синтаксису полностью устраивает.
Я вот это смотрел. Вроде ничего, но тоже через инструментацию. https://code.google.com/p/coroutines/
E>А вот с выходом Java 8 есть вероятность что способ появился.
Нет, не появился. Я за всеми новинками в Java слежу. В какой-то момент предлагали coroutines в Java 8, но не включили.
E>Да и с помощью аспектов спринга скорее всего возможно что можно сделать. На производительность и оверхед мне вообще пофик, будет выполняться меньше секунды — нормально .
Аспекты спринга работают через прокси. Вряд ли с ними можно Continuation сделать.
Как я уже упоминал, можно просто в build time модифицировать код, если javaagent не угодил. Вот например: http://commons.apache.org/sandbox/commons-javaflow/antTask.html
У них же там как альтернатива есть и свой ClassLoader, через который модифицируется байт-код при загрузке. До появления javaagent это был единственный способ инструментации в рантайме.
Re: Библиотеку, делающую эмуляцию yield не подскажете?
Здравствуйте, mazurkin, Вы писали:
M>Зачем тут yield?
Громоздковато. Класс городить приходится. А если использовать yield — выглядело бы все очень элегантно.
Или хотя б через LazySeq.
Re[3]: Библиотеку, делающую эмуляцию yield не подскажете?
А вам шашечки или ехать? Про элегантность yield потом спросите коллегу, который будет ваш кусок отлаживать.
M>>Зачем тут yield? E>Громоздковато. Класс городить приходится. А если использовать yield — выглядело бы все очень элегантно. E>Или хотя б через LazySeq.
Re: Библиотеку, делающую эмуляцию yield не подскажете?
E>Хочу написать ленивый итератор, делающий обход в ширину возможно циклического графа. E>Конечно, могу написать таким кодом, что там сам черт ногу сломит, громоздко, но хотелось бы элегантности. E>
E> ...
E>
А что если просто развернуть итератор, то есть использовать Observer (push вместо pull)? Как реализацию взять, например, RxJava.
Re: Библиотеку, делающую эмуляцию yield не подскажете?
Здравствуйте, elmal, Вы писали:
E>Хочу написать ленивый итератор, делающий обход в ширину возможно циклического графа.
E>Конечно, могу написать таким кодом, что там сам черт ногу сломит, громоздко, но хотелось бы элегантности.
Для галочки, не райнтайм: на GitHub раньше развивался lombok-pg, в котором yield был полноценно реализован приблизительно так же, как и yield в C# 2.0. Проект умер года два назад, вроде, плохо совместим с оригинальным Lombok, ну и, почти уверен, вообще не имеет поддержки со стороны IDE. Так что итератор.