前の記事において、IntelからRISC-VやOpenPOWERなどにポートするためには、2つの別のCPUプラットフォームのコンピュータ上で動く2つの関数が、同じ入力なら同じ結果を返すことを保障するテストフレームワークが必要であることを議論した。テストフレームワーク名をToukaとする。
詳しくは私の以前の記事を読んでほしい。
2つの関数が同じ入力なら同じ結果を返すことを保障するテストフレームワークを作る上において、全てC言語で作るべきか、JSONのパースやデータ管理などで、Javaなどの言語を混ぜるべきかなどの選択肢がある。
リーナスなどは「Nothing Better than C」という言葉も言っているが、それを踏まえて議論していこうかと思う。
では、メリットデメリットを列挙して整理していこうかと思う。
すべてC言語で作ったときのメリット
- すべてC言語なので、アーキテクチャ依存の部分がない限り、Intel、OpenPOWER、RISC-Vそれぞれでコンパイルして実行できる
- 組み込みCPUにおいて、テストフレームワークを実行して、テストすることができる。
すべてC言語で作ったときのデメリット
- JSONのパースなどで、ライブラリが準備されていない可能性
- 脆弱性を作り込みやすくなる
Javaなどの言語を使用したときのメリット
- JSONのパースなどやデータ管理が、ライブラリが準備されていて、簡単にできる可能性
- パースやデータ管理において、脆弱性を作り込みにくい。
Javaなどの言語を使用したときのデメリット
- 組み込みCPUなどにおいては対応しておらず使えない可能性
- Javaなどの言語とのインターフェースが必要になる。
- CPUのプラットフォームごとにインターフェースが対応しているか、言語が対応しているか確認する必要がある。
- C言語のIntelやRISC-V特有の型を扱う際工夫がいる。
テストフレームワークは、ロボティックや制御において、動作の正確性を担保する用途に使われる可能性などがある。多数のプラットフォームに対応するためには、C言語のみで作るのが理想かもしれない。
選択肢は残しておいたほうがいいと思う。
ただ、組み込みのC言語においては、標準ライブラリが使えない可能性もある。そこも考えないといけない。
このテストフレームワークが組み込み系CPUでも使われる可能性についても議論していく必要がある。