BLISSBLISS は1970年ごろ、カーネギーメロン大学の W. A. Wolf、D. B. Russel、A. N. Habermann が開発したシステム用プログラミング言語である。数年後にC言語が登場するまでは、システム記述に最も適した言語とされていたが、C言語に取って代わられた。C言語が登場した当初、ベル研究所では BLISS と C のどちらがよいかという議論が行われた。 BLISS はデータ型のないブロック構造方式の言語であり、文ではなく式を基本構成要素とし、例外処理構文、コルーチン構文、マクロなどを備えている。goto文は持たない。 その名称の由来には諸説あり、"Basic Language for Implementation of System Software" の略だとか "System Software Implementation Language, Backwards" の略(書かれている通りに逆転させる)だとか言われている。開発者の Bill Wolf の名前から "Bill's Language for Implementing System Software" とも言われる。 カーネギーメロンで開発されたコンパイラは最適化を多用していることで知られ、その開発を元に古典的著作 The Design of an Optimizing Compiler が生まれた。 DECは、PDP-10、PDP-11、DEC Alpha、Itanium、VAX 向けにBLISSコンパイラを開発しており、1980年代には社内でも多用していた。VMS オペレーティングシステムのユーティリティプログラムの多くは BLISS-32 で書かれていた。 概要以下の記述は、DECが1987年に出版した Bliss Language Manual[※ 1]にあるもの(を翻訳したもの)である。
定数には必ず、そのマシンのフルワード長が使われる。例えば、PDP-11のような16ビットマシンなら、定数は16ビットである。VAXでは、定数は32ビットとなり、PDP-10では36ビットとなる。 変数の参照は常にその変数のアドレスとなる。例えば、 代入は = 記号で行われる。例えば ブロックは ALGOL のものと似た構文であり、BEGIN と END で囲まれた部分がブロックとなる。文はALGOLと同様、セミコロン ";" で区切られる。文(式)の値が計算されると、それが次の文の終端まで保持される。つまり、計算されたり代入されたりした値は次の文の評価中も保持される。一方、ブロックを括弧で表す場合もある。式の中の括弧は一般的な計算順序の規則が適用され、括弧内が先に計算される。
Q = (IF .Z GTR 0 THEN .Z ELSE -.Z); 識別子(変数と定数)は使用する前に宣言する必要があり、一般に サブルーチンは routines と呼ばれ、 他にも次のような構成要素がある。
ソースコードの例以下のコード例は、上記で引用した Bliss Language Manual にあるものである。 MODULE E1 (MAIN = CTRL) = BEGIN FORWARD ROUTINE CTRL, STEP; ROUTINE CTRL = !+ ! This routine inputs a value, operates on it, and ! then outputs the result. !- BEGIN EXTERNAL ROUTINE GETNUM, ! Input a number from terminal PUTNUM; ! Output a number to terminal LOCAL X, ! Storage for input value Y; ! Storage for output value GETNUM(X); Y = STEP(.X); PUTNUM(.Y) END; ROUTINE STEP(A) = !+ ! This routine adds 1 to the given value. !- (.A+1); END ELUDOM バージョン
注釈
参考文献
外部リンク
ダウンロード |