C言語をやめるべき5つの理由 ~ 「C言語を組み込み系で使うの、もう無理じゃない?」っていう愚痴と落とし穴と業界の暗い未来?について思うところを書きなぐってみた


C言語をやめるべき5つの理由

  1. 約50年も前に誕生した古臭い言語である。(言語仕様に、ソフトウェア工学における人類の英知が全くと言っていいほど反映されていない、生産性の低い、バグを生みやすい言語である。)

  2. 可読性が低い。とくにポインタ周りとプリプロセッサがヤバイ。 (ベンダーのAUTOSARソフト部品が不具合とか得意先仕様との不一致のケースがあったときに、自動コードが入り組みすぎていて可読性がなく安易にパッチがあてられない。)

  3. まともに読み書きできる人間があまりいない。C言語の言語仕様(落とし穴)を熟知している人間が希少で、主観的な感覚だと、30代後半~50歳くらいで優秀なベテランしか言語仕様を知らない。最近の印象だと、歴の浅いの若手プログラマーがビルドも通らないようなクソコードを量産する傾向がある。。1

  4. 移植性がない。ターゲット環境(CPU)、開発環境(コンパイラ)依存が強すぎる。CPUが変わると、エンディアンとかintのbit長が変わってどっかでしぬ。

  5. 使うためのオーバーヘッドが無駄。コーディングルールで無理矢理オブジェクト指向風を実現(できてるのか?)しているが、その頑張りは何も付加価値を生み出していない。

C言語は、CPUやメモリとかの低レイヤーを学習するうえでは、非常に有用で、機械語やアセンブリを直接書くよりはよっぽどマシなのですが、もう使うべきじゃない言語だと最近思うわけです。

落とし穴について(概要)

  • #define#includeが単なる単純置換である。(関数と見せかけて実体が変数に置換されてたり、多重インクルードガードのおまじないが必要だったり、括弧書き漏らすと演算子の結合順位が意図と違ってしまったり、、)
  • CPUの性能を優先している思想があるっぽくて、処理系(CPU)依存な演算(負数の除算とかの結果が処理系によって異なるなど)がある。「C言語は高級言語ではない」と揶揄されるゆえんではないかと。
  • オーバーフローしても気づきづらい

書き足りないけどこの辺で。。

酔った勢いで書いたので生暖かい目で見守っていただければと思います。 m(_ _)m

組み込み系における代案

Go言語とかC++(使いたくない)とかJava(もう古い気がする)を使う?
C言語向け以外のツールやソフト部品がどういう水準にあるのかが分からないので何とも言えない。。

追記 - 参考サイト

さらに追記

組み込み系におけるC言語の代替としては、Rustやモデルベースがわりと有力候補っぽい印象。
ただ、どちらも学習コストが高いようで、、、「見かけ上動くソフト」を作って(でっちあげて)くる輩が紛れ込まないように、開発メンバ(自社・委託とも)をアサインするときに、しっかり技術力(言語の理解度とか)を査定すべきな気がする。。(どんな開発言語・ツールを使うにしても。)


  1. もっとタチが悪いのが、無理やり明示キャストして、ビルドが通るっていう。。。