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

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

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

30 ответов

26 просмотров

инновация.

Сергей, даже когда ровно тот же механизм в скале в 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
про инновацию я просто написал, я так не считаю. п...

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта