Kompilátor zdroj-zdroj- Source-to-source compiler
Spuštění programu |
---|
Obecné pojmy |
Typy kódu |
Kompilační strategie |
Pozoruhodné doby běhu |
|
Pozoruhodné kompilátory a řetězce nástrojů |
|
Transformace dat |
---|
Pojmy |
Transformační jazyky |
Techniky a transformace |
Aplikace |
Příbuzný |
Source-to-source překladač , source-to-kompilátor zdroje ( S2S kompilátor ), transcompiler nebo transpiler je druh překladatele , který vezme zdrojový kód programu napsaných v programovacím jazyce jako jeho vstup a produkuje rovnocennou zdrojový kód ve stejném nebo jiném programovacím jazyce. Zdroj-k-source překladač konvertuje mezi programovací jazyky, které pracují na přibližně stejné úrovni abstrakce , zatímco tradiční překladač překládá z vyššího programovacího jazyka na úrovni na spodní programovací úroveň jazyka . Například překladač ze zdroje na zdroj může provádět překlad programu z Pythonu do JavaScriptu , zatímco tradiční překladač překládá z jazyka jako C do assembleru nebo z Java do bytecode . Automatické paralelizační kompilátor budou často brát v jazyce programu na vysoké úrovni jako vstup a pak transformovat kód a komentovat to s paralelními kódu anotací (např OpenMP ) nebo jazykové konstrukce (např Fortran ‚s forall
příkazy).
Dalším účelem kompilace ze zdroje na zdroj je překlad staršího kódu pro použití další verze základního programovacího jazyka nebo rozhraní API, které narušuje zpětnou kompatibilitu. Bude provádět automatické refaktorování kódu, což je užitečné, když jsou programy na refaktorování mimo kontrolu původního implementátoru (například převod programů z Pythonu 2 na Python 3 nebo převod programů ze starého API na nové API) nebo když velikost programu činí jeho nepraktické nebo časově náročné ruční přepracování.
Transcompilery mohou buď udržovat strukturu přeloženého kódu co nejblíže ke zdrojovému kódu, aby usnadnily vývoj a ladění původního zdrojového kódu, nebo mohou změnit strukturu původního kódu natolik, že přeložený kód nevypadá jako zdrojový kód. Existují také nástroje pro ladění, které mapují překompilovaný zdrojový kód zpět na původní kód; například standard JavaScript Source Map umožňuje mapování kódu JavaScript spuštěného webovým prohlížečem zpět na původní zdroj, když byl kód JavaScript například zmenšen nebo vytvořen jazykem překompilovaného do JavaScriptu.
Příklady zahrnují Closure překladače , CoffeeScript , Dart , haXe , psacím stroji a Emscripten .
Překladače montážního jazyka
Intel CONV86
Společnost Intel uvedla na trh svůj 16bitový procesor 8086 jako zdroj kompatibilní s 880bitovým procesorem 8080 . Aby to Intel podpořil, měl od roku 1978 k dispozici zákazníkům OEM OEM překladač na bázi ISIS-II ze zdrojového kódu 8080 až 8086 s názvem CONV86 (označovaný také jako CONV-86 a CONVERT 86) , což byl pravděpodobně nejstarší program tohoto druhu. Podporoval více úrovní překladu a běžel na 2 MHz na Intel Microprocessor Development System MDS-800 s 8palcovými disketovými mechanikami . Podle uživatelských zpráv to nefungovalo příliš spolehlivě.
SCP TRANS86
Seattle Computer Products (SCP) nabídl TRANS86.COM, napsaný Timem Patersonem v roce 1980 při vývoji 86-DOS . Tento nástroj mohl přeložit zdrojový kód sestavy Intel 8080 a Zilog Z80 (s mnemotechnikou Zilog/ Mostek ) do zdrojového kódu .ASM pro Intel 8086 (ve formátu kompatibilním pouze s cross-assemblerem SCM ASM86 pro CP/ M-80 ), ale podporován pouze podmnožina operačních kódů , registrů a režimů a často stále vyžadovala významnou ruční opravu a následné přepracování. Také provádí jen pouhý přepis je brute-force jednoprůchodový tlumočník neprovedla žádné zaregistrovat a skok optimalizace. Trvalo to asi 24 kB RAM. SCP verze 1 TRANS86.COM běžel na systémech založených na Z80. Jakmile byl 86-DOS spuštěn, Paterson využil TRANS86 k převodu na program běžící pod 86-DOS. Číslovaná verze 2, místo toho dostala název TRANS.COM. Později v roce 1982 byl překladač zjevně k dispozici také od společnosti Microsoft .
Sorcim TRANS86
Také pojmenovaný TRANS86, Sorcim nabízel od prosince 1980 také překladač 8080 až 8086. Stejně jako program SCP byl navržen tak, aby přenášel aplikační kód CP/M-80 (ve formátu sestavení ASM, MAC, RMAC nebo ACT80) do systému MS-DOS (v formát kompatibilní s ACT86). Ve formátu ACT80 také podporovalo několik mnemotechnických pomůcek Z80. Překlad probíhal na základě instrukcí za instrukcemi s určitou optimalizací aplikovanou na podmíněné skoky. Program běžel pod CP/M-80, MP/M-80 a Cromemco DOS s minimálně 24 KB RAM a neměl žádná omezení velikosti zdrojového souboru.
Digitální výzkum XLT86
Mnohem sofistikovanější a první, kdo do procesu překladu zdroje zavedl optimalizační technologie překladačů, byl XLT86 1.0 společnosti Digital Research v září 1981. XLT86 1.1 byl k dispozici v dubnu 1982. Program napsal Gary Kildall a přeložil zdrojový kód .ASM pro Procesor Intel 8080 (ve formátu kompatibilním se sestavovači ASM, MAC nebo RMAC) do .A86 zdrojového kódu pro 8086 (kompatibilní s ASM86). Pomocí globální analýzy toku dat o využití registru 8080 by pětifázový víceprůchodový překladač také optimalizoval výstup pro velikost kódu a postaral se o konvence volání ( volání BDOS CP/M-80 byla mapována do volání BDOS pro CP/M- 86 ), takže programy CP/M-80 a MP/M-80 mohly být automaticky přeneseny na platformy CP/M-86 a MP/M-86 . XLT86.COM sám byl napsán v PL/I-80 pro platformy CP/M-80. Program sám zabíral 30 kB RAM plus další paměť pro graf programu . V 64 KB paměťovém systému byla maximální podporovaná velikost zdrojového souboru asi 6 KB, takže větší soubory musely být před překladem odpovídajícím způsobem rozděleny. Alternativně byl XLT86 k dispozici také pro DEC VAX/VMS (pro VAX 11/750 nebo 11/780 ). Přestože vstup a výstup XLT86 fungoval na úrovni zdrojového kódu, reprezentace programu v překladači v paměti a technologie pro optimalizaci aplikovaného kódu položily základ pro binární rekompilaci .
Ostatní
2500 AD Software nabídl překladač zdrojových kódů 8080 až 8086 jako součást sady XASM pro stroje CP/M-80 se Z80 a také pro systémy Zilog ZEUS a Olivetti PCOS .
Od roku 1979 nabízel Zilog překladač Z80 až Z8000 jako součást vývojového systému PDS 8000. Pokročilé mikropočítače (AMC) a software 2500 AD nabízely také překladače Z80 až Z8000. Ten byl pojmenován TRANS a byl k dispozici pro Z80 CP/M, CP/M-86, MS-DOS a PCOS.
Implementace programovacího jazyka
První implementace některých programovacích jazyků začala jako transcompilers a výchozí implementací pro některé z těchto jazyků jsou stále transcompilers. Kromě níže uvedené tabulky poskytuje správce CoffeeScriptu seznam jazyků, které lze kompilovat do JavaScriptu.
název | Zdrojový jazyk | Cílový jazyk |
---|---|---|
Cfront | C ++ | C |
HipHop pro PHP (HPHPc) | PHP | C ++ |
Babel | ES6+ ( JS ) | ES5 |
ClojureScript | Clojure | JavaScript |
JSweet | Jáva | Strojopis |
Zrychlit | Cíl-C | Rychlý |
J2ObjC | Jáva | Cíl-C |
Haxe | Haxe | ActionScript 3 , JavaScript , Java , C ++ , C# , PHP , Python , Lua |
Maia | Maia | Verilog |
Cerberus X | Cerberus | JavaScript , Java , C ++ , C# |
Portování základny kódů
Když vývojáři chtějí přejít na jiný jazyk a přitom zachovat většinu existující kódové základny, může být lepší použít transcompiler ve srovnání s ručním přepisováním celého softwaru. V závislosti na kvalitě transcompileru může nebo nemusí kód ke správnému fungování vyžadovat ruční zásah. To se liší od „překompilovaných jazyků“, kde specifikace vyžadují, aby výstupní zdrojový kód vždy fungoval bez úprav. Všechny transcompilery používané k přenosu kódové základny budou očekávat ruční úpravu výstupního zdrojového kódu, pokud existuje potřeba dosáhnout maximální kvality kódu z hlediska čitelnosti a konvence platformy.
Nářadí | Zdrojový jazyk | Cílový jazyk | Komentáře |
---|---|---|---|
2to3 script | Python 2 | Python 3 | I když 2to3 dělá maximum pro automatizaci procesu překladu, jsou často zapotřebí další ruční opravy. |
Emscripten | LLVM bytecode | JavaScript | To umožňuje například spouštění databázových kódů C/C ++ v prohlížeči |
c2go | C | Jít | Před vydáním 1.5 byl kompilátor Go napsán v jazyce C. Byl vyvinut automatický překladač, který automaticky převede kódovou základnu kompilátoru z C na Go. Od verze Go 1.5 jsou „kompilátor a modul runtime nyní implementovány v Go a assembleru bez C“. |
C2Rust | C | Rez | C2Rust používá kód C jako vstup a výstup pro unsafe kód Rust se zaměřením na zachování kompatibility s původní kódovou základnou. Pro tento proces existuje několik dokumentovaných omezení. Převedení výsledného kódu na bezpečný a idiomatický Rustův kód je ruční úsilí po překladu, ačkoli existuje automatizovaný nástroj, který tento úkol usnadňuje.
|
Google Web Toolkit | Program Java, který používá konkrétní API | JavaScript | Kód Java je ve srovnání s normálním kódem Java trochu omezený. |
Js_of_ocaml společnosti Ocsigen | OCaml | JavaScript | |
J2Eif | Jáva | Eiffelova | Výsledný Eiffelův kód má třídy a struktury podobné programu Java, ale dodržuje Eiffelovu syntaxi a konvence. |
C2Eif | C | Eiffelova | Výsledný Eiffelův kód má třídy a struktury, které se snaží být co nejčistší. Nástroj je kompletní a spoléhá na vložení kódu C a sestavení, pokud jej nedokáže správně přeložit. |
Zrychlit | Cíl-C | Rychlý | Swiftify je online nástroj pro převod zdroje na zdroj z Objective-C na Swift. Pomáhá vývojářům, kteří migrují celou nebo část své kódové základny iOS do Swiftu. Konverze je zaměřena především na převod syntaxe mezi Objective-C a Swift a je nápomocna, protože Apple vyvinul úsilí k zajištění kompatibility mezi běhovými programy Swift a Objective-C. |
Runtime Converter | PHP | Jáva | Runtime Converter je automatický nástroj, který převádí zdrojový kód PHP na zdrojový kód Java. Existuje runtime knihovna Java pro určité funkce jazyka PHP, stejně jako schopnost volat do samotného binárního souboru PHP pomocí JNI pro standardní knihovnu PHP a volání funkcí rozšíření. |
Transcompiler pipelines
Transkompiler potrubí je to, co vyplývá z rekurzivního překompilování . Spojením více vrstev technologie s transkompilovým krokem mezi každou vrstvou lze technologii opakovaně transformovat a efektivně tak vytvořit specifikaci nezávislou na distribuovaném jazyce .
XSLT je univerzální transformační nástroj, který lze použít mezi mnoha různými technologiemi k vytvoření takového odvozeného kódu .
Rekurzivní transkompilace
Rekurzivní transpiling (nebo rekurzivní transcompiling ) je proces aplikace pojmu rekurzivního transpilace za účelem vytvoření řetězce transformací (často začínajících z jednoho zdroje pravdy ), které opakovaně mění jednu technologii na jinou.
Opakováním tohoto procesu lze otočit A → B → C → D → E → F a poté zpět do A (v2). Prostřednictvím tohoto kanálu budou zachovány některé informace z A → A (v2) a tyto informace (na abstraktní úrovni) ukazují, na čem se každá ze složek A – F shoduje.
V každé z různých verzí, které produkuje kanál transcompileru, jsou tyto informace zachovány. Může to mít mnoho různých tvarů a velikostí, ale v době, kdy se vrátí zpět do A (v2), které byly šestkrát překompilovány v potrubí výše, se informace vrátí do původního stavu.
Tato informace, která přežije transformaci v každém formátu, od A – F – A (v2), je (podle definice) odvozeným obsahem nebo odvozeným kódem .
Rekurzivní transpiling využívá skutečnosti, že transpiléři mohou buď držet přeložený kód co nejblíže zdrojovému kódu, aby usnadnili vývoj a ladění původního zdrojového kódu, nebo mohou změnit strukturu původního kódu natolik, že přeložený kód nevypadá jako zdrojový kód. Existují také nástroje pro ladění, které mapují přeložený zdrojový kód zpět na původní kód; například zdrojové mapy JavaScriptu umožňují mapování kódu JavaScript spuštěného webovým prohlížečem zpět na původní zdroj v jazyce přeloženém do jazyka JavaScript.
Viz také
- Binární rekompilátor
- C na HDL
- Generování kódu (kompilátor) - Proces, při kterém generátor kódu kompilátoru převede nějakou mezilehlou reprezentaci zdrojového kódu do podoby, kterou může stroj snadno provést
- DMS Software Reengineering Toolkit -framework kompilátoru source-to-source využívající explicitní pravidla pro přepis zaměřená na vzory
- f2c -překladač zdroj-zdroj z Fortran 77 do C
- Honeywell Liberator (běžící programy IBM 1401 na Honeywell H200 )
- Mezilehlá reprezentace - Datová struktura nebo kód interně používaný kompilátorem nebo virtuálním počítačem k reprezentaci zdrojového kódu
- Jazyková vazba - Softwarová knihovna, která umožňuje použití jiné knihovny kódované v jiném programovacím jazyce
- Specifikace nezávislá na jazyce- Standard počítačového programování má být interoperabilní napříč programovacími jazyky
- Interoperabilita jazyka
- Objektový optimalizátor kódu , známý také jako binární optimalizace
- Preprocesor - Program, který zpracovává vstup pro jiný program
- Transformace programu
- Rekurzivní transkompilace
- ROSE (framework kompilátoru)-framework kompilátoru source-to-source
- Translator (computing) - Počítačový program, který překládá kód z jednoho programovacího jazyka do druhého
- XSLT - jazyk pro transformaci dokumentů XML
Poznámky
Reference
Další čtení
- „Programování jednotek Sycor zjednodušené pomocí TAL II“ . Computerworld - Newsweekly pro počítačovou komunitu . IX (34). Ann Arbor, Michigan, USA: Computerworld, Inc. 1975-08-20. p. 14. ISSN 0010-4841 . Archivováno od originálu 1. ledna 2020 . Citováno 2020-01-18 .
- Zerilli, Frank J .; Derouen, Craig (1986-12-11) [1985-08-15, 1984-12-20, 1984-11-20]. „8080 až 8086 překladač ASM se zdrojem ASM“ . SIMTEL . XLT86.COM 1.10. Archivováno od originálu 1. ledna 2020 . Citováno 2020-01-18 . 11.11.1984 Verze 1.05 (Pozn. DOS spustitelný XLT86.COM [12 KB] překládá Intel 8080 montáž zdrojový kód jazyka Intel 8086 zdrojový kód assembleru. Navzdory svému názvu tato implementace v 8086 shromáždění je to souvisí s Digital Research je dříve a mnohem propracovanější XLT86 .)
-
Albo, Julián (2009-04-24). „Pasmo, ensamblador cruzado Z80 přenosný / přenosný křížový assembler Z80“ (ve španělštině a angličtině). Archivováno od originálu na 2020-02-20 . Citováno 2020-02-20 .
[…] Pasmo je křížový assembler Z80 […], který […] může generovat objektový kód v následujících formátech: raw binární, Intel HEX , PRL pro CP/M Plus RSX , Plus3Dos ( disk Spectrum +3 ), TAP, TZX a CDT ( páskové obrázky emulátorů CPC emulátorů Spectrum a Amstrad ), AmsDos (disk Amstrad CPC) a MSX (pro použití s BLOAD z disku v Basic). Počínaje verzí 0.5.0 […] lze také generovat kód 8086 ze zdrojů Z80, v binárním formátu pro soubory Ms-dos COM nebo ve formátu CP/M 86 CMD . […]
[37] [38] -
Ciarcia, Steve (květen 1984). „Trump Card-Část 1: Hardware-Zrychlete svůj počítač IBM pomocí 16bitového koprocesního výkonu“ (PDF) . BYTE - Deník malých systémů . Okruhový sklep Ciarcia. Sv. 9 č. 5. McGraw-Hill, Inc. s. 40–52, 54–55. ISSN 0360-5280 . Citováno 2020-01-29 .
[…] Místo toho spouští programy napsané ve vyšších jazycích, jako jsou BASIC a C (pracuje se na kompilátoru Pascal a překladači 8088 až Z8000. […]
a Ciarcia, Steve (červen 1984). „Trump Card - Část 2: Software - kompilátory TBASIC a C a sestavení“ (PDF) . BYTE - Deník malých systémů . Okruhový sklep Ciarcia. Sv. 9 č. 6. McGraw-Hill, Inc. s. 115–122. ISSN 0360-5280 . Citováno 2020-01-29 .[…] Očekávám, že brzy budou k dispozici překladače objektových kódů pro převody Z80 na Z8000 a 8088 na Z8000 […]
, také k dispozici jako Ciarcia, Steve (1990). „Trump Card-Část 1: Hardware-Zrychlete svůj počítač IBM pomocí 16bitového koprocesního výkonu a Část 2: Software-kompilátory TBASIC a C a sestavení“ . V Gonneau, Daniel; Bernardi, Fred; Ausburn, Richard (eds.). Okruhový sklep Ciarcia . 7 . McGraw-Hill Publishing Company . s. 138–152, 153–160. ISBN 0-07-010969-9. Archivováno od originálu 1. ledna 2020 . Citováno 2020-01-29 . [39] - Microcontroller Division Application Team (2000). „Překlad kódu sestavy z HC05 do ST7“ (PDF) (poznámka k aplikaci). STMicroelectronics . AN1106/0200 . Citováno 2020-01-18 .(9 stran) (Pozn. Tento softwarový překladač byl vyvinut společností ST a překládá zdrojový kód sestavy Motorola 6805 / HC05 ve formátu 2500AD Software do zdrojového kódu ST7 . Spustitelný soubor MIGR2ST7.EXE pro Windows je dostupný z „MCU ON CD“.)
externí odkazy
- Chaudry, Gabriele „Gaby“ (11. července 2009). „Das Intel zu Zilog - Übersetzungsprojekt“ . I2Z-Translator (v němčině). Archivováno od originálu dne 2016-09-11 . Citováno 2020-01-18 .
- „PortAsm Assembler to Assembler Translation“ . MicroAPL Ltd. 2017 [1996]. Archivováno od originálu 30. července 2019 . Citováno 2020-01-18 .
- „Naše metodika - proces převodu zdroje na zdroj“ . Micro-Processor Services, Inc. (MPS). Archivovány od originálu na 2019-05-12 . Citováno 2020-02-01 .