HLX-003 の補足ページ#1
(仮) HLXにおける型の扱い
- (1) 原則として、HLXはCPUのビット幅が8bitでも16bitでも32bitでも64bitでもそれ以上でも自然に使えるような言語を目指す。そしてそれなりに気を付けて書きさえすれば、これらのどのCPU上で実行しても同じ結果になるプログラムを書けるようにする。
- いや、何でもAInt256とかにしておけばもちろん同じ結果は出るだろうが、そんな乱暴なことをしなくても、その計算に必要な最低限のビット幅で記述しておくことが望ましく、そうすれば計算の効率はもっともよくなる。
- (2) C言語では、演算に当たって基本的に何でもintかそれ以上に拡張されるが、HLXではそういうことはしない。
- 理由: HLXではintのビット幅に依存したくない。C言語のように16bit以上というルールにすることもできるが、その場合整数値はことごとく16bitに拡張しなければいけない。それは8bit-CPUにやさしい仕様とは言えないだろう。1~10までの和を計算するなら、8bitのままでも十分なはずだ。これを妨げるような仕様は好ましくない。
- (3) しかし「二項演算の型が一致しない場合、ビット幅の大きいほうに合わせる」というルールはHLXでも採用する。
- この(2)と(3)のルールは注意が必要になる。たとえば、
AInt16 a = 123 * 45;
- と書いた場合、123は8bitで、45も8bit以下だから、このルールだと答えは8bitということになる。そうすると意図しない数がaに入る可能性がある。これを回避するには、a = AInt16(123) * 45; などと、どちらの項をAInt16にしておかなければならない。
- (↑この仕様はバグのもとだと思ったのでやめる)
- 整数定数同士の演算は、演算結果が壊れない程度まで自動で拡張する。変数との演算になったら、そのときに変数のビット幅に合わせる。いや違う、定数のビット幅も考慮して大きいほうに合わせる。
- (4) メモリ上に数値を置く場合は符号なし整数を扱うことができるが、レジスタ変数や定数では符号なし整数を扱わない。いかなる符号なし整数値もいったんは符号付き整数に拡張されてから演算される。