| パラダイム | 構造化された、命令型(手続き型) |
|---|---|
| デザイン: | WA ウルフ、DB ラッセル、AN ハーバーマン |
| 開発者 | カーネギーメロン大学 |
| 初登場 | 1970年 |
| 安定リリース | ブリス-64
|
| タイピングの規律 | タイプなし |
| 範囲 | 語彙 |
| プラットフォーム | PDP-10、PDP-11、VAX、PRISM、MIPS、DEC Alpha、IA-32、IA-64、x86-64 |
| OS | クロスプラットフォーム |
| Webサイト | pdp-10.trailing-edge.com/bb-m836d-bm/ |
| 方言 | |
| 共通の至福 | |
| 影響を受けた | |
| アルゴル | |
BLISS は、1970 年頃にカーネギーメロン大学(CMU)でWA Wulf、DB Russell、AN Habermannによって開発されたシステムプログラミング言語です。数年後にC が登場するまでは、おそらく最もよく知られたシステム言語でした。それ以降、C は人気が高まり、一般的になったため、BLISS は忘れ去られました。C がまだ初期段階だった頃、ベル研究所内のいくつかのプロジェクトでBLISS と C の長所が議論されました。[引用が必要]
BLISS は、文ではなく式に基づいた型なしのブロック構造プログラミング言語であり、例外処理、コルーチン、マクロの構造が含まれています 。goto文は含まれていません。
この名前は、 Basic Language for Implementation of System SoftwareまたはSystem Software Implementation Language, Backwardsの略称であると言われています。しかし、2015 年にバベッジ研究所のコンピュータ セキュリティ歴史プロジェクトで行った口述歴史の中で、ウルフは、この頭字語はもともと「Bill's Language for Implementing System Software」という名前に基づいていたと主張しました。[1]
オリジナルのカーネギーメロンコンパイラは、最適化を広範に使用していることで有名で、古典的な書籍『最適化コンパイラの設計』の基礎となりました。
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コンパイラは、バックエンドコードジェネレータとしてLLVMを使用し、AlphaおよびIA-64で使用されていた独自のGEMバックエンドを置き換えました。
言語の説明
[過剰な引用]
BLISS には、他の最新の高水準言語の多くの機能があります。ブロック構造、自動スタック、再帰ルーチンの定義と呼び出しのメカニズムがあり、さまざまな定義済みデータ構造と、テストと反復のための機能を提供します。
一方、BLISS は他の高級言語の特定の機能を省略しています。システム ソフトウェア プロジェクトは通常、独自の入出力を開発するか、基本的なモニター I/O または画面管理サービスに基づいて構築するため、BLISS には入出力用の組み込み機能がありません。システム ソフトウェアで必要な場合が多いため、BLISS ではマシン固有の機能へのアクセスが許可されています。BLISS には高級言語としては珍しい特徴があります。名前は、セグメントの値ではなく、そのセグメントのアドレスとして一様に解釈されます。また、BLISS は「ステートメント言語」ではなく「式言語」です。
これは、宣言以外の言語のすべての構成要素が式であることを意味します。式は値を生成するだけでなく、ストレージの変更、制御の転送、プログラム ループの実行などのアクションを引き起こす可能性があります。たとえば、BLISS の割り当て「ステートメント」に対応するものは、厳密に言えば、それ自体が値を持つ式です。式の値は、BLISS で使用することも、破棄することもできます...最後に、BLISS には、通常はマクロ アセンブラにのみ見られるレベルの機能を提供するマクロ機能が含まれています。
— ブリス言語マニュアル、デジタルイクイップメントコーポレーション(1987)[6]
BLISS 言語には次の特徴があります。
- すべての定数は、使用されているマシンのフルワードです。たとえば、 PDP-11などの 16 ビット マシンでは定数は 16 ビット、VAXコンピュータでは定数は 32 ビット、PDP-10では定数は 36 ビットです。
- 変数への参照は、常にその変数のアドレスへの参照です。たとえば、命令はZ のアドレス
Z+8に 8 を追加することを指し、その値を指すものではありません。Z の値に 8 を追加する必要がある場合は、変数の前にピリオドを付ける必要があります。したがって、この機能を実行するには、と入力して、 Z の内容に 8 を追加します。.Z+8 - 割り当ては
=、たとえば、Z=88 を含むフルワード定数を作成し、Z のアドレスに対応する場所に格納することを示す標準シンボルを使用して行われます。したがってZ+12=14(または、12+Z=14この形式は Digital の BLISS ドキュメントに従って悪い方法と見なされますが)、定数 14 は、Z のアドレスの 12 ワード後の場所に配置されます。 - ブロック ステートメントはALGOLのものと似ています。ブロックは
BEGINステートメントで始まり、 で終わりますEND。ALGOL と同様に、ステートメントはセミコロン (";") で区切られます。値が計算されると、次のステートメント ターミネータまで保存されます。つまり、必要に応じて、値を計算し、変数に割り当てて、次のステートメントに持ち越すことができます。または、開き括弧を使用してブロックを開始し、閉じ括弧を使用してブロックを閉じることもできます。括弧が式に含まれている場合は、括弧で囲まれた式が最初に計算されるという標準の優先順位規則が使用されます。 - 条件付き実行では、
IF真偽条件をテストし、代替アクションを実行して結果を返す式が使用されます。 - 比較では、 for equality (同じ目的で = 記号をオーバーロードする
EQLのではなく)、 for Greater Than、 for not equalなどのキーワードを使用します。たとえば、次のコードは、Q で示されるアドレスに Z の絶対値を割り当てます。GTRNEQ
Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);
- 識別子(変数と定数) は、通常はキーワードを使用して、使用前に宣言する必要が
OWNあります。変数を宣言すると、通常、コンパイラは変数用のスペースを割り当てます。必要に応じて、宣言によって変数に固定のマシン アドレスを割り当てることができますBIND。この機能は、主にマシン レジスタまたは特定の特殊アドレスにアクセスするために使用されます。 - 言語内のサブルーチンはルーチンと呼ばれ、キーワードで宣言されます
ROUTINE。 - テキストの置換を可能にするマクロは、キーワード で宣言されます
MACRO。 - この言語は、構造体と呼ばれ、キーワードで宣言される配列をサポートしています。
VECTOR - この言語は、次のような高水準プログラミング言語構造をサポートしています。
CASE式による代替実行パスINCRALGOLのFOR文に似た式を使用してループする- 組み込み文字列関数
- 特定の自動データ変換(数値から文字列など)
ソース例
以下の例はブリス言語マニュアルからそのまま引用したものです。[6]
モジュール E1 (メイン = CTRL) =
始める
フォワードルーチン
Ctrl、
ステップ;
ルーチン CTRL =
!+
! このルーチンは値を入力し、それに対して演算を行い、
! は結果を出力します。
!-
始める
外部ルーチン
GETNUM, ! 端末から数値を入力する
PUTNUM; ! 端末に数値を出力する
地元
X, ! 入力値の保存
Y; ! 出力値の保存
GETNUM(X);
Y = ステップ(.X);
パットナム(.Y)
終わり;
ルーチンステップ(A) =
!+
! このルーチンは指定された値に 1 を加算します。
!-
(.A+1);
終わり
エルドム
バージョン
- ブリス-10
- BLISS-11 - PDP-11 用のクロスコンパイラ
- ブリス-16
- BLISS-16C - BLISS-11 の DEC バージョン
- ブリス-32
- ブリス-36
- ブリス-64
- 共通BLISS - ポータブルサブセット
注記
- ^ Wulf, William A. (2015年6月23日)。「WILLIAM A. WULF OH 477へのインタビュー」(PDF) (インタビュー)。ジェフリー・R・ヨストによるインタビュー。バージニア州シャーロッツビル。
- ^ abcdefg Brender, Ronald F. (2002). 「BLISSプログラミング言語:歴史」(PDF) .ソフトウェア:実践と経験. 32(10):955–981 . doi:10.1002/spe.470. S2CID 45466625.
- ^ MacLaren, Don (1987 年 8 月 27 日)。「 DECWestコンパイラ プロジェクト、説明、および計画」(PDF)。Bitsavers.org 。
- ^ da Cruz, Frank (1987年9月16日). 「VAX/VMS用Kermitプログラムに関するニュース」。Info -Kermitダイジェスト(メーリングリスト)。Kermitプロジェクト、コロンビア大学。 2019年5月5日閲覧。Kermit
-32は
、DECの「企業実装言語」(もともとCMUで開発)であるBliss言語で書かれています。BlissはDECの顧客の間で人気を得ることはなく、Blissコンパイラを持っているサイトはほとんどありません。
- ^ 「2017 LLVM Developers' Meeting: J. Reagan "Porting OpenVMS using LLVM"」。YouTube。2017年10月31日。2021年12月21日時点のオリジナルよりアーカイブ。
- ^ ab Bliss Language Manual、Digital Equipment Corporation (1987) より
参考文献
- Wulf, WA ; Russell, DB; Habermann, AN (1971 年 12 月). 「BLISS: システムプログラミング言語」(PDF) . Communications of the ACM . 14 (12): 780– 790. doi :10.1145/362919.362936. S2CID 9564255.また、「BLISS: システムプログラミング言語」(PostScript)
- Wulf, WA; Johnson, RK; Weinstock, CB; Hobbs, SO; Geschke, CM (1975).最適化コンパイラの設計. ニューヨーク: Elsevier, ISBN 0-444-00158-1 .
- Brender, Ronald F. (2002). 「BLISS プログラミング言語: 歴史」(PDF) .ソフトウェア: 実践と経験. 32 (10): 955– 981. doi :10.1002/spe.470. S2CID 45466625.
外部リンク
- DECUS の BLISS マニュアル
- レホツキー、アラン。 12月のBLISSに関する投稿
- マディソン、マシュー D.、「BLISS 入門」のセッション ノート (PostScript)
ダウンロード
- ブリス-10
- ブリス-11
- ブリス-36
- BLISS-11、BLISS-32、BLISS-64
- GCC 用 FreeVMS ポータブル BLISS
