Týdenní poznámky #1

Utekl další týden (3. 1. – 8. 1.), a tak si sepisuju, co jsem dělal.

Pondělí: email

Po dovolené jsem se přihlásil do práce a svítilo na mě Inbox (1412). Celý pracovní den jsem to procházel, odpovídal na jednodušší kousky a složitější si zapisoval to úkolníčku.

Večer jsem zase streamoval Freezeyt. Přes minulý týden nikdo jiný na projektu nepracoval, takže z toho byly dvě hodiny refactoringu konfigurace. Doufám, že to k něčemu je – ale jedna ze zpětných vazeb na live coding po začátečnickém kurzu byla:

Opět moc pěkná lekce, tyhle "celoprogramovací" mě baví asi nejvíc.

Takže asi v pohodě. Až budou otázky, může to zase být víc o odpovědích a odbočkách.

Úterý: CPython

Úterý je den pro Python!

Udělal jsem pár menších review ohledně izolace stavu modulů. O PEP 630 jsem psal i minule, tak trochu víc detailů:

Posledních pár let do Pythonu přispívám s tím, že modul – to co se importuje – je objekt jako každý jiný. Z jednoho .py souboru se dá vytvořit několik modulových objektů, které se chovají stejně, ale navzájem se neovlivňují. To pak má výhody v tom, že aplikace může spustit Python několikrát za sebou, nebo dokonce paralelně vedle sebe, s různým nastavením. A stejně by se měly chovat i moduly napsané v C (nebo podobných jazycích), jenže to zatím moc nejde, protože jednotlivé objekty navzájem ovlivňují. Moje PEP 630 problém popisuje a ukazuje, jak ho řešit.

Hlavní myšlenka je v tom, že se všechny prostředky – paměť, Pythonní objekty, otevřené soubory, a kdo ví co všechno – navážou na objekt modulu. Když jsou ty objekty dva, musí všechno být dvakrát. A problém je v tom, že v C je velice jednoduché použít statickou proměnnou, která je v celém procesu jen jedna.

  • Modul datetime jeden takový objekt používal, tak se z static struct PyExpat_CAPI capi muselo udělat něco trochu složitějšího.
  • Podobnou opravu v modulu expat jsem zkontroloval potom, co hlavní review udělal Victor.
  • Změnu v modulu array jsem začlenil, ale zapomněl jsem na detail, který autor opravil vzápětí.
  • Udělal jsem další review na opravu správy paměti při importování Jde hlavně o chování v chybových situacích; Python při nich občas měl refleak – zapoměl odevzdat kousek paměti kterou dál nevyužíval. Bohužel tomu neprošly automatické testy kvůli úplně jiné chybě a když jsem to zkoušel testovat u sebe, našel jsem zase úplně jinou chybu, která se neprojeví. Poslal jsem na ni pull request, ale protože se v téhle oblasti nevyznám, bude ho potřeba ještě doladit. Původní oprava ale prošla a příští úterý ji chci začlenit. (Snažím se to dělat když mám před sebou den dedikovaný pro Python, abych mohl reagovat když se něco po... nepodaří.)
  • Oprava kopírování ukazatele, o které jsem se zmínil minule, je začleněná.

  • O přidání funkce PyType_GetName se stále diskutuje, i když pomalu.

No a pak jsem začal definovat stabilní ABI. Napsal jsem si na to formát (a jednoduchý parser), protože dat je moc a potřebuju v nich mít co nejlepší přehled.

Středa: Python 3.10

Ve středu jsem napsal dvouřádkový pull request. Byla to práce na celý den, protože jsem napřed musel porozumět tomu, co ten kód vlastně dělá a jaké jsou alternativy.

Pull request v Setuptools odstraňuje použití funkce load_module, která od Pythonu 3.12 nebude fungovet. Ale potřebujeme se jí zbavit už teď, protože v Pythonu 3.10 začala házet varování a u některých balíčků, které na Setuptools (resp. pkg_resources) závisí, selžou testu když na varování narazí.

Kromě toho bylo v týmu pár plánovacích porad, takže to nebylo doopravdy na celý pracovní den. Ale skoro.

Čtvrtek: py3c

Ve čtvrtek jsem dělal pár menších věcí pro Fedoru. Hlavní byla aktualizace py3c, projektu na portování C-API modulů z Pythonu 2 na Python 3. Byl tam menší zádrhel s generováním dokumentace, testy na Travis CI trvaly tak dlouho, že jsem přešel na GitHub Actions. To zabralo překvapivě moc času, protože na GitHub Actions se nedá testovat na architektuře POWER, což se nelíbilo jistému Gerritovi, který POWER o testů nedávno přidal. S Mirovou pomocí jsme testy vypiplali do stavu, kdy se stydím že nedávám tolik úsilí do užitečnějších projektů ;)

Pátek: plánování

V pátek jsem si urovnal pracovní úkolníček, zamyslel se co dál, a několik menších věcí co už dlouho hnily vyřešil nebo posunul kupředu.