2016-11-02 23:40 — asano
カテゴリー:
いつもモノのことばかり書いているので、時には「私」についても書いてみようかと思っています。
題して「私の~遍歴」、第1回はプログラミング言語についてです。
これまでに個人的にも業務としてもいろいろなプログラミング言語を使ってきました。既存のプログラムをちょっと修正したようなものまで含めるとかなりの数になってしまうので、ある程度使い込んだものを並べて見ました。
- BASIC
- アセンブリ
- GAME
- TL/1
- C
- C++
私が初めてパソコンに接したのは1982年のことですから、BASICから入ったのはごく自然な流れでした。一部の例外を除いてパソコンを買えばBASICは入っている時代でしたから、まずはそれを使ってみることになります。
この頃のBASICというのは機種ごとの差(方言と読んでいました)が大きくて、ある機種のBASIC用に書かれたプログラムを他へ移植(変換)するのはかなり面倒でした。私の場合、最初はPC-8001mk2のN/N80 BASICや学校にあったPC-9801FのN88 BASIC(86)を使っていて、その後MC68kボードに移植したTiny BASICなんてのも使いました。このあたり普通とは順序が逆ですね...
次のアセンブリ言語を使うようになっても、速度を要するところだけアセンブリで書いて残りはBASICという形でかなり後まで使い続けました。
BASICの実行速度に不満が出てくると次にまず手を出すのはアセンブリ言語でした。当時はマシン語と呼んでいて、その実行速度に感動したものです。本当はBASICが遅すぎただけなのですが。
とはいえ(高価、メモリが足りない、フロッピーが必要などの理由で)アセンブラが使えないことも多く、ハンドアセンブルすることも多かったです。ハンドアセンブルとは本来アセンブラソフトウェアが実行するソースからバイナリへの変換を手作業で行うことです。コードの一覧表(パソコンの機種によっては取扱説明書に記載されていることも)を見ながら変換していくのですが、中でも面倒なのが分岐先アドレスの計算で、後の修正でアドレスがずれると面倒なのでプログラムの途中にNOP(No Operation、何もしない)命令をわざと置いておいてそこでずれを吸収させる等のテクニックが使われました。やっているうちに使用頻度の高い命令のコードは憶えてしまって、今でもZ80の命令コードはけっこう記憶に残っています。
そのうちフロッピーディスクドライブを手に入れてCP/MなどのOSが使えるようになるとハンドアセンブルはしなくなりました。
当初は実行速度を求めて使い始めたのですが、マイコンボードを自作するようになると何も無いのでアセンブリで書くしかない状況になります。今でも新しいボードを作ったとき等にはお世話になっています。
ここでは一つにまとめてしまっていますが、実際には各プロセッサごとに大きく異なっています。どんなプロセッサを使ってきたのかはまた別途書きたいと思います。
GAMEはGeneral Arithmetic Micro Expressionsの略で、大西博さんという方が作成してASCII誌上に発表したオリジナルの言語です。VTLという言語(私は使ったことがありません)を拡張したもので、表記法の異なるBASICといった感じの言語です。
独自の言語ではありましたが、当時の国産パソコンの多くで使用可能でした。
浮動小数点が使えなかったり制約は多いのですが、標準のBASICよりは実行速度が速かったと記憶しています。元々はインタプリタですがコンパイラも存在して、コンパイルするとさらに早くなりました。
PC-8001用にはさらに拡張したMAI (Micro Arithmetic Instructionsだったかな)というのもありました。これは確かコンパイラのみだったと思います。
これもGAMEと同じく大西博さん作の言語でやはりASCII誌上に発表されました。名前「TL/1」はTiny Language 1の略です。PASCAL風の構造化言語で、私にとって初の行番号の無い言語でした。
これも当時の多くのパソコン環境に移植されていましたね。
よくC言語のことを高級アセンブラと呼ぶことがありますが、私はこのTL/1こそが高級アセンブラの名にふさわしいと思っています。
変数は全て1バイトで、演算子にはキャリー付き加算があります。つまりもっと大きな数を扱いたければ自分で多倍長演算を書けばいい、そのための機能は用意するというスタンスです。
Cを使ったのはCP/M-80上でのSmall Cが最初です。floatもdoubleもstructもunionも無いというサブセットでした。もちろんANSIになる前の仕様ですから、プロトタイプ宣言などは書けません。
次に使ったのはCP/M-68Kの付属コンパイラですね。これもANSI以前の仕様でしたが、一応フルスペックだったはずです(制限事項は多かったですが)。
これ以降仕事も含めていろいろなコンパイラを使用しましたが、普通にプログラムを書く限りあまり違いを意識することはなくなりました。
2000年ごろから仕事ではC++をよく使いましたが、個人的にはあまり使いません。基本的にあまり大きなプログラムは書かないからですね。
コメントを追加