Anonymous
если отбросить все вскукареки про то что он патчил
Nikolay Markov
какое отношение к рациональному мышлению имеет воспевание древних технологий?
Nikolay Markov
ну и круто, теперь он не нужен, потому что все есть в STL
Nikolay Markov
и есть async/await
Anonymous
ладно спрошу так зачем async/await если гевент доказал что можно то же самое без async/await ?
Nikolay Markov
gevent ничего никому не доказывал
Anonymous
что древнего в том что у тебя просто есть функция которую вызываешь а она работает сама как корутина
Nikolay Markov
ты еще скажи, “зачем вам все это, если есть Twisted”
Nikolay Markov
корутины в питоне без всякого gevent были с начала времен
Anonymous
твистед ничего не решал
Anonymous
не было
Nikolay Markov
были
Nikolay Markov
учи матчасть
Anonymous
был клоунский yield который пытались юзать как корутину но с сотней ограничений и переписыванием стека ради эксепшенов
Nikolay Markov
была отличная концепция генераторов
Nikolay Markov
которая рвала мозг ньюфагам, поэтому сделали async/await, чтобы пипл не ныл
Anonymous
вообще нет
Nikolay Markov
ну вообще да
Anonymous
если убавишь немного пафоса я могу расказать как было
Nikolay Markov
мне за тебя презентации Бизли гуглить или сам справишься?
Anonymous
хуизли
Anonymous
я это всё прошел
Anonymous
на собственной шкуре
Nikolay Markov
я тоже это все прошел :)
Anonymous
почему тогды ты несёшь такой бред
Nikolay Markov
я протоколы еще на asyncore/asynchat писал в свое время
Nikolay Markov
это ты несешь бред, я просто рассказываю, зачем это сделали и почему это хорошо
Nikolay Markov
а ты мне приводишь какую-то древнюю библиотечку как пример
Anonymous
не библиотечку а подход
Nikolay Markov
могу охладитель для пукана прислать по почте
Anonymous
подход был абсолютно без сахара писать a = yoba()
Nikolay Markov
подход async/await - офигенный, поэтому его сейчас в куче языков внедряют
Anonymous
чем он лучше чем просто вызов ?
Nikolay Markov
ладно, объясню на пальцах, раз не понимаешь
Nikolay Markov
твои gevent, хуент и эвентлеты с торнадой пытались пришить к питону сбоку свой эвентлуп, чтобы на нем запускать корутины
Nikolay Markov
и у них это получалось, и оно даже работало неплохо
Anonymous
вообще нет. корутины и ивентлуп это разные вещи
Nikolay Markov
я не говорю, что gevent - плохая библиотека, наоборот, очень хорошая
Nikolay Markov
вообще нет. корутины и ивентлуп это разные вещи
ну так asyncio - это эвентлуп, а async/await - реализация корутин
Anonymous
воот
Nikolay Markov
ты наезжаешь и на то, и на другое, а я объясняю, почему ты неправ
Anonymous
давай конкретно про корутины
Nikolay Markov
окей, корутины корутинами
Nikolay Markov
основная задача корутин - реализовывать кооперативную многозадачность, то есть явно передавать контекст
Nikolay Markov
в питоне исконно передача контекста делалась через yield, а отправка данных - через .send(), это отлично работало, но было малоюзабельно
Anonymous
>то есть явно передавать контекст это если сравнивать с колбеками
Nikolay Markov
потому что получался спагетти-код
Nikolay Markov
>то есть явно передавать контекст это если сравнивать с колбеками
это просто определение кооперативной многозадачности, не сравнивая ни с чем
Nikolay Markov
так вот, async/await теперь помогли избежать этого геморроя
Nikolay Markov
код стал читабельнее в разы, потому что сразу понятно, что у тебя асинхронно, а что нет
Anonymous
в питоне исконно передача контекста делалась через yield, а отправка данных - через .send(), это отлично работало, но было малоюзабельно
это не работало. вернее это работало с тысячами хаков и ограничений и я тебе могу даже ссылки привести на баги торнады с @gen сахарком когда эксепшен ловился в ивентлупе но слушался в другом месте. и как доказательство того что это не работало дальше чем на одну вложенность есть ПЕП с yield from
Nikolay Markov
то, что было по этому поводу в gevent, eventlet и иже с ними - это были костыли, чтобы реализовать то, чего не было в питоне в нормальном виде
Anonymous
погоди
Nikolay Markov
сейчас в питоне отличные трейсбеки
Nikolay Markov
в них прям вообще все видно, это тебе не джава
Nikolay Markov
и да, yield from был шагом вперед, но теперь есть await и это еще красивее
Anonymous
какое отношение баги торнады имеют к STL питона?
нет никакой стл питона. есть попытки натянуть сову на глобус которые начались в твистедовских inlinecallbacks продолжались в gen и кончились в yield from
Anonymous
погоди
Anonymous
с определением кооперативной многозадачности я не соглашусь но не важно
Anonymous
в питоне исконно передача контекста делалась через yield, а отправка данных - через .send(), это отлично работало, но было малоюзабельно
в целом это не отлично работало. генераторы делались совершенно для другого и я где то видел таки признание мразей что использовать их как полноценные корутины было ошибкой
Nikolay Markov
я не вижу проблем с yield from
Nikolay Markov
генераторы не делались для другого, генераторы - это генераторы, и почему бы не реализовать на них корутины?
Nikolay Markov
не вижу проблемы, опять же
Nikolay Markov
объясни, в чем ты видишь костыльность async/await?
Nikolay Markov
желательно, не на Армина Ронахера
Anonymous
так вот, async/await теперь помогли избежать этого геморроя
теперь вот моя история. гевент года четыре назад до селиванова помог этого избежать введя наконец понятие нормальной корутины, сделал кучу элитнейшего сахара такого как таймауты, джоины, соединение корутин с корутинами чтобы по завершению одной вызывалась другая. и еще раз напомню что он "патчил" строго потому что переписывать либы на гевенте некому. если бы были либы которые нативно используют сокет гевента не пришлось бы ничего патчить. это просто политика. сейчас точно так же все переписывают всё на асинкавейт как могли бы переписать на гевент и не вонять
Anonymous
ну тоесть это выглядит так - вам дали ахуеннейшую инфраструктуру, нормальные не текучие корутины. вы четыре года чесались оно вам резало глаза так что сначала эйелд фром, потом запилили синтаксический шум в виде асинкавейт и как бы непонятно нахера потому что все уже было и работало
Nikolay Markov
ну так в итоге переписали же и это все есть внутри asyncio, вместе с нормальной поддержкой epoll, встроенной в язык, а не огрызком в виде asyncore
Anonymous
и теперь просто кукарекаете что это ПРАВИЛЬНЕЕ
Nikolay Markov
у gevent фатальный недостаток был в том, что он был непригоден для мержа в ядро языка, потому что зависел полностью от внешней сишной либы
Nikolay Markov
и неважно, чего там было еще внутри него
Nikolay Markov
стандартом он не мог стать по определению
Anonymous
о да внешняя либа это страшно. а то что пришлось изуродовать язык на уровне синтаксиса два раза это ок
Vladimir
Хрыч, перелогинься
Nikolay Markov
не изуродовать, а улучшить, отличный читабельный синтаксис
Nikolay Markov
в gevent ты знать не знаешь в середине кода, корутина у тебя это или нет
Nikolay Markov
и передастся ли контекст отсюда или нет, будет блокирующий вызов