ソフトウェアコンパイラとは?

A software compiler translates programming languages into code.

開発者が使う人間が読める形のプログラミング言語を、ソフトウェア
コンパイラを使用してコンピュータが実行可能なマシンコードに変換

ソフトウェアコンパイラとは、高水準プログラミング言語で書かれたソースコードを、コンピュータが解釈・実行できる形式に変換するプログラムです。この変換プロセスをコンパイルと言います。

ソースコードは、通常、ソフトウェア開発者によって、C++、Python、Javaなどのプログラミング言語で作成されます。これらの言語は、人間が読めるように設計されており、開発者が書きやすく、理解しやすいようになっています。しかし、コンピュータが実行できるのは、プロセッサが理解できる一連のバイナリ形式のマシンコードだけです。

コンパイラは、ソースコードを解析し、適切なバイナリコードを生成することで、ソースコードをマシンコードに変換します。この処理は、字句解析、構文解析、意味解析、コード生成などいくつかのフエーズを経て行われます。

字句解析ステージでは、キーワード、演算子、識別子などの基本要素であるトークンのソース コードをスキャンします。 構文解析ステージでは、トークンが言語の文法に従って有効な方法で配置されていることを確認します。 セマンティック解析ステージでは、公表されていない変数の使用など、セマンティック エラーがないかチェックします。

ソースコードが分析され、エラーが特定されて報告されると、コード生成のステージに入ります。 このステージでは、コンピュータが実行できるマシンコードを作成します。 通常、機械コードは、プログラムが可能な限り迅速かつ効率的に実行されるように、パフォーマンスが最適化されています。

完成したマシンコードは実行ファイルとして保存され、ターゲットのコンピュータやデバイスで実行することができます。ソフトウェア開発者は、デバッガを使用してコードを実行し、変数やメモリのチェックやバグを発見することができます。

コンパイラの主要なツールチェーンコンポーネントとは?

コンパイラがソースコードを変換するために使用するツールセットをツールチェーンと呼びます。
以下は、コンパイラの主なツールチェーンコンポーネントです。

  • ドライバ
    単一アプリケーションを使用して、コンパイラ、アセンブラおよびリンカを呼び出すインテリジェントなラッパープログラムです。
  • アセンブラ
    ドライバプログラムにより自動的に呼び出される、またはオブジェクトモジュールを生成する完全なスタンドアロンアセンブラとして呼び出されるマクロアセンブラです。条件付きマクロや無制限のシンボルをサポートし、アセンブリプログラムのソースレベルデバッガ用のデバッグ情報を提供します。
  • コンパイラ
    ANSI/ISO C/C++互換クロスコンパイラです。7.0.xではLLVM/Clangを、5.xではEDGフロントエンドを使用します。ANSI C89、C99、 C++03、C++14およびC++17をサポートします。
  • リンカ
    コードとデータの割り当て、配置、アライメント、アブソリュートまたは再配置可能なモジュールにリンクされたオブジェクトモジュール、およびスタック使用量の推定を正確に制御します。
  • ライブラリ
    標準的なランタイム機能で、開発者がアプリケーションを作成するのに役立つプリコンパイルされたコードです。完全なC++ライブラリや標準テンプレートライブラリ(STL)、数学ライブラリ(IEEE-754付録関数を含む)、ソースコードライブラリなど、高速で効率的な様々なライブラリです。
  • リンク時最適化(LTO)
    プログラム全体の分析とモジュール間の最適化により、実行時パフォーマンスを高めることができます。
  • GNU Arm® リンカのサポート
    Diab Compilerリンカを呼び出すためのドライバへのデフォルト命令と、(GNUとの互換性を高めるための)GNUリンカを呼び出すためのドライバへの命令の、2つの同等のオプションを提供しています。
  • 未定義動作サニタイザ(UBSan)
    コンパイル時にプログラムを修正し、プログラム実行中のさまざまな種類の未定義動作を検出します。
  • 命令セットシミュレータ
    ターゲットプロセッサのコア命令をシミュレートします。
  • Eclipse CDT プラグイン
    オープンソースプロジェクトであり、GNU ツールチェーンに基づくマルチプラットフォーム組込み開発用の Eclipse プラグインおよびツールファミリーです。

ウインドバーのアプローチ

diab compiler

Wind River Diab Compiler

業界をリードするコンパイラのWind River® Diab Compilerは、アプリケーション性能の向上、メモリフットプリントの削減、組込みシステム向けの高品質で規格に準拠したコードを生成します。

ウインドリバーは長年にわたり、自動車、医療機器、アビオニクス、産業機器業界で認証を必要とするセーフティクリティカルなアプリケーション開発向けにソフトウェアとツールを提供してきました。コンパイラにおける数十年以上の経験と、何億台というデバイスへの豊富な導入実績をもつ、受賞歴のあるウインドリバーのグローバルサポート部門がお客様をサポートします。

組込み市場では、小さいメモリ容量に機能と性能が詰まった、消費電力の低いデバイスが強く求められています。Diab Compilerはこれらの要求に応えるために、グローバル、ローカル、プロセッサ固有、プロファイル駆動型、プログラム全体の最適化など、さまざまな最適化オプションを提供しています。これによりソフトウェアをチューニングして性能向上とフットプリントの縮小を実現します。

これらのパフォーマンスの向上により、メモリ使用量が少なく、低消費電力のプロセッサを必要とするデバイスを構築できるため、プロジェクトのハードウェアコストを削減できます。Diab Compilerの各リリースには、パフォーマンスとコード密度のさらなる向上を実現するための最新の最適化機能が含まれています。

主な特長

Diab Compilerには、開発者がより優れたインテリジェントシステムソフトウェアを構築するための、以下のような多くの機能が含まれています。

  • 速度/サイズの最適化を選択可能
    実行速度またはコードサイズのどちらを最適化するか、ユーザが選択できます。
  • 小さなデータ領域の最適化
    オプションの定義済みセクションは、広く使用されている静的変数やパブリック変数の参照効率を向上させることができます。
  • コードファクターを最適化
    共通するコードシーケンスを検出し、コードサイズを削減します。
  • 逆インライン化
    繰り返されるコードシーケンスを新しい関数にすることで、コードサイズを削減します。
  • プログラム全体の最適化
    異なるソースファイル内での関数間の呼び出しを最適化し、実行効率を高めることができます。
  • リンク時最適化グループ
    セーフティクリティカルなコードと非セーフティクリティカルなコードを分離します。
  • 容易な割り込み処理
    割り込みキーワードおよび割り込みプラグマにより、簡単に組込みシステムでの割り込み処理がおこなえます。
  • 位置に依存しないコードおよびデータ
    任意のアドレスでロードできるコードおよびデータを生成できます。
  • 構造化フォーマットの制御
    フットプリントを削減することで、パフォーマンス最適化に役立ちます。
  • メモリマッピングのための豊富なリンクコマンド言語
    きめ細かい制御を行いメモリ上のコードやデータを最適に配置することができます。
  • 複数のオブジェクトモジュールフォーマットをサポート
    ELF、IEEE-695およびS-Recordのサポートにより、複数のフォーマットでオブジェクトモジュールを生成できます。


» Wind River Diab Compilerの詳細はこちら