Компилятор исходного кода - Source-to-source compiler
Выполнение программы |
---|
Общие понятия |
Типы кода |
Стратегии компиляции |
Заметное время выполнения |
|
Известные компиляторы и инструментальные средства |
|
Преобразование данных |
---|
Концепции |
Языки трансформации |
Техники и трансформации |
Приложения |
Связанный |
Источник-источник переводчик , источник-источник компилятор ( S2S компилятор ), transcompiler или transpiler представляет собой тип переводчика , который принимает исходный код программы , написанной на языке программирования в качестве входных данных и производит эквивалентный исходный код на том же или другом языке программирования. Транслятор исходного кода выполняет преобразование между языками программирования, которые работают примерно на одном уровне абстракции , в то время как традиционный компилятор выполняет перевод с языка программирования более высокого уровня на язык программирования более низкого уровня . Например, переводчик исходного кода может выполнять перевод программы с Python на JavaScript , в то время как традиционный компилятор переводит с такого языка, как C, на ассемблер или Java в байт-код . Автоматическое распараллеливание компилятор часто принимает в программе на языке высокого уровня в качестве входных данных , а затем преобразовать код и аннотировать его с параллельным кодом аннотацией (например, OpenMP ) или языковыми конструкциями (например , Fortran «s forall
заявления).
Другая цель компиляции исходного кода в исходный - перевод устаревшего кода для использования следующей версии базового языка программирования или API, нарушающего обратную совместимость. Он будет выполнять автоматический рефакторинг кода, который полезен, когда программы для рефакторинга находятся вне контроля исходного разработчика (например, преобразование программ из Python 2 в Python 3 или преобразование программ из старого API в новый API) или когда размер программы делает ее ручной рефакторинг непрактичной или трудоемкой.
Транскомпиляторы могут либо сохранить структуру транслированного кода как можно ближе к исходному коду, чтобы упростить разработку и отладку исходного исходного кода, либо могут изменить структуру исходного кода настолько, что переведенный код не будет похож на исходный код. Существуют также утилиты отладки, которые отображают преобразованный исходный код обратно в исходный код; например, стандарт JavaScript Source Map позволяет отображать код JavaScript, выполняемый веб-браузером, обратно в исходный источник, когда код JavaScript был, например, уменьшен или создан с помощью языка, преобразованного в JavaScript.
Примеры включают Closure Compiler , CoffeeScript , Dart , Haxe , TypeScript и Emscripten .
Переводчики языка ассемблера
Intel CONV86
Intel продавала свой 16-битный процессор 8086 как источник, совместимый с 8-битным процессором 8080 . Для поддержки этого у Intel был основанный на ISIS-II преобразователь исходного кода 8080 в 8086 с именем CONV86 (также называемый CONV-86 и CONVERT 86), доступный OEM- клиентам с 1978 года, возможно, самая ранняя программа такого рода. Он поддерживал несколько уровней перевода и работал на частоте 2 МГц в системе разработки микропроцессоров Intel MDS-800 с 8-дюймовыми дисководами для гибких дисков . По отзывам пользователей, работало не очень надежно.
SCP TRANS86
Компания Seattle Computer Products (SCP) предложила TRANS86.COM, написанный Тимом Патерсоном в 1980 году при разработке 86-DOS . Утилита может переводить исходный код ассемблера Intel 8080 и Zilog Z80 (с мнемоникой Zilog / Mostek ) в исходный код .ASM для Intel 8086 (в формате, совместимом только с кросс-ассемблером SCP ASM86 для CP / M-80 ), но поддерживается только подмножество кодов операций , регистров и режимов, и часто все еще требовало значительной ручной корректировки и последующей доработки. Кроме того, выполняя только простую транслитерацию , однопроходный транслятор грубой силы не выполнял никаких оптимизаций регистров и переходов. Потребовалось около 24 КБ ОЗУ. SCP версии 1 TRANS86.COM работал на системах на базе Z80. После запуска 86-DOS Патерсон использовал TRANS86, чтобы преобразовать себя в программу, работающую под 86-DOS. Номер версии 2, вместо этого он был назван TRANS.COM. Позже, в 1982 году, переводчик, по-видимому, также был доступен в Microsoft .
Сорцим TRANS86
Также под названием TRANS86, Sorcim также предлагал транслятор с 8080 на 8086 с декабря 1980 года. Как и программа SCP, он был разработан для переноса кода приложения CP / M-80 (в формате ассемблера ASM, MAC, RMAC или ACT80) в MS-DOS (в формат, совместимый с ACT86). В формате ACT80 он также поддерживает несколько мнемоник Z80. Перевод происходил по инструкции с некоторой оптимизацией условных переходов. Программа работала под CP / M-80, MP / M-80 и Cromemco DOS с минимум 24 КБ ОЗУ и не имела ограничений на размер исходного файла.
Цифровые исследования XLT86
Намного более сложным и первым, кто ввел оптимизирующие компиляторные технологии в процесс трансляции исходного кода, был XLT86 1.0 от Digital Research в сентябре 1981 года. XLT86 1.1 был доступен к апрелю 1982 года. Программа была написана Гэри Килдаллом и переведена на исходный код .ASM для платформы. Процессор Intel 8080 (в формате, совместимом с ассемблерами ASM, MAC или RMAC) в исходный код .A86 для 8086 (совместимый с ASM86). Используя глобальный анализ потока данных при использовании регистра 8080, пятифазный многопроходный транслятор также оптимизирует вывод для размера кода и позаботится о соглашениях о вызовах (вызовы CP / M-80 BDOS были отображены в вызовы BDOS для CP / M- 86 ), чтобы программы CP / M-80 и MP / M-80 могли автоматически переноситься на платформы CP / M-86 и MP / M-86 . Сам XLT86.COM был написан на PL / I-80 для платформ CP / M-80. Программа занимала для себя 30 КБ ОЗУ плюс дополнительную память для графа программы . В системе с памятью 64 КБ максимальный поддерживаемый размер исходного файла составлял около 6 КБ, поэтому перед переводом приходилось разбивать файлы большего размера. В качестве альтернативы XLT86 также был доступен для DEC VAX / VMS (для VAX 11/750 или 11/780 ). Хотя ввод и вывод XLT86 работали на уровне исходного кода, представление программы транслятором в памяти и применяемые технологии оптимизации кода закладывают основу для двоичной перекомпиляции .
Другие
Компания 2500 AD Software предложила транслятор исходного кода с 8080 на 8086 как часть своего пакета XASM для машин CP / M-80 с Z80, а также для систем Zilog ZEUS и Olivetti PCOS .
С 1979 года Zilog предлагал переводчик Z80 на Z8000 как часть своей системы разработки PDS 8000. Advanced Micro Computers (AMC) и 2500 AD Software также предлагали переводчики с Z80 на Z8000. Последний назывался TRANS и был доступен для Z80 CP / M, CP / M-86, MS-DOS и PCOS.
Реализации языков программирования
Первые реализации некоторых языков программирования начинались как транскомпиляторы, и реализация по умолчанию для некоторых из этих языков все еще является транскомпиляторами. В дополнение к приведенной ниже таблице специалист по сопровождению CoffeeScript предоставляет список языков, которые компилируются в JavaScript.
Имя | Исходный язык | Язык перевода |
---|---|---|
Cfront | C ++ | C |
HipHop для PHP (HPHPc) | PHP | C ++ |
Вавилон | ES6 + ( JS ) | ES5 |
ClojureScript | Clojure | JavaScript |
JSweet | Джава | Машинопись |
Swiftify | Цель-C | Быстрый |
J2ObjC | Джава | Цель-C |
Haxe | Haxe | ActionScript 3 , JavaScript , Java , C ++ , C # , PHP , Python , Lua |
Майя | Майя | Verilog |
Цербер X | Цербер | JavaScript , Java , C ++ , C # |
Перенос кодовой базы
Когда разработчики хотят переключиться на другой язык, сохранив большую часть существующей кодовой базы, может быть лучше использовать транскомпилятор, чем переписывать все программное обеспечение вручную. В зависимости от качества транскомпилятора код может потребовать или не потребовать ручного вмешательства для правильной работы. Это отличается от «транскомпилированных языков», где спецификации требуют, чтобы выходной исходный код всегда работал без изменений. Все транскомпиляторы, используемые для переноса кодовой базы, ожидают ручной корректировки выходного исходного кода, если необходимо достичь максимального качества кода с точки зрения читабельности и соглашения о платформе.
Орудие труда | Исходный язык | Язык перевода | Комментарии |
---|---|---|---|
2to3 скрипт | Python 2 | Python 3 | Несмотря на то, что 2to3 делает все возможное для автоматизации процесса перевода, часто требуются дополнительные исправления вручную. |
Emscripten | Байт-код LLVM | JavaScript | Это позволяет, например, запускать кодовые базы C / C ++ в браузере. |
c2go | C | Идти | До выпуска 1.5 компилятор Go был написан на C. Автоматический переводчик был разработан для автоматического преобразования кодовой базы компилятора с C в Go. Начиная с Go 1.5, «компилятор и среда выполнения теперь реализованы на Go и ассемблере без C». |
C2Ржавчина | C | Ржавчина | C2Rust принимает код C как входной и выводит unsafe код Rust, уделяя особое внимание сохранению совместимости с исходной кодовой базой. Для этого процесса существует несколько задокументированных ограничений. Преобразование полученного кода в безопасный и идиоматический код Rust выполняется вручную после перевода, хотя существует автоматизированный инструмент для облегчения этой задачи.
|
Google Web Toolkit | Программа на Java , использующая определенный API | JavaScript | Код Java немного ограничен по сравнению с обычным кодом Java. |
Js_of_ocaml из Ocsigen | OCaml | JavaScript | |
J2Eif | Джава | Эйфелева | Результирующий код Eiffel имеет классы и структуры, аналогичные программе Java, но следующие синтаксису и соглашениям Eiffel. |
C2Eif | C | Эйфелева | Результирующий код Eiffel содержит классы и структуры, которые стараются быть как можно более чистыми. Инструмент является законченным и полагается на встраивание кода C и ассемблера, если он не может правильно его перевести. |
Swiftify | Цель-C | Быстрый | Swiftify - это онлайн-инструмент для преобразования исходного кода из Objective-C в Swift. Он помогает разработчикам, которые полностью или частично переносят свою кодовую базу iOS на Swift. Преобразование нацелено в первую очередь на преобразование синтаксиса между Objective-C и Swift, и ему помогает, потому что Apple приложила усилия для обеспечения совместимости между средами выполнения Swift и Objective-C. |
Конвертер времени выполнения | PHP | Джава | Runtime Converter - это автоматический инструмент, преобразующий исходный код PHP в исходный код Java. Существует библиотека времени выполнения Java для определенных функций языка PHP, а также возможность вызова самого двоичного файла PHP с использованием JNI для вызовов стандартной библиотеки PHP и функций расширения. |
Транскомпиляторные конвейеры
Конвейер транскомпиляции - это результат рекурсивной транскомпиляции . Объединяя вместе несколько уровней технологии с шагом транскомпиляции между каждым уровнем, технология может многократно трансформироваться, эффективно создавая независимую от распределенного языка спецификацию .
XSLT - это инструмент преобразования общего назначения, который можно использовать между множеством различных технологий для создания такого производного конвейера кода .
Рекурсивная транскомпиляция
Рекурсивная транспиляция (или рекурсивная транскомпиляция ) - это процесс применения концепции рекурсивной транспиляции для создания конвейера преобразований (часто начинающихся с одного источника истины ), которые многократно превращают одну технологию в другую.
Повторяя этот процесс, можно превратить A → B → C → D → E → F, а затем обратно в A (v2). Некоторая информация будет сохранена через этот конвейер, от A → A (v2), и эта информация (на абстрактном уровне) демонстрирует, с чем согласен каждый из компонентов A – F.
В каждой из различных версий, создаваемых конвейером транскомпилятора, эта информация сохраняется. Он может принимать разные формы и размеры, но к тому времени, когда он возвращается в A (v2), будучи транскомпилированным шесть раз в конвейере выше, информация возвращается в исходное состояние.
Эта информация, которая сохраняется при преобразовании в каждом формате, от A – F – A (v2), является (по определению) производным содержанием или производным кодом .
Рекурсивная транспиляция использует тот факт, что транспиляторы могут либо сохранять переведенный код как можно ближе к исходному коду, чтобы упростить разработку и отладку исходного исходного кода, либо они могут настолько сильно изменить структуру исходного кода, что переведенный код не похож на исходный код. Существуют также утилиты отладки, которые отображают перенесенный исходный код обратно в исходный код; например, исходные карты JavaScript позволяют отображать код JavaScript, выполняемый веб-браузером, обратно в исходный источник на языке, преобразованном в JavaScript.
Смотрите также
- Бинарный рекомпилятор
- C в HDL
- Генерация кода (компилятор) - процесс, с помощью которого генератор кода компилятора преобразует некоторое промежуточное представление исходного кода в форму, которая может быть легко выполнена машиной.
- DMS Software Reengineering Toolkit - фреймворк компилятора от исходного кода к исходному, использующий явные правила перезаписи на основе шаблонов
- f2c - компилятор из исходного кода в исходный код от Fortran 77 до C
- Honeywell Liberator (запускает программы IBM 1401 на Honeywell H200 )
- Промежуточное представление - структура данных или код, используемые внутри компилятора или виртуальной машины для представления исходного кода.
- Привязка к языку - программная библиотека, которая позволяет использовать другую библиотеку, написанную на другом языке программирования.
- Спецификация, не зависящая от языка - стандарт компьютерного программирования, предназначенный для взаимодействия между языками программирования.
- Языковая совместимость
- Оптимизатор объектного кода , также известный как двоичная оптимизация
- Препроцессор - программа, которая обрабатывает ввод для другой программы.
- Трансформация программы
- Рекурсивная транскомпиляция
- ROSE (compiler framework) - фреймворк компилятора от исходного кода к исходному
- Переводчик (вычисления) - компьютерная программа, переводящая код с одного языка программирования на другой.
- XSLT - язык для преобразования XML-документов
Примечания
использованная литература
дальнейшее чтение
- «Программирование модулей Sycor, упрощенное с помощью TAL II» . Computerworld - еженедельник для компьютерного сообщества . IX (34). Анн-Арбор, Мичиган, США: Computerworld, Inc., 20 августа 1975 г. п. 14. ISSN 0010-4841 . Архивировано 01 февраля 2020 года . Проверено 18 января 2020 .
- Зерилли, Фрэнк Дж .; Derouen, Craig (1986-12-11) [1985-08-15, 1984-12-20, 1984-11-20]. «Транслятор ASM с 8080 на 8086 с исходным кодом ASM» . SIMTEL . XLT86.COM 1.10. Архивировано 01 февраля 2020 года . Проверено 18 января 2020 . 1984-11-11 версия 1.05 (NB. Исполняемый файл DOS XLT86.COM [12 КБ] переводит исходный код языка ассемблера Intel 8080 в исходный код языка ассемблера Intel 8086. Несмотря на свое название, эта реализация на ассемблере 8086 не связана с более ранними версиями Digital Research. и намного более сложный XLT86 .)
-
Альбо, Хулиан (24 апреля 2009 г.). "Pasmo, ensamblador cruzado Z80 Portable / Portable Z80 cross assemblyr" (на испанском и английском языках). Архивировано 20 февраля 2020 года . Проверено 20 февраля 2020 .
[…] Pasmo - это кросс-ассемблер Z80 […], который […] может генерировать объектный код в следующих форматах: необработанный двоичный код, Intel HEX , PRL для CP / M Plus RSX , Plus3Dos ( диск Spectrum +3 ), TAP, TZX и CDT ( образы лент эмуляторов Spectrum и Amstrad CPC ), AmsDos (диск Amstrad CPC) и MSX (для использования с BLOAD с диска в Basic). Начиная с версии 0.5.0 […] также может генерировать код 8086 из исходников Z80, в двоичном формате для файлов Ms-dos COM или в формате CP / M 86 CMD . […]
[37] [38] -
Ciarcia, Стив (май 1984). «Козырная карта - Часть 1: Аппаратное обеспечение - Ускорьте свой IBM PC с помощью 16-битной мощности сопроцессора» (PDF) . BYTE - Журнал малых систем . Подвал Ciarcia's Circuit. Vol. 9 нет. 5. McGraw-Hill, Inc., стр. 40–52, 54–55. ISSN 0360-5280 . Проверено 29 января 2020 .
[…] Вместо этого он выполняет программы, написанные на языках высокого уровня, таких как BASIC и C (компилятор Pascal и переводчик с 8088 на Z8000 находятся в разработке. […]
и Ciarcia, Стив (июнь 1984 г.). «Козырная карта - Часть 2: Программное обеспечение - компиляторы TBASIC и C и сборка» (PDF) . BYTE - Журнал малых систем . Подвал Ciarcia's Circuit. Vol. 9 нет. 6. McGraw-Hill, Inc., стр. 115–122. ISSN 0360-5280 . Проверено 29 января 2020 .[…] Я ожидаю, что скоро будут доступны переводчики объектного кода для преобразований Z80 в Z8000 и 8088 в Z8000 […]
, также доступен как Ciarcia, Steve (1990). «Козырная карта - Часть 1: Аппаратное обеспечение - Ускорьте свой IBM PC с помощью 16-битной мощности сопроцессора и Часть 2: Программное обеспечение - компиляторы TBASIC и C и сборка» . В Гонно, Даниэль; Бернарди, Фред; Осберн, Ричард (ред.). Подвал Ciarcia's Circuit . 7 . Издательство McGraw-Hill . С. 138–152, 153–160. ISBN 0-07-010969-9. Архивировано 01 февраля 2020 года . Проверено 29 января 2020 . [39] - Команда разработчиков отдела микроконтроллеров (2000). «Перевод кода сборки с HC05 на ST7» (PDF) (Примечание по применению). STMicroelectronics . AN1106 / 0200 . Проверено 18 января 2020 .(9 страниц) (NB. Этот программный переводчик был разработан ST и переводит исходный код сборки Motorola 6805 / HC05 в формате программного обеспечения 2500AD в исходный код ST7 . Исполняемый файл MIGR2ST7.EXE для Windows доступен на «MCU ON CD».)
внешние ссылки
- Чаудри, Габриэле "Габи" (2009-07-11). "Das Intel zu Zilog - Übersetzungsprojekt" . I2Z-Translator (на немецком языке). Архивировано 11 сентября 2016 года . Проверено 18 января 2020 .
- «Перевод с ассемблера PortAsm на ассемблер» . MicroAPL Ltd. 2017 [1996]. Архивировано 30 июля 2019 года . Проверено 18 января 2020 .
- «Наша методология - процесс преобразования исходного кода в исходный» . Micro-Processor Services, Inc. (MPS). Архивировано 12 мая 2019 года . Проверено 1 февраля 2020 .