Транспайлер
Транспайлер (транспилер, англ. transpiler) — программа (тип компилятора), выполняющая транспиляцию программы.
Транспиляция — преобразование программы, при котором используется исходный код программы, написанной на одном языке программирования в качестве исходных данных, и производится эквивалентный исходный код на другом языке программирования.
Транспайлер переводит между языками программирования, которые работают примерно на одном и том же уровне абстракции, в то время как традиционный компилятор переводит с более высокого уровня языка программирования на язык более низкого уровня. Например, транспайлер может выполнить перевод программы с Паскаля на Си. Компайлер, основанный на автоматическом распараллеливании, нередко принимает в качестве входных данных программу на языке высокого уровня, а затем преобразует её код и комментирует его при помощи параллельных кодовых аннотаций (например, модель openmp) или языковых конструкций (например, forall для Фортрана).[1]
Другая цель транспайлера — это перевод старого кода, чтобы использовать следующую версию того же языка программирования или API, нарушая тем самым обратную совместимость. Транспайлер в этом случае будет выполнять автоматический рефакторинг кода, что оказывается полезным, когда программы, подлежащие рефакторингу, находятся вне контроля исходного исполнителя (например, преобразование программ из Python 2 на Python 3 или преобразование программ из старого API в новый API) или когда из-за размера программы её ручная переработка нецелесообразна или отнимает слишком много времени.
Транспайлеры могут либо сохранить переведенный код как можно ближе к исходному коду, чтобы максимально упростить процесс разработки и отладки исходного кода, либо могут изменить структуру кода так, что переведенный код не будет похож на исходный.[2] Существуют также утилиты отладки, которые позволяют сопоставить транскомпилированный исходный код с оригинальным исходным кодом; например, стандарт SourceMap для JavaScript[3] имеет возможность сопоставления кода JavaScript, выполняемого в браузере, с первоисточником на языке, транскомпилированном в JavaScript.[4]
Примеры транскомпилированных языков включают Closure Compiler, Coccinelle, coffeescript, Dart, Haxe, TypeScript[5] и Emscripten.[6]
Примечания
- Types of compilers . compilers.net (1997–2005). Дата обращения: 28 октября 2010.
- Fowler, Martin Transparent Compilation (February 12, 2013). Дата обращения: 13 февраля 2013.
- Lenz, Fitzgerald Source Map Revision 3 Proposal (11 February 2011).
- Seddon, Ryan Introduction to JavaScript Source Maps . html5rocks.com (21 March 2012). Дата обращения: 21 января 2015.
- Henson, Valerie Semantic patching with Coccinelle . lwn.net (January 20, 2009). Дата обращения: 28 октября 2010.
- Epic Games HTML5 Epic Citadel .