組み込みソフトウェアのプログラミング言語: メリットとデメリット、一般的な言語の比較

組み込みシステム用のプログラミング言語を決めることは、システム構築にあたって最も重要な決定になるかもしれません。私はこれまでにさまざまな言語を使用して、膨大な数の組み込みシステムを構築してきました。本記事では、言語の使用と選択に関する提言に加えて、他の開発エキスパートによるヒントも紹介します。

記事の内容:

組み込みプログラミング言語とは

組み込みプログラミング言語とは、組み込みシステムの開発に使用するプログラミング言語です。一般的にこの言語では、デバイスハードウェアに対するローレベルのアクセスが可能です。開発者は組み込みシステム用に複数の共通のプログラミング言語を使用します。


これは組み込みコーディング言語と呼ばれる場合もあります。しかしプログラミングにはコーディング以外にもさまざまな要素が含まれています。

組み込みシステムで使用されているプログラミング言語

開発者は組み込みシステムで多様なプログラミング言語を使用します。最も一般的な言語としては、C、C++、Python、MicroPython、Javaが挙げられます。

組み込みシステム用の一般的なプログラミング言語

開発者が組み込みシステムで頻繁に使用するプログラミング言語には、いくつかの重要なメリットがありますが、ほとんどの言語にはデメリットもあります。ここでは一般的な組み込みプログラミング言語のメリットと制限を示します。

C
  • 基本事項: 1970年代初期の開発されたC言語はコンパイル型言語であり、他の多数の言語の構成要素として機能します。
  • メリット: C言語は効率的なプログラミング言語であり、広範に使用されています。業界の推定によれば、組み込みシステムの80%でCプログラミング言語が使用されています。
  • デメリット: 開発者が複雑なコーディング技術を理解して使用する必要があります。
C++
  • 基本事項: このコンパイル型言語はC言語のほとんどまたはすべての要素を備えていますが、他の機能も持っています。C++はシステムプログラミングと組み込みシステム用に設計されている側面があります。
  • メリット: C++はC言語のように効率的であり、また標準ライブラリがあるため、コーディング時間を短縮できます。
  • デメリット: 複雑な言語であるため、学習がむずかしい。
  • 専門家の解説:Beningo Embedded Groupの社長であり組み込みソフトウェアコンサルタントであるJacob Beningo氏は、次のように説明しています。「C++には非常に多くの機能がありますが、その中には、活用しないと組み込みシステムのパフォーマンスを致命的に低下させる機能があります。開発者はその機能を認識していなければならないのです。膨大な機能の中で、組み込み開発者として利用できるものはほんの一部です。その他の機能はコードを肥大化させて効率を低下させ、パフォーマンスを悪化させる原因になります」
Python
  • 基本事項: 1980年代初期に(英国のコメディー集団Monty Pythonが名前の由来)開発されたPythonは、プログラミング言語として広く普及しています。機械学習、人工知能(AI)、データ分析の分野に優れていますが、他のさまざまな用途にも活用できます。
  • メリット: Pythonはオープンソースであり無料で使用でき、読み書きの習得も容易です。
  • デメリット: Pythonは決定論的でないため、リアルタイムオペレーティングシステム(RTOS)には適していません。
MicroPython
  • 基本事項: MicroPythonはマイクロコントローラー向けに最適化されたPythonです。
  • メリット: MicroPythonもオープンソースであり無料で使用でき、習得が容易です。
  • デメリット: コードの実行はそれほど高速ではなく、CやC++に比べてメモリーの消費量が多くなります。
  • 専門家の解説: Beningo氏はMicroPythonのメリットについて次のように説明しています。「すべてのライブラリとフレームワークが既知のものであり、既存のコードを利用できます。習得も容易です。小学校の生徒がPythonコードを書いているという話を聞いたことがあります」
Java
  • 基本事項: Javaは効率性に優れた汎用的な言語であり、インターネットベースのアプリケーションで広範に利用されています。組み込みシステムでは、JavaはAndroid OS向けのシステムに最適です。
  • メリット: 組み込みシステムで行ったコーディングは別のデバイスに移植でき、また信頼性にも優れています。
  • デメリット: コードが複雑になりがちであるため、グラフィカルユーザーインターフェース(GUI)などでパフォーマンス上の問題が生ずる場合があります。Javaはリアルタイムシステムでは使用できません。
JavaScript
  • 基本事項: JavaScriptはテキストベースのプログラミング言語として、一部の組み込みシステムで利用されています。
  • メリット: HTML5ベースのシステムで、ネットワーキングとグラフィックスを多用する場合に適しています。
  • デメリット: 実行時の効率性に劣り、保守が難しい場合があります。
Rust
  • 基本事項: 2010年にMozillaの従業員がこのハイレベルなプログラミング言語を開発しました。パフォーマンスと安全性の向上が図られています。
  • メリット: Rustはセキュアなコードを記述しやすく、バグも発生しにくくなっています。
  • デメリット: Rustはコンパイルに時間がかかります。標準化されておらず、普及はしていません。
  • 専門家の解説: Qtのプロダクトディレクター、Maurice Kalinowskiは次のように説明しています。「Rust はごく新しい言語です。組み込み市場にシステムレベルで浸透するにはまだ時間がかかるでしょう。しかし潜在力があることは確かであり、戦略上の選択肢にぜひ加えるべきです」

組み込みシステム向けのその他の言語


開発者は、組み込みシステムのニーズに応じてその他の言語も使用しています。それらの言語は組み込みシステムで一般的なものではありませんが、特定の用途ではよく使用されており、システムによっては非常によく適合する場合があります。

Ada
  • 基本事項: Adaは、組み込みシステムに膨大な数のプログラミング言語が使用されていることの懸念から、1970年代に米国国防総省のプロジェクトとして開発されたものです。
  • メリット: 効率性と信頼性が極めて優れています。
  • デメリット: Adaは習得がむずかしいこともあり、普及していません。
Assembly
  • 基本事項: Assemblyは、コンピューターハードウェアと直接やり取りするローレベルのプログラミング言語です。
  • メリット: メモリー効率に優れ、高速です。
  • デメリット: Assemblyは読み取りや保守が難しい場合があります。
Go: Golangとも呼ばれるGoは、Googleが組み込みシステム用に開発したプログラミング言語です。

主要な組み込みプログラミング言語の比較表

Comparison Matrix of Some of the Top Embedded Programming Languages

 

主要な組み込みプログラミング言語の比較表をダウンロード

ハードウェア記述言語とは

一般的にプログラミング言語と呼ばれている言語の中には、実際には「ハードウェア記述言語(HDL)」であるものがあります。主なHDLとしては、VerilogとVHDLの2つが挙げられます。


エンジニアはHDLを使用して電子回路をシミュレートし、そのシミュレーションを電子回路から独立させて活用できます。HDLはシステムの設計、テスト、デバッグ、タイミング解析に使用されています。

6つの主要な組み込みソフトウェアプログラミング言語の比較

Qtの組み込み製品の計画と要件ガイドブックでは、上位6つの組み込みプログラミング言語の詳細を説明するとともに、比較表を示しています。この表ではプログラミング言語の重要な特徴を比較しています。

  C C++ Java Python / MicroPython JavaScript Rust
Strenghts HTML5/CSS Embedded, baremetal,
standalone
apps, IoT
Web, cloud Cloud, data science Web Embedded,
bare-metal
Ease of development ★★★ ★★ ★★★ ★★★★★ ★★ ★★★★

Expressive power

★★★★ ★★ ★★★★★ ★★★ ★★★★
Ease of maintenance ★★★★ ★★★★ ★★★★ ★★★ ★★★★
Longevity ★★★★★ ★★★★ ★★★ ★★★
Runtime efficiency ★★★★★ ★★★★★ ★★★ ★★ ★★★★
Library/module availability ★★★★ ★★★★ ★★★ ★★★★ ★★★★ ★★
Low-level interface ★★★★★ ★★★★★ ★★ ★★★ ★★★★
Connectivity support ★★ ★★★/★★★★★¹ ★★★★ ★★★★★ ★★★★★ ★★
Graphics support ★★★★ ★★★★★ ★★★ ★★★ ★★★★★
Developer community

★★★

★★★ ★/★★★★² ★★★★ ★★★★★ ★★

★ is the lowest ranking while ★★★★★ is the highest. 
1 Provides high level of connectivity and networking support when platform libraries included
2 Java Developer community exclusive of Android (low) and inclusive of Android (high)

組み込みシステムに最適な言語を特定する方法

組み込みシステム用のプログラミング言語を選択するには、各言語の強みと弱みを理解する必要があると専門家は指摘しています。またシステムの制限事項と目標を認識することも重要です。

組み込みシステムでは多くの場合、CまたはC++が最適な選択になります。それらが「コンパイル型」言語であり、効率性が非常に高いことが1つの理由です。コンパイル型言語の場合、マシン(組み込みデバイス)が直接コードを変換するため、高速で安定性が高くなります。

メモリーや電力が限られているデバイスでは、その効率性が必要です。そうしたデバイスで多くのプログラマーがCまたはC++を使用するのはそのためです。CまたはC++は、マイクロコントローラーや、リアルタイムOSを搭載した組み込みデバイスでよく使用されています。そのようなシステムではCとC++で得られる速度と効率性を必要とします。CやC++は、その他の組み込みシステムでも使用されています。すべての組み込みシステムの約80%でCプログラミング言語が使用されていると見積もる専門家もいます。

しかし組み込みシステムは、「インタープリター」方式のプログラミング言語でも同等に、あるいはさらに効率的に機能する可能性があります。インタープリター方式の言語の場合、組み込みデバイスではコードを直接変換しません。代わりに別の、デバイス上で動作するインタープリタープログラムがコードを実行します。組み込みシステムによっては、インタープリター方式の言語の利点は非常に大きくなります。コンパイル型言語とは異なり、インタープリター方式の言語はOS間での移植も簡単です。またプログラマーが容易に習得できる言語です。

インタープリター方式のプログラミング言語の例としては、PythonとJavaScriptが挙げられます。インタープリター方式では追加の処理が必要になるため、コンパイル型言語よりも処理が遅くなりがちです。ただし速度は向上しつつあります。組み込みデバイスで機械学習を行う場合は、PythonとMicroPythonには非常に大きなメリットがあります。

Adaは、デバイスに高度なセキュリティと安定性を求める場合(医療機器、航空機、軍装備品など)に適したプログラミング言語です。

専門家は、プログラミングチームの能力と経験を認識することが重要であると指摘しています。Beningo氏は次のように説明しています。「私はいつも、エンジニアのスキルセットをよく確認すべきであるとアドバイスしています。そして可能であれば、C++の使用を勧めています。しかしCに慣れたエンジニアの場合は、C++への移行がむずかしいケースがあります。つまり、チームの経験とスキルセットをよく確認することが重要なのです」(組み込みエンジニアが必要とするスキルの詳細をご確認ください)。
組み込みシステムを専門とする独立系ソフトウェア開発者でコンサルタントのBurkhard Stubert氏は、企業ではプログラミング言語の選択肢が限られていることが多いと説明しています。既存のシステムまたは関連システムで使用されているプログラミング言語をそのまま使用するためです。
「実際には、言語を選ぶというよりも、言語に選ばれると言ったほうがいいかもしれません。組み込みシステムでは、それが一般的にC、C++、またはPythonになります。そこから始めるしかありません」とStubert氏は語ります。

組み込みシステムに最適な言語を特定する

どのような組み込みプログラミング言語にもメリットとデメリットがあります。たとえば、グラフィカルユーザーインターフェースについてメリットを発揮する言語があります。選択する言語について調査する場合は、GUIについても考慮することが重要です。GUIを使用するシステムではJavaScriptのようなインタープリター方式の言語が適しているでしょう。

Qtでは使い慣れたプログラミング言語で組み込みシステムを構築できる

組み込みプロジェクトのニーズに最適な言語を明確に判断できる場合もあります。開発者の習熟度と個人的な嗜好が重要な基準になることも多いからです。Qtでは、できるだけ開発者が使い慣れたプログラミング言語でソフトウェアを作成できることを考慮しています。The Qt CompanyはC++、QML(Qtが開発した使いやすい宣言型言語)、Pythonをサポートしており、コミュニティではさらにRustやGoなどの言語もサポートしています。


Qt QMLを使用してシステムのユーザーインターフェースを設計する方法や、他のQt製品を使用して多様な言語で優れた組み込みシステムを構築する方法をご確認ください。

商用ライセンスのトライアルやオープンソースを利用したい方は、ぜひQtの無料トライアルを開始してみてください!また、Qtについてご質問あり場合は、お気軽にお問い合わせください。