コンテンツにスキップ

「トランスコンパイラ」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
編集の要約なし
Mashir43 (会話 | 投稿記録)
en:Source-to-source compiler (02:48, 20 October 2016 UTC) を翻訳
タグ: サイズの大幅な増減
1行目: 1行目:
{{翻訳直後|1=[https://en.wikipedia.org/w/index.php?title=Source-to-source_compiler&oldid=745248910 英語版 "Source-to-source compiler" (02:48, 20 October 2016 UTC)]|date=2016年10月}}
{{出典の明記|date=2016年10月7日 (金) 08:28 (UTC)}}
{{primary sources|date=October 2015}}
'''トランスコンパイラ'''とは、[[コンパイラ]]の一種であり、ある[[プログラム言語]]で書かれた[[ソースコード]]を入力として、それと等価な別の言語のソースコードを生成するものである。
{{Distinguish|クロスコンパイラ}}

'''トランスコンパイラ'''({{Lang-en|transcompiler}})または'''ソース・トゥ・ソースコンパイラ'''({{Lang-en|source-to-source compiler}})は一つの[[プログラミング言語]]で書かれたプログラムの[[ソースコード]]を入力し、別のプログラミング言語の同等のソースコードを作成する[[コンパイラ]]である。普通のコンパイラが[[高水準言語]]から[[低水準言語]]に翻訳するのに対し、トランスコンパイラは例えば[[Pascal]]から[[C言語|C]]への翻訳のような、ほぼ同じ[[抽象化 (計算機科学)|抽象化]]水準のプログラミング言語間で翻訳する。自動並列化コンパイラは、しばしば高水準言語の入力から[[OpenMP]]のような並列化メタデータや[[Fortran]]の<code>forall</code>文のような言語構造を変換する<ref>{{cite web |url=http://www.compilers.net/paedia/compiler/index.htm|title=Types of compilers|date=1997–2005|publisher=compilers.net|accessdate=28 October 2010}}</ref>。

トランスコンパイルの別の目的としては、基本的なプログラミング言語の次期バージョンを使う場合や、APIの後方互換性が壊れた場合等のレガシーなコードを翻訳することである。これにより、プログラムの実行環境が変わった場合(例えば、Python 2からPython 3に変換する場合や古いAPIから新しいAPIに変換する場合である)や、プログラムのサイズが極端に大きくなったり実行速度が遅くなった場合は、自動的に有効な[[リファクタリング]]を行う。

トランスコンパイラは、元のソースコードの開発や[[デバッグ]]を簡単に行うことができるよう、翻訳されたコードを保存することもできるものもある。また、元のコードから変換した際に構文が大幅に変わった場合は、同じコードには見えないこともある。<ref>{{cite web | url=http://martinfowler.com/bliki/TransparentCompilation.html | title=Transparent Compilation | date=February 12, 2013 | accessdate=February 13, 2013 | author=Fowler, Martin}}</ref>。元のコードから変換されたソースコードにマッピングを行うデバッグツールもある。例えば、[[JavaScript]]のソースは[[Webブラウザ]]で実行されたコードをマッピングすることを許可している<ref name="javascript-sourcemaps">{{cite web | url=http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/ | title=Introduction to JavaScript Source Maps | publisher=html5rocks.com | date=21 March 2012 | accessdate=21 January 2015 | author=Seddon, Ryan}}</ref>。

トランスコンパイル言語の例としては{{仮リンク|Google Closure Tools|en|Google Closure Tools|label=Closure Compiler}}, [[Coccinelle (ソフトウェア)|Coccinelle]], [[CoffeeScript]], [[Dart]], [[Haxe]], [[TypeScript]]<ref>{{cite web |url=https://lwn.net/Articles/315686/|title=Semantic patching with Coccinelle|first=Valerie|last=Henson|date=January 20, 2009|publisher=lwn.net|accessdate=28 October 2010}}</ref>, [[Emscripten]]<ref>{{cite web|url=http://www.unrealengine.com/html5|title=HTML5 Epic Citadel|author1=[[Epic Games]]|author2=[[Mozilla]]|accessdate=2016-10-20}}</ref>がある。

== 歴史 ==
最初<!-- or perhaps actually the first? -->のトランスコンパイラの一つは、[[1981年]]<!-- possibly some incarnations of it existed earlier already, but the documentation I found is dated 1981 -->に[[ゲイリー・キルドール]]によって書かれた[[デジタルリサーチ]]のXLT86である。それは[[Intel 8080]]用の.ASMソースコードから[[Intel 8086]]用の.A86ソースコードに翻訳した。8080のレジスターを用いた全体的な[[データフロー解析]]を用い、この翻訳機は出力されるコードサイズを最適化し、[[CP/M-80]]と{{仮リンク|MP/M-80|en|MP/M-80}}のプログラムが自動的に[[CP/M-86]]と{{仮リンク|MP/M-86|en|MP/M-86}}に移行できるよう呼び出しを処理した。XLT86自体は[[PL/I|PL/I-80]]でかかれ、CP/M-80環境のみならず、[[Digital Equipment Corporation|DEC]] [[OpenVMS|VMS]] (for VAX 11/750 or 11/780)でも動くようになっていた<ref>Digital Research (1981): ''XLT86 - 8080 to 8086 Assembly Language Translator - User's Guide''. Digital Research Inc, Pacific Grove ([http://www.s100computers.com/Software%20Folder/Assembler%20Collection/Digital%20Research%20XLT86%20Manual.pdf]).</ref>。

似たような、しかしもっと洗練されていないプログラムは[[1980年]]に[[86-DOS]]の一部として[[ティム・パターソン]]によって書かれたTRANS.COMがある。それは、いくつかの[[Z80]]アセンブラのソースコードを8086用の.ASMソースコードに変換した。しかし、これは制御コード、レジスター、モードのサブセットのみをサポートしており、かなりの手動変換や手直しを必要とした。それはレジスタやジャンプの最適化を行わなかった<ref>Seattle Computer Products (1980): ''86-DOS - Disk Operating System for the 8086. User's manual, version 0.3 - Preliminary''. Seattle Computer Products, Seattle ([http://www.patersontech.com/dos/Docs/86_Dos_usr_03.pdf]).</ref><ref name="Paterson_2014_MSDOS125">{{cite web|first1=Tim
|last1=Paterson|authorlink1=Tim Paterson|title=Microsoft DOS V1.1 and V2.0: Z80 to 8086 Translator version 2.21 /msdos/v11source/TRANS.ASM|url=http://www.computerhistory.org/atchm/microsoft-research-license-agreement-msdos-v1-1-v2-0/|publisher=[[Computer History Museum]], [[Microsoft]]|date=2013-12-19<!-- 2014-03-25 -->
|origyear=1982<!-- 1982-07-01 -->|accessdate=2014-03-25}} (NB. While the publishers claim this would be MS-DOS 1.1 and 2.0, it actually is [[86-DOS|SCP MS-DOS 1.25]] and [[MS-DOS|TeleVideo PC DOS 2.11]].)</ref>。

== 言語実装 ==
いくつかの言語実装は当初トランスコンパイラとして開発され、それらの言語実装の中には[[2016年]]現在もトランスコンパイラのものもある。以下の表に加え、[[CoffeeScript]]のメンテナがJavascriptに変換できる言語の一覧を提供している<ref>{{cite web | url=https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS | title=List of languages that compile to JS | accessdate=December 15, 2014}}</ref>。

{| class="wikitable sortable collapsible collapsed"
|-
! 変換元言語 !! 変換先言語 !! 備考
|-
| [[BASIC]] || [[C言語|C]] || BaConを用いる<ref>{{cite web|author=Peter van Eerten |url=http://www.basic-converter.org/ |title=BaCon - A free BAsic CONverter for Unix, BSD and MacOSX |publisher=Basic-converter.org |date= |accessdate=2014-07-08}}</ref>
|-
| {{仮リンク|BCX|en|BCX}} || [[C言語|C]] ||
|-
| [[C言語|C]] || [[JavaScript]] || [[Emscripten]]
|-
| [[C++]] || [[C言語|C]] || [[cfront]]を変換に用いる
|-
| [[Chapel]] || [[C言語|C]] ||
|-
| [[Clojure|ClojureScript]] || [[JavaScript]] ||
|-
| [[COBOL]] || [[C言語|C]] || {{仮リンク|OpenCOBOL|en|OpenCOBOL}}を用いる
|-
| [[COBOL]] || [[Java]] || {{仮リンク|P3COBOL|en|P3COBOL}}を用いる
|-
| [[CoffeeScript]] || [[JavaScript]] ||
|-
| [[C Sharp|C#]] || [[JavaScript]] || ScriptSharp<ref>{{cite web|url=http://scriptsharp.com |title=Script# by nikhilk |publisher=Scriptsharp.com |date= |accessdate=2013-08-02}}</ref>を用いる
|-
| [[Cython]] || [[C言語|C]] || このコード変換は、Pythonインタープリターの[[CPython]]で使用するモジュールのコンパイルを意図している
|-
| [[Dart]] || [[JavaScript]] ||
|-
| Delphi Web Script / [[Object Pascal]] || [[JavaScript]] || Smart Mobile Studioを用いる<ref>{{cite web|url=http://smartmobilestudio.com/ |title=Smart Mobile Studio|publisher=SmartMobileStudio.com |date= |accessdate=2014-03-09}}</ref>
|-
| [[ECMAScript|ECMAScript 6]] || [[JavaScript]] || Babel<ref>{{cite web|url=https://babeljs.io/ |title=Babel · The compiler for writing next generation JavaScript |website=babeljs.io |date= |accessdate=2016-04-10}}</ref>もしくはtraceur-compiler<ref>{{cite web|url=https://github.com/google/traceur-compiler |title=Traceur is a JavaScript.next-to-JavaScript-of-today compiler |website=github.com |date= |accessdate=2014-07-02}}</ref>を用いる
|-
| [[Eiffel]] || [[C言語|C]] ||
|-
| [[Go (プログラミング言語)|Go]] || [[JavaScript]] || [http://www.gopherjs.org GopherJS]
|-
| [[Groovy]] || [[JavaScript]] || [http://grooscript.org/ grooscript]
|-
| [[Haskell]] || [[JavaScript]] || GHCJSを用いる
|-
| [[Haxe]] || [[JavaScript]], [[PHP]], [[C++]], [[C Sharp|C#]], [[Python]], [[Java]]。<br>[[ActionScript]]バイトコードのようなバイトコードの生成にも用いられる。 ||
|-
| [[Java]] || [[Objective-C]] || J2ObjC<ref>{{cite web|url=http://j2objc.org/ |title=j2objc - Java to iOS Objective-C translation tool and runtime.|publisher=j2objc.org |date=2014-02-13 |accessdate=2015-08-18}}</ref>
|-
| [[Java]] || [[JavaScript]] || [http://grooscript.org/ grooscript], [http://www.gwtproject.org/ GWT], [http://www.jsweet.org/ JSweet], [http://st-js.github.io/ ST-JS]
|-
| [[Java]] || [[TypeScript]] || [http://www.jsweet.org/ JSweet]
|-
| [[Java]] || [[C言語|C]] || java2c-transcompiler<ref>{{cite web|url=https://code.google.com/p/java2c-transcompiler/|title=java2c-transcompiler - A simple source-to-source from Java to C - Google Project Hosting|publisher=|accessdate=8 October 2014}}</ref>
|-
| [[Julia (プログラミング言語)|Julia]] || [[C言語|C]] || Juliaの言語実装は機械語を生成し、C言語を必要としない。しかし、個々の関数やすべてのプログラムをC言語に変換することも可能である<ref>{{cite web|url=https://github.com/IntelLabs/julia/tree/j2c|title=IntelLabs/julia|work=GitHub|accessdate=2016-10-20}}</ref><ref>{{cite web|url=https://groups.google.com/forum/#!topic/julia-dev/iBsehcB62kM|title=Google Groups|work=google.com|accessdate=2016-10-20}}</ref>
|-
| [[LESS]] || [[CSS]] ||
|-
| {{仮リンク|Lisaac|en|Lisaac}} || [[C言語|C]] ||
|-
| {{仮リンク|Mirah|en|Mirah (programming language)}} || [[Java]] ||
|-
| [[MoonScript]] <ref>{{cite web| url=http://moonscript.org/| title=MoonScript, a language that compiles to Lua | accessdate=2016-09-21}}</ref> || [[Lua]] ||
|-
| [[Nim]] || [[C言語|C]], [[C++]], [[Objective-C]], [[JavaScript]] ||
|-
| [[OCaml]] bytecode || [[JavaScript]] || {{仮リンク|Ocsigen|en|Ocsigen}}プロジェクトのjs_of_ocamlを用いる
|-
| [[PHP]] || [[C++]] || {{仮リンク|HipHop for PHP|en|HipHop for PHP}}を用いる
|-
| [[Python]] || [[JavaScript]] || [http://www.brython.info/ Brython], [http://pypyjs.org// PyPyJs], [http://www.rapydscript.com/ Rapydscript], [http://www.skulpt.org/ Skulpt], [http://www.transcrypt.org/ Transcrypt]
|-
| [[Python]] || [[C++]] || NuitkaとShedSkin<ref>{{cite web |url=https://code.google.com/p/shedskin/ |title=Shed Skin, An experimental (restricted-Python)-to-C++ compiler |publisher= |accessdate=2014-10-01}}</ref>を用いる
|-
| [[Ratfor]] || [[Fortran]] ||
|-
| [[Ruby]] || [[JavaScript]] || [http://opalrb.org/ Opal]
|-
| [[Sass]]<ref>{{cite web|author=Maptastic Maple (3.3.9) |url=http://sass-lang.com/ |title=Sass: Syntactically Awesome Style Sheets |publisher=Sass-lang.com |date= |accessdate=2014-07-08}}</ref> || [[CSS]] ||
|-
| [[Scheme]] || [[C言語|C]] || {{仮リンク|Stalin compiler|en|Stalin (Scheme implementation)}}, [[Chicken Scheme]]
|-
| [[TypeScript]] || [[JavaScript]] ||
|-
| [[Vala]] || [[GObject]]のような追加ライブラリを使用した[[C言語|C]] ||
|-
| [[X10 (プログラミング言語)|X10]] || [[C++]], [[Java]] ||
|-
| {{仮リンク|Xtend|en|Xtend}}<ref>{{cite web| url=http://www.eclipse.org/xtend/| title=Xtend, modernized Java| publisher=Eclipse project| accessdate=2014-10-01}}</ref> || [[Java]] ||
|}

== コード変換 ==
開発者が、既存コードの大部分を別の言語に変換する場合、すべてを手動変換するよりもトランスコンパイラを使用するほうがよい場合が多い。このような場合でも、そのコードはしばしば手動変換が必要となる。なぜなら、自動翻訳がすべての場合に働くとは限らないからである。

{| class="wikitable collapsible collapsed"
|-
! ツール !! 変換元言語 !! 変換先言語 !! 備考
|-
| 2to3 script || [[Python]] 2 || Python 3 || 2to3は自動変換プロセスはきわめて優れているが、それでも手動変換が必要となる場合はある。
|-
| [[Emscripten]] || [[LLVM]]バイトコード || [[ECMAScript]] || これはC/C++バイトコードをブラウザ等で実行することを可能にする
|-
| [[Google Web Toolkit]] || 特別な[[Application programming interface|API]]を用いた[[Java]] || [[JavaScript]] || このJavaコードを普通のJavaコードと同等とみなすことは難しい
|-
| {{仮リンク|Ocsigen|en|Ocsigen}}のJs_of_ocaml<ref>{{cite web|url=http://ocsigen.org/js_of_ocaml/manual/overview|title=Js_of_ocaml|publisher=|accessdate=8 October 2014}}</ref> || [[OCaml]] || [[JavaScript]]
|-
| J2Eif<ref>{{cite web|url=http://se.inf.ethz.ch/research/j2eif/ |title=J2Eif Research Page - Chair of Software Engineering |doi=10.1007/978-3-642-21952-8_4 |publisher=Se.inf.ethz.ch |date= |accessdate=2014-07-08}}</ref> || [[Java]] || [[Eiffel]] || 変換時、Javaに類似したクラスと構造を持つEiffelの構文や慣習を解決する。
|-
| C2Eif<ref>{{cite web|url=http://se.inf.ethz.ch/research/c2eif/ |title=C2Eif Research Page - Chair of Software Engineering |publisher=Se.inf.ethz.ch |date= |accessdate=2014-07-08}}</ref> || [[C言語|C]] || [[Eiffel]] || 変換時、可能な限りクラスと構造をきれいにしようとする。このツールは完璧であり、適切に処理できないCの組み込み関数やアセンブルを除去する。
|}

== パイプライン ==
トランスコンパイラのパイプラインは{{仮リンク|再帰的トランスコンパイル|en|Recursive Transcompiling}}によって実現される。それぞれの間で技術的にトランスコンパイルできる複数のレイヤーを一続きにすることで、技術的には繰り返して変換でき、効果的に[[中間言語]]を生成することができる。

[[XSLT|Xslt]]は多くの異なる技術間で用いられる一般的な変換言語であり、{{仮リンク|派生コード|en|derivative code}}のパイプラインを作ることができる。

== 関連リンク ==
{{Portal|コンピュータ}}

{{Div col||20em}}
* {{仮リンク|C to HDL|en|C to HDL}}
* {{仮リンク|言語相互運用性|en|Language interoperability}}
* {{仮リンク|バイナリ再コンパイル|en|Binary recompiler}}
* [[コード生成]]
* {{仮リンク|プログラム変換|en|Program transformation}}
* {{仮リンク|ROSE (コンパイラ)|en|ROSE compiler framework}}
* [[パーサジェネレータ]]
* {{仮リンク|翻訳 (コンピューター)|en|Translation (computing)}}
* [[言語バインディング]]
* {{仮リンク|Monkey (プログラミング言語)|en|Monkey (programming language)}}
* [[中間言語]]
* {{仮リンク|再帰的トランスコンパイル|en|Recursive Transcompiling}}
* [[Xml]]・[[XSLT]]
{{Div col end}}

== 脚注 ==
{{Reflist|30em}}

{{DEFAULTSORT:とらんすこんはいら}}
[[Category:コンパイラ]]
[[Category:システムソフトウェア]]

2016年10月20日 (木) 08:34時点における版

トランスコンパイラ(英語: transcompiler)またはソース・トゥ・ソースコンパイラ(英語: source-to-source compiler)は一つのプログラミング言語で書かれたプログラムのソースコードを入力し、別のプログラミング言語の同等のソースコードを作成するコンパイラである。普通のコンパイラが高水準言語から低水準言語に翻訳するのに対し、トランスコンパイラは例えばPascalからCへの翻訳のような、ほぼ同じ抽象化水準のプログラミング言語間で翻訳する。自動並列化コンパイラは、しばしば高水準言語の入力からOpenMPのような並列化メタデータやFortranforall文のような言語構造を変換する[1]

トランスコンパイルの別の目的としては、基本的なプログラミング言語の次期バージョンを使う場合や、APIの後方互換性が壊れた場合等のレガシーなコードを翻訳することである。これにより、プログラムの実行環境が変わった場合(例えば、Python 2からPython 3に変換する場合や古いAPIから新しいAPIに変換する場合である)や、プログラムのサイズが極端に大きくなったり実行速度が遅くなった場合は、自動的に有効なリファクタリングを行う。

トランスコンパイラは、元のソースコードの開発やデバッグを簡単に行うことができるよう、翻訳されたコードを保存することもできるものもある。また、元のコードから変換した際に構文が大幅に変わった場合は、同じコードには見えないこともある。[2]。元のコードから変換されたソースコードにマッピングを行うデバッグツールもある。例えば、JavaScriptのソースはWebブラウザで実行されたコードをマッピングすることを許可している[3]

トランスコンパイル言語の例としてはClosure Compiler, Coccinelle, CoffeeScript, Dart, Haxe, TypeScript[4], Emscripten[5]がある。

歴史

最初のトランスコンパイラの一つは、1981年ゲイリー・キルドールによって書かれたデジタルリサーチのXLT86である。それはIntel 8080用の.ASMソースコードからIntel 8086用の.A86ソースコードに翻訳した。8080のレジスターを用いた全体的なデータフロー解析を用い、この翻訳機は出力されるコードサイズを最適化し、CP/M-80MP/M-80英語版のプログラムが自動的にCP/M-86MP/M-86に移行できるよう呼び出しを処理した。XLT86自体はPL/I-80でかかれ、CP/M-80環境のみならず、DEC VMS (for VAX 11/750 or 11/780)でも動くようになっていた[6]

似たような、しかしもっと洗練されていないプログラムは1980年86-DOSの一部としてティム・パターソンによって書かれたTRANS.COMがある。それは、いくつかのZ80アセンブラのソースコードを8086用の.ASMソースコードに変換した。しかし、これは制御コード、レジスター、モードのサブセットのみをサポートしており、かなりの手動変換や手直しを必要とした。それはレジスタやジャンプの最適化を行わなかった[7][8]

言語実装

いくつかの言語実装は当初トランスコンパイラとして開発され、それらの言語実装の中には2016年現在もトランスコンパイラのものもある。以下の表に加え、CoffeeScriptのメンテナがJavascriptに変換できる言語の一覧を提供している[9]

コード変換

開発者が、既存コードの大部分を別の言語に変換する場合、すべてを手動変換するよりもトランスコンパイラを使用するほうがよい場合が多い。このような場合でも、そのコードはしばしば手動変換が必要となる。なぜなら、自動翻訳がすべての場合に働くとは限らないからである。

パイプライン

トランスコンパイラのパイプラインは再帰的トランスコンパイル英語版によって実現される。それぞれの間で技術的にトランスコンパイルできる複数のレイヤーを一続きにすることで、技術的には繰り返して変換でき、効果的に中間言語を生成することができる。

Xsltは多くの異なる技術間で用いられる一般的な変換言語であり、派生コード英語版のパイプラインを作ることができる。

関連リンク

脚注

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