[Перевод] Как Microsoft переписала компилятор C# на C# и сделала его открытым

Автор статьи — Мэдс Торгерсен, ведущий архитектор C# в Microsoft

Проект Roslyn

Roslyn — это кодовое название, которое закрепилось за open-source компилятором для C# и Visual Basic.NET. Проект начинался в самой глубокой тьме последнего десятилетия корпоративной жизни Microsoft — и завершился как проект с открытым исходным кодом, кросс-платформенный, публичный универсальный движок для C# (и VB, что я приму как данность в остальной части статьи).

Первые разговоры о проекте, который впоследствии станет известен как Roslyn, уже шли, когда я пришёл на работу в Microsoft в 2005 году — незадолго до выпуска .NET 2.0. Шёл разговор о переписывании C# на C#. Это нормальная практика для языков программирования — доказательство зрелости языка. Но была и более практичная и важная мотивация: мы, создатели C#, сами не программировали на C#, мы программировали на C++! Если же ежедневно программировать на C#, то вы меняете своё мнение: великая сила работы на том инструменте, какой разрабатываете (dogfooding).

Пользователи зависят от поведения нового компилятора в точности как от старого. Написание нового компилятора для C# — это попытка найти соответствие баг-к-багу.


Трудность переписывания компилятора, который уже несколько лет находится в активном использовании, состоит в том, что пользователи зависят от поведения нового компилятора в точности как от старого. Написание нового компилятора для C# — это попытка найти соответствие баг-к-багу. И я говорю не только об известных багах, но также о неизвестных ошибках и нежелательных формах поведения, которые разработчики нашли и используют, часто неосознанно.

В течение многих лет масштабы этой проблемы не позволяли нам даже приступить к осуществлению проекта.

И хотя разработчики языковой группы в Microsoft получали много преимуществ от нового компилятора C#, написанного на C#, однако ценность для конечных пользователей была не так очевидна: чем новый компилятор будет им полезен? Возможно, единственные люди, которых волнует, что компилятор C# написан на C# — это сами разработчики компилятора.

В то же время всё больше проявляла себя ещё одна проблема: дублирование усилий между различными инструментами, работающими на коде C#. Кроме компилятора, другая команда работала над поддержкой IDE для C# в Visual Studio, и им тоже приходилось писать кучу кода (в то время тоже на C++), чтобы понять синтаксис и семантику C#.

Одновременно росло и количество инструментов от Microsoft и других компаний, таких как StyleCop, CodeRush и т.д.: все они должны реализовать осмысленную обработку кода C#. У каждой из этих программ свои чуть различные ошибки, разные уровни понимания, различные компромиссы и уступки. И все они потратили бы очень много усилий, чтобы прийти к единому пониманию кода.

И мы решились на важное предложение: сделать так, чтобы в мире была только одна кодовая база — единая база для всех инструментов, которые работают с кодом C#!


Ценность такого предложения вытекает из увеличения числа имеющихся инструментов, и особенно из повышения качества существующих инструментов. Все требования к правильности и производительности языка возлагаются на единую кодовую базу. Достаточно однократных усилий, чтобы сделать базу звёздного качества и огромной универсальности. Мы же создадим настоящий движок для языка! Унифицированный, открытый API для кода C#. Мы дадим новое определение понятию «компилятор».

Конечно, как только вы создаете API для широкого сообщества C#, то как бы само собой разумеется, что это должен быть .NET API, реализованный на C#. Итак, давняя мечта написания C# на C# осуществляется почти как случайный побочный эффект.

Таким образом, Roslyn родился из менталитета открытости: совместное использование внутренней работы C# для программного использования всем миром. Это само по себе было немного смелым предложением для ещё довольно закрытой корпоративной культуры Microsoft.


Мы будем делиться интеллектуальной собственностью бесплатно? Мы будем расширять возможности инструментов, которые конкурируют с нами?

В корпоративном обсуждении нам помогли выиграть аргументы об укреплении экосистемы и создании языка с лучшим инструментарием на планете. Речь шла о долгосрочном росте C# и .NET по сравнению с краткосрочной монетизацией и защитой активов Microsoft. Таким образом, даже не упоминая открытый исходный код, ставка на Roslyn стала большим и смелым шагом для Microsoft.

Конечно, разработка чего-то подобного не может оказаться простой. Перспективы Roslyn были очень амбициозными и чреватыми техническими проблемами, и нам потребовалось полдесятилетия, чтобы справиться со всем. Но это уже другая история.

В течение большей части первоначальной разработки Roslyn оставался проектом с закрытым исходным кодом.

С самого начала серьёзной работы над проектом в 2009 году у нас были идеи сделать компиляторы открытыми, но Microsoft просто ещё не была готова.


В Microsoft с 1970-х годов существовала культура закрытой разработки и защиты исходного кода патентами. И хотя изменения витали в воздухе, но происходили медленнее, чем надеялась наша команда.

На самом деле какое-то время казалось, что компания идёт в совершенно противоположном направлении.

Проект Windows 8 очень сильно повлиял на всю компанию. Благодаря новой модели программирования его щупальца проникли глубоко в команды разработчиков инструментов и языков, и всё было покрыто крайней секретностью, не только снаружи, но даже внутри компании. В качестве примера, функция async, которую мы разрабатывали в то время, была скоординирована и смешана с моделью программирования Windows 8, и я бы не осмелился публиковать заметки о её дизайне даже внутри компании, опасаясь случайной утечки информации о Windows 8 и проблем на свою голову! Это создавало ужасный климат для инноваций, и конечно, не позволяло нам надеяться на открытый исходный код компилятора C#.

Однако в итоге, когда Windows 8 пошла своей дорогой, компания начала трансформироваться и нашла новое направление, новое руководство и совсем иную философию — та Microsoft, которую мы знаем сегодня. Открытые исходники сейчас стремительно распространяются внутри Microsoft.

F# выпущен уже в 2010 году с открытой лицензией и собственной организацией — F# Software Foundation. Вокруг него сформировалось выдающееся сообщество, которое вскоре стало предметом зависти для всех нас. Наша команда упорно настаивала на том, чтобы получить свободную лицензию для Roslyn — и, наконец, корпоративная инфраструктура позволила осуществить это.

К 2012 году Microsoft создала организацию Microsoft Open Tech, специально ориентированную на проекты с открытым исходным кодом. Roslyn перешёл под её крыло и официально стал проектом open source. Roslyn вполне созрел для этого: все ресурсы разработки были внутренними и хорошо известными, и сам проект не страдал от большого количества зависимостей, которые могли бы породить лицензионные конфликты.

В апреле 2014 года на конференции разработчиков Build в Сан-Франциско Андерс Хейлсберг представил Roslyn как проект с открытым исходным кодом, а сами исходники опубликовали 3 апреля на CodePlex (бывшая платформа Microsoft для репозиториев) под лицензией Apache 2.0.

f283050692391316a32b261da985e72c.png

В то же время .NET Foundation объявили базой для .NET-проектов, включая Roslyn.

Это освобождение стало настоящим глотком свежего воздуха! Мы начали пожинать плоды открытости уже в CodePlex, а затем были устранены оставшиеся процедурные препятствия с открытым исходным кодом в Microsoft, так что сегодня open source является естественной и неотъемлемой частью того, как мы работаем во многих наших командах.

Мы уже не рассматриваем GitHub как место для публикации исходников — это просто место нашей работы.


На других фронтах компания тоже поняла, что необязательно стремиться всё контролировать. Стало ясно, что нет никаких веских причин для существования CodePlex — и Roslyn вместе с другими проектами мигрировал на GitHub, к тому времени де-факто основную площадку для проектов с открытым исходным кодом. Не только сам код, но и процесс его создания ведётся в GitHub: мы уже не рассматриваем GitHub как место для публикации исходников — это просто место нашей работы.

6262400755a6d4c39386803c6477d500.png

Дизайн языка C# и реализация компилятора — теперь полностью открытые процессы, со значительным участием сторонних разработчиков. Они создают в том числе целые языковые функции. Ценность C# просто зашкаливает не только за счёт масштабирования усилий при написании функций и исправлении ошибок, но и за счёт понимания и коррекции курса, которые мы производим благодаря мгновенному ежедневному циклу обратной связи с сообществом.

Это было долгое и сумасшедшее путешествие, и для меня оно символизирует огромные изменения, которые претерпела Microsoft в последнее десятилетие. Самородок Roslyn родился в темноте, но вырос на идеях открытости — и сегодня взорвался миллионом различных применений благодаря силе open source.

Изучайте Roslyn и дизайн языка C#:

Roslyn на GitHub
C# на GitHub

© Habrahabr.ru