Компилятор исходного кода
A транслятор исходного текста, компилятор исходного кода (компилятор S2S ), транскомпилятор или транспилятор - это тип транслятора, который принимает исходный код программы, написанной на языке программирования в качестве входных данных, и производит эквивалентный исходный код на том же или другой язык программирования. Преобразователь исходного текста в исходный код выполняет преобразование между языками программирования, которые работают примерно на одном уровне абстракции, тогда как традиционный компилятор выполняет перевод с языка программирования более высокого уровня на язык программирования нижнего уровня. Например, компилятор преобразования исходного кода в исходный код может выполнять перевод программы с Python на JavaScript, в то время как традиционный компилятор выполняет перевод с такого языка, как C в ассемблер или Java в байт-код. Компилятор с автоматическим распараллеливанием часто принимает программу на языке высокого уровня в качестве входных данных, а затем преобразует код и аннотирует его с помощью аннотаций параллельного кода (например, OpenMP ) или языковых конструкций (например, для всехзаявлений Fortran ).
Другой целью компиляции исходного кода в исходный код является перевод устаревшего кода для использования следующей версии базового языка программирования или API, который нарушает обратную совместимость. Он будет выполнять автоматический рефакторинг кода, который полезен, когда программы для рефакторинга находятся вне контроля исходного разработчика (например, преобразование программ из Python 2 в Python 3 или преобразование программ из старого API в новый API), или когда размер программы делает непрактичным или трудоемким рефакторинг вручную.
Транскомпиляторы могут либо сохранить структуру транслированного кода как можно ближе к исходному коду, чтобы облегчить разработку и отладку исходного исходного кода, либо могут настолько изменить структуру исходного кода, что переведенный код не похож на исходный код. Существуют также утилиты отладки, которые отображают преобразованный исходный код обратно в исходный код; например, стандарт JavaScript Source Map позволяет отображать код JavaScript, выполняемый веб-браузером , обратно в исходный источник, когда код JavaScript был, например, уменьшен или создан преобразованный в язык JavaScript.
Примеры включают Closure Compiler, CoffeeScript, Dart, Haxe, TypeScript и Emscripten.
- 1 Переводчики языка ассемблера
- 1.1 Intel CONV86
- 1.2 SCP TRANS86
- 1.3 Sorcim TRANS86
- 1.4 Digital Research XLT86
- 1.5 Другое
- 2 Реализации языка программирования
- 3 Перенос базы кода
- 4 Конвейеры транскомпилятора
- 4.1 Рекурсивная транскомпиляция
- 5 См. Также
- 6 Примечания
- 7 Ссылки
- 8 Дополнительная литература
- 9 Внешние ссылки
Intel CONV86
Intel продали свой 16-битный процессор 8086 как совместимый с исходным кодом для 8080, 8-битный процессор. Для поддержки этого у 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.
Sorcim 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 КБ ОЗУ и не имела ограничений на размер исходного файла.
Digital Research XLT86
Намного более сложным и первым, кто представил технологии оптимизирующего компилятора в процесс преобразования исходного кода, был XLT86 1.0 от Digital Research. Сентябрь 1981 г. К апрелю 1982 г. был выпущен XLT86 1.1. Программа была написана Гэри Килдаллом и переведена исходный код.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 VMS (для VAX 11/750 или 11/780 ). Хотя ввод и вывод XLT86 работали на уровне исходного кода, представление программы в памяти транслятора и применяемые технологии оптимизации кода заложили основу для двоичной перекомпиляции.
Другое
Предлагаемое программное обеспечение 2500 AD. транслятор исходного кода с 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 ++ |
| Babel | ES6 + (JS ) | ES5 |
| ClojureScript | Clojure | JavaScript |
| JSweet | Java | TypeScript |
| Swiftify | Objective-C | Swift |
| J2ObjC | Java | Objective-C |
| Haxe | Haxe | ActionScript 3, JavaScript, Java, C ++, C#, PHP, Python, Lua |
| Maia | Maia | Verilog |
| Cerberus X | Cerberus | JavaScript, Java, C ++, C# |
Когда разработчики хотят переключиться на другой язык, сохранив большую часть существующей кодовой базы, может быть лучше использовать транскомпилятор, чем переписывать все программное обеспечение вручную. В зависимости от качества транскомпилятора код может нуждаться или не нуждаться в ручном вмешательстве для правильной работы. Это отличается от «транскомпилированных языков», где спецификации требуют, чтобы выходной исходный код всегда работал без изменений. Все транскомпиляторы, используемые для переноса кодовой базы, ожидают ручной корректировки выходного исходного кода, если необходимо достичь максимального качества кода с точки зрения читаемости и соглашения о платформе.
| Инструмент | Исходный язык | Целевой язык | Комментарии |
|---|---|---|---|
| 2to3 скрипт | Python 2 | Python 3 | Хотя 2to3 делает все возможное для автоматизации процесса перевода, часто требуются дополнительные исправления вручную. |
| Emscripten | LLVM байт-код | JavaScript | Это позволяет запускать кодовые базы C / C ++ в браузере, например, |
| c2go | C | Go | До выпуска 1.5 компилятор Go был написан на C • Был разработан автоматический переводчик для автоматического преобразования кодовой базы компилятора с C в Go. Начиная с Go 1.5, «компилятор и среда выполнения теперь реализованы на Go и ассемблере без C». |
| C2Rust | C | Rust | C2Rust принимает код C в качестве входа и выводит unsafeкод Rust, уделяя особое внимание сохранению совместимости с исходной кодовой базой. Для этого процесса существует несколько задокументированных ограничений. Преобразование полученного кода в безопасный и идиоматический код Rust выполняется вручную после перевода, хотя существует автоматизированный инструмент для облегчения этой задачи. |
| Google Web Toolkit | Программа Java, которая использует специальный API | JavaScript | Код Java немного ограничен по сравнению с обычным кодом Java. |
| Js_of_ocaml из Ocsigen | OCaml | JavaScript | |
| J2Eif | Java | Eiffel | Результирующий код Eiffel имеет классы и структуры, похожие на программу Java, но следующие синтаксису Eiffel и условности. |
| C2Eif | C | Eiffel | Результирующий код Eiffel имеет классы и структуры, которые стараются быть как можно более чистыми. Инструмент является законченным и полагается на встраивание кода C и ассемблера, если он не может правильно его перевести. |
| Swiftify | Objective-C | Swift | Swiftify - это онлайн-инструмент для преобразования исходного кода из Objective-C в Swift. Он помогает разработчикам, которые полностью или частично переносят свою кодовую базу iOS на Swift. Преобразование нацелено в первую очередь на преобразование синтаксиса между Objective-C и Swift, и ему помогает, потому что Apple приложила усилия для обеспечения совместимости между средами выполнения Swift и Objective-C. |
| Конвертер времени выполнения | PHP | Java | Конвертер времени выполнения - это автоматический инструмент, преобразующий исходный код PHP в исходный код Java. Существует библиотека времени выполнения Java для определенных функций языка PHP, а также возможность вызова самого двоичного файла PHP с использованием JNI для вызовов стандартной библиотеки PHP и функций расширения. |
Конвейеры транскомпилятора - это результат рекурсивной транскомпиляции. Объединив несколько уровней технологии, с шагом транскомпиляции между каждым уровнем, технология может быть многократно преобразована, эффективно создавая распределенную независимую от языка спецификацию.
XSLT - это универсальный инструмент преобразования, который можно использовать между множество различных технологий для создания такого конвейера производного кода .
Рекурсивная транскомпиляция
Рекурсивная транскомпиляция (или рекурсивная транскомпиляция ) - это процесс применения концепции рекурсивной транспиляции для создания конвейера преобразований (часто начиная с единый источник истины ), которые многократно превращают одну технологию в другую.
Повторяя этот процесс, можно превратить A → B → C → D → E → F, а затем обратно в A (v2). Некоторая информация будет сохранена через этот конвейер от A → A (v2), и эта информация (на абстрактном уровне) демонстрирует, с чем согласен каждый из компонентов A – F.
В каждой из различных версий что производит конвейер транскомпилятора, эта информация сохраняется. Он может принимать разные формы и размеры, но к тому времени, когда он возвращается в A (v2), будучи транскомпилированным 6 раз в конвейере выше, информация возвращается в исходное состояние.
Эта информация, которая сохраняется при преобразовании в каждом формате, от A – F – A (v2), является (по определению) производным содержимым или производным кодом.
Рекурсивная транспиляция использует тот факт, что транспиляторы могут либо сохранить переведенный код как можно ближе к исходному коду, чтобы облегчить разработку и отладку исходного исходного кода, либо они могут настолько изменить структуру исходного кода, что переведенный код не похоже на исходный код. Существуют также утилиты отладки, которые отображают перенесенный исходный код обратно в исходный код; например, исходные карты JavaScript позволяют отображать код JavaScript, выполняемый веб-браузером, обратно в исходный источник на языке, преобразованном в JavaScript.
Портал компьютерного программирования
- Двоичный рекомпилятор
- C в HDL
- Генерация кода (компилятор) - Процесс, с помощью которого генератор кода компилятора преобразует некоторое промежуточное представление исходного кода в форму, которая может быть легко выполняется машиной
- DMS Software Reengineering Toolkit - структура компилятора от исходного кода к исходному с использованием явных правил перезаписи по шаблону
- f2c - компилятор от исходного кода к исходному тексту от Fortran 77 до C
- Honeywell Liberator (запуск программ IBM 1401 на Honeywell H200 )
- Промежуточное представление
- Привязка языка - Программная библиотека, которая позволяет использовать другую библиотеку, закодированную в другой язык программирования
- Спецификация, не зависящая от языка - стандарт компьютерного программирования, предназначенный для взаимодействия между языки программирования
- Взаимодействие языков
- Оптимизатор объектного кода, также известный как двоичная оптимизация
- Препроцессор - программа, обрабатывающая ввод для другой программы
- Преобразование программы
- Рекурсивная транскомпиляция
- ROSE (каркас компилятора) - каркас компилятора "исходный код"
- Переводчик (вычисления) - компьютерная программа, переводящая код с одного языка программирования на другой
- XSLT - язык для преобразование XML-документов
- «Программирование модулей Sycor, упрощенное с помощью TAL II». Computerworld - Newsweekly для компьютерного сообщества. IX (34). Анн-Арбор, Мичиган, США: Computerworld, Inc. 1975-08-20. п. 14. ISSN 0010-4841. Архивировано из оригинала 01.02.2020. Проверено 18 января 2020 г.
- Зерилли, Фрэнк Дж.; Derouen, Craig (1986-12-11) [1985-08-15, 1984-12-20, 1984-11-20]. «Преобразователь ASM 8080 в 8086 с исходным кодом ASM». СИМТЕЛ. XLT86.COM 1.10. Архивировано из оригинала 01.02.2020. Проверено 18 января 2020 г. 1984-11-11 версия 1.05 (NB. Исполняемый файл DOS XLT86.COM [12 КБ] переводит исходный код языка ассемблера Intel 8080 в сборку Intel 8086 Исходный код языка. Несмотря на свое название, эта реализация на ассемблере 8086 не связана с более ранней и более сложной версией Digital Research XLT86.)
- Albo, Julián (2009-04-24). "Pasmo, ensamblador cruzado Z80 портативный / портативный кросс-ассемблер Z80 " (на испанском и английском языках). Архивировано из оригинала 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 формат. […]
[39] [40] - Сиарсия, Стив (май 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 Cellar. Том 9, номер 6. McGraw-Hill, Inc. стр. 115–122. ISSN 0360-5280. Дата обращения 01.01.2020. -29.[…] Я ожидаю, что переводчики объектного кода для преобразований Z80-to-Z8000 и 8088-to-Z8000 скоро будут доступны […]
, также доступны как Ciarcia, Стив (1990). «Козырная карта - Часть 1: Аппаратное обеспечение - Ускорьте свой IBM PC с помощью 16-битной мощности сопроцессора и Часть 2: Программное обеспечение - компиляторы TBASIC и C и сборка». В Гонно, Даниэль; Бернарди, Фред; Осберн, Ричард (ред.). Ciarcia's Circuit Cellar. 7. McGraw-Hill Publishing Company. Pp. 138–152, 153–160. ISBN 0 -07-010969-9. А получено из оригинала 01.02.2020. Проверено 29 января 2020 г. [41] - Группа разработчиков микроконтроллеров (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 (на немецком языке). Архивировано из оригинала на 2016-09-11. Проверено 18 января 2020 г.
- «Перевод из ассемблера PortAsm в ассемблер». MicroAPL Ltd. 2017 [1996]. Архивировано из оригинала 30.07.2019. Проверено 18 января 2020 г.
- «Наша методология - процесс преобразования источника в исходный». Micro-Processor Services, Inc. (MPS). Архивировано из оригинала на 2019-05-12. Проверено 01.02.2020.