言語による利用可能性
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/04/27 10:00 UTC 版)
「ガベージコレクション」の記事における「言語による利用可能性」の解説
一般論として、高レベルな言語ほどガベージコレクションを言語の標準機能として備えていることが多い。言語に組み込まれていない場合でも、C言語/C++向けのBoehm GCのように、ライブラリとして実装されていることもある。ライブラリベースのアプローチは、オブジェクトの生成と破棄のメカニズムを変更する必要があるなど、欠点がある。 MLやHaskell、APLなどの関数型言語の多くはガベージコレクションが組み込まれている。特に、関数型言語の先駆けとなったLISPは最初にガベージコレクションを取り入れた言語でもある。 Rubyなどといった動的言語も、ガベージコレクションを備えていることが多い(ただしPerl 5やPHP 5.2以前には参照カウント方式のものしかない)。Smalltalk、Java、ECMAScriptのようなオブジェクト指向言語には、たいていガベージコレクションが組み込まれている。C#やVisual Basic .NETなどの.NET言語は.NET Framework/.NET Compact Framework/Monoといった実行環境下において、実装形態に差はあれどいずれもガベージコレクションを利用可能である。特筆すべき例外はC++とDelphiで、それらはデストラクタがその代わりとなっている。 古典的なBASICインタープリタ(N88-BASIC、F-BASICなど)においてもガベージコレクションが備えられており、文字列の連結操作の結果使われなくなった領域を再度BASICが使えるようにする処理が行われた。その処理の間、BASICがフリーズしたかのようになることから、ガベージコレクションが発生しないようにする方法として、文字列の連結を極力行わず、最大文字数が格納できる領域を持った文字列変数に対して MID$、LEFT$、RIGHT$ 関数を使用することで代用することが推奨されていた。 Objective-Cには参照カウントベースのオブジェクト寿命管理機能が組み込まれており、元々ガベージコレクションはなかったが、AppleのObjective-C 2.0では、Mac OS X 10.5以降に限り保守的な世代別GCベースのランタイムコレクタが使用可能である。ただしiOSではこのGCを利用できない。なお、macOSに関しても、NSGarbageCollectorはOS X 10.8から廃止予定扱いとなり、SDK 10.10を最後に廃止されており、またOS X 10.11を最後にこのGCは搭載されなくなり、macOS 10.12で廃止された。2015年5月以降、Mac App Storeで新規登録/更新されるアプリはGCを使えなくなっている。代替として、自動参照カウント (Automatic Reference Counting; ARC) によるメモリ管理が推奨されている。一方で、GNUstepはBoehm GCを使用している。 Pythonは主に参照カウント方式のガベージコレクションを用いているが、補助的に(伝統的なマーク&スイープとは逆順の探索アルゴリズムによる)世代別GCを併用している。 C++/CLIでは、gcnewで生成したCLIオブジェクトは.NET Frameworkのガベージコレクションにより管理される。 C++/CX(英語版)では、ref newで生成したWindowsランタイムオブジェクトはCOMベースの参照カウントにより管理される。
※この「言語による利用可能性」の解説は、「ガベージコレクション」の解説の一部です。
「言語による利用可能性」を含む「ガベージコレクション」の記事については、「ガベージコレクション」の概要を参照ください。
- 言語による利用可能性のページへのリンク