Daniel
а с green thread'ами типа такого рода "планирование" отпадает?))
вообще-то да. ты просто пишешь последовательный код. где надо - ждешь, где надо - вызываешь синхронный обработчик
Roman
streams.join(firstTask(...), secondTask(...)) .attach(stream { streams.race(thirdTask(...), fourthTask(...)) .attach(stream.close()) }) .failure(...)
Roman
это подход со стримами... позволяет относительно просто описывает довольно сложный асинхронный control flow
Daniel
коллега
Daniel
вы же сами видите, сколько тут синтаксического мусора
Roman
я же неоднократно утверждал что синхронный код на green thread'ах читается проще))) я ВОВСЕ не спорю с этим я лишь представляю control flow решения со стороны асинхронного подхода
Roman
в event loop'е синхронный код не попишешь
Roman
но и callback'и там давным давно уже неактуальны
Roman
почти в любой среде GUI и с Node теперь даже на сервере у нас event loop
Aleksand
я хочу так await loop.parallel(Job(a), Job(a), loop.series(Job(a1), Job(a2)))
Roman
и код писать приходится именно асинхронно
Aleksand
ну.. хоти)) что я могу сказать
я так и пишу, и отлично работает, просто не хочется это реализовывать самому внутри щелкая eventloop
Roman
я так и пишу, и отлично работает, просто не хочется это реализовывать самому внутри щелкая eventloop
streams подход разрабатывался для останавливаемых и отменяемых "потоков"
Roman
можно ли приостановить и продолжить или отменить во время исполнения async await ?
Roman
да
как это выглядит?
Aleksand
но тонкости есть везде свои
Aleksand
как это выглядит?
task.cancel например в питоне
Aleksand
если там нить внутри то надо это поддерживать
Roman
в каком языке и для каких операций?
я на данный момент пишу реализацию для Qt Quick (языки: C++ & QML) самая первая проблема с которой мы тогда столкнулись это network filesystem API, а именно асинхронная по-чанковая загрузка больших файлов
Roman
task.cancel например в питоне
проблема в том, что если операция состоит из под-операций то тут всё сложнее.. а со стримами всё относительно просто стримы могут состоять из стримов в периоде
Roman
внутри одного стрима могут быть 4 последовательных из которых он состоит они могут быть либо atomic либо abortable
Roman
и следственно если высокоуровневый стрим отменяем во время исполенения atomic стрима - дожидаемся его возвращаение ну и т.д. .. там парадигма много на что способна
Aleksand
я про c++ ничего не скажу
Сережа
qt quick это считай джаваскрипт
Сережа
с биндингами к с++
Roman
qt quick это считай джаваскрипт
JavaSctipt + C++ в одной связке
Roman
ну приведенный выше синтаксис на мой взгляд настолько запутан и сложен что ничем не лучше колбэк ада
зато подразумевает свободную абстракцию отменяемых и приостанавливаемых "потоков"
Сережа
вроде как магистры компуктер саенс порешили, что за стримами будущее
Aleksand
вроде как магистры компуктер саенс порешили, что за стримами будущее
теперь пусть дадут удобные инструменты и синтаксис и все будут использовать
Сережа
это те, которые будущее пророчат функциональной парадигме
Сережа
ботоны всякие
Сережа
https://stackoverflow.com/questions/35120082/how-to-get-started-with-akka-streams вот тут они на со резвятся
Roman
проблема наверное в терминологии
Roman
имеются ввиду не "stream" в качестве видео-потоков или подобного
Roman
на сайте QuickStreams я, надеюсь, довольно кратко и понятно определил значение стрима в данном контексте: https://qbeon.github.io/QuickStreams/
Roman
Roman
это реинкарнация модели акторов? не?
не знаком, но маловероятно)
Aleksand
ну акка она про нее изначально вроде
Сережа
зачем на Qt выносить в QML стримы и т.д.? QML же чтобы квадратики двигать, а вся логика в c++ или тормозить будет?
Roman
очень похоже на стиль написания промисов, но мощнее: http.get(...) .retry([http.Timeout, http.BadGateway], 3) .attach(function(results) { // results arrived }) .repeat(3) .failure(function(error) { // error handling }) запускаем запрос http.get, если запрос валится по причине таймаута или badgateway - повторяем (максимум 3 раза), по успешному прибытию результатов 3 раза повторяем обработчик ну а иначе попадаем в failure
Roman
зачем на Qt выносить в QML стримы и т.д.? QML же чтобы квадратики двигать, а вся логика в c++ или тормозить будет?
QML это полноценный яп, никто не мешает писать приложения полностью на QML, если все нужные performance-критичные API реализованы на C++ то всё будет летать
Roman
JavaScript достаточно быстрый для бизнес логики связывающей элементы API
Roman
к тому-же QML намного проще C++, т.е. за те-же деньги больше приложения))
Anatoly
мне кажтеся что угодно намного проще C++
Anatoly
ассемблер проще всего, но пальцы писать устают и калькулятор стирается
Roman
Ассемблер?
здесь речь об application development'е
Anonymous
Что угодно проще. Хорошо, что достаточно знать только процентов 5 от стандарта )))
Anonymous
здесь речь об application development'е
На ассемблере нельзя делать appdev? :)
Anatoly
и на каждом новом рабочем месте это свои 5%
Roman
Anatoly
почему нельзя, у меня дружище активно писал на асме + винапи
Anatoly
ирц клиент написал
Roman
я даже не буду это обсуждать потому-что это нонсенс
Anonymous
поддерживать дорого, сейчас даже для микроконтроллеров предпочтительнее Rust
Roman
1. maintainability 2. security 3. performance
Roman
в конце концов веб-сервис или мобильное приложение на ассамблере ты ну никак не напишешь, НИКАК
Сережа
вряд ли кто-то на серьезном предприятии позволит использовать rust в разработке.
Roman
А что, если я тебе скажу, что можно?
тогда я дам тебе 20 лет и 50 миллионов долларов бюджета))
Roman
так.. грубо говоря
Anonymous
https://m.habrahabr.ru/post/188114/
Roman
всё, закрыли тему
Roman
это нонсенс, повторяюсь
Anonymous
Эээ, мои 50 миллионов :(
Roman
Эээ, мои 50 миллионов :(
обойдёшься 😄
dev_sheep
А что, если я тебе скажу, что можно?
можно сделать все на всем, мне кажется. Только вот какой прок от инструмента, на котором ты пишешь продукт, если он для этого не предназначен?
Roman
без уровней абстракции человеческое общество не работает
dev_sheep
это ж из тех древних боянов про сайт на ассемблере
Roman
это ж из тех древних боянов про сайт на ассемблере
тем более некоторые вещи на ассамблере ты НИКАК не реализуешь, такие как сайт в том числе