コンテンツにスキップ

トランスコンパイラ

Xuất điển: フリー bách khoa sự điển 『ウィキペディア ( Wikipedia ) 』
(トランスパイルから転 tống )

トランスコンパイラ( tha にトランスパイラ, ソース・トゥ・ソースコンパイラ, などとも ) は, あるプログラミング ngôn ngữで thư かれたプログラムソースコードを nhập lực として thụ け thủ り, biệt のプログラミング ngôn ngữ の đồng đẳng のコードを mục đích コードとして sinh thành する, ある chủng のコンパイラである. Nhất bàn に, コンパイラが “Bỉ giác するとCao thủy chuẩn な ngôn ngữのソースコード” を nhập lực とし, “Bỉ giác するとĐê thủy chuẩn な ngôn ngữの mục đích コード” を, コンパイル kết quả として xuất lực するものであったのに đối し, トランスコンパイラは đồng じ trình độ の (Trừu tượng hóaの ) thủy chuẩn のコードをコンパイル kết quả として xuất lực する.

それらの処 lý hệ における cụ thể đích なコンパイルの処 lý, すなわち, nhập lực から xuất lực への変 hoán において thật tế に hành われることは, それぞれの処 lý hệ によってさまざまである. Tự cú のレキシカルな変 hoán やsyntactic sugar (Đường y cấu văn) の triển khai といったような trình độ の tràng hợp もあれば, cao độ なコンパイラ tối thích hóaを thi してCơ giới ngữをコード sinh thành するような, thông thường のコンパイラと toàn く đồng dạng の処 lý をおこなっているものもある.

たとえば,PascalのコードをCのコードへと変 hoán するといったものや, “Tự động tịnh liệt hóa コンパイラ” のように, kiến た mục としては trục thứ đích なfor văn などで thư かれいているコードを,OpenMPのようなTịnh liệt hóaメタデータFortranforallVăn のような ngôn ngữ cấu tạo に変 hoán する[1],といったものがある.

トランスコンパイルの biệt の mục đích は, cơ bổn đích なプログラミング ngôn ngữ の thứ kỳ バージョンを sử う tràng hợp や,APIの hậu phươngHỗ hoán tínhが壊れた tràng hợp などに, レガシーなコードから変 hoán することである. プログラムの thật hành hoàn cảnh が変わる tràng hợp ( lệ えば, Python 2からPython 3に変 hoán する tràng hợp や cổ いAPIから tân しいAPIに変 hoán する tràng hợp )や, コンパイルによりプログラムのサイズが cực đoan に đại きくなったり thật hành tốc độ が trì くなったりした tràng hợp はリファクタリングを hành う.

トランスコンパイラは, nguyên のソースコードの khai phát やデバッグを giản 単に hành うことができるよう, nguyên のコードをコメントなどに tàn す ( ことができる ) ものもある. また, nguyên のコードから変 hoán した tế に cấu văn が đại phúc に変わった tràng hợp は, đồng đẳng のコードには kiến えないようなコードに変 hoán されることもある[2].Nguyên のコードから変 hoán されたソースコードにマッピングを hành うデバッグツールもある.

トランスコンパイラを chủ たる thật trang として khai phát されている ngôn ngữ の lệ としてはClosure Compiler,Coccinelle,CoffeeScript,Dart,Haxe,TypeScript[3],Emscripten[4]がある.

Lịch sử[Biên tập]

ここでは1980 niên tiền hậu dĩ hàng の lệ を kỳ す.

1981 niên にゲイリー・キルドールによって thư かれたデジタルリサーチのXLT86がある. それはIntel 8080Dụng の.ASMソースコードからIntel 8086Dụng の.A86ソースコードに変 hoán した. 8080のレジスターを dụng いた toàn thể đích なデータフロー giải tíchを dụng い, xuất lực されるコードサイズを tối thích hóa し,CP/M-80MP/M-80(Anh ngữ bản)のプログラムが tự động đích にCP/M-86MP/M-86に di hành できるよう hô び xuất しを処 lý した. XLT86 tự thể はPL/I-80でかかれ, CP/M-80 hoàn cảnh のみならず,DECVMS(for VAX 11/750 or 11/780)でも động くようになっていた[5].

Tự たような, しかしもっと tẩy luyện されていないプログラムは1980 niên86-DOSの nhất bộ としてティム・パターソンによって thư かれたTRANS.COMがある. それは, いくつかのZ80アセンブラのソースコードを8086 dụng の.ASMソースコードに変 hoán した. しかし, これはChế ngự コード,レジスタ,モードのサブセットのみをサポートしており, かなりの thủ động 変 hoán や thủ trực しを tất yếu とした. それはレジスタやジャンプTối thích hóaを hành わなかった[6][7].

Ngôn ngữ thật trang[Biên tập]

いくつかの ngôn ngữ thật trang は đương sơ トランスコンパイラとして khai phát され, それらの ngôn ngữ thật trang の trung には2016 niênHiện tại もトランスコンパイラのものもある. Dĩ hạ の biểu に gia え,CoffeeScriptのメンテナがJavaScriptに変 hoán できる ngôn ngữ の nhất lãm を đề cung している[8].

変 hoán nguyên ngôn ngữ 変 hoán tiên ngôn ngữ Bị khảo
BASIC C BaConを dụng いる[9]
BCX C
C JavaScript Emscripten
C++ C cfrontを変 hoán に dụng いる
Chapel C
ClojureScript JavaScript
COBOL C OpenCOBOL(Anh ngữ bản)を dụng いる
COBOL Java P3COBOL(Anh ngữ bản)を dụng いる
CoffeeScript JavaScript
C# JavaScript ScriptSharp[10]を dụng いる
Cython C このコード変 hoán は, PythonインタプリタCPythonで sử dụng するモジュールのコンパイルを ý đồ している
Dart JavaScript
Delphi Web Script /Object Pascal JavaScript Smart Mobile Studioを dụng いる[11]
ECMAScript 6 JavaScript Babel[12]もしくはtraceur-compiler[13]を dụng いる
Eiffel C
Go JavaScript GopherJS
Groovy JavaScript grooscript
Haskell JavaScript GHCJSを dụng いる
Haxe JavaScript,PHP,C++,C#,Python,Java ActionScriptバイトコードのようなバイトコードの sinh thành にも dụng いられる
Java Objective-C J2ObjC[14]
Java JavaScript grooscript,GWT,JSweet,ST-JS
Java TypeScript JSweet
Java C java2c-transcompiler[15]
Julia C Juliaの ngôn ngữ thật trang は cơ giới ngữ を sinh thành し, C ngôn ngữ を tất yếu としない. しかし, cá 々の quan sổ やすべてのプログラムをC ngôn ngữ に変 hoán することも khả năng である[16][17]
LESS CSS
Lisaac(Anh ngữ bản) C
Mirah(Anh ngữ bản) Java
MoonScript[18] Lua
Nim C,C++,Objective-C,JavaScript
OCamlbytecode JavaScript Ocsigen(Anh ngữ bản)プロジェクトのjs_of_ocamlを dụng いる
PHP C++ HipHop for PHP(Anh ngữ bản)を dụng いる
Python JavaScript Brython,PyPyJs,Rapydscript,Skulpt,Transcrypt
Python C++ NuitkaとShedSkin[19]を dụng いる
Ratfor Fortran
Ruby JavaScript Opal
Sass[20] CSS
Scheme C Stalin compiler(Anh ngữ bản),Chicken Scheme
TypeScript JavaScript
Vala GObjectのような truy giaライブラリを sử dụng したC
X10 C++,Java
Xtend(Anh ngữ bản)[21] Java

コード変 hoán[Biên tập]

Khai phát giả が, kí tồn コードの đại bộ phân を biệt の ngôn ngữ に変 hoán する tràng hợp, すべてを thủ động 変 hoán するよりもトランスコンパイラを sử dụng するほうがよい tràng hợp が đa い. “Cơ giới đích” に変 hoán が khả năng なのであれば, thủ động 変 hoán するのは単に thủ sổ を quải けるだけ vô đà なばかりではなく, thủ tác nghiệp にはミスがつきものだからである. Nhất phương で cơ giới đích な変 hoán が bất khả năng な tràng hợp もまたあり, ソース ngôn ngữ と mục đích の ngôn ngữ の tổ み hợp わせや, thật tế のコード thứ đệ でもあるがケースバイケースであって, nhất bàn luận としては hà も quyết định đích なことは ngôn えない.

ツール 変 hoán nguyên ngôn ngữ 変 hoán tiên ngôn ngữ Bị khảo
2to3 script Python2 Python 3 2to3は tự động 変 hoán プロセスはきわめて ưu れているが, それでも thủ động 変 hoán が tất yếu となる tràng hợp はある.
Emscripten LLVMバイトコード ECMAScript これはC/C++バイトコードをブラウザ đẳng で thật hành することを khả năng にする
Google Web Toolkit Đặc biệt なAPIを dụng いたJava JavaScript このJavaコードを phổ thông のJavaコードと đồng đẳng とみなすことは nan しい
Ocsigen(Anh ngữ bản)のJs_of_ocaml[22] OCaml JavaScript
J2Eif[23] Java Eiffel 変 hoán thời, Javaに loại tự したクラスと cấu tạo を trì つEiffelの cấu văn や quán tập を giải quyết する.
C2Eif[24] C Eiffel 変 hoán thời, khả năng な hạn りクラスと cấu tạo をきれいにしようとする. このツールは hoàn bích であり, thích thiết に処 lý できないCの tổ み込み quan sổ やアセンブルを trừ khứ する.
Swiftify[25] Objective-C Swift Swiftifyはオンラインのコード変 hoán ツールで, chủ にiOSコードベースの nhất bộ または toàn thể の di hành を chi viện する.

Quan liên リンク[Biên tập]

Cước chú[Biên tập]

  1. ^Types of compilers”.compilers.net (1997–2005).2010 niên 10 nguyệt 28 nhậtDuyệt lãm.
  2. ^Fowler, Martin (2013 niên 2 nguyệt 12 nhật ). “Transparent Compilation”.2013 niên 2 nguyệt 13 nhậtDuyệt lãm.
  3. ^Henson, Valerie (2009 niên 1 nguyệt 20 nhật ). “Semantic patching with Coccinelle”.lwn.net.2010 niên 10 nguyệt 28 nhậtDuyệt lãm.
  4. ^HTML5 Epic Citadel”.2016 niên 10 nguyệt 20 nhậtDuyệt lãm.
  5. ^Digital Research (1981):XLT86 - 8080 to 8086 Assembly Language Translator - User's Guide.Digital Research Inc, Pacific Grove ([1]).
  6. ^Seattle Computer Products (1980):86-DOS - Disk Operating System for the 8086. User's manual, version 0.3 - Preliminary.Seattle Computer Products, Seattle ([2]).
  7. ^Microsoft DOS V1.1 and V2.0: Z80 to 8086 Translator version 2.21 /msdos/v11source/TRANS.ASM”.Computer History Museum,マイクロソフト(2013 niên 12 nguyệt 19 nhật ).2014 niên 3 nguyệt 25 nhậtDuyệt lãm.(NB. While the publishers claim this would be MS-DOS 1.1 and 2.0, it actually isSCP MS-DOS 1.25andTeleVideo PC DOS 2.11.)
  8. ^List of languages that compile to JS”.2014 niên 12 nguyệt 15 nhậtDuyệt lãm.
  9. ^Peter van Eerten. “BaCon - A free BAsic CONverter for Unix, BSD and MacOSX”.Basic-converter.org.2014 niên 7 nguyệt 8 nhậtDuyệt lãm.
  10. ^Script# by nikhilk”.Scriptsharp.com.2013 niên 8 nguyệt 2 nhậtDuyệt lãm.
  11. ^Smart Mobile Studio”.SmartMobileStudio.com.2014 niên 3 nguyệt 9 nhậtDuyệt lãm.
  12. ^Babel · The compiler for writing next generation JavaScript”.babeljs.io.2016 niên 4 nguyệt 10 nhậtDuyệt lãm.
  13. ^Traceur is a JavaScript.next-to-JavaScript-of-today compiler”.github.com.2014 niên 7 nguyệt 2 nhậtDuyệt lãm.
  14. ^j2objc - Java to iOS Objective-C translation tool and runtime.”.j2objc.org (2014 niên 2 nguyệt 13 nhật ).2015 niên 8 nguyệt 18 nhậtDuyệt lãm.
  15. ^java2c-transcompiler - A simple source-to-source from Java to C - Google Project Hosting”.2014 niên 10 nguyệt 8 nhậtDuyệt lãm.
  16. ^IntelLabs/julia”.GitHub.2016 niên 10 nguyệt 20 nhậtDuyệt lãm.
  17. ^Google Groups”.google.com.2016 niên 10 nguyệt 20 nhậtDuyệt lãm.
  18. ^MoonScript, a language that compiles to Lua”.2016 niên 9 nguyệt 21 nhậtDuyệt lãm.
  19. ^Shed Skin, An experimental (restricted-Python)-to-C++ compiler”.2014 niên 10 nguyệt 1 nhậtDuyệt lãm.
  20. ^Maptastic Maple (3.3.9). “Sass: Syntactically Awesome Style Sheets”.Sass-lang.com.2014 niên 7 nguyệt 8 nhậtDuyệt lãm.
  21. ^Xtend, modernized Java”.Eclipse project.2014 niên 10 nguyệt 1 nhậtDuyệt lãm.
  22. ^Js_of_ocaml”.2014 niên 10 nguyệt 8 nhậtDuyệt lãm.
  23. ^J2Eif Research Page - Chair of Software Engineering”.Se.inf.ethz.ch.doi:10.1007/978-3-642-21952-8_4.2014 niên 7 nguyệt 8 nhậtDuyệt lãm.
  24. ^C2Eif Research Page - Chair of Software Engineering”.Se.inf.ethz.ch.2014 niên 7 nguyệt 8 nhậtDuyệt lãm.
  25. ^Objective-C to Swift Converter | Swiftify”.2021 niên 4 nguyệt 23 nhậtDuyệt lãm.