Uploaded avatar of kytrinyx

Συνέντευξη με τον Meade Kincke

@kytrinyx
πριν από Πάνω από 7 χρόνια

Μια συνέντευξη με τον Meade Kincke στην οποία ο ίδιος και η Katrina Owen συζητούν για τον μεταγλωττιστή της Rust, για ένα γραφικό περιβάλλον που χρησιμοποιεί επιστημονικούς χρωματικούς χώρους για να καθορίσει το χρώμα της μπίρας, και για το βιβλίο του "A Practical Guide to Rust".

Γεια σου Meade. Ευχαριστούμε για τη συζήτηση. Θέλαμε να μιλήσουμε μαζί σου επειδή είσαι ο πιο παραγωγικός μέντορας που έχουμε στη διαδρομή Rust. Έχεις βοηθήσει πάνω από 400 μαθητές. Πώς έμαθες για το Exercism;

Κάποιος στο subreddit της Rust στο Reddit έγραψε ότι η διαδρομή Rust του Exercism χρειαζόταν μέντορες, οπότε το κοίταξα. Χαίρομαι τόσο πολύ που το έκανα, γιατί είναι εξαιρετικά ανταποδοτικό και όλοι ήταν τόσο ευγενικοί και γεμάτοι εκτίμηση. Έχω κάνει υπέροχες γνωριμίες με τους μαθητές μου στο Exercism και λατρεύω να τους βοηθάω.

Υπάρχουν κάποιες ιστορίες που ξεχωρίζουν;

Ναι, υπάρχει μια συγκεκριμένη άσκηση Rust που έχει γίνει πολύ δημοφιλής: η Πυθαγόρεια Τριάδα.

Το πιο συνηθισμένο πρόβλημα σε αυτή την άσκηση τείνει να είναι η απόδοση. Οι περισσότεροι την λύνουν αρχικά με εμφωλευμένους for βρόχους, που είναι τουλάχιστον O(n²) και πολύ αναποτελεσματικό. Ο στόχος μου είναι να φτάσω τους μαθητές μου σε μια γραμμική λύση: O(n).

Η προσέγγισή μου είναι να θέτω ερωτήσεις. Ξεκινάω ρωτώντας αν θέλουν να μάθουν τη μέθοδο iterator της Rust, γιατί έχει πάρα πολλά πλεονεκτήματα, ένα από τα οποία είναι ότι μπορείς να χρησιμοποιήσεις τη βιβλιοθήκη Rayon για να παραλληλοποιήσεις τη δουλειά σου.

Αφού απάντησε "Ναι, παρακαλώ", ένας από τους μαθητές μου ανέφερε ότι μαθαίνει Rust επειδή σκέφτεται να τη χρησιμοποιήσει για ενσωματωμένα συστήματα ελέγχου και μετά για να επεξεργάζεται τον τεράστιο όγκο δεδομένων που βγάζουν. Έτσι, ο παραλληλισμός είναι σημαντικός γι' αυτόν. Χάρηκε που πήρα μια φαινομενικά απλή άσκηση για να του μάθω πιο σύνθετα και ιδιωματικά κομμάτια της Rust.

Τώρα, χάρη στο Exercism, με προσέλαβε για να του κάνω μαθήματα ένας προς έναν, και θα δουλέψουμε μαζί σε κάποια πειραματικά έργα. Θα διδάξω επίσης ολόκληρη την ομάδα του όταν μετατρέψει πλήρως την εταιρεία σε Rust.

Απόλαυσα πραγματικά τη συνεργασία με τους μαθητές που έχω καθοδηγήσει, και θέλω να συνεχίσει να μεγαλώνει.

Μου αρέσει τόσο πολύ που τώρα προσφέρθηκα εθελοντικά να γίνω συντηρητής στη διαδρομή Rust και να βοηθήσω περισσότερο στα παρασκήνια.

Αυτή η ανθρώπινη σύνδεση είναι τόσο σημαντική! Είσαι ο συγγραφέας του A Practical Guide to Rust. Για τι πραγματεύεται και ποια ήταν τα κίνητρά σου για να το γράψεις;

Έγραψα αυτό το βιβλίο για να βοηθήσω άλλους να καταλάβουν καλύτερα ορισμένες πτυχές της Rust. Δεν υπάρχει και τόσο πολλή τεκμηρίωση εκεί έξω για τη γλώσσα, και ένιωσα ότι χρειαζόταν μια βιβλιογραφία με χιούμορ που να εξηγεί τις έννοιες της γλώσσας με τρόπο απτό. Παρέχει οδηγούς για κάποιες βασικές και προχωρημένες περιοχές. Θέλω οι άνθρωποι να αποκτήσουν μια στέρεη αίσθηση της πρακτικής, πραγματικής χρήσης της γλώσσας. Δίνει πραγματικά παραδείγματα, όχι υποθετικά.

Πάντα ήξερα ότι θα έγραφα ένα βιβλίο. Όταν βρέθηκα να διδάσκω σε έναν συνάδελφο προγραμματισμό σε Rust εξ αποστάσεως, το πλαίσιο απλώς μπήκε στη θέση του. Δεν είχε πιάσει ποτέ code πριν, και έπρεπε να εξηγήσω όρους και μεθόδους που εμείς οι nerds θεωρούμε δεδομένους με νέους, κατανοητούς τρόπους. Χρησιμοποίησα αναλογίες, όπως το να δανείζεσαι ένα βιβλίο από τη βιβλιοθήκη έναντι του να το έχεις στην κατοχή σου, όταν συζητούσαμε την έννοια της κυριότητας στη Rust.

Ενσωμάτωσα επίσης παραδείγματα από το έργο μου BrewStillery. Είναι ένας υπέροχος τρόπος να δεις πώς λειτουργούν πράγματα όπως τα structs και τα enums σε ένα πραγματικό πρόγραμμα. Δείχνει επίσης πώς να χρησιμοποιείς τον παραλληλισμό με πραγματικό τρόπο.

Όταν έγραφα το βιβλίο, ήξερα ότι ήθελα να διαβάζεται σαν ιστορία και όχι απλώς σαν εγχειρίδιο αναφοράς. Χτίζεται πάνω στον εαυτό του, αλλά τα στοιχεία στέκονται και μόνα τους. Είναι η διαφορά ανάμεσα στο να μαγειρεύεις με ένα εγχειρίδιο χημείας και στο να βλέπεις ένα επεισόδιο της εκπομπής "The French Chef" της Julia Child.

Ω, αυτό είναι ενδιαφέρον. Για ποιον έγραψες το βιβλίο σου και τι θα αποκομίσει ο αναγνώστης από αυτό;

Προορίζεται για οποιονδήποτε θέλει να μάθει Rust. Ο παράγοντας που ισοσταθμίζει τον τρόπο με τον οποίο αναπτύσσω τις ιδέες είναι ότι δίνει στον αναγνώστη μια θεμελιώδη κατανόηση, ενώ μεγάλο μέρος της άλλης βιβλιογραφίας κλίνει προς την αποστήθιση.

Βλέπω ότι έχεις λάβει πολλές θετικές κριτικές. Σχεδιάζεις να βγάλεις έναν δεύτερο τόμο;

Ναι! Φυσικά θα συνεχίσω να γράφω και σκοπεύω να εκδώσω περισσότερους τόμους.

Πέρα από τη διδασκαλία μέσω καθοδήγησης και το γράψιμο, έχεις δουλέψει και στον μεταγλωττιστή της Rust. Μπορείς να μου πεις γι' αυτό;

Φυσικά!

Ως μια σύντομη εισαγωγή στη δουλειά μου, υπάρχουν ουσιαστικά δύο σημεία όπου μπορεί να λειτουργήσει ένα πρόγραμμα: ο χρόνος μεταγλώττισης και ο χρόνος εκτέλεσης. Όταν μια συνάρτηση εκτελείται σε χρόνο εκτέλεσης, όλα μέσα της πρέπει να αναδημιουργηθούν και να υπολογιστούν ξανά. Αυτό σημαίνει, κρίσιμα, εκ νέου δέσμευση μνήμης, κάτι που θέλουμε πάντα να αποφεύγουμε. Όταν μια συνάρτηση είναι σταθερή, φορτώνεται στη μνήμη όταν ξεκινάει το πρόγραμμα. Όσο περισσότερα μπορούμε να κάνουμε σε χρόνο μεταγλώττισης, τόσο καλύτερα θα αποδίδουν τα προγράμματά μας.

Πριν λίγο καιρό άκουσα ότι αυτή η ιδέα της εκτέλεσης συνάρτησης σε χρόνο μεταγλώττισης (const fn) υλοποιούνταν στη Rust, και ενθουσιάστηκα πολύ. Με παθιάζει να κάνω τα πράγματα αποδοτικά και ακριβή. Κάτι που μου αρέσει πολύ στο const fn είναι ότι, όταν ολοκληρωθεί, μπορούμε να έχουμε υπέροχα πράγματα, όπως μαθηματικές σταθερές που προσδιορίζονται κομψά. Αυτή τη στιγμή, το pi είναι μια καρφωτή τιμή. Πολλοί θα έλεγαν ότι είναι αρκετά ακριβές, αλλά εγώ πιστεύω ότι θα έπρεπε να χρησιμοποιεί ολόκληρο τον διαθέσιμο αριθμητικό χώρο. Με το const fn, μπορούμε να χρησιμοποιήσουμε τον τύπο του Leibniz, που θα γέμιζε πλήρως τον χώρο κινητής υποδιαστολής.

Διάβασα λίγο περισσότερο και έπεσα πάνω σε μια ανάρτηση blog που έλεγε ότι το MIRI θα έκανε πολύ πιο εύκολη τη σταθεροποίηση του const fn. Πέρασε ο καιρός και δεν έβλεπα καμία πρόοδο όταν κυκλοφορούσαν νέες εκδόσεις. Επικοινώνησα με την ομάδα της Rust και ξεκίνησα να πειράζω τον μεταγλωττιστή.

Το υπέροχο είναι ότι ο ίδιος ο μεταγλωττιστής είναι γραμμένος σε Rust. Αρχικά γράφτηκε σε OCaml και μετά ξαναγράφτηκε σε Rust, κάτι που ονομάζεται bootstrapping. Βασικά, ο μεταγλωττιστής αναλύει όλα τα δεδομένα εισόδου στο AST, το οποίο μετά παραδίδεται στην ενδιάμεση αναπαράσταση υψηλού επιπέδου (HIR), μετά στη μέση (MIR) και μετά στη χαμηλού επιπέδου (LIR), την οποία χειρίζεται το LLVM. Καθώς περνάμε από όλα αυτά τα βήματα, πλησιάζουμε όλο και περισσότερο στον κώδικα μηχανής.

Κάτι που πρέπει να καταλάβεις είναι ότι ο μεταγλωττιστής είναι απλώς ένα πρόγραμμα, αλλά πολύ περίπλοκο. Η Rust κάνει αρκετή ώρα να μεταγλωττιστεί και ειδικά να τρέξει όλα τα tests της. Οπότε δεν πετάς απλώς λίγο code μέσα και λες "Τελείωσα".

Η πρώτη μου δουλειά στον μεταγλωττιστή ήταν στο HIR. Περιλάμβανε ένα τεράστιο ποσό διαβάσματος μέσα από την τυπική βιβλιοθήκη (και τη stable και τη nightly) και κυνήγι λαγότρυπων. Έπρεπε να αναδράμω βαθιά μέσα από κάθε εμφωλευμένο τύπο στον μεταγλωττιστή μέχρι να εξαντλήσω όλες τις επιλογές. Η βιβλιοθήκη nightly/compiler έχει πάρα πολλούς εμφωλευμένους τύπους. Το να κρατάς ποιο νήμα ακολουθείς απαιτεί πολλή συγκέντρωση.

Για να γίνουν τα πράγματα πιο περίπλοκα, στον μεταγλωττιστή δουλεύει μια κατανεμημένη ομάδα, που σημαίνει ότι συχνά καταλήγουμε με συγκρούσεις συγχώνευσης.

Ήταν τόσο διασκεδαστικό. Υπάρχει ακόμα πολλή δουλειά να γίνει, την οποία θα πιάσω στο άμεσο μέλλον.

Εκτός από αυτές τις συνεισφορές σε open source, ξέρω ότι είσαι CTO μιας εταιρείας blockchain. Συνδέω το blockchain με το να χάνω πολλά χρήματα στο Etherium. Τι σημαίνει για σένα;

Το blockchain έχει, δυστυχώς, γίνει η πιο πολυσυζητημένη λέξη της μόδας που υπήρξε ποτέ.

Είναι πολύ περισσότερο από το City και τη Wall Street να βγάζουν κέρδος από μια νέα τάση για ψηφιακό νόμισμα. Στην πραγματικότητα δεν είμαστε "εταιρεία blockchain"· εμείς στην Chainetix παρέχουμε ιδιωτικά καθολικά για την ασφαλή προστασία των δεδομένων μιας εταιρείας. Μάλιστα, δεν ασχολούμαστε καν με κρυπτονομίσματα. Στόχος της Chainetix είναι να φέρουμε την τεχνογνωσία μας στα χέρια όλων όσων έχουν μια βασική κατανόηση του προγραμματισμού.

Η δουλειά μου περιλάμβανε τον σχεδιασμό των συστημάτων και της υποδομής μας από το μηδέν, για να δημιουργήσω κάτι εξαιρετικά στέρεο. Επέλεξα ένα έργο που ονομάζεται Habitat by Chef. Το έμαθα επειδή είναι γραμμένο σε Rust, κάτι που ήταν ενδιαφέρον προερχόμενο από μια τόσο μεγάλη εταιρεία όπως η Chef. Σε αντίθεση με το σκέτο Docker, το Habitat δημιουργεί εικόνες που μπορούν να ενημερώνονται μόνες τους και να κάνουν καταπληκτικά πράγματα όπως δεσμεύσεις υπηρεσιών. Έχω επίσης συνεισφέρει αρκετά στο αποθετήριο core-plans του Habitat.

Νωρίτερα ανέφερες το έργο σου, το BrewStillery. Ακούγεται σαν να είναι σημαντικό για σένα. Μπορείς να μας πεις λίγα περισσότερα γι' αυτό;

Ναι, είναι σίγουρα!

Το BrewStillery είναι ένα εργαλείο ανοιχτού κώδικα, ολοκληρωμένο, για μπίρα, κρασί και οινοπνευματώδη, που έγραψα σε Rust και GTK3. Πρόσθεσα επίσης ένα θέμα CSS που είναι υπέροχα μοναδικό. Με μια πρόταση, είναι ένας προηγμένος υπολογιστής για όποιον φτιάχνει οινοπνευματώδη.

Έχω δημιουργήσει διαφορετικές καρτέλες για να χωρίσω τους υπολογιστές που αφορούν ειδικά την μπίρα και τη σαμπάνια, ενώ υπάρχει και μια γενική καρτέλα που ισχύει εξίσου για ζυθοποιούς, οινοποιούς και αποσταγματοποιούς. Αν κοιτάξεις τις περισσότερες φιάλες μπίρας και κρασιού, θα δεις το ποσοστό αλκοόλης σε αυτή τη φιάλη: το ποσοστό αλκοόλης κατ' όγκο (ABV). Λοιπόν, ένα από τα πράγματα που κάνει το BrewStillery είναι να προσδιορίζει αυτό το ABV. Όπως φαντάζεσαι, εδώ υπάρχει άφθονη nerdy μαγεία. Αυτό με το οποίο είμαι πιο ευχαριστημένος είναι ο υπολογισμός του χρώματος της μπίρας:

BrewStillery Καρτέλα Μπίρας Άδειο Ποτήρι

BrewStillery Καρτέλα Μπίρας Γεμάτο Ποτήρι

Αυτές οι εικόνες πριν και μετά δείχνουν τι συμβαίνει αφού έχεις εισαγάγει ποσότητες. Ο τρόπος που το έκανα είναι κάτι που δεν έχει κάνει κανείς στο παρελθόν. Ένα άλλο εξαιρετικό χαρακτηριστικό είναι ότι όλα υπολογίζονται την ώρα που πληκτρολογείς. Αν θέλεις τις ψιλολεπτομέρειες για τους χρωματικούς χώρους, βρες με σε κάποιο συνέδριο και ας τα πούμε πίνοντας καμιά μπίρα!

Translation missing: el.number.nth.ordinalized Feb 2019 · Σου φάνηκε χρήσιμο;