Uploaded avatar of kytrinyx

Interjú Meade Kincke-kel

@kytrinyx
Több, mint 7 éve ezelőtt

Interjú Meade Kinckével, amelyben ő és Katrina Owen a Rust-fordítóról, egy grafikus felhasználói felületről, amely tudományos színterekkel határozza meg a sör színét, valamint a „A Practical Guide To Rust” című könyvéről beszélgetnek.

Szia Meade! Köszönjük, hogy beszélgettél velünk. Azért szerettünk volna veled beszélgetni, mert te vagy a legtermékenyebb mentorunk a Rust-kurzuson. Több mint 400 tanulónak segítettél már. Hogyan találtál rá az Exercism-re?

Valaki a Reddit Rust subredditjén posztolt arról, hogy az Exercism Rust-kurzusára mentorok kellenek, úgyhogy utánanéztem. Nagyon örülök, hogy így tettem, mert hihetetlenül sok örömet ad, és mindenki olyan kedves és hálás. Csodálatos kapcsolatokat építettem ki az Exercismes tanulóimmal, és imádok segíteni nekik.

Van-e olyan különleges történet, amely kiemelkedik?

Igen, van egy különleges Rust-feladat, amely nagyon népszerű: a Pythagorean Triplet.

Ebben a feladatban a leggyakoribb probléma általában a teljesítmény. A legtöbben először egymásba ágyazott for ciklusokkal oldják meg, ami legalább O(n²), és nagyon nem hatékony. A célom, hogy a tanulóimat eljuttassam egy lineáris megoldáshoz: O(n).

A módszerem az, hogy kérdéseket teszek fel. Azzal kezdem, hogy megkérdezem, szeretnék-e megtanulni a Rust iterátor-metódusát, mert rengeteg előnye van, és az egyik, hogy a Rayon könyvtárral párhuzamosíthatják a munkájukat.

Miután azt válaszolta: „Igen, kérem”, az egyik tanulóm megemlítette, hogy azért tanul Rustot, mert beágyazott vezérléshez szeretné használni, majd a hatalmas adatkimenetét feldolgozni. Így a párhuzamosság fontos számára. Örült neki, hogy egy látszólag egyszerű feladatot használtam arra, hogy a Rust bonyolultabb és idiomatikusabb részeit tanítsam meg.

Nos, az Exercism-nek köszönhetően felbérelt, hogy egyénileg tanítsam, és néhány kísérleti projekten fogunk együtt dolgozni. A teljes csapatát is tanítani fogom, amikor a céget teljesen Rustra állítja át.

Nagyon élveztem a mentorált tanulóimmal való munkát, és szeretném, ha ez tovább növekedne.

Annyira tetszik, hogy jelentkeztem karbantartónak a Rust-kurzushoz, hogy a háttérben még többet segíthessek.

Ez az emberi kapcsolat nagyon fontos! Te vagy a A Practical Guide to Rust szerzője. Miről szól, és mi motivált az írásában?

Azért írtam meg ezt a könyvet, hogy mások jobban megértsék a Rust bizonyos területeit. Nincs túl sok dokumentáció a nyelvről, és úgy éreztem, kell egy olyan irodalom, amelyben van humor, és kézzelfoghatóan magyarázza el a nyelv fogalmait. Útmutatást ad néhány alapvető és haladó területhez. Szeretném, ha az emberek szilárd képet kapnának a nyelv gyakorlati, valós felhasználásáról. Valódi példákat ad, nem hipotetikusakat.

Mindig is tudtam, hogy írni fogok egy könyvet. Amikor azon kaptam magam, hogy egy kollégámat távoktatásban tanítom Rustban programozni, a keretrendszer csak a helyére került. Ő még soha nem nyúlt kódhoz, és olyan kifejezéseket és módszereket kellett elmagyaráznom, amelyeket mi kockák természetesnek veszünk, új, felfogható módon. Olyan hasonlatokat használtam, mint amikor egy könyvet kiveszünk a könyvtárból, szemben azzal, hogy a sajátunk, amikor a Rustban a tulajdonjog fogalmáról beszéltem.

Példákat is beépítettem a BrewStillery projektemből. Ez remek módja annak, hogy lássuk, hogyan működnek az olyan dolgok, mint a structok és enumok egy valódi programban. Azt is megmutatja, hogyan lehet a párhuzamosságot valóságosan használni.

Amikor a könyvet írtam, tudtam, hogy úgy szeretném megírni, hogy történetként olvasható legyen, ne csak egy referenciakönyvként. Egymásra épül, de az elemek önállóan is megállják a helyüket. Ez a különbség aközött, hogy egy vegyészeti kézikönyvvel főzünk, szemben azzal, hogy megnézzük Julia Child „The French Chef” című műsorának egy epizódját.

Ó, ez érdekes. Kinek írtad a könyvedet, és mit kap belőle az olvasó?

Mindenkinek szánom, aki Rustot szeretne tanulni. A kiegyenlítő tényező abban, ahogyan az ötleteket kifejtem, hogy alapvető megértést ad az olvasónak, míg rengeteg más irodalom a magolás felé hajlik.

Látom, sok pozitív értékelést kaptál. Tervezed, hogy kiadsz egy második kötetet?

Igen! Természetesen folytatom az írást, és több kötetet is tervezek kiadni.

Azon kívül, hogy mentorálással és írással tanítasz, dolgoztál a Rust-fordítón is. Mesélsz erről?

Hogyne!

A munkám rövid bemutatásaként: lényegében két helyen működhet egy program: fordítási időben és futásidőben. Amikor egy függvény futásidőben hajtódik végre, mindent benne újra létre kell hozni és újra ki kell számolni. Ez kritikusan azt jelenti, hogy memóriát kell újra foglalni, amit mindig el akarunk kerülni. Amikor egy függvény konstans, a program indításakor töltődik be a memóriába. Minél többet tudunk fordítási időben elvégezni, annál jobban teljesítenek a programjaink.

Nemrég hallottam, hogy ezt az ötletet, a fordítási idejű függvényvégrehajtást (const fn), éppen implementálják a Rustban, és nagyon izgatott lettem. Szenvedélyesen rajongok azért, hogy a dolgok hatékonyak és pontosak legyenek. Egy dolgot különösen szeretek a const fn-ben: amikor elkészül, csodás dolgokat kapunk, például elegánsan meghatározott matematikai állandókat. Jelenleg a pi egy beégetett érték. Sokan azt mondanák, hogy ez elég pontos, de szerintem ki kellene használnia a rendelkezésre álló numerikus tér teljes egészét. A const fn segítségével használhatjuk Leibniz képletét, amely teljesen kitöltené a lebegőpontos teret.

Kicsit többet olvastam, és rábukkantam egy blogbejegyzésre, amely szerint a MIRI sokkal könnyebbé tenné a const fn stabilizálását. Telt-múlt az idő, és nem láttam semmi fejlődést, amikor új verziók jelentek meg. Felvettem a kapcsolatot a Rust csapatával, és belekezdtem a fordító fejlesztésébe.

A remek az, hogy maga a fordító Rustban íródott. Kezdetben OCaml-ben írták, majd Rustban írták újra, amit bootstrapolásnak neveznek. Alapvetően a fordító az összes bemenetet az AST-ba parse-olja, amelyet aztán átad a magas szintű köztes reprezentációnak (HIR), majd a közepes szintűnek (MIR), végül az alacsony szintűnek (LIR), amelyet a LLVM kezel. Ahogy végighaladunk ezeken a lépéseken, egyre közelebb kerülünk a gépi kódhoz.

Az egyik dolog, amit érdemes megérteni, hogy a fordító csupán egy program, de egy nagyon bonyolult. A Rust meglehetősen sokáig fordítódik, és főleg sokáig tart lefuttatni az összes tesztjét. Szóval nem elég csak beütni némi kódot, és azt mondani: „Kész vagyok.”

A fordítón végzett első munkám a HIR-en volt. Hatalmas mennyiségű olvasást jelentett a standard könyvtárban (a stabilban és a nightlyban is), és jó néhány mellékvágányra tévedtem. Rekurzívan végig kellett mennem a fordító minden egymásba ágyazott típusán, míg ki nem merítettem az összes lehetőséget. A nightly/fordító könyvtárban rengeteg egymásba ágyazott típus van. Nagyon oda kell figyelni, hogy nyomon tartsd, melyik szálat követed.

Hogy még bonyolultabb legyen, a fordítón egy elosztott csapat dolgozik, ami azt jelenti, hogy gyakran kerülünk merge conflictokba.

Nagyon élveztem. Még rengeteg munka van hátra, amire a közeljövőben sort kerítek.

A nyílt forráskódú hozzájárulásaidon kívül tudom, hogy egy blockchain cég CTO-ja vagy. Nekem a blockchainről az jut eszembe, hogy rengeteg pénzt veszítettem az Etheriumon. Számodra mit jelent?

A blockchain sajnos minden idők legfelkapottabb divatszavává vált.

Ez sokkal több, mint hogy a City és a Wall Street meglovagolja a digitális valuta új trendjét. Valójában nem is vagyunk „blockchain cég”, mi a Chainetixnél privát főkönyveket biztosítunk, hogy egy cég adatait biztonságosan megvédjük. Sőt, mi még csak nem is kriptovalutával foglalkozunk. A Chainetix célja, hogy szakértelmünket mindazok kezébe adja, akik alapvetően értenek a programozáshoz.

A munkám során a nulláról térképeztem fel a rendszereinket és az infrastruktúránkat, hogy valami sziklaszilárdat hozzunk létre. Egy Habitat by Chef nevű projektet választottam. Azért találtam rá, mert Rustban íródott, ami izgalmas volt egy olyan hatalmas cégtől, mint a Chef. A sima Dockerrel ellentétben a Habitat olyan image-eket készít, amelyek képesek automatikusan frissíteni magukat, és olyan csodálatos dolgokat tenni, mint a szolgáltatáskötések. Elég sokat hozzájárultam a Habitat core-plans tárolójához is.

Korábban említetted a projektedet, a BrewStillery-t. Úgy tűnik, fontos neked. Mesélsz egy kicsit többet róla?

Igen, mindenképp az!

A BrewStillery egy nyílt forráskódú, mindent egyben sör-, bor- és rövidital-eszköz, amelyet Rustban és GTK3-ban írtam. Hozzáadtam egy csodálatosan egyedi CSS témát is. Egy mondatban: egy fejlett számológép mindenkinek, aki röviditalt készít.

Különböző füleket hoztam létre, hogy szétválasszam a kifejezetten sörhöz és pezsgőhöz tartozó számológépeket, miközben van egy általános fül is, amely a sörfőzőkre, borászokra és szeszfőzőkre egyaránt vonatkozik. Ha megnézed a legtöbb sörös- és borospalackot, látni fogod benne az alkohol százalékos arányát, vagyis az Alcohol By Volume-t. Nos, a BrewStillery egyik funkciója épp ennek az ABV-nek a meghatározása. Ahogy sejtheted, egy csomó kockás izgalom van ebben. Aminek a legjobban örülök, az a sör színének kiszámítása:

BrewStillery sör fül, üres pohár

BrewStillery sör fül, teli pohár

Ez a két kép, az előtte és az utána, azt mutatja, mi történik, miután megadtad a mennyiségeket. Ahogy megvalósítottam, olyan, amit korábban még senki sem csinált. Egy másik remek funkció, hogy minden gépelés közben, azonnal kiszámolódik. Ha szeretnéd a színterek apró részleteit, keress meg egy konferencián, és megbeszélhetjük egy korsó sör mellett!

9. Feb 2019 · Hasznosnak találtad?