Kompilátor zdroj-zdroj- Source-to-source compiler

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 forallpří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.

Seznam transcompilers
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.

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é

Poznámky

Reference

Další čtení

externí odkazy