Uploaded avatar of kytrinyx

Інтервʼю з Мідом Кінке

@kytrinyx
Більше 7 років тому

Інтервʼю з Мідом Кінке, у якому він і Катріна Оуен говорять про компілятор Rust, графічний інтерфейс, що визначає колір пива за допомогою наукових колірних просторів, і його книжку «A Practical Guide To Rust».

Привіт, Міде. Дякуємо за розмову. Ми хотіли поговорити з вами, бо ви найпродуктивніший наставник на нашому треку Rust. Ви допомогли понад 400 учням. Як ви дізналися про Exercism?

Хтось у сабредіті Rust на Reddit написав, що треку Rust на Exercism потрібні наставники, тож я зацікавився. Я дуже радий, що так зробив, бо це неймовірно надихає, а всі були такими привітними й вдячними. У мене склалися чудові стосунки з моїми учнями на Exercism, і я дуже люблю їм допомагати.

Чи є якісь історії, які особливо запамʼяталися?

Так, є одна вправа на Rust, яка стала дуже популярною: Pythagorean Triplet.

Найпоширеніша проблема в цій вправі - продуктивність. Більшість людей спершу розвʼязують її вкладеними циклами for, а це щонайменше O(n²) і дуже неефективно. Моя мета - довести учнів до лінійного розвʼязку: O(n).

Мій підхід - ставити запитання. Я починаю з питання, чи не хочуть вони вивчити методи ітераторів у Rust, бо вони мають безліч переваг, одна з яких - можливість скористатися бібліотекою Rayon, щоб розпаралелити роботу.

Після відповіді «Так, будь ласка» один з моїх учнів розповів, що вивчає Rust, бо розглядає його для вбудованого керування, а потім для обробки величезних обсягів даних, які воно видає. Тож паралелізм для нього важливий. Він був задоволений, що я взяв, здавалося б, просту вправу, щоб навчити складніших та ідіоматичніших речей у Rust.

Тепер, завдяки Exercism, він найняв мене, щоб я навчав його індивідуально, і ми разом будемо працювати над кількома експериментальними проєктами. Я також буду навчати всю його команду, коли він повністю переведе компанію на Rust.

Мені дуже сподобалося працювати з учнями, яких я наставляв, і я хочу, щоб ця справа й надалі зростала.

Мені це так подобається, що тепер я зголосився стати мейнтейнером треку Rust і більше допомагати за лаштунками.

Цей людський звʼязок такий важливий! Ви автор книжки A Practical Guide to Rust. Про що вона і що спонукало вас її написати?

Я написав цю книжку, щоб допомогти іншим краще зрозуміти деякі аспекти Rust. Документації про цю мову не так уже й багато, і я відчував, що потрібна література з гумором, яка наочно пояснює концепції мови. У ній є посібники з деяких базових і просунутих тем. Я хочу, щоб люди добре відчули практичне, реальне застосування цієї мови. Там наведено справжні приклади, а не гіпотетичні.

Я завжди знав, що напишу книжку. Коли я викладав колезі програмування Rust віддалено, структура книжки склалася сама собою. Він до того жодного разу не торкався коду, і мені треба було пояснювати терміни й методи, які ми, технарі, сприймаємо як належне, у новий, зрозумілий спосіб. Коли я розповідав про концепцію володіння в Rust, я використовував аналогії: позичити книжку в бібліотеці проти володіти нею.

Я також додав приклади зі свого проєкту BrewStillery. Це чудовий спосіб побачити, як такі речі, як структури й переліки, працюють у справжній програмі. Він також показує, як використовувати паралелізм по-справжньому.

Пишучи книжку, я знав, що хочу, щоб вона читалася як історія, а не просто як довідник. Вона будується на собі самій, але кожен елемент самодостатній. Різниця така сама, як між готуванням за підручником із хімії та переглядом епізоду «The French Chef» Джулії Чайлд.

О, це інтригує. Для кого ви написали книжку, і що читач із неї винесе?

Вона призначена для всіх, хто хоче вивчити Rust. Мій підхід до пояснення ідей зрівнює шанси читача: він отримує фундаментальне розуміння, тоді як значна частина іншої літератури схиляється до зубріння.

Бачу, ви отримали багато схвальних відгуків. Чи плануєте видати другий том?

Так! Я, звичайно, продовжу писати і планую видати більше томів.

Крім наставництва і написання книжок, ви також попрацювали над компілятором Rust. Можете розповісти про це?

Звісно!

Для початку трохи про мою роботу: по суті, програма може функціонувати у двох режимах - під час компіляції та під час виконання. Коли функція виконується вже під час роботи програми, усе в ній доводиться створювати й обчислювати заново. Це критично означає повторне виділення памʼяті, якого ми завжди хочемо уникати. Коли функція є константною, вона завантажується в памʼять під час запуску програми. Чим більше ми можемо зробити під час компіляції, тим краще будуть працювати наші програми.

Якось я почув, що цю ідею виконання функцій під час компіляції (const fn) почали впроваджувати в Rust, і це мене дуже надихнуло. Я дуже прагну, щоб усе було ефективним і точним. Мені дуже подобається в const fn те, що коли його буде завершено, у нас зʼявляться чудові речі, як-от математичні константи, визначені елегантно. Зараз пі - це жорстко закодоване значення. Багато хто скаже, що цього достатньо для точності, але я вважаю, що варто використовувати весь доступний числовий простір. З const fn ми можемо скористатися формулою Лейбніца, яка заповнила б простір чисел з плаваючою комою повністю.

Я почитав ще трохи й натрапив на допис у блозі про те, що MIRI значно полегшить стабілізацію const fn. Минув час, але з виходом нових версій я не бачив жодного поступу. Я звʼязався з командою Rust і взявся за компілятор.

Найкраще те, що сам компілятор написано на Rust. Спочатку його написали на OCaml, а потім переписали на Rust, і це називається бутстрапінгом. По суті, компілятор розбирає всі вхідні дані в AST, який потім передається до проміжного представлення високого рівня (HIR), далі середнього рівня (MIR), а потім низького рівня (LIR), з яким працює LLVM. Проходячи всі ці кроки, ми дедалі більше наближаємося до машинного коду.

Варто розуміти, що компілятор - це просто програма, але дуже складна. Rust компілюється досить довго, а надто довго виконуються всі його тести. Тож не можна просто вкинути трохи коду і сказати: «Готово».

Моя перша робота над компілятором стосувалася HIR. Вона вимагала перечитати безліч коду стандартної бібліотеки (і стабільної, і нічної) та пройти безліч заплутаних шляхів. Мені довелося рекурсивно спуститися крізь кожен вкладений тип у компіляторі, доки я не вичерпав усі варіанти. У нічній бібліотеці компілятора безліч вкладених типів. Не втратити нитку, за якою йдеш, вимагає великої зосередженості.

Ускладнює все й те, що над компілятором працює розподілена команда, через що ми часто отримуємо конфлікти злиття.

Це було дуже цікаво. Роботи ще безліч, і я візьмуся за неї найближчим часом.

Крім цих внесків у відкритий код, я знаю, що ви технічний директор (CTO) блокчейн-компанії. У мене блокчейн асоціюється з тим, як я втрачаю купу грошей на Etherium. Що він означає для вас?

Блокчейн, на жаль, став найзаїждженішим модним словом усіх часів.

Це набагато більше, ніж просто спроба Сіті та Волл-стріт заробити на новій тенденції цифрової валюти. Ми насправді не «блокчейн-компанія»: у Chainetix ми надаємо приватні реєстри, щоб надійно захищати дані компанії. Насправді ми навіть не маємо справи з криптовалютою. Мета Chainetix - зробити наш досвід доступним кожному, хто має базове розуміння програмування.

У своїй роботі я з нуля проєктував наші системи та інфраструктуру, щоб створити щось надійне, як скеля. Я обрав проєкт Habitat by Chef. Я дізнався про нього, бо його написано на Rust, а це інтригувало, зважаючи на таку велику компанію, як Chef. На відміну від звичайного Docker, Habitat створює образи, які можуть оновлюватися автоматично й робити дивовижні речі, як-от привʼязки сервісів. Я також чимало долучився до репозиторію core-plans від Habitat.

Раніше ви згадували свій проєкт BrewStillery. Схоже, він для вас важливий. Можете розповісти про нього трохи більше?

Так, безперечно!

BrewStillery - це відкритий універсальний інструмент для пива, вина й міцних напоїв, який я написав на Rust і GTK3. Я також додав CSS-тему, яка дивовижно неповторна. Якщо коротко, це просунутий калькулятор для всіх, хто займається міцними напоями.

Я створив різні вкладки, щоб розділити калькулятори, специфічні для пива й шампанського, і водночас мати загальну вкладку, яка підходить і пивоварам, і виноробам, і винокурникам.

Якщо подивитися на більшість пляшок пива чи вина, можна побачити відсоток алкоголю в пляшці, тобто обʼємну частку алкоголю. Одна з речей, які робить BrewStillery, - визначати цю обʼємну частку алкоголю. Як можна здогадатися, тут задіяно купу технарської крутості. Найбільше мене тішить обчислення кольору пива:

Вкладка пива в BrewStillery, порожня склянка

Вкладка пива в BrewStillery, повна склянка

Ці знімки «до» і «після» показують, що відбувається після введення кількостей. Те, як я це зробив, раніше не робив ніхто. Ще одна чудова можливість - усе обчислюється на льоту прямо під час набору. Якщо комусь захочеться дізнатися всі подробиці про колірні простори, можна підійти до мене на якійсь конференції, і ми поговоримо про це за кухлем пива!

Translation missing: uk.number.nth.ordinalized Feb 2019 · Виявилося корисним?