プログラミング
BLISS
要約
BLISSは、1970年頃にカーネギーメロン大学で開発されたシステムプログラミング言語です。C言語が登場するまで最もよく知られたシステム言語でしたが、その後C言語の人気に押されて衰退しました。BLISSは、ステートメントではなく式に基づいた型なしのブロック構造言語であり、例外処理、コルーチン、マクロなどの機能を備えています。DEC(デジタル・イクイップメント・コーポレーション)によって多くのプラットフォーム向けにコンパイラが開発され、OpenVMSオペレーティングシステムの多くのユーティリティプログラムがBLISSで記述されました。
全文翻訳
Wikipedia、フリー百科事典より
システムプログラミング言語
その他の用途については、Blissを参照してください。
BLISS
パラダイム
構造化、命令型(手続き型)
設計者
W. A. Wulf, D. B. Russell, A. N. Habermann
開発者
カーネギーメロン大学
初登場
1970年; 56年前 (1970)
安定版リリース
BLISS-64
型付け規約
型なし
スコープ
レキシカル
プラットフォーム
PDP-10, PDP-11, VAX, PRISM, MIPS, DEC Alpha, IA-32, IA-64, x86-64
OS
クロスプラットフォーム
ウェブサイト
pdp-10.trailing-edge.com/bb-m836d-bm/
方言
Common BLISS
影響を受けたもの
ALGOL
BLISSは、1970年頃にカーネギーメロン大学(CMU)でW. A. Wulf、D. B. Russell、A. N. Habermannによって開発されたシステムプログラミング言語です。数年後にCが登場するまで、おそらく最もよく知られたシステム言語でした。それ以来、Cが普及し一般的になり、BLISSは忘れ去られていきました。
BLISSは、ステートメントではなく式に基づいた型なしのブロック構造プログラミング言語であり、例外処理、コルーチン、マクロのための構造を含んでいます。gotoステートメントは含まれていません。この名前は、Basic Language for Implementation of System SoftwareまたはSystem Software Implementation Language, Backwardsの略であると様々に言われています。しかし、2015年のBabbage Institute's Computer Security History Projectのオーラルヒストリーで、Wulfは、この頭字語は元々「Bill's Language for Implementing System Software」という名前に基づいていたと主張しています[1]。
オリジナルのカーネギーメロン大学のコンパイラは、最適化の広範な使用で注目され、古典的な書籍「The Design of an Optimizing Compiler」の基礎となりました。Digital Equipment Corporation(DEC)は、PDP-10[2]、PDP-11[2]、VAX[2]、DEC PRISM[3]、MIPS[2]、DEC Alpha[2]、およびIntel IA-32[2]向けのBLISSコンパイラを開発・保守しました。この言語は顧客の間で人気を得ず、コンパイラを持つ人もほとんどいませんでしたが[4]、DECは1980年代まで社内でヘビーに使用していました。OpenVMSオペレーティングシステムのユーティリティプログラムのほとんどはBLISS-32で書かれていました。DEC BLISSコンパイラは、OpenVMSのこれらのプラットフォームへのポートの一部として、IA-64およびx86-64アーキテクチャに移植されています[2][5]。x86-64 BLISSコンパイラは、AlphaおよびIA-64に使用されていた独自のGEMバックエンドを置き換えるLLVMをバックエンドコードジェネレーターとして使用しています。
言語の説明[編集]
[過剰な引用]
BLISSは、他の現代的な高水準言語の多くの機能を持っています。ブロック構造、自動スタック、再帰ルーチンの定義と呼び出しのためのメカニズムを備えています...多様な事前定義されたデータ構造と...テストおよび反復のための機能を提供します...一方で、BLISSは他の高水準言語の一部の機能を省略しています。システムソフトウェアプロジェクトは通常、独自の入出力または基本的なモニターI/Oまたは画面管理サービスを構築するため、組み込みの入出力機能はありません...システムソフトウェアはしばしばこれを必要とするため、マシン固有の機能へのアクセスを許可します。
BLISSは、高水準言語の中で珍しい特徴を持っています。名前...は、セグメントの値ではなく、そのセグメントのアドレスとして一様に解釈されます...また、BLISSは「ステートメント言語」ではなく「式言語」です[6]。
BLISS言語は以下の特徴を持っています。
すべての定数は使用されているマシン用のフルワードです。例えば、PDP-11のような16ビットマシンでは、定数は16ビットです。VAXコンピュータでは、定数は32ビット、PDP-10では36ビットです。
変数の参照は常にその変数のアドレスへの参照です。例えば、命令Z+8は、Zの値ではなく、Zのアドレスに8を加えることを参照します。Zの値に8を加える必要がある場合は、変数の前にピリオドを付ける必要があります。したがって、Zの内容に8を加えるには、.Z+8と入力する必要があります。代入は標準の=記号で行われます。例えば、Z=8は、8を含むフルワード定数を作成し、それをZのアドレスに対応する場所(ロケーション)に格納することを意味します。したがって、Z+12=14(または、代替として12+Z=14ですが、DigitalのBLISSドキュメントによるとこの形式は悪い習慣と見なされます)は、Zのアドレスから12ワード後の場所に定数14を配置します。
ブロックステートメントはALGOLのそれに似ています。ブロックはBEGINステートメントで開始され、ENDで終了します。ALGOLと同様に、ステートメントはセミコロン(;)で区切られます。値が計算されると、次のステートメント終端まで保存されます。これは、値が計算され、変数に代入され、次のステートメントに引き継がれる可能性があることを意味します。あるいは、開き括弧を使用してブロックを開始し、閉じ括弧を使用してブロックを閉じることができます。括弧が式に含まれている場合、標準の優先順位規則が使用され、括弧で囲まれた式が最初に計算されます。
条件付き実行はIF式を使用します。これは真偽条件をテストし、代替アクションを実行し、結果を返します。比較では、等価性(=記号を同じ目的でオーバーロードするのではなく)にはEQL、より大きいにはGTR、等しくないにはNEQなどのキーワードを使用します。例えば、次のコードはZの絶対値をQで示されるアドレスに代入します。
Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);
識別子(変数と定数)は使用前に宣言する必要があります。通常はOWNキーワードを使用します。変数を宣言すると、通常、コンパイラはそのためのスペースを割り当てます。必要に応じて、BIND宣言を使用して変数に固定マシンアドレスを割り当てることができます。この機能は主にマシンレジスタまたは特定の特殊アドレスにアクセスするために使用されます。
言語内のサブルーチンはルーチンと呼ばれ、ROUTINEキーワードで宣言されます。テキスト置換を可能にするマクロは、MACROキーワードで宣言されます。言語は配列をサポートしており、これらはストラクチャと呼ばれ、VECTORキーワードで宣言されます。
言語は、次のような高水準プログラミング言語の構造をいくつかサポートしています。
CASE式による代替実行パス
ALGOLのFORステートメントに似たINCR式を使用したループ
組み込み文字列関数
特定の自動データ変換(数値から文字列など)
ソース例[編集]
次の例は、Bliss Language Manual[6]からそのまま転記したものです。
MODULE E1 (MAIN = CTRL) = BEGIN
FORWARD ROUTINE CTRL, STEP;
ROUTINE CTRL = !+ ! このルーチンは値の入力を受け取り、それを操作し、! 次に結果を出力します。
!- BEGIN
EXTERNAL ROUTINE GETNUM, ! 端末から数値を入力
PUTNUM; ! 数値を端末に出力
LOCAL X, ! 入力値の格納場所
Y; ! 出力値の格納場所
GETNUM(X);
Y = STEP(.X);
PUTNUM(.Y)
END;
ROUTINE STEP(A) = !+ ! このルーチンは与えられた値に1を加えます。
!- (.A+1);
END ELUDOM
バージョン[編集]
BLISS-10方言: BLISS-10 - PDP-10用のCMUネイティブコンパイラ
BLISS-11方言: BLISS-11 - PDP-11用のPDP-10ホスト型クロスコンパイラ
Common BLISS方言(すべてのDECコンパイラ):
BLISS-16 - PDP-11用のVMSホスト型クロスコンパイラ
BLISS-16C - Common BLISSのサブセットからBLISS-11へのトランスレータ(PDP-10ホスト型)
BLISS-32 - VAX/VMS用のネイティブコンパイラ
BLISS-36C - Common BLISSのサブセットからBLISS-10へのトランスレータ(PDP-10ホスト型)
BLISS-36 - PDP-10用のネイティブコンパイラ
BLISS-32EN - Alpha/AXP用のネイティブ32ビットコンパイラ[7]
BLISS-64EN - Alpha/AXP用のネイティブ64ビットコンパイラ
BLISS-32IN - IA64用のネイティブ32ビットコンパイラ
BLISS-64IN - IA64用のネイティブ64ビットコンパイラ
BLISS-32XN - x86-64用のネイティブ32ビットコンパイラ
BLISS-64XN - x86-64用のネイティブ64ビットコンパイラ
注記[編集]
↑ Wulf, William A. (June 23, 2015). "An Interview with WILLIAM A. WULF OH 477" (PDF) (Interview). Interviewed by Jeffrey R. Yost. Charlottesville, Virginia.
↑ 1 2 3 4 5 6 7 Brender, Ronald F. (2002). "The BLISS programming language: a history" (PDF). Software: Practice and Experience. 32 (10): 955–981. doi:10.1002/spe.470. S2CID 45466625.
↑ MacLaren, Don (August 27, 1987). "DECWest Compiler Project, Description, and Plan" (PDF). Bitsavers.org.
↑ da Cruz, Frank (16 September 1987). "News about Kerm