Uploaded avatar of kytrinyx

Un'intervista a Meade Kincke

@kytrinyx
Oltre 7 anni fa

Un'intervista a Meade Kincke in cui lui e Katrina Owen parlano del compilatore di Rust, di una GUI che usa spazi colore scientifici per determinare il colore della birra, e del suo libro «A Practical Guide To Rust».

Ciao Meade. Grazie per questa chiacchierata. Volevamo parlare con te perché sei il mentore più prolifico che abbiamo sul track di Rust. Hai aiutato più di 400 studenti. Come hai scoperto Exercism?

Qualcuno sul subreddit di Rust su Reddit ha scritto che il track di Rust di Exercism aveva bisogno di mentori, così ho dato un'occhiata. Sono così contento di averlo fatto: è immensamente gratificante e tutti sono stati così gentili e riconoscenti. Ho creato dei bellissimi legami con i miei studenti di Exercism e adoro aiutarli.

Ci sono storie particolari che ti sono rimaste impresse?

Sì, c'è un esercizio di Rust in particolare che è stato molto popolare: la terzina pitagorica.

Il problema più comune in questo esercizio è di solito la performance. La maggior parte delle persone lo risolve inizialmente con cicli for annidati, che è quantomeno O(n²) ed è molto inefficiente. Il mio obiettivo è portare i miei studenti a una soluzione lineare: O(n).

Il mio approccio è porre domande. Comincio chiedendo se vogliono imparare il metodo iteratore di Rust, perché ha un sacco di vantaggi, uno dei quali è che puoi usare la libreria Rayon per parallelizzare il tuo lavoro.

Dopo aver risposto «Sì, grazie», uno dei miei studenti ha detto che sta imparando Rust perché sta pensando di usarlo per il controllo embedded e poi per elaborare il suo enorme output di dati. Quindi il parallelismo è importante per lui. È stato contento che io abbia preso un esercizio apparentemente semplice per insegnare parti di Rust più complesse e idiomatiche.

Ora, grazie a Exercism, mi ha assunto per seguirlo in lezioni uno a uno, e lavoreremo insieme ad alcuni progetti sperimentali. Insegnerò anche a tutto il suo team quando convertirà completamente l'azienda a Rust.

Mi è davvero piaciuto lavorare con gli studenti che ho seguito come mentore, e voglio che questa cosa continui a crescere.

Mi piace talmente tanto che ora mi sono offerto volontario come maintainer del track di Rust, per aiutare di più dietro le quinte.

Quel legame umano è così importante! Sei l'autore di A Practical Guide to Rust. Di cosa parla e quali sono state le tue motivazioni per scriverlo?

Ho scritto questo libro per aiutare gli altri a capire meglio alcuni aspetti di Rust. Non c'è poi così tanta documentazione sul linguaggio in giro, e sentivo che ci voleva una letteratura con un po' di umorismo, che spiegasse i concetti del linguaggio in modo tangibile. Offre guide ad alcune aree di base e avanzate. Voglio che le persone acquisiscano un'idea solida dell'uso pratico e reale del linguaggio. Fornisce esempi reali, non ipotetici.

Ho sempre saputo che avrei scritto un libro. Quando mi sono trovato a insegnare a distanza a un collega come programmare in Rust, la struttura si è incastrata da sola. Non aveva mai toccato codice prima, e io dovevo spiegare termini e metodi che noi nerd diamo per scontati in modi nuovi e comprensibili. Ho usato analogie come prendere un libro in prestito dalla biblioteca invece di possederlo, quando parlavo del concetto di ownership in Rust.

Ho anche inserito esempi dal mio progetto BrewStillery. È un ottimo modo per vedere come funzionano cose come struct ed enum in un programma vero. Mostra anche come usare il parallelismo in modo reale.

Quando scrivevo il libro, sapevo che volevo che si leggesse come una storia e non come una semplice guida di riferimento. Si costruisce su se stesso, ma gli elementi restano autonomi. È la differenza tra cucinare con un manuale di chimica e guardare un episodio di «The French Chef» di Julia Child.

Oh, interessante. Per chi hai scritto il libro e cosa se ne porta a casa il lettore?

È pensato per chiunque voglia imparare Rust. Il punto di forza del modo in cui elaboro le idee è che dà al lettore una comprensione di fondo, mentre molta altra letteratura punta all'imparare a memoria.

Vedo che hai ricevuto molte recensioni positive. Hai in programma di pubblicare un Volume II?

Sì! Continuerò naturalmente a scrivere e ho in programma di pubblicare altri volumi.

Oltre a insegnare attraverso il mentoring e la scrittura, hai anche lavorato sul compilatore di Rust. Puoi raccontarmelo?

Certo!

Come breve introduzione al mio lavoro, essenzialmente un programma può funzionare in due punti: il tempo di compilazione e il runtime. Quando una funzione viene eseguita a runtime, tutto ciò che contiene deve essere rigenerato e ricalcolato. Questo significa, cosa cruciale, riallocare memoria, cosa che vogliamo sempre evitare. Quando invece una funzione è costante, viene caricata in memoria all'avvio del programma. Più cose riusciamo a fare in fase di compilazione, migliori saranno le prestazioni dei nostri programmi.

Un po' di tempo fa ho sentito che questa idea della esecuzione delle funzioni in fase di compilazione (const fn) stava venendo implementata in Rust, e mi sono emozionato molto. Mi appassiona molto rendere le cose efficienti e accurate. Una cosa che mi piace davvero di const fn è che, quando sarà completa, potremo avere cose meravigliose come le costanti matematiche determinate in modo elegante. Attualmente, pi è un valore codificato a mano. Molti direbbero che è sufficientemente accurato, ma io penso che dovrebbe usare l'intero spazio numerico disponibile. Con const fn, possiamo usare la formula di Leibniz, che riempirebbe completamente lo spazio dei numeri in virgola mobile.

Ho letto ancora un po' e mi sono imbattuto in un post di un blog che diceva che MIRI avrebbe reso molto più semplice stabilizzare const fn. È passato del tempo, e non ho visto alcun progresso quando uscivano le nuove versioni. Ho contattato il team di Rust e ho iniziato a lavorare sul compilatore.

La cosa fantastica è che il compilatore stesso è scritto in Rust. All'inizio era scritto in OCaml e poi riscritto in Rust, cosa che si chiama bootstrapping. In pratica, il compilatore analizza tutto l'input nell'AST, che viene poi passato alla rappresentazione intermedia di alto livello (HIR), poi a quella di livello medio (MIR), e infine a quella di basso livello (LIR), che è gestita da LLVM. Man mano che attraversiamo tutti questi passaggi, ci avviciniamo sempre di più al codice macchina.

Una cosa da capire è che il compilatore è solo un programma, ma molto elaborato. Rust richiede parecchio tempo per compilare e soprattutto per eseguire tutti i suoi test. Quindi non è che butti dentro un po' di codice e puoi dire «Ho finito».

Il mio primo lavoro sul compilatore ha riguardato l'HIR. Ha comportato una quantità enorme di lettura attraverso la libreria standard (sia stabile che nightly) e di inseguimenti lungo ogni cunicolo. Ho dovuto risalire ricorsivamente attraverso ogni tipo annidato nel compilatore finché non avevo esaurito tutte le opzioni. La libreria nightly/compilatore ha un sacco di tipi annidati. Mantenere il filo di quale thread stai seguendo richiede molta concentrazione.

Per rendere le cose più complicate, al compilatore lavora un team distribuito, il che significa che spesso ci ritroviamo con conflitti di merge.

È stato divertentissimo. C'è ancora un sacco di lavoro da fare, a cui mi dedicherò nel prossimo futuro.

Oltre a questi contributi open source, so che sei CTO di un'azienda blockchain. Associo la blockchain all'aver perso un sacco di soldi con Etherium. Cosa significa per te?

La blockchain è diventata, purtroppo, la parola alla moda più inflazionata di sempre.

È molto più che la City e Wall Street che lucrano su una nuova tendenza per la valuta digitale. In realtà non siamo un'«azienda blockchain»: noi di Chainetix forniamo registri privati per proteggere in modo sicuro i dati di un'azienda. Anzi, non ci occupiamo nemmeno di criptovaluta. L'obiettivo di Chainetix è mettere la nostra competenza nelle mani di tutti coloro che hanno una conoscenza di base della programmazione.

Il mio lavoro ha comportato il mappare da zero i nostri sistemi e la nostra infrastruttura per creare qualcosa di solidissimo. Ho scelto un progetto chiamato Habitat by Chef. L'ho scoperto perché è scritto in Rust, cosa intrigante visto che veniva da un'azienda enorme come Chef. A differenza del semplice Docker, Habitat crea immagini che possono aggiornarsi da sole e fare cose straordinarie come i service binding. Ho anche contribuito parecchio al repository core-plans di Habitat.

Prima hai citato il tuo progetto, BrewStillery. Sembra che sia importante per te. Puoi raccontarci qualcosa di più?

Sì, lo è decisamente!

BrewStillery è uno strumento open source tuttofare per birra, vino e distillati che ho scritto in Rust e GTK3. Ho anche aggiunto un tema CSS bellissimo e unico. In una frase, è un calcolatore avanzato per chiunque produca distillati.

Ho creato diverse schede per separare i calcolatori specifici per birra e champagne, con una scheda generale valida sia per i birrai, sia per i viticoltori, sia per i distillatori. Se guardi la maggior parte delle bottiglie di birra e vino, vedrai la percentuale di alcol in quella bottiglia, l'Alcohol By Volume. Bene, una delle cose che BrewStillery fa è determinare quell'ABV. Come puoi immaginare, qui c'è un sacco di nerdaggine fantastica. La cosa di cui sono più contento è il calcolo del colore della birra:

Scheda Birra di BrewStillery, bicchiere vuoto

Scheda Birra di BrewStillery, bicchiere pieno

Queste immagini prima e dopo mostrano cosa succede dopo aver inserito le quantità. Il modo in cui l'ho fatto è qualcosa che nessuno aveva fatto prima. Un'altra grande funzionalità è che tutto viene calcolato al volo mentre digiti. Se vuoi i dettagli più crudi sugli spazi colore, trovami a una conferenza e ne parliamo davanti a una pinta!

09 febbraio 2019 · Ti è stato utile?