DNCL3の括弧で表していた構造を英単語に変えた「Wirth」。
Wirthを削ぎ落とし、演算用にたった1つの論理演算子しか持たない「Norと「Nand」を開発。
そして今回、if文があれば nor も不要とコメントをいただき、演算用の演算子がない言語を「Nop」を開発。
「Nop - no operators programming language」
演算子が1つもないプログラミング言語「Nop」は、字句解析で演算子を返さず(Nop.js getToken)、実行環境(仮想マシン)にも演算命令がありません(Runtime.js calcExpression)。
条件分岐 if と、繰り返し loop、機能(関数) function という構造化プログラミング言語の基本を使って、NorやNandoと同様、否定(not)、論理積(and)、論理和(or)を機能として実装して、足し算、掛け算のど、必要な機能を実装していくことができます。
こちら、はじめのいっぽ、否定の機能 not の実装例(RUN on Nop Playground)
function not(a) if a return 0 else return 1 endif end
NorやNandでは数を配列を使って表現していましたが、数が入った変数に添え字を付けた場合、最下位ビットからの位置を表すようにしたところ、プログラムが見やすくなりました!
例えば、二進法だと 110 となる十進法の 6 を変数に入れ、添え字でアクセスしてみると
a = 6 print a[2], a[1], a[0]
1 1 0 と表示されます。
こちら応用、4bitの足し算の実装例(RUN on Nop Playground)
function add(a, b) cs0 = fulladd(a[0], b[0], 0) cs1 = fulladd(a[1], b[1], cs0[0]) cs2 = fulladd(a[2], b[2], cs1[0]) cs3 = fulladd(a[3], b[3], cs2[0]) s = 0 s[0] = cs0[1] s[1] = cs1[1] s[2] = cs2[1] s[3] = cs3[1] return s end
not, and, or の機能を作ってさえしまえば、NorとNandと同じです。
5 * 3 を計算する、4bitの掛け算サンプル mul.nop もお試しください。
「なぜコンピューターは計算が速いのか? 電気回路で計算ができる謎を解く」
コンピューターはスイッチ(トランジスタ)でできていると解説したブログの通り、スイッチのON/OFF、つまり 0 か 1 で制御する if 文もあらゆる計算を実現する最小単位になりうるわけです。
また、コンピューターのもう一つの強み「記憶」の実現もスイッチ(トランジスタ)を使って実現できるため、コンピュターはトランジスタの集合で作ることができます。(参考、フリップフロップ - Wikipedia)
NVIDIAから発表された最新のGPU、GeForce RTX 5090 のトランジスタ数は、920億コ!
1秒間に20億回計算するコンピューターが、なんと、2万コ入っています。
(参考、GeForce RTX 5090 グラフィックスカード | NVIDIA)
根っこはシンプル、でも、多量かつ高速に動かすとスゴイ!
Nop、Nor、Nand は、コンピューターのおもしろさに迫るための構造化プログラミング言語群です。
links
- 演算子が1つしかない2025年生まれの新プログラミング言語「Nand」
- 演算子が1つしかない2025年生まれの新プログラミング言語「Nor」
- Pascalリスペクトの教育用構造化プログラミング言語「Wirth」