
2026/02/08 2:45
私はC(はい、C)でゲームを書いています(2016年)。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
要約
著者は、将来性を備えたプラットフォームに不可欠な信頼性・移植性・速度を満たすため、すべての単独プロジェクト用ゲームを「ベーシック」Cで書くと説明しています。彼はシンプルさ、厳格な型付け、強力な警告、静的/動的解析、高速コンパイル、バグの最小化、堅牢なデバッガなどを重視し、これらがすべてCで利用可能です。著者はオブジェクト指向プログラミング(OOP)を嫌い、クラス構造に縛られるよりも、特定の問題に合わせたコードでデータを扱うことを好みます。
彼は一般的なゲーム開発言語を評価しています:
- C++ – 広く使われているが過度に複雑で微妙なバグが起きやすく、コンパイル速度が遅い。不要な機能が増え、複雑さが高まる。
- C# / Java – 冗長性とOOP偏重の問題があり、ガベージコレクションにより停止時間が発生する可能性がある。
- Go – ストップ・ザ・ワールド型ガベージコレクタとゲームライブラリのサポート不足からリアルタイム要件には不向き。
- JavaScript – すべてが緩く、著者は大規模ソフトウェアプロジェクトでの使用に興味を持っていない。
- Haxe – ウェブサポートが期待できるが、その若さゆえ長期的な存続性に懸念がある。
また、自分自身の言語を作ることも考えているものの、既存ライブラリの喪失と将来互換性の問題から手間がかかりすぎると判断しています。
結局のところ、彼はプロジェクトでCを使い続けます。他者にCを推奨することは自分の好みが極めて個人的なため不適切だと強調しますが、Cの軽量で効率的な性質は安定性と速度が最重要視されるニッチな単独プロジェクトには役立つと述べています。
本文
なぜ私は(本当に)Cでゲームを作るのか
私はちょっと変わった人間です。私が手掛けたすべてのソロプロジェクトは、ベーシックな C で書かれています――ほとんど誰もやらないことです。以下ではその理由を説明します。
私が言語に求めるもの
- 信頼性 – 自分が作ったわけではないバグの修正に時間を割く余裕はありません。
- 長寿命 – フラッシュは消滅しました。私は残り続けるプラットフォームを望みます。
- 移植性 – 一つの OS に縛られず、できればコンソールにもターゲットできるようにしたいです。言語自体がポータブルで、クロスプラットフォームライブラリも充実している必要があります。
私が欲しい特徴
- シンプルさ – 独特な API を調べて疲弊します。覚えやすいものを求めています。
- 強い型付けと警告 – バグを減らし、デバッグや静的解析を容易にしたいです。
- パフォーマンス – 余分なサイクルは創造性の余地を広げます。
- 高速コンパイル – コンパイル時間が長いとフローが崩れます(Twitter は 5 分で中断します)。
- 手続き型志向 – データをデータとして扱う方針で、オブジェクト指向に強制されたくありません。
他の選択肢
| 言語 | なぜ不十分か |
|---|---|
| C++ | ゲーム業界ではまだ主流ですが、過剰に複雑でバグが発生しやすい。コンパイルも遅い。 |
| C# / Java | 冗長で強力な OOP を押し付ける。抽象化の裏側に複雑さを隠している。 |
| Go | C の再来というイメージはあるが、GC がリアルタイム性能を損ねる。ゲーム向けライブラリも乏しい。 |
| JavaScript | 柔軟すぎて私には合わない。 |
| Haxe | Web 向けに有望だが、ライブラリは十分でなく長期的な安定性は不確か。 |
| 独自言語 | 既存のライブラリを失い、互換性を保つためには手間が大きすぎる。 |
なぜ C が最適なのか
- 危険だが信頼できる – 鋭いツールでありながら、慎重に使えば十分に安全です。
- 高速 – コンパイルオーバーヘッドがなく、どこでも動きます。
- 移植性 – ほぼすべてのプラットフォームで手間を最小限に抑えて利用できます。
- 強力なライブラリとツールサポート – 継続的に発展し、成熟しています。
C を選ぶよう勧めるわけではありません。私の好みは特異で個人的です。多くの人よりもベーシック C でコードを書いているので、その快適さがここに留まる理由となっています。
以上です :-)