ハード屋が書く C ソースコードが凄まじかった思い出(再掲載)
これはちょうど1年前に Medium で書いた記事の再掲載である。 今は Medium を全く利用しないので,昔書いたもので(私が)面白いと思った記事は少しずつこっちに移転しようかな。
この件では,若いころのほろ苦い思い出がある。
私は若いころは「システムハウス」と呼ばれる類の会社にいたのだが,そこではハードとソフトの両面で開発を進められるのが「売り」だった。 私はハードは壊滅的にダメなのでソフトウェア担当。 当時のハード屋は自分が組んだ回路の実証のために自分でもプログラムを組んで動作確認する。 私たちソフト屋はそのコードをもらって実際のコードを書くわけだが,この実証コードが凄まじかった。
まず変数は全てグローバル変数。 スコープとかカプセル化なんて知るか! という気概が感じられる。 そして関数は果てしなく長い main 関数のみ。 無間地獄のネスト。 goto 文で飛びまくり。 なのに異常系の記述は皆無。 世に聞く「スパゲッティ・コード」とはこのようなものなのかと感嘆したよ。
一番凄かったのは,とあるチップを使った30次のバンドパスフィルタを組むのに「サンプルがあるから簡単でしょ」と言われてサンプルを見たら世にも悍ましいコードで,解析するだけで半月もかかってしまった。
まぁ,ハード屋がこういうコードを書くのは理由があって,変数を記述するときはメモリ上のマッピングをそのまま置き換えようとするし,ロジックも基本的にマシン語のインストラクションをそのまま C に置き換えようとするから「関数」という概念がそもそもないことが多い1。
おかげで私は「他人のコードを読む」ことがすんごい得意になってしまった。 アレに比べればソフト屋の書くコードなんて絵本を読むように分かりやすい(笑) でも,こんなしょうもない特技でも後年ちゃんと役に立ってるんだから世の中というのは分からないものである。
- リーン開発の現場 カンバンによる大規模プロジェクトの運営
- HenrikKniberg (著), 角谷信太郎 (著), 市谷聡啓 (翻訳), 藤原大 (翻訳)
- オーム社 2013-10-25 (Release 2017-07-15)
- Kindle版
- B01IGW5IIW (ASIN)
- 評価
私はこれで勉強しました。もう一回読み直すかな。
-
ハード屋は call インストラクションを「特殊なジャンプ」程度にしか認識していない(まぁ確かにそうなのだが)。あるプロジェクトで見せてもらったアセンブラコードでは call で積んだスタックをいじって戻り先アドレスを変えて return する記述が頻出していた。これはアセンブラ・コードにパッチを当てる際の基本テクニックらしい。大昔の話だよ(笑) ↩︎