dmytrish: (Default)
[personal profile] dmytrish

Останнім часом потрохи курив мануали до asyncio та корутин в Python 3, і, здається, наближається момент достатнього розширення свідомості.

Другий Пітон був відносно простою (для багатьох навіть примітивною) динамічною імперативною мовою із класами, якою було класно склеювати примітиви інших мов, і за це його досі люблять. Із просунутих фіч у ньому були хіба що генератори із yield, на основі яких зробили ледачі потоки в itertools, малою кров'ю взявши багато хороших ідей із хаскелівської ледачості обчислень.

А третій Пітон мене і лякає, і захоплює одночасно: виглядає скромно, але під капотом можна знайти повноцінний event-driven programming (із event loops, asynchronous tasks: async/await, coroutines, futures та іншою нетривіальною лабудою), модуль для прикріплення анотацій типів (typing), генератори/ітератори значно глибше проникли в мову і тепер навіть простий map(function, some_list) повертає не список, а ітератор. Теперішні можливості мови дозволяють робити складні та нетривіальні системи.

Але запроваджувати concurrency в мову через корутини та машини станів (що загалом непоганий напрямок для concucrrency в імперативній мові) було і досить невдалим вибором: asyncio потребує значного вникнення порівняно із акторами і горутинами. І в цьому плані Го перепітонив Пітон: дав concurrency простішим і очевиднішим методом, додавши до того ж рудиментарні типи.

(no subject)

Date: 2017-08-22 10:35 pm (UTC)
From: [personal profile] sassa_nf
У другому Пітоні майже те саме існує у tornado, twisted matrix, тощо.

Суттєва різниця, наприклад, в асинхронних генераторах та менеджерах контекстів. Скажімо, я так розумію, в третьому Пітоні можна зробити цикл, де *наявність* next обчислюється асинхронно.

Ще важливе обмеження - у другому Пітоні не можна змішувати генератори і корутини, бо корутини зроблені на генераторах (і тому що в Пітоні немає lift). Не знаю, чи вирішено питання в третьому.

Profile

dmytrish: (Default)dmytrish

August 2018

S M T W T F S
   1234
567891011
12131415161718
19202122232425
262728293031 

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 21st, 2026 05:16 am
Powered by Dreamwidth Studios