C++の解明

From emmtrix Wiki
Jump to navigation Jump to search
This page is a translated version of the page Demystifying C++ and the translation is 100% complete.
Other languages:
C++の解明

プログラミングの世界では、ソフトウェア開発の絶えず増大する要求に応えるための言語やツールの進化と適応が続いています。C++は最も強力で多目的なプログラミング言語の一つとみなされていますが、その複雑さはしばしば威圧的であり、挑戦的です。この記事では、C++からCへのトランスパイラの視点を通して、時折複雑なC++の構造を解明して、舞台裏をのぞき見ます。あなたが経験豊富な開発者であろうと、C++の深淵に初めて足を踏み入れる人であろうと、この記事はこの強力な言語を駆動する仕組みに関する魅力的な洞察を提供します。

C++からCへのトランスパイラ

トランスパイラは、ソースツーソースコンパイラとしても知られています。これは、あるプログラミング言語のソースコードを別のプログラミング言語のソースコードに変換する特別なツールです。ソースコードを機械コードに変換する伝統的なコンパイラとは異なり、トランスパイラは高水準の言語のコードを別の高水準の言語に変換します。

emmtrixでは、C++からCへのトランスパイラが現在開発中です[1]。これは、広範なLLVMプロジェクトの一部である最先端のコンパイラフロントエンドであるclangフロントエンドに基づいています。顕著な特徴は、元のC++コードと生成されたCコードの間の意味的な同等性を確保することです。これは、2つの言語の違いにもかかわらず、翻訳されたコードが元のコードと同じ振る舞いを示すことを意味します。

意味的な同等性を確保するために、比較ツールが使用されます。このツールは、元のC++コードと生成されたCコードの両方をLLVM IR(中間表現)に変換し、これら2つの表現を比較します。この比較を通じて、生成されたコードがテストケースで同じ出力を生成するだけでなく、毎回の実行で意味的に同一のコードが生成されること(またはエラーが表示されること)が確保されます。このアプローチは、ISO26262およびDO-178Cの両方でエラーのない動作を確保する方法として認識されています。

このトランスパイラは、C++14言語の全ての機能および一般的なGCC/Clang言語拡張をサポートしています。唯一の例外は、Cで1対1の基準で再現できないため、完全にはサポートされていません。C++標準に加えて、Itanium C++ ABI [2]が使用されます。これは、例えば継承を持つクラスがどのように実装されるかなど、バイナリインターフェース(すなわち、アプリケーションバイナリインターフェース、ABI)を指定します。

この記事の中で、トランスパイラはC++を解明するために使用されています。なぜなら、Cの出力は、コンパイラによるC++の構造の実装を容易に理解できるようにしているからです。

C++の構造

未来のアイディア

  • メンバ関数ポインタ
  • 配列のnewとdelete
  • 例外処理