今回は、プログラマーだった時代のお話をしたいと思います。
大学を卒業して日立製作所の半導体工場に配属されましたが、半導体って何???という状態でした。元々機械工学科だったので、コンピュータとは無縁で配属された部署も半導体の組み立てを行うところでした。
ところが、初めての上司が「これからはコンピュータでシミュレーションしながらやらないと時代に乗り遅れる」ということで、未経験のコンピュータを学ぶこととなりました。当時のコンピュータ(パソコン)では、使える範囲も狭く能力も低かったので、大型コンピュータでスタートしました。PL/1という今では存在しない古い言語を学んだのが最初です。会社から独立した後に、当時最先端だったC言語でのプログラミングで生計を立てることになりました。10年くらいは自称バリバリのプログラマーで、最終的にはC言語のデバッガを作る仕事をしていました。
デバッガとは、プログラミングの際に用いる開発ツールの一つで、プログラムの欠陥(バグ)を発見・修正するデバッグ(debug)作業を支援するソフトウェアです。
デバッガは、ソースプログラムを1ステップずつ実行したり、ブレークポイントというものを設定したりすることで、プログラムを中断させてそのときの変数の内容などを確認することができる素晴らしいプログラムです。当時は、デバッガを作ったことでコンピュータの動作を深く理解することができましたし、プログラムを極めたと勝手に思っていました。
では、なぜプログラムのステップ実行や停止でそのようなことができるのでしょうか?
まず一つは、プログラムを作成する際にデバッグ情報を付加するように指定することで、プログラムの機械命令とソースプログラムの位置に関連付けされた情報が、デバッグ情報として追加されます。皆さんが使用しているプログラム実行ファイル(Excel.exeみたいな)には、この情報が付いていないので、デバッガが行うようなステップ実行や指定したステップで停止するようなことはできません。
次に、プログラムの中断ですが、元々CPU(インテルなど)にはハードウェアブレークポイントというものが設定できるようになっていて、CPUのあるエリアに停止したいアドレスを設定すれば、割り込みを発生させてプログラム実行を中断させることができます。ただし、このハードウェアブレークポイントというのは、CPU毎に設定できる数に制限があり、10箇所も設定することはできません。そこで行うのはソフトウェアブレークポイントという手法です。これは、元々の機械命令をNOP(No Operation:0x00)に書き換えて(元々の命令はデバッガで待避して記録)おくと、NOPを実行しようとした際に割り込みの動作がCPUで発生するという動きを利用してプログラムを中断させることができるのです。
ちょっと難しいところですが、こんなことができるプログラムの作成は通常できませんので大変勉強になりました。
私が作成していたデバッガは、ファームウェアという冷蔵庫や洗濯機、ゲーム機などで動くプログラムをデバッグするもので、通常皆さんが作成しているようなプログラムとは異なり、デバッグしづらいプログラムをデバッグするものでした。当時は、ゲームプログラムのデバッガも経験しましたが、ゲームを途中で停止させたりして面白いものでした。
現在は、Macのターミナルというソフトを使用しています。viという使い慣れたエディタが使えたりするので、今でも簡単なテキスト編集はターミナル上でviを使用して行っています。先日、標準でviが使えるならc言語のコンパイルもできるんだろうなと思ってHallo_World.cを作成してコンパイルしてみました。すると、
Toshiya-MacBook-Air:~ toshiya$ cc -o morita morita.c
xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.
というエラーが出て、developer toolsが入っていないからコンパイルできないよと言われました。「インストールしますか?」とメッセージが出たので、ついインストールしてしまいました。これが結構サイズが大きいようで、インストールに20分くらいかかってしまいましたが、インストール後
Toshiya-MacBook-Air:~ toshiya$ cc -o morita morita.c
xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.
Toshiya-MacBook-Air:~ toshiya$ cc -o morita morita.c
morita.c:3:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^
1 warning generated.
Toshiya-MacBook-Air:~ toshiya$ ./morita
Hello World
Toshiya-MacBook-Air:~ toshiya$
と成功!
15年振りくらいにC言語のコンパイルしましたが、やはりプログラミングは楽しいですよね。
環境ができたので、久々にプログラミングしてみようと思います。