Дэйв Херман, самый недооценённый контрибьютор Rust
Автор оригинала — Брайан Андерсон. Он тоже имеет отношение к работе над языком Rust. Понятно, что в своей статье он будет хвалить этот язык, но важнее другое: он раскрывает внутреннюю кухню проекта. Андерсон рассказывает про первые несколько лет работы над Rust в стенах компании Mozilla. Он хочет восстановить справедливость, вспомнив выдающегося, но скромного ментора и инженера, который во многом решил судьбу проекта.
Я считаю, что язык Rust сейчас явно на подъёме. Вспоминаю, как много нужно было сделать правильно, чтобы достичь успеха. Команда неоднократно принимала судьбоносные решения, в которых не была полностью уверена. Каждое неверное решение могло привести проект к провалу. Иногда мы просто не знали правильный ответ. Но в каждой такой ситуации как будто происходило маленькое чудо, и проект двигался дальше. Конечно же, эти «чудеса» происходили не на пустом месте: нас выручала интуиция нескольких очень опытных профессионалов, которые горели проектом и действительно хотели создать что-то крутое.
В разное время над проектом работали многие. Но здесь речь пойдёт об одном из ключевых участников команды, который, на мой взгляд, был очень быстро и незаслуженно забыт.
Mozilla Research
К 2009 году Mozilla получила крупную сумму денег от прибыльной сделки с Google (он стал поисковиком по умолчанию в браузере Firefox). И, насколько я понял, именно в этот момент руководство Mozilla решило вложить деньги в новые проекты.
Так появилось подразделение — Mozilla Research. Его задачей стала разработка экспериментальных проектов совместно с академическим ИТ-сообществом.
Наиболее известными среди таких проектов стали язык программирования Rust и новый браузерный движок Servo.
К руководству подразделением среди прочих был привлечён и Дэйв Херман. О нём я и буду рассказывать до конца статьи.
Кто такой Дэйв Херман?
Дэйв Херман — теоретик языков программирования и, как я его называю, макрофил (тот, кто очень любит макросы). Он был одним из представителей Mozilla в комиссии ECMAScript. Он и Грейдон Хоар, главный разработчик Rust, в то время совместно работали над стандартом ECMAScript 4. Оба горели идеей создания нового языка программирования.
Несмотря на то, что Хоар считается создателем Rust, Херман серьёзно повлиял на многие ключевые решения. Ниже я опишу всё, что помню об этом.
Что конкретно Дэйв Херман сделал для Rust?
Хотя Rust был анонсирован в июне 2010 года, работа над ним внутри Mozilla фактически началась в конце 2009 года. Единственная публичная запись о том этапе разработки на данный момент находится в репозитории rust-prehistory.
За нескольких месяцев до того, как Rust был представлен публике на Mozilla Summit 2010, команда спешно допиливала его. Видно, что вклад Дэйва в эту работу сложно недооценивать:
~/rust-prehistory $ git shortlog -sn
1156 Graydon Hoare
163 Andreas Gal
104 Dave Herman
59 graydon@pobox.com
55 Patrick Walton
37 Graydon Hoare ext:(%22)
13 Roy Frostig
9 graydon@mozilla.com
6 Brendan Eich
5 Michael Bebenita
1 Brian Campbell
Стратегия Дэйва
После этого он почти перестал писать код и в течение нескольких лет работал с командой в другой роли — как более опытный наставник, идейный вдохновитель и аналитик.
В то время большинство из тех, кто работал над Rust, трудились в одном офисе (за исключением, прежде всего, Грейдона, который был на удалёнке) и регулярно собирались за столом в маленьком конференц-зале штаб-квартиры Mozilla в Маунтин-Вью. Команда состояла из штатных сотрудников, постоянно меняющейся толпы стажёров и самого Дэйва Хермана.
Я предполагаю, что он считал себя наставником, мягко подталкивающим команду к продуктивному взаимодействию, основываясь на собственном опыте работы с ECMAScript и на своих собственных представлениях о разработке языков программирования. Но, вместе с тем, он никогда не продавливал решения за счёт своего авторитета и по сей день не пытается претендовать на что-либо в Rust.
Его стратегия заключалась в том, чтобы стать «серым кардиналом», в хорошем смысле этого слова.
Команда обсуждала разные вопросы. Сегодня некоторые из них кажутся странными или ненужными, а ответы на них — очевидными, тривиальными: «Какое ключевое слово использовать, чтобы вернуть результат из функции?» Но некоторые вопросы действительно заставляют задуматься всерьёз: «Как безопасно хранить указатель на поле структуры?».
Дело в том, что в процессе разработки языка каждая мелочь имеет большое значение. Из-за этого было очень сложно избегать коллизий на этапе проектирования. Поэтому Rust формировался постепенно и постоянно переписывался — до тех пор, пока все пазлы не сложились в единую картину. Дэйв был одним из немногих участников команды, имевших большой опыт проектирования языков программирования. И, наверное, работа над Rust превратилась бы в хаос, если бы он не руководил командой в своей ненавязчивой манере. Он структурировал процесс, задавал правильные вопросы и формулировал проблемы, имеющие высокий приоритет на текущий момент времени.
Мировоззрение
Можно сказать, что мировоззрение Дэйва сформировало мировоззрение всей команды и сам язык Rust. И поэтому чаще всего Дэйв был доволен решениями команды.
Дэйв имел право голоса во всех дискуссиях. Но особенно его интересовали несколько тем:
- «Педагогическая составляющая»
Помимо того, что Дэйв инженер, он ещё и преподаватель, ментор. Он считал важным, чтобы суть принятых технологических решений можно было легко объяснить другим специалистам и сообществу в целом. Это требование хорошо помогало, когда к команде присоединялся новый сотрудник или стажёр.
- Прозрачность процессов и развитие сообщества
Rust с самого начала развивался как open source проект. Я думаю, на это во многом повлиял опыт работы Дэйва в комиссии по стандартизации ECMAScript. Он был уверен, что наиболее успешные языки разрабатывает большая группа людей и компаний, которые находят компромисс между собственными мотивами и интересами.
Поэтому процесс разработки Rust нужно было сделать настолько открытым для участия любых заинтересованных сторон, насколько это было разумно в то время. Так, большая часть процесса работы над Rust на ранних этапах была задокументирована в опубликованных протоколах собраний. Уверен, это заслуга Дэйва: многие из этих протоколов были записаны им лично.
Наверное, развитие сообщества Rust — самое важное достижение Дэйва в этом проекте. В том числе это повлияло на его жизнеспособность.
- Макросы
Как я писал выше Дэйв — фанат макросов. У него огромный опыт разработки на языке Racket (мультипарадигменный язык программирования общего назначения, принадлежащий семейству Lisp/Scheme).
Под руководством Дэйва стажёры добавили в Rust декларативные макросы (macro_rules!). Я помню, что он и Пол Стэнсифер (который на тот момент был стажёром) провели много часов, обсуждая, как аккуратно реализовать систему макросов, перейдя из семейства Lisp в семейство C-подобных языков, к которым относится Rust.
- Важно также, что Дэйв сильно повлиял на процесс трансформации Rust из языка операторов в язык выражений.
Подбор ценных специалистов и спасение проекта от смерти
Дэйв привёл в компанию Нико, который разработал систему владения (ownership) Rust. Именно Дэйв взял на работу Иегуду Каца, который создал пакетный менеджер Cargo.
Помимо этого, Дэйв выполнял ещё одну важную роль: когда казалось, что Rust находился под угрозой закрытия, он отстаивал проект перед руководством Mozilla.
Поначалу мы удивились, что Mozilla выделила на этот проект так много денег. Но, пока мы работали над Rust в стенах компании, нам часто казалось, что проект могут закрыть в любой момент. Стало особенно страшно, когда генеральный директор и бывший главный инженер Mozilla Брендан Эйх (к тому же, активный участник команды Rust), покинул компанию. Это стало одной из причин, по которой нужно было скорее создавать крупное сообщество вокруг языка. Мы понимали: время тикает и в любой момент может произойти непоправимое.
Однако Дэйв всегда верил в Rust. Он делал всё, что мог, чтобы спасти проект. Он развивал сообщество, неоднократно просил руководство дать нам время и пытался усилить команду. На самом деле, я не знаю всего, с чем ему пришлось столкнуться. Но главное — мы продолжали работать над Rust, а команда не уменьшалась и даже время от времени росла.
Тем не менее, в проекте всегда не хватало разработчиков. Помню, как я злился: как мы могли конкурировать с Google и Apple, имея такой маленький штат инженеров? Частично, решение этой проблемы сводилось к тому, чтобы создать заинтересованное и разнообразное сообщество контрибьюторов. Но это медленный и непрогнозируемый процесс. Дэйв предложил более оптимальное решение: взять стажёров; много стажёров.
В итоге стажёров у нас стало больше, чем штатных сотрудников. Их всех привёл Дэйв. Rust создавался с активным участием студентов, и многие из них стажировались в Mozilla. Впоследствии это стало частью стратегии развития всего подразделения Mozilla Research.
И после этого вы скажете, что Дэйв Херман мало сделал для Rust?
Что было дальше?
Активное участие Дэйва в разработке Rust закончилось примерно в 2014-2015 году. Скорее всего, большинство участников сообщества Rust (находясь вне компании Mozilla) так и не узнали о его существовании.
Дэйв не был главным разработчиком Rust. После того, как язык Rust представили широкой аудитории, он внёс всего шесть коммитов в публичный репозиторий. Он отправлял свои изменения в список рассылки всего четыре раза.
Но он сформировал команду, которая, по его мнению, создала нечто неординарное. Дэйв мягко привил этой команде ценности и стандарты, которые должны были позволить Rust развиваться и за пределами Mozilla, независимо от участия конкретных личностей.
В начале февраля 2021 года Google, Microsoft, AWS, Huawei, Mozilla запустили некоммерческую организацию Rust Foundation. Она будет отвечать за развитие экосистемы и поддержку разработчиков языка Rust, а также за спонсирование проекта.
Облачные серверы от Маклауд подходят для разработки на Rust.
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!
lrrr11
бгг, как толерантно. На самом деле его оттуда выжили люди, не имеющие отношения к разработке и занятые сейчас повышением собственных окладов на фоне падения рыночной доли огнелиса :)