Utekl další týden (16. 2. – 19. 2.), a tak si sepisuju, co jsem dělal.
Pondělí: Kurz!
V pondělí jsem zpracovával registrace ne kurz, vítal účastníky, odpovídal na otázky. I na přípravu a točení videí na instalační lekci zbyla trocha času, i když ne tolik, kolik bych chtěl.
Většina týmů se přihlásila v pondělí a úterý, ale spočítal jsem je až později, když jsem uzavíral přihlášky. Celkem je týmů 56 a mají od dvou do pěti lidí. I kdyby to bylo jen 56 lidí, byl by to největší kurz co jsem zatím učil, a tak doufám, že náročnost neroste lineárně.
Docela dost týmů má někoho, kdo není úplný začátečník; snad i tohle ze začátku trochu uleví koučům.
Večer byl další sraz projektu Freezeyt. Tentokrát se k nám přidal nový člen (který v klubu junior.guru hledal projekt, tak jsem ho tak trochu naverboval). A tak jsem prošel celý kód, vysvětloval co to dělá a odpovídal na otázky. Všem je to teď jasnější – ne jen nováčkovi.
Další Freezeyt srazy jsme přesunuli na úterý, protože v pondělí bude začátečnický kurz.
Úterý: CPython
Úterky mám vyhrazené na vylepšování stabilního ABI.
A tak jsem dělal přesně tohle.
Jediné co je z toho vidět je pull request na zveřejnění funkce PyCFunction_New
,
která byla k dispozici na Windows ale ne na Linuxu.
To je docela rarita.
Většinou to bývá naopak, protože Windows má seznam exportovaných fukcí,
ktežto Linuxu se exportuje každá funkce nadefinovaná jako API.
Jenže zrovna PyCFunction_New
byla nadefinována jako makro, což znamená,
že v C fungovala normálně ale z jiných jazyků by použít nešla.
Středa
Nějakou dobu už se nám na nejnovější Fedoře nedaří zkompilovat Python 3.4, 3.5 a 3.6, tak jsem se na to ve podíval. Jde o dvě nezávislé chyby. Na jednu jsem přišel docela rychle, ale pak jsem většinu dne strávil tím, že jsem se snažil tu druhou zreplikovat na svém počítači. Bylo do dost frustrující.
Čtvrtek
Ve čtvrtek jsem chybu v Pythonu 3.5 konečně dostal u sebe,
po pár pokusech jsem místo „testy spadnou“ věděl, který z testů padá,
pak která funkce a pak i který řádek Pythoního kódu.
To ale nestačilo: pokračoval jsem řádkem C kódu a nakonec i konkrétní
instrukcí procesoru.
K tomu jsem si musel dohledat, co vlastně dělají instrukce jako punpcklqdq
a
movaps
– a najednou to začlo být jasné.
Instrukce movaps
totiž pracuje s daty, které jsou v paměti zarovnané:
začínají na sudém bajtu.
Za to je (předpokládám) trochu rychlejší než alternativy.
No a novější překladač C se snaží vytvořit co nejrychlejší kód, a tak tam, kde
umí dokázat že příslušná data musí být zarovnaná, použije tuhle instrukci.
No a protože zdrojáky Pythonu 3.6, zdá se, neodpovídají úplně přesně detailům
standardu C, chyba je na světě.
Večer jsem chybu a svou analýzu ukázal Victorovi, který si vzpomněl že v Pythonu 3.7 se něco podobného řešilo a nasměroval mě na opravu. Hurá!
Jo, a taky ve čtvrtek začal DevConf, tak jsem koukal na pár přednášek.
Pátek: DevConf
DevConf pokračoval i v pátek. Sledoval jsem další přednášky, ale ty online konference prostě nejsou ono. Zpětně mi to přijde spíš jako promrhaný čas :(