Transpilator (także transkompilator) – rodzaj kompilatora, który przetwarza kod źródłowy programu napisanego w jednym języku programowania na równoważny kod w innym języku programowania lub w innym wariancie tego samego języka.
Transpilator różni się od typowego kompilatora tym, że zarówno kod wejściowy, jak i kod wynikowy operują zwykle na zbliżonym poziomie abstrakcji. Tradycyjny kompilator tłumaczy natomiast kod z języka wyższego poziomu na język niższego poziomu, kod maszynowy albo kod bajtowy. Po transpilacji kod wynikowy może pozostać czytelny dla człowieka, o ile nie został dodatkowo poddany minifikacji.
Zastosowania Przykładem transpilacji jest przetworzenie programu napisanego w jednym języku wysokiego poziomu na kod w innym języku wysokiego poziomu, na przykład z TypeScriptu do JavaScriptu albo z CoffeeScriptu do JavaScriptu. W odróżnieniu od tego tradycyjna kompilacja może polegać na tłumaczeniu programu napisanego w języku takim jak C na język asemblera lub programu napisanego w Javie na kod bajtowy Javy.
Transpilacja może być stosowana przy przenoszeniu bibliotek i programów między językami programowania, przy migracji kodu na inną platformę lub przy tworzeniu kodu w języku wygodniejszym dla programisty, a następnie uruchamianiu go w środowisku obsługującym inny język.
Istnieją również języki programowania, dla których transpilacja jest typowym elementem procesu tworzenia programu. Przykładem jest TypeScript, który został zaprojektowany jako język kompilowany do JavaScriptu.
Innym zastosowaniem transpilacji jest tłumaczenie kodu napisanego dla starszej wersji języka na kod zgodny z nowszą wersją, na przykład migracja kodu z Pythona 2 do Pythona 3. Narzędzia tego typu mogą automatycznie wykonywać część zmian składniowych i refaktoryzacyjnych, ale wynikowy kod nie zawsze jest gotowy do użycia bez ręcznych poprawek.
Często spotykany jest również proces odwrotny, czyli przetwarzanie kodu napisanego dla nowszej wersji języka na kod zgodny ze starszą wersją. Jest to szczególnie użyteczne wtedy, gdy programista nie ma pełnej kontroli nad środowiskiem uruchomieniowym. Przykładem jest tworzenie kodu dla przeglądarek internetowych, gdzie narzędzia takie jak Babel mogą przekształcać kod zgodny z nowszymi wersjami ECMAScriptu do postaci obsługiwanej przez starsze przeglądarki.
Mapowanie źródeł Transpilatory mogą zachowywać strukturę kodu wynikowego możliwie blisko kodu źródłowego, aby ułatwić testowanie i debugowanie programu. Mogą też znacząco przekształcać strukturę kodu, przez co kod wynikowy staje się mniej podobny do kodu źródłowego.
Do powiązania kodu wynikowego z kodem źródłowym służą mapy źródeł (*source maps*). W przypadku JavaScriptu stosowany jest format Source Map, który pozwala narzędziom deweloperskim w przeglądarce pokazywać oryginalny kod źródłowy podczas debugowania programu.
Przykłady transpilatorów Poniższa tabela przedstawia przykłady narzędzi służących do transpilacji między językami programowania lub między wersjami tego samego języka.
Nazwa Język źródłowy Język docelowy Uwagi Cfront C++ C Wczesny translator języka C++ do języka C. CoffeeScript CoffeeScript JavaScript Język kompilowany do JavaScriptu. TypeScript TypeScript JavaScript Nadzbiór JavaScriptu dodający m.in. statyczne typowanie. ClojureScript Clojure JavaScript Odmiana Clojure kompilowana do JavaScriptu. JSweet Java TypeScript, JavaScript Narzędzie umożliwiające używanie składni Javy do tworzenia kodu działającego w środowisku JavaScript. Swiftify Objective-C Swift Narzędzie wspomagające migrację kodu z Objective-C do Swifta. J2ObjC Java Objective-C Narzędzie do konwersji kodu Javy na Objective-C. Emscripten C, C++ JavaScript, WebAssembly Narzędzie umożliwiające uruchamianie kodu C i C++ w środowisku przeglądarkowym. c2go C Go Narzędzie wykorzystane przy migracji części kodu kompilatora Go z C do Go. Google Web Toolkit Java JavaScript Zestaw narzędzi umożliwiający tworzenie aplikacji webowych w Javie i kompilowanie ich do JavaScriptu. Js_of_ocaml OCaml JavaScript Kompilator kodu OCaml do JavaScriptu. Babel ECMAScript JavaScript zgodny ze starszymi środowiskami Narzędzie przekształcające kod napisany z użyciem nowszych funkcji JavaScriptu do postaci obsługiwanej przez starsze środowiska. 2to3 Python 2 Python 3 Narzędzie wspomagające migrację kodu z Pythona 2 do Pythona 3.
Zobacz też Kompilator Interpreter (program komputerowy) Kod źródłowy Minifikacja XSLT
Przypisy
Kategoria:Kompilatory