Microsoft TypeScript Devs Объясните, почему они выбрали Rust, C#

На прошлой неделе Microsoft объявила, что компилятор TypeScript переносится на новый язык программирования — Go. А затем раунд обсуждений начался в Интернете … все очарованы своим решением с высокими ставками, и несколько комментаторов не могли удержаться от выбора команды по разработке, выбранным новым языком программирования.

Зачем идти? Почему бы не собственный C# Microsoft или горячий язык дня, Rust?

Разработчики TypeScript вскоре оказались в некомысленном коллоквиуме, происходящем на GitHub, Reddit, YouTube и Hacker News, объясняя их процесс принятия решений и все явные и неоспоримые преимущества GO. На фоне всей дискуссии на обратном и отрядах вместе они предложили удивительно образовательное исследование различных достоинств нескольких различных языков программирования.

И по пути они даже дали подробное объяснение того, почему они решили уйти компилятора Port Typescript…

Но почему бы не C#?

Текущий компилятор TypeScript написан на языке TypeScript. Но на Reddit было забавное, но неопровержимое возвращение, когда один комментатор предложил C# «есть почти все, что вам нужно» для переписывания кода TypeScript.

«Ну, вы можете сказать это парню, который создал TypeScript и C#, но он не согласен с вами».

Действительно, этот вопрос Андерс Хейлсберг, обращенный во время видео, объявляющего о переезде. «Некоторые из вас могут спросить:« Ну, почему не мой любимый язык?

Хейлсберг ответил, что GO был «языком на самом низком уровне, который мы можем получить, который дает нам полную, оптимизированную поддержку нативного кода на всех платформах, отличный контроль над макетом данных, возможность иметь циклические структуры данных и так далее.

Hejlsberg также обратился к этому вопросу в специальном интервью Zoom для канала YouTube ежемесячной встречи TypeScript в Энн -Арборе, штат Мичиган. Хейлсберг описал C# как «Bytecode-Pirst, если хотите». Кроме того, когда дело доходит до производительности, компиляция C#на предварительном времени не доступна на всех платформах, и «у него нет десятилетия или более упрочнения…»

«А потом я думаю, что Go обладает немного большей выразительностью, когда дело доходит до макета структуры данных, встроенных структур и так далее».

Но было также что -то уникальное в исходной кодовой базе Microsoft для его компилятора. В то время как C#-это объектно-ориентированный язык, TypeScript использует «очень мало классов»,-сказал Хейлсберг в интервью Zoom. «На самом деле, основной компилятор вообще не использует классы…

«GO-это функции и структуры данных, где C#-это объектно-ориентированное программирование (ООП).

На Reddit один комментатор даже собрал все официальные ответы от Microsoft в удобную диаграмму-у Go был хорошо проверяемый вариант родного, поддерживающий все их желаемые платформы (в отличие от C#).

Почему не ржавчина?

В комментарии Reddit, в котором получилось 1305 продотов, ведущий разработчик типовой цизи, Райан Кавано признал землю любопытства. «Мы определенно знали, когда выбирали Go, что будут люди, которые задаются вопросом, почему мы не выбирали ржавчину (или другие).

«Это хороший вопрос, потому что ржавчина — отличный язык, и за исключением других ограничений, является сильным первым выбором при написании нового нативного кода».

Кавано написал, что и Rust, и Go хороши в представлении данных, имеют «отличные» инструменты генерации кодов и хорошо работают в одноядерных системах. «По нашему мнению, Руста дико преуспевает в своих целях дизайна, но« прост к порту до ржавчины от этой конкретной кодовой базы JavaScript »очень рационально не является одной из его целей дизайна.

«Это тоже не один из Go, но в нашем случае, учитывая то, как мы написали код до сих пор, он оказывается довольно хорошим в этом».

Кавано поделился некоторой инсайдерской информацией: что они пробовали ржавчину. Но они хотели, чтобы новая кодовая база была «алгоритмически похожа на текущую», а Руст просто не подходила. «Мы пробовали тонны подходов, чтобы получить представление, которое сделало бы этот порт подход, который можно было бы привлекать к ржавению, но у всех них были недопустимые компромиссы (производительность, эргономика и т. Д.), Или перенесенные в« Напишите свой собственный сборник мусора ».

Кавано объясняет в часто задаваемых вопросах проекта на GitHub, что они также пробовали и другие языки, и даже «провели глубокие исследования в подходах, используемых существующими анализаторами нативного типового показателя, таких как SWC, OXC и ESBUILD». Кавано говорит, что они пришли к двум важным выводам.

  • «Многие языки будут подходящими в ситуации переписывания на основе».
  • «Go сделал лучшее при рассмотрении нескольких критериев, которые являются особенными для этой ситуации…»

На Reddit кто-то указал, что Go дает «более мелкозернистый контроль над памятью»-и Райан Кавано вскочил, чтобы согласиться с тем, что GO «имеет отличный контроль» над распределением памяти. Обход встроенного распределителя GO с распределением бассейна «очень прост (и легко экспериментировать без изменения в нижнем использовании)».

Для сравнения, Кавано добавляет: «Ржаст лучше контролирует« когда вы свободно воспользуетесь памятью », но в шашере типа почти ничего не сможете освободить, пока не закончите делать всю партию, так что вы на самом деле ничего не получаете над моделью GC в этом сценарии».

В FAQ Cavanaugh также аплодирует управление GO в области макета памяти — и что он делает все это «не требуя, чтобы вся кодовая база постоянно касалась управления памятью».

Поэтому, когда дело доходит до ржавчины, Кавано объяснил на Reddit, что они столкнутся с двумя вариантами:

  • «Сделайте полную переписывание с царапином в Rust, что может занять годы и дать несовместимую версию TypeScript, которую никто не мог использовать…»
  • «Просто сделайте порт в Go и получите что -то полезное через год или около того, и у вас есть что -то чрезвычайно совместимое с точки зрения семантики и чрезвычайно конкурентоспособности с точки зрения производительности».

В комментарии к Hacker News Cavanaugh напомнил читателям, что в 2022 году проект SWC (Speedy Web Compiler) также решил перейти на порт TypeScript Type Checker TSC. (Основатель проекта Донгюн Канг отметил, что TSC «использует много общей изменчивости, и многие детали зависят от сбора мусора. Несмотря на то, что я сторонник и сторонник ржавчины, это не похоже на правильный инструмент для работы здесь».)

«KDY1 определенно достиг правильного общего подхода со своим первым портом GO», — сказал Кавано в комментарии к Reddit.

Плюсы и минусы

В интервью Zoom Anders признается, что Typescript имеет «гораздо более богатую» систему типа, чем в Go. Но с другой стороны, Go «действительно обладает отличной поддержкой для битовых и упаковочных флагов в INT. Он смеется. «Я имею в виду, вы хотите представить истину или ложь?

Хейлсберг говорит, что в ходе есть больше, чем просто использовать все кусочки. «Мы также можем изложить их в качестве структуры — вы знаете, в массивах.

И здесь Хейлсберг сделал паузу, чтобы подумать о том, какая это была долгая, странная поездка, говоря, что он часто смеялся над тем, что он сказал бы, если бы люди сказали ему: «Андерс, вы будете писать компиляторы в JavaScript в течение десятилетия»…

«Ты чокнутый».

«JavaScript никогда не предназначался для того, чтобы быть языком для рабочих нагрузок на вычислительном уровне,…»,-говорит он. «В то время как GO был точно предназначен для того, чтобы… GO-это инструмент системного уровня, и мы являемся программой системного уровня».

Хейлсберг также обнаружил, что взвешивает дискуссию «почему» о GitHub, подчеркнув, что решение использовать Go «подчеркивает нашу приверженность прагматическому инженерному выбору».

«В Microsoft мы используем несколько языков программирования, включая C#, GO, Java, Rust, C ++, TypeScript и другие, каждый из которых выбран тщательно, основываясь на технической пригодности и производительности команды».

Отпраздновать силу

Как оригинальный дизайнер C#, Хейлсберг, должно быть, гордился тем, что указывает на то, что «C# по -прежнему является самым популярным языком внутри, безусловно». Далее он даже подчеркнул, что Microsoft остается инвестированной в C# и .NET «из -за их непревзойденной производительности, надежной экосистемы и сильной масштабируемости».

И он сказал, что они даже попробовали прототип C# для компилятора TypeScript, но «Go стал оптимальным выбором, обеспечивая превосходную эргономику для обхода деревьев, простота распределения памяти и структуры кода, которая внимательно отражает существующий компилятор, обеспечивая легкое обслуживание и совместимость».

Начиная с нуля было бы совершенно иным вопросом, добавляет Хейлсберг, но «это не было зеленым поле-это порт существующей кодовой базы с 100 мужчинами инвестиций…» с кодовой базой, которая была «все функции и структуры данных»-без классов-просто оказался, что это «более одно-то-то один в его картировании… идиаматическое, похожее на то, что наше существование» было простой, что-то вроде, что-то вроде, как это было, так же, как и идиомам.

Хейлсберг использовал момент, чтобы обосновать, что «в Microsoft мы отмечаем силу, которая исходит от разнообразия в языках программирования».

И его комментарий также закрылся с некоторой исторической перспективой. «Давайте будем реальными. Но «за последние несколько десятилетий мы видели сильную и постоянную приверженность Microsoft программному обеспечению с открытым исходным кодом, что приоритет производительности разработчиков и сотрудничество сообщества, прежде всего». Сегодня, утверждал Хейлсберг, Microsoft стремилась «дать разработчикам лучшие доступные инструменты, не обремененные внутренней политикой или узкими ограничениями.

«Эта свобода выбирать правильный инструмент для каждой конкретной работы в конечном итоге приносит пользу всему сообществу разработчиков, что приводит к тому, что вызывает инновации, эффективность и улучшение результатов.

Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Дэвид Кассель — гордый житель района залива Сан -Франциско, где он освещал технологические новости более двух десятилетий. За эти годы его статьи появлялись повсюду от CNN, MSNBC и The Wall Street Journal Interactive … Подробнее от Дэвида Касселя

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *