トランスコンパイラ
![]() | この hạng mục “トランスコンパイラ”は phiên 訳されたばかりのものです. Bất tự nhiên あるいは ái muội な biểu hiện などが hàm まれる khả năng tính があり, このままでは đọc みづらいかもしれません. ( nguyên văn:Anh ngữ bản "Source-to-source compiler" (02:48, 20 October 2016 UTC)) Tu chính, gia bút に hiệp lực し, hiện tại の biểu hiện をより tự nhiên な biểu hiện にして hạ さる phương を cầu めています.ノートページやLí lịchも tham chiếu してください.(2016 niên 10 nguyệt) |
![]() | この ký sự のXuất điển や tham khảo văn hiếnは,Nhất thứ tư liêuや ký sự chủ đề の quan hệ giả による tình báo nguyênに lại っています. |
プログラムの thật hành |
---|
Nhất bàn đích な khái niệm |
コードの chủng loại |
コンパイル chiến lược |
Hữu danh なランタイム |
Hữu danh なコンパイラとツールチェーン |
|
トランスコンパイラ( 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メタデータやFortranのforall
Vă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-80とMP/M-80のプログラムが tự động đích にCP/M-86とMP/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ênに86-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[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の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]
- ^“Types of compilers”.compilers.net (1997–2005).2010 niên 10 nguyệt 28 nhậtDuyệt lãm.
- ^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.
- ^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.
- ^“HTML5 Epic Citadel”.2016 niên 10 nguyệt 20 nhậtDuyệt lãm.
- ^Digital Research (1981):XLT86 - 8080 to 8086 Assembly Language Translator - User's Guide.Digital Research Inc, Pacific Grove ([1]).
- ^Seattle Computer Products (1980):86-DOS - Disk Operating System for the 8086. User's manual, version 0.3 - Preliminary.Seattle Computer Products, Seattle ([2]).
- ^“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.)
- ^“List of languages that compile to JS”.2014 niên 12 nguyệt 15 nhậtDuyệt lãm.
- ^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.
- ^“Script# by nikhilk”.Scriptsharp.com.2013 niên 8 nguyệt 2 nhậtDuyệt lãm.
- ^“Smart Mobile Studio”.SmartMobileStudio.com.2014 niên 3 nguyệt 9 nhậtDuyệt lãm.
- ^“Babel · The compiler for writing next generation JavaScript”.babeljs.io.2016 niên 4 nguyệt 10 nhậtDuyệt lãm.
- ^“Traceur is a JavaScript.next-to-JavaScript-of-today compiler”.github.com.2014 niên 7 nguyệt 2 nhậtDuyệt lãm.
- ^“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.
- ^“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.
- ^“IntelLabs/julia”.GitHub.2016 niên 10 nguyệt 20 nhậtDuyệt lãm.
- ^“Google Groups”.google.com.2016 niên 10 nguyệt 20 nhậtDuyệt lãm.
- ^“MoonScript, a language that compiles to Lua”.2016 niên 9 nguyệt 21 nhậtDuyệt lãm.
- ^“Shed Skin, An experimental (restricted-Python)-to-C++ compiler”.2014 niên 10 nguyệt 1 nhậtDuyệt lãm.
- ^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.
- ^“Xtend, modernized Java”.Eclipse project.2014 niên 10 nguyệt 1 nhậtDuyệt lãm.
- ^“Js_of_ocaml”.2014 niên 10 nguyệt 8 nhậtDuyệt lãm.
- ^“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.
- ^“C2Eif Research Page - Chair of Software Engineering”.Se.inf.ethz.ch.2014 niên 7 nguyệt 8 nhậtDuyệt lãm.
- ^“Objective-C to Swift Converter | Swiftify”.2021 niên 4 nguyệt 23 nhậtDuyệt lãm.