Hacktical C:実用ガイドが現代プログラミングにおけるCの役割について議論を巻き起こす

BigGo Editorial Team
Hacktical C:実用ガイドが現代プログラミングにおけるCの役割について議論を巻き起こす

メモリ安全な言語と高レベルな抽象化が主流となっている時代に、「 Hacktical C 」と題された新しいオープンソースの書籍が登場し、Cプログラミング言語に関する実践的なハッカーズガイドとして位置づけられています。オープンライセンスで公開されたこの書籍は、プログラミングコミュニティ内でCの関連性、安全性、そして現代のプログラミングエコシステムにおける位置づけについて激しい議論を引き起こしています。

Cはポータブルなアセンブリ - 神話か現実か?

コミュニティ議論の中で最も議論を呼んでいる点の一つは、Cが主にポータブルなアセンブラ言語として独自のクラスに位置するという著者の主張です。この特徴づけは、現代の基準ではCは真の低レベル言語とは程遠いと主張する開発者たちから大きな反発を受けています。

「コンピュータが PDP-11 の場合はそうかもしれないが、それ以外では他の言語と同様に高レベルなシステム言語に過ぎない」

複数のコメンターが指摘するように、Cは実際には現代のハードウェア機能に直接マッピングされない抽象マシンを作成します。Cコードを書く際、開発者は実際のハードウェアではなく、C仕様書によって記述された仮想マシンのためにプログラミングしています。この抽象化には、符号付きオーバーフローやメモリ初期化追跡に関する未定義の動作など、物理ハードウェアには存在しない動作が含まれています。さらに、批評家たちは、Cがサブバイト値の適切なビット操作や簡単な SIMD 操作など、過去数十年で標準となった多くのハードウェア機能をネイティブにサポートしていないと指摘しています。

メモリ安全性と「責任を伴う自由」の議論

Cはミスを防ぐために懸命に努力せず、責任を伴う自由を提供するという著者の立場は、この哲学の現実世界での影響について実質的な議論を引き起こしました。一部のコメンターはこのアプローチを評価していますが、多くはメモリ安全でない言語が現代のソフトウェア開発において実行可能な選択肢であるという考えに異議を唱えています。

批評家たちは、メモリ安全性の問題は単にプログラマーのスキルの問題ではなく、開発者の専門知識に関係なくセキュリティの脆弱性を生み出し続ける体系的な脆弱性を表していると主張しています。彼らは、個人のプログラミング能力がいくら高くても、Cプログラムにおけるメモリ安全性のバグによって引き起こされる CVE の発生率を意味のある形で減らすことはできなかったと指摘しています。この議論は、Cが提供する柔軟性がセキュリティとメンテナンスのコストに見合うかどうか、特に安全でないエスケープハッチを持つ現代の言語( Rust など)が安全性とパフォーマンスの両方を提供できる場合に拡張されます。

実践的なCテクニック:巧妙なハックか危険なパターンか?

書籍自体はさまざまなCプログラミングテクニックを紹介していますが、その一部は賞賛と懸念の両方を生み出しています。特に注目を集めた例の一つは、__LINE__ マクロを創造的に使用したコルーチン実装です:

## Hacktical C の主要トピック

* マクロ
* 固定小数点演算
* 侵入型双方向連結リスト
* 軽量な並行タスク
* 組み合わせ可能なメモリアロケータ
* ベクター
* 例外処理
* 順序付き集合とマップ
* 動的コンパイル
* 拡張可能なストリーム
* 構造化ログ

## コンパイラ別のC言語サポート

| コンパイラ | C17 | C11 | VLAs | C23 |
|----------|-----|-----|------|-----|
| GCC      | はい | はい | はい  | はい(デフォルト) |
| Clang    | はい | はい | はい  | 部分的 |
| MSVC     | はい(2020年以降) | はい | いいえ(予定なし) | ロードマップ不明 |

#define hc_task_yield(task)   
  do {     
    task->state = __LINE__;   
    return;     
    case __LINE__:;           
  } while (0)

一部のコメンターはこのテクニックを悪魔的でありながらも巧妙だと感じる一方、他の人は代替実装を指摘し、GNU拡張機能と標準Cの使用のメリットについて議論しました。これは、Cで問題を解決するための実践的で時には非伝統的なアプローチに焦点を当てた本書の特徴を浮き彫りにしています。

Microsoft と C の関係

Microsoft が残念ながら長い間Cを軽視し、そのコンパイラは他のものよりはるかに遅れをとっているという本書の主張は、Microsoft の現在のCサポート状況についての議論を促しました。コメンターたちは、Microsoft は歴史的にCよりもC++を優先してきたが、近年は改善があったと明確にしました。2020年に Microsoft は C11 と C17 標準のサポートを追加しましたが、可変長配列(VLAs)などの一部の機能は実装予定なしでサポートされていません。コミュニティは、特に同社がセキュリティイニシアチブの一環としてメモリ安全言語への注力を高めていることを考えると、C23サポートに関する Microsoft のロードマップについて不確かなままです。

メモリ安全性と現代の言語機能に関する議論がますます支配的になっている状況の中で、「 Hacktical C 」はCプログラマーのための実践的なリソースであると同時に、プログラミング言語選択に関する哲学的な声明も表しています。価値あるテクニック集として見るか、あるいはシステムプログラミングにおいてますます議論の的となるアプローチの擁護として見るかにかかわらず、この本は確かに今日のプログラミング世界におけるCの位置づけについて思慮深い議論を生み出すことに成功しています。

参考:Hacktical C