Microsoft пренаписва компилатора на TypeScript в Go

Андерс Хейлсберг, главният архитект на езика TypeScript, създал езиците C#, Delphi и Turbo Pascal, представи проект за създаване на нов компилатор за TypeScript - typescript-go (tsgo), разработен на езика Go. Подобно на стария компилатор, новият проект се разпространява под лиценза Apache 2.0.

Оригиналният компилатор на TypeScript е написан на TypeScript и преведен на JavaScript, което създава проблеми с мащабирането, когато се използва в много големи проекти. Разработчиците трябва да се примиряват с големи забавяния при зареждане и проверка на код в IDE и да жертват опита на разработчиците, за да намалят забавянето, като деактивират възможностите за проверка на код в редакторите. В екосистемата също има нарастваща нужда от инструменти за команден ред, които позволяват кодът да бъде бързо изграден, за да се тества неговата функционалност.

Очаква се, че създаването на естествен компилатор и инструментариум за TypeScript ще увеличи значително скоростта на изграждане, ще намали потреблението на памет и ще намали времето за стартиране на редакторите на код. Високата производителност на инструментариума ще направи процеса на разработка в съвременните кодови редактори по-удобен, ще даде възможност за бърза проверка на кода на целия проект и ще даде възможност за внедряване на по-напреднали техники за рефакторинг и анализ на код, включването на които преди беше твърде скъпо от гледна точка на потреблението на ресурси.

Според разработчиците на TypeScript, новият инструментариум ще намали времето за изграждане с порядък. В сегашната си форма новият компилатор tsc може да обработи кодовата база на проекта на VS Code за 7.5 секунди, докато на стария компилатор бяха необходими 77.8 секунди, за да направи същото. В случая с кодовата база на Playwright времето за зареждане спадна от 11.1 на 1.1 секунди, TypeORM от 17.5 на 1.3 секунди, date-fns от 6.5 на 0.7 секунди, tRPC от 5.5 на 0.6 секунди и rxjs от 1.1 на 0.1 секунди.

Новият компилатор се разработва от октомври 2024 г. от екип от 9 служители на Microsoft. На този етап вече има работещ прототип за тестване. Предварителен преглед на инструментариума за команден ред с нова tsc реализация, която поддържа проверка на типа, е планиран за пускане до средата на годината. Първата напълно функционална версия, способна да създава проекти и да предоставя LSP услуги за среди за разработка, е планирана да бъде пусната до края на годината.

Клонът TypeScript 6.x ще продължи да се доставя със стария компилатор и ще включва някои промени, за да се подготви за мигриране към новата реализация. Първата версия, която ще бъде мигрирана към новата верига от инструменти, ще бъде TypeScript 7. За известно време кодовите бази на TypeScript 6.x и TypeScript 7.x ще се поддържат и ще съществуват паралелно, докато клонът TypeScript 7 достигне зряло състояние, готово да замени напълно старата верига от инструменти.

Преди да започнат работа по проекта, разработчиците проучиха възможността за използване на различни езици за програмиране и експериментираха с прототипи на различни езици. В резултат на това езикът Go беше избран за създаване на нов компилатор, като най-добрият вариант за извършване на работата по пренаписване на кодовата база на стария компилатор. В сравнение с езици като Rust, Go е по-близо до TypeScript по отношение на семантиката и структурата на кода, което позволява запазването на съществуващи модели при пренасяне. Използването на Go улеснява мигрирането на промени между кодови бази и намалява трудоемката задача за поддържане на стари и нови версии една до друга.

Езикът Go осигурява добра производителност, разработен е с внимание към многопоточното програмиране и ефективната работа на многоядрени системи и има вградена защита срещу проблеми при работа с памет. Цената на безопасността на паметта е, че събирачът на отпадъци може да въведе забавяния по време на изпълнение, но компилаторът не се интересува от такива забавяния.

Други езици като Rust също бяха разглеждани като опция, но те са твърде концептуално различни от TypeScript и използването им би довело до пренасяне на компилатора от нулата, което би затруднило постигането на пълна съвместимост със стария компилатор, разрешавайки проблеми, вече разрешени в старата кодова база, и изисквайки значително повече време и ресурси.

Езикът TypeScript разширява възможностите на JavaScript, като същевременно остава напълно съвместим с обратната версия, което улеснява мигрирането на съществуващи приложения към TypeScript. Полученото TypeScript приложение се компилира в обикновен JavaScript, който може да се изпълни във всеки съвременен уеб браузър или да се използва с платформи Node.js, Bun и Deno. TypeScript се различава от JavaScript по това, че предоставя инструменти за изрично дефиниране на типове, както и поддръжка за използване на пълноценни класове и модули. Статичното въвеждане ви позволява да избегнете много грешки по време на процеса на разработка, прави възможно използването на допълнителни техники за оптимизация, опростява отстраняването на грешки, прави кода по-четлив и по-лесен за усъвършенстване и поддръжка.

Източник: opennet.ru

Добавяне на нов коментар