169 похожих чатов

@Odomontois Может ты в курсе, котлиновские корутины откуда-то слизали или

это инновационная разработка?

30 ответов

6 просмотров

инновация.

Сергей, даже когда ровно тот же механизм в скале в 2011 году сделали, это не была инновация

Sergey Alaev
А я не в курсе. О чем речь?

async/await это трансформация куска кода в вызовы стейтмашины, замораживающей продолжение в стейте, исходная форма зародилась в функциональном программировании я хз где-то в конце 70-х, называется delimited continuations

Oleg ℕižnik
async/await это трансформация куска кода в вызовы ...

а если говорить в контексте скоупов и диспатчеров?

Aλex Sokol
а если говорить в контексте скоупов и диспатчеров?

а ну тогда в 70х в функциональном программировании, называется delimited continuations

Oleg ℕižnik
а ну тогда в 70х в функциональном программировании...

а это точно то? просто скоупы это больше о создании некоторых «вложенных асинхронных структур», которые удобно (ожидаемо) кенселятся/падают

Aλex Sokol
а это точно то? просто скоупы это больше о создани...

конечно, про то, скоуп - это синтаксическое окружение внутри ресет

Aλex Sokol
а это точно то? просто скоупы это больше о создани...

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

Oleg ℕižnik
собственно, можете повторно ознакомиться, например...

питоновские функции это не то же самое, что structured concurrency (не люблю этот баззворд, но я думаю выше уже пояснил что вкладываю в это понятие)

Oleg ℕižnik
вы с async в питон знакомы?

угу, обычный итератор. async правда и о стейт машине ничего не знает, этим внешняя либа занимается (asyncio как правило)

Aλex Sokol
угу, обычный итератор. async правда и о стейт маши...

ну вот, так каких аспектов структурной конкаренси вы здесь не находите по сравнению с решением в kotlin

Oleg ℕižnik
не итератор, конечно

ну любой генератор это итератор, поэтому я просто смотрю на как на частный случай итератора и соотв. могу неточно говорить.

Oleg ℕižnik
не совсем так

вроде генераторы определяют метод _iter_.

Aλex Sokol
вроде генераторы определяют метод _iter_.

ну хорошо, но "обычный итератор" в этом контексте всё же странно звучит https://t.me/scala_ru/325642 итератор, но необычный, сформированный необычным способом, способный принимать значения из внешней сопрограммы, а не только передавать

Деградация

Oleg ℕižnik
ну вот, так каких аспектов структурной конкаренси ...

сложно привести пример, понятный всем, поэтому приведу более специфичный кейс, который не говорит об общей мощности скоупов в котлине. допустим у меня есть телеграм-бот, я хочу, чтобы когда он упал я его перезапускал. нужно держать в голове, что внутри бота кто-то мог сделать create_task и поэтому обычный try - catch не спасёт. а спасёт что-то такое. но ведь может понадобится не только ловить самые верхние ошибки, это плоская асинхронная структура, потому что если запущенная из другой корутины корутина выкинет ошибку - она всё равно сможет быть поймана только в глобальном хендлере. в котлине не же, есть некоторая структуризация и вложенность асинхронности, таким образом просто написав val handler = CoroutineExceptionHandler { … } launch(handler) { … } мы можем поставить хендлер на все ошибки, которые выпадут из корутин, запущенных в блоке launch. т.е. структурно корутины в питоне выглядят так. т.е. все запущенные корутины [условно] не складываются в какое-то одно место, а каждая корутина знает кто её родитель (из какой корутины она была запущена), кто её дети (запущенные из неё корутины) и все умеют друг друга отменять в случае чего, не мешая другим. корутины в котлине - дерево, а не плоская структура.

Aλex Sokol
сложно привести пример, понятный всем, поэтому при...

это на самом деле относится именно к библиотеке kotlinx coroutines, которая выполняет корутины, а не к самим корутинам, но всё же.

Aλex Sokol
сложно привести пример, понятный всем, поэтому при...

так в питоне ты пишешь просто try и евейты прокидывают ошибки, и так же примерно везде, т.е. в котлине бойлерплейт уровня .handleError ,и в питоне ты можешь взять таск и делать с ним, что хочешь

Aλex Sokol
сложно привести пример, понятный всем, поэтому при...

т.е. этот конкретно пример - это, скорее, отсутствие фичи, чем наличие

Aλex Sokol
сложно привести пример, понятный всем, поэтому при...

Да вместо .ressurect или прочих обработчиков ошибки

Oleg ℕižnik
т.е. этот конкретно пример - это, скорее, отсутств...

ну это всё частный случай одной большой фичи. того, что все запущенные корутины не линейный список.

Aλex Sokol
ну это всё частный случай одной большой фичи. того...

так я не понял, в чём отличие то и инновация

Oleg ℕižnik
так я не понял, в чём отличие то и инновация

про инновацию я просто написал, я так не считаю. просто от питоновских всё же котлиновские отличаются. такие же корутины со structured concurrency в го, вроде.

Aλex Sokol
про инновацию я просто написал, я так не считаю. п...

ну ещё раз, деревья есть и в зиво, и в токио и в питоне

Похожие вопросы

Обсуждают сегодня

Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Добрый день! Подскажите, пожалуйста: какими компетенциями нужно обладать, чтобы претендовать на работу эрланг (отдельная благодарность, если про элексир тоже подскажете) разр...
via ☸️ led
20
Всем привет. Ребят подскажите пожалуйста. Вопрос по дизасемблировани. Начну с начала. У меня есть скомпилированная программа на ГО (я разработчик) - в ней есть защита лицензии...
Zloy
11
Можно попросить небольшое ревью кода? Тут немнога, я ничего интереснее не придумал, чем написать аналог tree в качестве практики с cmake. https://github.com/hrimov/tree-unix/...
Andrew Hrimov
11
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Карта сайта