Транспайлер: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Содержимое удалено Содержимое добавлено
Создано переводом страницы «Source-to-source compiler»
(нет различий)

Версия от 15:54, 11 апреля 2018

Транспайлер - тип компилятора, который использует исходный код программы, написанной на одном языке программирования, в качестве исходных данных и производит эквивалентный исходный код на другом языке программирования. Транспайлер переводит между языками программирования, которые работают примерно на одном и том же уровне абстракции, в то время как традиционный компилятор переводит с более высокого уровня языка программирования на язык более низкого уровня. Например, транспайлер может выполнить перевод программы с Паскаля на Си. Компайлер, основанный на автоматическом распараллеливании, нередко принимает в качестве входных данных программу на языке высокого уровня, а затем преобразовает её код и комментирует его при помощи параллельных кодовых аннотаций (например, модель 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]

История

Одна из самых первых программ такого рода была Цифровая исследованияс XLT86 в 1981 году, это программа, написанная Гэри Kildall, что в переводе .АССЕМБЛЕРНЫЙ исходный код для процессора Intel 8080 процессора .А86 исходный код для процессоров Intel 8086. С использованием глобального анализа потоков данных на 8080 использования регистров, переводчик также оптимизации выходного кода размер и заботиться о соглашениях о вызове, так что Ср/М-80 и МП/М-80 программ может быть портирована на Ср/М-86 и МР/М-86 платформ автоматически. XLT86 сама была написана на языке PL/I-80, который и был доступен для Ср/М-80 платформ, а также для декабря ЗИС (для vax 11/750 или 11/780).[7]

Аналогичная, но гораздо менее сложную программу транс.Ком, написанной Тимом Патерсоном в 1980 году как часть 86-ДОС. Он мог бы перевести некоторые на z80 Ассамблеи исходный код на .АССЕМБЛЕРНЫЙ исходный код для 8086, но поддерживается только подмножество операций, регистры и режимы, часто еще требует значительной ручной коррекции и после переделки. Также она не осуществляла регистрацию и прыгать оптимизации.[8][9]

Реализации языка программирования

Первых реализаций языков программирования началась как transcompilers, и реализация по умолчанию для некоторых из этих языков по-прежнему transcompilers. В дополнение к таблице ниже, в coffeescript хранитель дает список языков, которые компилируются в JavaScript.[10]

Портирование кодовой базы

Когда разработчики хотят переключиться на другой язык, сохранив большую часть существующей кодовой базы, может быть, лучше использовать transcompiler против переписывания всего программного обеспечения вручную. В зависимости от качества transcompiler, код может потребоваться ручное вмешательство для того, чтобы работать должным образом. Это отличается от "transcompiled языки", где технические характеристики спроса, что на выходе исходный код всегда работает без изменений. Все transpilers используемые в порт кодовой базы будет ожидать ручная регулировка выходного исходный код, если есть необходимость достичь максимального качества кода с точки зрения читабельности и платформы Конвенции.

Transcompiler трубопроводов

В transcompiler трубопровода является то, что результаты рекурсивных transcompiling. Связывания нескольких слоев тек, с transcompile шаг между каждым слоем, технология может быть повторно преобразованы, фактически создавая распределенные независимые язык Спецификация.

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

См. также

Список литературы

  1. Types of compilers. compilers.net (1997–2005). Дата обращения: 28 октября 2010.
  2. Fowler, Martin Transparent Compilation (12 февраля 2013). Дата обращения: 13 февраля 2013.
  3. Lenz, Fitzgerald Source Map Revision 3 Proposal (11 февраля 2011).
  4. Seddon, Ryan Introduction to JavaScript Source Maps. html5rocks.com (21 марта 2012). Дата обращения: 21 января 2015.
  5. Henson, Valerie Semantic patching with Coccinelle. lwn.net (20 января 2009). Дата обращения: 28 октября 2010.
  6. Epic Games HTML5 Epic Citadel.
  7. Digital Research. XLT86 - 8080 to 8086 Assembly Language Translator - User's Guide. — Pacific Grove, CA, USA : Digital Research Inc..
  8. Seattle Computer Products (1980): 86-DOS - Disk Operating System for the 8086. User's manual, version 0.3 - Preliminary. Seattle Computer Products, Seattle ([1]).
  9. Paterson, Tim Microsoft DOS V1.1 and V2.0: Z80 to 8086 Translator version 2.21 /msdos/v11source/TRANS.ASM. Computer History Museum, Microsoft (19 декабря 2013). Дата обращения: 25 марта 2014. (NB. While the publishers claim this would be MS-DOS 1.1 and 2.0, it actually is SCP MS-DOS 1.25 and TeleVideo PC DOS 2.11.)
  10. List of languages that compile to JS. Дата обращения: 11 марта 2018.
  11. Peter van Eerten BaCon - A free BAsic CONverter for Unix, BSD and MacOSX. Basic-converter.org. Дата обращения: 8 июля 2014.
  12. Iushin Software SHBASIC. Iushin Softwares. Дата обращения: 9 марта 2018.
  13. Script# by nikhilk. Scriptsharp.com. Дата обращения: 2 августа 2013.
  14. Smart Mobile Studio. SmartMobileStudio.com. Дата обращения: 9 марта 2014.
  15. Babel · The compiler for writing next generation JavaScript. babeljs.io. Дата обращения: 10 апреля 2016.
  16. Traceur is a JavaScript.next-to-JavaScript-of-today compiler. github.com. Дата обращения: 2 июля 2014.
  17. j2objc - Java to iOS Objective-C translation tool and runtime. j2objc.org (13 февраля 2014). Дата обращения: 18 августа 2015.
  18. java2c-transcompiler - A simple source-to-source from Java to C - Google Project Hosting. Дата обращения: 8 октября 2014.
  19. IntelLabs/julia. GitHub.
  20. Google Groups. google.com.
  21. MoonScript, a language that compiles to Lua. Дата обращения: 21 сентября 2016.
  22. Shed Skin, An experimental (restricted-Python)-to-C++ compiler. Дата обращения: 1 октября 2014.
  23. Maptastic Maple (3.3.9) Sass: Syntactically Awesome Style Sheets. Sass-lang.com. Дата обращения: 8 июля 2014.
  24. Xtend, modernized Java. Eclipse project. Дата обращения: 1 октября 2014.
  25. C->Go translator. Дата обращения: 11 января 2018.
  26. Go 1.5 Release Notes. Дата обращения: 11 января 2018.
  27. Russ Cox Go 1.3+ Compiler Overhaul. Дата обращения: 11 января 2018.
  28. Js_of_ocaml. Дата обращения: 8 октября 2014.
  29. J2Eif Research Page - Chair of Software Engineering. Se.inf.ethz.ch. doi:10.1007/978-3-642-21952-8_4. Дата обращения: 8 июля 2014.
  30. C2Eif Research Page - Chair of Software Engineering. Se.inf.ethz.ch. Дата обращения: 8 июля 2014.
  31. Swiftify Objective-C to Swift Converter. Дата обращения: 14 ноября 2017.
  32. Runtime Converter. Дата обращения: 14 ноября 2017.