| パラダイム | 非構造化、手続き型、命令型 |
|---|---|
| 家族 | ジョス |
| デザイン: | クリフ・ショー |
| 開発者 | ランド研究所 |
| 初登場 | 1963年 |
| 範囲 | 語彙 |
| 実装言語 | アセンブリ言語 |
| プラットフォーム | ジョニアック、PDP-6 |
| 影響を受けた | |
| TELCOMP、CAL、FOCAL、MUMPS | |

direct mode。ステートメントの末尾のピリオドと乗算の句読点の違いに注意してください。JOSS ( JOHNNIAC Open Shop Systemの略)[a]は、最初の対話型タイムシェアリング プログラミング言語の1つでした。編集指示と分岐のターゲットの両方として行番号を使用する、ブール判定によって述語が付けられるステートメント、直接モードまたは即時モードで指示を実行できる組み込みのソースコードエディター(会話型ユーザーインターフェイスと名付けられた)など、1960年代から1980年代の言語で一般的になる多くの機能を先駆けて実現しました。
JOSS は当初、 RAND CorporationのJOHNNIACマシンに実装され、1963 年にオンラインになりました。非常に人気があり、ユーザーがすぐにマシンを使い果たしました。1964 年までに、より高性能な代替品が求められました。JOHNNIAC は 1966 年に廃止され、PDP-6に置き換えられました。PDP-6 は最終的に、 IBM Selectric をベースにした数百台のコンピュータ端末をサポートするまでに成長しました。端末は、ユーザー入力に緑のインクを使用し、コンピュータの応答に黒のインクを使用しました。理解できないコマンドはすべて応答を引き起こしました。
Eh?
このシステムは非常に影響力があり、さまざまな移植版や派生版が生まれました。TELCOMPやSTRINGCOMP、CAL、CITRAN、ISIS、PIL/I、JEAN ( ICT 1900 シリーズ)、BOSS、Burroughs B5500の INTERP 、PDP-10のAlgebraic Interpretive Dialogue (AID) など、オリジナルと似たものもいくつかありました。FOCALやMUMPSなど、他のものは独自の方向に発展しました。JOSS は、1980 年代のマイクロコンピュータに搭載されていたBASICインタプリタと非常によく似ていますが、主に構文の詳細が異なります。
歴史
最初のアイデア
1959 年、ウィリス・ウェアはコンピューティングに関する RAND メモを書き、将来のコンピュータは「多数の個人用入出力ステーションを備え、多くの人が同時にマシンと対話できるようになる」と述べました。[2]このメモは RAND の主要スポンサーである米国空軍の関心を引き、1960 年に彼らはこの概念を研究するための情報プロセッサ プロジェクトを結成しました。これはすぐにタイム シェアリングとして知られるようになります。このプロジェクトはタイム シェアリングに特化したものではなく、人間とコンピュータの対話を全体的に改善することを目的としていました。当時のアイデアは、ユーザーとコンピュータが常に双方向で対話することで、対話がより自然になるというものでした。[2] JOSS ディレクターのキース・アンキャファーは後に次のように述べています。
この実験を推し進めた認識は 2 つあったと思います。1 つは、少なくとも私がランドに入社した 1950 年から、ランドのコンピュータ サイエンス部門では常にスムーズなユーザー インタラクションに重点が置かれていたことです。それは私たちの中に根付いていました。私たちはガニングからそれを学びました。... ずっとそればかり考えていました。もう 1 つは、数学者たちがマーチャント計算機で苦労し、生の JOHNNIAC を使えないのを見たことです。それはあまりにも難しすぎました。彼らはプログラマーになることを学ばなければなりませんでした。彼らにとってそれはただフラストレーションのたまる経験でした。私たちは、彼らにとって、あまり訓練を受けなくても、またプログラマーになるという認識がなくても、問題解決の助けになる自然な考え方に見えるものを求めていました。なぜなら、プログラマーになるという認識があれば、彼らはプログラマーに近づかなかったでしょうから。[3]
JOHNNIACコンピュータ上でJOSSを開発するという正式な提案は1961年3月に承認されました。[2]
ジョス1
JOSSは、成長を続けるランド研究所の計算部門で働いていた数学者、 J・クリフォード・ショーによってほぼ完全に実装されました。これは、ショーによって開発されたEasyFox(当時の米軍の音声アルファベットのEとF)と呼ばれるシンボリックアセンブリ言語で書かれていました。 [4]
JOSS システムは 1963 年 5 月に初めて正式に導入され、5 つのコンソール (機械室に 1 つ、建物周辺のオフィスに 4 つ) をサポートしました。[5]初期のコンソールは IBM モデル 868 送信タイプライターをベースにしていました。これは、開発開始時に Selectric がまだ市場に投入されていなかったためです。[6]最初のスケジュールは 6 月 17 日に公開され、JOSS は毎日午前 9 時から午後 12 時まで 3 時間稼働していました。[7] 1964 年 1 月に 8 つの端末で完全に運用可能であると宣言されました。 [1]最終バージョンは 1965 年 1 月に導入されました。[8]
この時までに JOHNNIAC はすでに 10 年以上経過しており、真空管ベースのロジックはそもそも信頼性がそれほど高くありませんでした。正常に動作していたときでさえ、このシステムは人気が高まりすぎてすぐに機能しなくなりました。ユーザーは熱狂的で、あるユーザーは次のように述べています。
人々は JOSS に合わせて生活を調整します… JOSS が到着する午前 10 時前に RAND に来ても意味がありません。実際、正午か午後 5 時以降の方が JOSS は忙しくありません。JOSS が答えを入力し始めると、刺激的な喜びは、JOSS が意味不明なことを言い出したり、あなたのコードを忘却の彼方へと押しやったりして去っていくときの苦痛に匹敵します。私たちは JOSS と一緒に暮らすことはほとんどできませんが、JOSS なしでは生きていけません。[9]
別の人はもっと簡潔にこう言いました。
ビールよりも美味しいです。私たちはハマってしまいました。[1]
JOSS-2 スイッチオーバー
1964年5月、JOHNNIACに代わる新しいマシンを探し、それをJOSSの拡張版の実行に完全に専用にするという決定が下されました。このマシンは、ランドの仕様に合わせて作られた新しい端末もサポートする必要があり、1965年10月31日までに納品される必要がありました。[7]
この新しいマシンには合計9社の入札があった。デジタル・イクイップメント・コーポレーション(DEC)が新しいPDP-6システムでこの競争に勝ち、空軍は購入資金を調達した。DECはまた、ファンフォールド紙送りで次のページに進むための特別な機構を装備したIBM Selectricタイプライターをベースにした30台の端末を製造することにも同意した。システム全体の他のいくつかの部分は他の企業から提供された。[10]
PDP-6 は 1965 年 7 月下旬に到着し、最初は端末としてテレタイプ モデル 33を使用してテストされました。コードの新しいバージョンは、チャールズ L. ベイカー、ジョセフ W. スミス、アーウィン D. グリーンウォルド、および G. エドワード ブライアンによって開発されました。システムは 10 月に初めて運用可能と宣言されましたが、これには 1 週間あたり 6 時間の定期メンテナンスが含まれていました。[11]最初のプロトタイプ端末は 11 月に到着しました。12 月には、ラスベガスの端末が初めてリモートでマシンに接続されました。[10] 1966 年 2 月、これはマクレラン空軍基地に送られ、続いて 8 月に 1 台が空軍士官学校に、9 月には 2 台がARPAとペンタゴンの空軍事務所に送られました。テレタイプ モデル 35の最初の恒久的なオフサイト テレタイプ接続は、1967 年 2 月にラングレー空軍基地に設置されました。[11]
新しいマシンが稼働し始めたため、JOHNNIAC は 1966 年 2 月 11 日にオフラインとなり、2 月 18 日に正式に引退した。最後に稼働していたプログラムは JOSS で書かれており、電源が切れるまでの秒数をカウントダウンするものだった。このマシンはロサンゼルス郡立博物館に送られ、[12]最終的にサンフランシスコ郊外のコンピュータ歴史博物館に収蔵された。[13] JOSS-2 システムに置き換えられたため、オリジナルは遡及的に JOSS-1 として知られるようになった。[14]
JOSS-2の使用
1966年末までに、新しいJOSS-2システムは完全に機能し、JOSSが24時間365日使用できるようになった。新しいマシンは、約30倍の計算速度、ユーザーあたりのストレージ容量が5倍、言語自体に多くの新機能を提供した。[15] [1]新しいプラットフォームは、最終的に最大100台の端末を同時に使用できるようになった。[16]空軍がシステムの所有者であり続け、ランドと他の人たちはコンサルタントとして活動した。CPU時間は、外部ユーザーに1分あたり約1ドルで請求されたが、これは実際の実行中のみであり、入力と印刷に費やされた時間は無料だった。[17]
1970 年までに、ランド基地と全国の空軍基地には 500 ~ 600 人のユーザーがいた。[18]その多くは、このシステムが意図していたように、時々しか使用しないユーザーだった。こうしたユーザーをサポートするために、カスタム端末には特別な「JOSS プラグ」が装備され、オフィスからオフィスへと移動してカスタム コンセントに差し込むことができた。ランド基地のあちこちに 200 個のプラグが設置され、端末のシャーシはドアを通り抜けられるほど狭く、片側にコーヒーを置くスペースも残すように設計された。[19]端末の電源スイッチを切り替えると、新しい場所で接続されるようになった。[16]
特注端末はJOSS用に設計されたが、これは技術者らがモデル33の「通信機能は訓練を受けていない者には謎めいている」と感じ、たまにしか使わない人にとってはわざわざ学ぶにはあまりにも混乱を招くと感じたためである。[20]実際には、セレクティックベースの機構は継続的な使用にはあまりにも脆弱であることが判明し、IBMのサービスマンによって現場で頻繁に修理されていた。1970年には、端末の3分の1が完全に作り直され、信頼性を向上させるためにコンピューターからの出力が遅くなった。この頃までに空軍は、入手しやすくはるかに安価であったモデル35を代わりに使用することを決定していた。[21] [11]
利用者は熱狂的であり、彼らの要望に応えるために、ランドはシャーリー・マークスが編集するJOSSニュースレターの発行を開始した。最終的に1967年11月から1971年6月の間に44号が発行された。[22]
ジョス3
1970年代初頭、IBMの西海岸の施設の1つでプログラマーがOS/360が稼働するIBM 370/158用のJOSS-3を作成した。このシステムに関する情報はほとんど残っていないが、JOSSが最終的に廃止されたのはこのマシンだったということだけはわかっている。[23]歴史の概要にあるメモによると、ランドはIBMにJOSSの名前を使うことを躊躇し、その結果「IBMバージョンは広く使われることはなかった」という。[24]
実装

PDP-6 の JOSS-II は、マシンの内部メモリレイアウトに合わせて 2 つの部分に分かれていました。マシンには 2 つのコアメモリバンクが装備されており、各バンクには 16k 36 ビットワードが格納されていました。オペレーティングシステム、ユーザーおよびファイル管理コード、端末ハンドラー、インタープリターを含む JOSS システム自体は、これらの最初のバンクの大部分を使用していました。2 番目のバンクはユーザープログラムに使用されていました。これは当時としては比較的大きなメモリ量でしたが、システムの使用頻度が高かったため 16k ワードのユーザーストアでは足りず、ページングサポートのために磁気ドラムでバックアップされていました。[16]ドラムは外部ハードウェアによって駆動され、メインプロセッサからの注意を必要としませんでした。[25]
複数のユーザー プログラムをサポートするために、PDP-6 ハードウェアは、アドレス参照のビット 20 を調べるように変更されました。このビットが設定されている場合、アドレスは「ユーザー空間」にあり、アドレス 0 がそのユーザーのベース アドレスを指すように変更されました。このようにして、ユーザー プログラムはシステムに問題を引き起こすことなくメモリ内で移動でき、オペレーティング システムは、内部レジスタを 1 つ変更するだけでユーザー間を切り替えることができました。[16]
永久記憶装置は、570万ワードの記憶容量を持つストレージ製品ハードドライブによって提供された。ドラムと同様に、ドラムへの実際の入出力は外部で処理されたが、この場合、移動はユーザーのプログラムのロードと保存のアクションによってトリガーされた。必要に応じてドライブとの間でデータを移動するためにIBM互換のテープドライブが使用され、この操作もCPUとは独立していた。2台のDECtapeユニットも利用可能で、IBMドライブと同じように動作した。[26]住宅ローン計算機や初期のメインフレームゲームなどのデモプログラムも利用可能だった。[27]大規模なプログラムはページングを引き起こし、コンピュータ全体の速度を低下させたため、JOSSニュースレターはユーザーにストレージの使用を減らすよう頻繁に依頼した。[28]
端末は、300 から 400 の端末プラグを 40 の出力に接続できる機械式ストローガー スイッチで構成されたカスタム「コンセントレータ」を介して処理されました。さらに 8 本の回線が、JOSS スタイルの Selectrics ではなく、テレタイプ モデル 33 の入力専用でした。これらの 48 本の回線は、CPU に接続された電子マルチプレクサに接続されました。マルチプレクサは割り込み駆動型で、アイドル状態の端末はサイクルを消費しませんでした。[26]
カスタム JOSS 端末は DEC によって製造されました。これらは、通信システム、電源、およびその他のコンポーネントを含むカスタム シャーシに組み込まれた Selectric メカニズムで構成されていました。カスタム フォント ボールを使用して、≠ などの基本的な数学記号が提供されたため、<> などの 2 文字の組み合わせを使用する必要はありませんでした。通信システムは、開始ビットと停止ビットを含む 8 ビット パケット内の 6 ビット文字コードに基づいていました。回線は、Selectric メカニズムの最大 15 文字/秒の速度に合わせて 120 ビット/秒で駆動されました。シフトイン コードとシフトアウト コードを使用して、リボンを緑から黒へ、またその逆に移動しました。これらのコードは通信システムによっても認識され、その時点でコンピューターとユーザーのどちらが端末を制御しているのかを示すために、フロント パネルのライトが変わりました。[29]
言語
JOSS はユーザーフレンドリーさを重視していたため、「JOSS のような」という言葉は、タイムシェアリング システムと対話する新しいユーザーを表す言葉になりました。子供やその他の人々は、JOSS は「複雑な」コンピュータとは異なり、「ユーモアのセンスのある本物の人間」のように「フレンドリー」で「親切」であり、次のような面白い応答をすると述べましたEh?。[30]
直接モードと間接モード
JOSS は、対話型言語とプログラム エディターの両方として機能する単一のコマンド ラインエディターというアイデアを導入しました。行番号なしで入力されたコマンドは、JOSS が「直接モード」と呼ぶ方法で即座に実行されました。同じ行の前に行番号が付いている場合は、代わりにプログラム コード ストレージ領域にコピーされ、JOSS はこれを「間接モード」と呼んでいました。行番号が一意である場合は新しい行がプログラムに追加され、同じ番号の既存の行が置き換えられ、既存の行番号が入力され、その後にコードがない場合にはプログラムから削除されました。[31]
ほとんどのBASICとは対照的に、JOSSはプログラムコードだけでなく、ユーザー入力全体をファイルに保存しました。ロードされると、JOSSは基本的に行を入力し直しました。つまり、プログラムファイルにはプログラム文とダイレクトモード命令の両方を含めることができます。たとえば、文の行をリストし、ファイルの末尾に を付けて、ロードが完了するとすぐにプログラムを実行するプログラムはよく見られました。 や のように、行番号なしで入力しても、プログラムがロードされると返されるGo.ダイレクトモードでのみ使用できる機能もありました。[32]LetForm
直接命令と間接命令はワークスペース内で自由に混在させることができた。これにより*、, [33]で始まる直接モードの行を追加したり、コード行の最後にコメントを追加したりすることで、ソースコードにコメントを挿入することができた。空白行も無視されるため、プログラムを分割してわかりやすくすることができた。[34]
プログラムステートメント
JOSS プログラムの各行は、行番号で始まる必要があります。行番号は、ピリオドで区切られた 2 つの 2 桁の整数で構成される固定小数点数です。BASIC と同様に、行番号は、ステートメントからターゲットするラベルとして、また編集をサポートするために使用されますTo。Do新しい行番号のコード行を入力すると、プログラムに挿入されますが、既存の行番号のコード行を入力すると、以前のバージョンが置き換えられるか、空の場合は削除されます。
行番号のうちピリオドの左側の部分はページまたは部分と呼ばれ、右側の部分は行と呼ばれます。したがって、行番号は10.12ページ 10、行 12 を指します。分岐はページまたはページ内の行のいずれかを対象にすることができます。後者の形式を使用する場合、ページと行を組み合わせたものをステップと呼びます。
ページは、次の行が異なるページにあるときに戻るサブルーチンを定義するために使用されます。たとえば、数値の平方根を計算するサブルーチンがページ 3 にある場合、3.1、3.2、3.3 という 3 行のコードがあり、 を使用して呼び出されます。Do part 3.コードは、別のページの次の行 (たとえば 4.1) に達すると、Do の後のステートメントに戻ります。RETURN最後に に相当するものは必要ありませんが、早期の戻りが必要な場合は、 でDoneこれを実現します。
各行は、行番号に続くコマンド キーワードで始まる必要があります。BASICのオプション ステートメントの場合のようなデフォルト コマンドLETの概念は存在しません。複数のステートメントを 1 行に配置でき、コロンまたはセミコロンで区切ります。各行はピリオドで終わる必要があります。
ループと条件
JOSS は、条件評価を示すために接尾辞表記法を使用します。「これが真ならこれを実行する」は、条件を接頭辞表記法の前に置くほとんどの言語とは対照的です。「これが真ならこれを実行する」。FORTRANやFOCALとは異なり、任意のステートメントをこの方法で条件付きで評価できます。たとえば、条件が満たされた場合にのみ文字列を出力するには、 if を と組み合わせます。
Type
1.1 X=5 の場合は「Hello, World!」と入力します。
JOSSは6つの中置比較、、、、、、=およびブール演算子、、およびをサポートし≠ていまし≥た。[35≤ ]><orandnot
ループも同様の方法で処理され、Forコマンドと、ループ境界とステップ値を指定するためのややわかりにくい形式 が使用されましたstart(step)end。たとえば、1 から 10 まで 2 ずつステップする場合、形式は です1(2)10。 と同様にIf、Forは他の任意のステートメントに適用できます。
1.2 i=1(2)10に対して「Hello, Wikipedia!」と入力します。
for は単一のステートメントにのみ適用されることに注意してください。ループ内で複数のステートメントを実行する場合は、それらを別の部分に分離し、do を使用して呼び出します。
1.3 i=1(1)100に対してパート5を実行します。 5.1 「Hello, Wikipedia!」と入力します。 5.2 「This is JOSS.」と入力します。
BASIC と同様に、for ループへの入力は定数、変数、またはその他の式にすることができます。
このような範囲は任意のコード行に適用できるため、プログラムが呼び出されたときに制限とループを定義することができました。たとえば、次のプログラムを考えてみましょう。
1.1 タイプX。
通常、これを BASIC と同様の方法で呼び出すと、次のようになりますRUN。
パート1を実行します。
次のような結果になります:
0
ただし、呼び出しにループ構造を追加することで、この動作を変更できます。
X = 1(1)5 についてパート 1 を実行します。
結果は次のようになります:
1 2 3 4 5
これにより、ループ内に配置する必要なく、プログラム内で数式を構築できます。必要に応じて、ユーザーがプログラムを起動するときにループを実行できます。
表現と命題
JOSS のユニークな特徴は、論理式の処理です。ほとんどのコンピュータ言語では、Set x=(1+2)·3.変数 x を値 9 に設定するなど、複数の部分から成る数式を作成する方法を提供しています。JOSS はこの概念を拡張し、「命題」の概念を明確に定義しました。命題とは、数値ではなく論理値 (真または偽) を返す式です。命題はIf、上記の例のようにステートメントでよく見られますが、ブール値は変数に直接格納することもでき、[36]または (真理値) 関数を使用して、真を 1 に、偽を 0 に変換することもできますtv。[37]
JOSS には命題に加えて「条件式」という概念もありました。これは命題の文字列と、その命題が真である場合に実行されるコードで構成されていました。これにより、複数ステップの決定木を 1 行で記述できるようになりました。これらは、CやJavaなどの現代の言語にある三項演算子と同様の目的を果たします。三項演算子は、 if-then-elseを実装したコンパクトな構造から値を返すために使用されます。JOSS のバージョンには、3 つだけではなく任意の数の条件があるため、コンパクトな if-then というよりもコンパクトなswitch ステートメントです。[38]
この例では関数の機能を再現していますsgn: [39]
s(x)=[x=0:0; x>0:1; x<0:-1]とします。
これは、単一のパラメータ「x」を受け取り、それに対して3つの連続したテストを実行する関数「s」を定義します。最初に成功したテストは、コロンの後の対応する値を返します。[40]
範囲
JOSS のもう 1 つの高度な機能は、保存および操作できる組み込み型として範囲の概念があることです。範囲は通常、 for ループの入力として使用され、ループ自体の構文の一部となります。たとえば、BASIC では、次の基本構文を使用して for ループを記述します。
I = 1から5の場合ステップ2
これにより、値 1、3、5 を割り当てて終了するループが実行されます。
JOSS はループの制限を定義するためにややわかりにくい形式を使用しました。JOSS での同等のコードは次のようになります。
私=1(2)5
このコードには for が含まれていないことに注目してください。これは、JOSS では範囲が言語の第一級オブジェクトであり、BASIC のようにループの一部ではないためです。範囲はループ外の多くのコンテキストで定義および使用できます。たとえば、次の条件式はパラメータ x の階乗を評価します: [38]
f(x)=[x=0:1; fp(x)=0:prod(i=1(1)x:i)]とします。
この例では、セミコロンで区切られた 2 つの主要な命題があります。左側の最初の命題は、パラメータ x が 0 の場合、条件は直ちに 1 を返す必要があると述べています。この命題が失敗した場合、右側の 2 番目のテストに進みます。これは、x の小数部分が 0 (つまり、整数) であるかどうかを確認し、そうである場合は、関数を呼び出してprod値の範囲を乗算します。prodのパラメータも命題ですが、この場合、テストは 1 から x まで 1 ずつ進むループ反復子に置き換えられます。この命題が真である場合 (ループのすべての値に対して真)、インデックス i を返します。これにより、prod1 から x までの一連の値がに送信されます。[38]
これらの機能を組み合わせることで、複雑な関数をいくつかのコマンドで記述できます。この種の機能は、イテレータやマップ関数を使用して同じ結果を提供する、より現代的な言語でのみ一般的になっています。決定とループをコンパクトな形式で組み合わせる JOSS の機能は、FOCAL などの派生言語を含む、当時の他の言語では知られていません。
コマンド
セット
このSetコマンドは、式の結果を指定された変数に割り当てます。BASIC の と同等ですLET。
01.30 p=3.14156 に設定します。 01.60 i=l*(r/100)*tと設定します。
Setx=5.直接モードで使用する場合はオプションであり、 Setコマンドなしで入力できます。これはBASICとは対照的に間接モードでは許可されませんでした。 [41]
させて
Letはユーザー定義関数を定義するために使用されました。[42] BASICのと同等ですDEF FN。[33]
t(x)=sin(x)/cos(x)とします。 j=t(1.1)と設定する。 jと入力します。
Let定数からなる式を使用して変数の値を設定するためにも使用できます。
x=5とします。
その点では、を使用して作成されたものと同じように使用できますSet。ただし、微妙な違いがあり、このXがコード内で参照されると、値は右側を評価することによって計算されます。AはSet一度だけ評価されるため、はるかに高速です。[43]
システムは通常、Let直接モードでのみ使用することを提案し、ファイルの先頭または末尾に挿入してプログラムで使用するために保存します。これにより、Let読み込みプロセス中に1回だけ呼び出されるため、実行中に複数回呼び出されるのを回避できます。[44]
要求
はDemand変数のリストを受け取り、ユーザー入力を変数に格納します。オプションのas修飾子によりカスタム プロンプトが追加されます。BASIC の に相当しますINPUT。
01.01 「あなたの年齢は何歳ですか?」と入力します。 01.02 要求A 01.03 「You are」と入力します。A。 01.04 Hに「身長は?」と質問。 01.05 タイプH、「?そんなに背が高いの?」
タイプ
このTypeコマンドは、コンマで区切られた1つ以上の項目を出力します。基本形式では、BASICの と同等ですPRINT。ただし、 には、Type無関係な出力タスクの範囲を実行する、非常にオーバーロードされたオプション形式が多数含まれています。[45]
値を印刷する場合、パラメータには変数、二重引用符で囲まれたリテラル文字列、および_改行を生成する特殊文字を使用できます。[46] は、 書式文字列を使用したフォーマットされた出力もサポートしています。詳細については、以下のTypeセクションを参照してください。 [45]Form
タイプはBASICのステートメントと同等に使用されLIST、プログラムを書き出します。たとえば、Type step 1.1.は1行のコードを出力しますが、はType part 1.部分全体を出力し、はType all.プログラム全体を出力します。[45]
さらに、内部値のリストを印刷するためにも使用できます。Type all values.はすべての変数とその値のリストを生成し、はType size.プログラムのサイズを印刷します。キーワードにはsize、、、timeなどがありますusers。[45]
ページ
Page特別なJOSS端末でページ送りをトリガーします。[36] JOSSは通常、端末が紙の54行目に達したときにページ送りを送信するので、データブロックが半分に分割されないようにしたい場合は、次のようにします。[47]
1.10 $>44 の場合はページ。
$現在の行番号を返す疑似変数です。[47]
ライン
Line特別なJOSS端末で改行をトリガーします。[36]
に
コマンドは、それぞれまたはをTo使用して、プログラムの実行を指定された部分またはステップ番号にジャンプします。 [48]これは、BASICのに相当します。BASICのに相当する、コマンドラインからプログラムを起動する間接コマンドである とは対照的です。
To part 1.To step 1.1.GOTOGoRUN
01.01 要求Aを「TYPE A NUMBER」として入力します。 01.05 ステップ1.01へ。 01.10 パート1へ。
する
Doは に似ていますToが、サブルーチンに分岐します。 と同様に、または をTo使用できます。ステップが指定されている場合は、その 1 行が実行され、 の後のステートメントに戻ります。 パートが指定されている場合は、ブロックの最初の行から実行が開始され、ブロックの終わりに達するかステートメントに遭遇するまで継続されます。
Do partDo stepDoDone
01.15 手順 7.24 を実行します。 01.16 パート8を実行します。
Doには、ほとんどのプログラムで非常に一般的であることから、 looking の特別な短縮形が1つありました。これは、単純なループの場合、times通常の ではなく 修飾子を使用しますfor。したがって、次の行は同等です。[45]
i=1(1)5に対してパート1を実行します。 パート1を5回繰り返します。
JOSS は現在実行中の行へのポインタを保持しており、これはDo変更される可能性があります。ただし、特別な「括弧付き do」が含まれており、これを直接モードで使用して、メイン ポインタを変更せずにコードの特定のセクションをテストできます。たとえば、プログラムがエラーのために停止し、どのセクションが問題の原因であるかが不明な場合は、特定のサブルーチンを次のようにテストできます。[49]
(パート2を実行します。)
終わり
コマンドDoneはサブルーチン呼び出しから戻ります。サブルーチンはパートの終わりに達すると自動的に戻るため、はDone早期復帰のみに必要であり、条件付きで使用されることがよくあります。BASIC の に相当しますRETURN。
*ユーザーに正の値を尋ね、正の値が返されるまで繰り返すルーチン 01.10 要求 X を「ゼロより大きい正の値を入力してください」と入力します。 01.20 X>0の場合は完了。 01.30 ステップ1.1へ
停止
コマンドStopはプログラムの実行を終了し、編集環境に制御を戻します。BASIC のENDまたは と同等ですSTOPが、BASIC の は同じ場所で実行を再開STOPできるようにすることを目的としておりCONT、JOSS のワークスペース指向システムには直接同等の機能はありません。
01.10 タイプX。 01.20 停止します。
行く
ダイレクトモードでのみ使用可能で、 BASICのおよびとGo同等であり、エラーまたはコマンドが発生したためにプログラムが現在停止しているかどうかによって異なります。[50]RUNCONTStop
キャンセル
もう一つのダイレクトモード専用のコマンドは、Cancelプログラムがエラーで停止し、ユーザーがプログラムをリセットしたいときに使用され、プログラムカウンタをクリアすることで実行されます。 A はGo最後の位置から開始しますが、 a を発行すると先頭から再び開始さCancelれます。 [51]現在のブレークポイントが括弧付きの によるものである場合、括弧付きのキャンセル を発行して、その部分実行だけを停止し、括弧のない最後の行から a を続行することができます。 [49]Go(Do.)(Cancel.)Go
数学
JOSSはすべての数値を基数10の浮動小数点数として保存しました。[52]
JOSSには6つの数学演算子が含まれていました。[52]
+追加用-減算用·掛け算の場合(句点、ピリオドではない)/分割用*指数用|...|絶対値の場合は、真ん中に式を入れます
数式では、優先順位を確立するために、() と [] を同じペアで使用できます。例:
1.30 A=|-10·[5+1]·(1+5)|と設定する。
360となる。[35]
機能
この言語には次の組み込み関数が含まれていました。
数学
sin()- ラジアンで与えられた角度の正弦cos()- コサインarg()- 点のX値とY値を取得し、その点とX軸の間の角度を返します。log()- ナペリアンログexp()- 議論の力の自然な根拠sqrt()- 平方根sgn()- 引数の符号、0 は 0 を返し、-ve は -1、+ve は +1 を返します。ip()- 引数の整数部分、ip(22026.4658)22026 を返しますfp()- 小数部は .4658 を返しますdp()- 数字部分は 2.20264658 を返しますep()- 指数部、小数点の位置である4を返します
ブール
tv()- 真理値。式が真の場合は 1 を返し、そうでない場合は 0 を返します。
ループ関数
JOSS では、一連の数値を合計するなどの単純なタスクを実行するためにプログラマーがループを記述する必要がないように、内部でループを実行する関数もいくつか定義されてForいます。パラメータは、カンマで区切られた単純な式のリスト、または任意のステートメントまたは関数呼び出しをコマンドとする範囲構造のいずれかになります。
max()- 提供された式の最大値min()- 最小sum()- 合計prod()- 製品first()- リスト内の条件に一致する最初の項目、その結果を返します
ファイル管理
JOSSシステムはハードディスクを使用して割り当てられたスペースにユーザープログラムを保存します。そのスペース内には、整数と括弧で囲まれた5文字の名前で構成される複数部分ファイル名を使用して参照される多数のファイルがありました123 (hello)。たとえば、整数部分はディレクトリに相当し、名前はその中のサブファイルであり、JOSS自体によって管理されます。[53]
ファイルは で書き込まれFile all as item filename.、 でロードされますRecall item filename.。また、ワークスペースの特定の部分だけを読み込んだり保存したりすることもできます。たとえば、File part 1 as item filename.1つのルーチンをファイルに保存するなどです。 [ 54]さらに、 を使用してすべての参照が想定されるデフォルトのファイルを設定することもできます。Use item filename.ファイルは で削除できます。 [54]Discard
サンプルプログラム
1.1 需要p、q。 1.2 q<0またはr(q,2)=0の場合は停止します。 1.3 a=1 と設定します。 1.4 q>1 かつ a≠0 の場合にパート 2 を実行します。 1.5 フォーム3にaと入力します。 1.6 停止します。 2.1 パート20を実行します。 2.1 p<0の場合はパート11を実行します。 2.2 p≥qの場合はパート12を実行します。 2.3 p=0 の場合はパート 13 を実行します。 2.4 a=0 の場合は完了。 2.5 r(p,4)=0のときp=p/4とする。 2.6 r(p,2)=0の場合はパート14を実行します。 2.7 パート20を実行します。 2.8 r(p,4)=r(q,4)=3の場合にはa=-aと設定する。 2.9 s=p、p=q、q=sと設定します。 2.95 パート20を実行します。 11.1 r(q,4)=3の場合にはa=-aと設定する。 11.2 p=|p|と設定する。 11.3 パート20を実行します。 12.1 p=r(p,q)と設定する。 12.2 パート20を実行します。 13.1 a=0、p=1、q=1と設定します。 14.1 r(q,8)=3またはr(q,8)=5の場合にはa=-aと設定する。 14.2 p=p/2と設定する。 20.1 a=1 の場合、形式 1 に p、q と入力します。 20.2 a=-1 の場合、形式 2 に p、q と入力します。 形式1: " L(%.0f,%.0f) =" 形式 2: " -L(%.0f,%.0f) =" フォーム 3: " %.0f\n"
これはオリジナルのサンプルではなく、最新のシミュレーターのサンプルであることに注意してください。オリジナルの JOSS 言語とは構文上の違いがいくつかあります。
注記
- ^ JOHNNIACから移行したとき、頭字語を「JOSS Open Shop System」に変更することが提案され、再帰的な名前の初期の例となった。[1]
参考文献
引用
- ^ abcd ブライアン 1966、p. 2。
- ^ abc Marks 1971、p.1。
- ^ Norberg, Arthur (1989年7月10日). 「Keith Uncapherとのインタビュー」(PDF) (インタビュー). p. 7.
- ^ Ware 2008、62ページ。
- ^ Marks 1971、p. iii.
- ^ ショー 1965年、3ページ。
- ^ ab Marks 1971、p. 2。
- ^ Smith, JW (1967 年 8 月). JOSS: 中央処理ルーチン (リファレンス ユーザー ガイド). RAND. RM 5270 PR . 2012 年 4 月 16 日閲覧。
- ^ ショー1965年、14ページ。
- ^ ab Marks 1971、3ページ。
- ^ abc Marks 1971、9ページ。
- ^ マークス1971、4ページ。
- ^ 「JOHNNIAC」。コンピュータ歴史博物館。
- ^ Ware 2008、15ページ、109ページ。
- ^ マークス1971、5ページ。
- ^ abcd ブライアン 1966、3ページ。
- ^ マークス1971、32ページ。
- ^ マークス1971、10ページ。
- ^ マークス1971、15ページ。
- ^ マークス1971、14ページ。
- ^ ブライアン1966年、12ページ。
- ^ マークス1971、47ページ。
- ^ Ware 2008、65ページ。
- ^ Ware 2008、16ページ。
- ^ ブライアン1966年、4ページ。
- ^ ブライアン 1966、5ページより。
- ^ マークス1971、26ページ。
- ^ マークス1971、32-33ページ。
- ^ ブライアン1966年、6ページ。
- ^ マークス1971、35-36、43ページ。
- ^ ギンブル 1967、p.v.
- ^ ギンブル 1967、p. vi.
- ^ ab ギンブル 1967、65ページ。
- ^ マークス1971、42ページ。
- ^ ab ギンブル 1967、p.70。
- ^ abc ギンブル1967年、77ページ。
- ^ ギンブル1967年、24、69頁。
- ^ abc ギンブル1967年、75ページ。
- ^ マークス1971、41ページ。
- ^ ギンブル 1967年、25ページ。
- ^ ギンブル 1967年、68ページ。
- ^ ギンブル 1967年、74-75ページ。
- ^ ギンブル1967年、45ページ。
- ^ ギンブル1967年、63ページ。
- ^ abcde ギンブル1967年、66ページ。
- ^ ギンブル 1967年、7ページ。
- ^ ab ギンブル 1967、49ページ。
- ^ ギンブル1967年、67ページ。
- ^ ab ギンブル 1967、58ページ。
- ^ ギンブル1967年、57ページ。
- ^ ギンブル1967年、53ページ。
- ^ ab ギンブル 1967、69ページ。
- ^ ギンブル1967年、59ページ。
- ^ ab ギンブル 1967、61ページ。
出典
- Gimble, EP (1967 年 5 月)。JOSS: エンジニアのための問題解決(PDF) (技術レポート)。Rand。
- Bryan, GE (1966 年 11 月 4 日)。JOSS: システム実装の概要。ローレンス放射線研究所、カリフォルニア州バークレー: DECUS。p. 19。2019 年 6月 19 日閲覧。
- Marks, Shirley (1971 年 12 月)。JOSS 時代: 実験の考察(PDF) (技術レポート)。Rand。2019年 6 月 19 日閲覧。
- Sammet, Jean (1969).プログラミング言語: 歴史と基礎. Prentice-Hall . pp. 217–226. ISBN 0-13-729988-5。
- Shaw, JC (1965 年 5 月)。JOSS: リモート タイプライター コンソールのユーザー向けの実験的なコンピューティング サービスの経験(PDF) (技術レポート)。Rand。
- Ware, Willis 編 (2008)。RAND と情報進化(PDF )。Rand。ISBN 9780833048165。
さらに読む
- 「JOSS ユーザーズ リファレンス マニュアル」、RL Clark、レポート R-1555/9、RAND Corp (1975 年 1 月)
- ミネソタ大学チャールズ・バベッジ研究所の Keith W. Uncapher 氏への口述歴史インタビュー。Keith Uncapher 氏が 1950 年から 1970 年代初期にかけてRAND Corporationに雇用されていたときのプロジェクト ( JOHNNIAC 、JOSS、存続可能な全国ネットワーク、 ARPANETに関連するいくつかの作業など) のレビュー。
外部リンク
- JOSS: オンライン コンピューティング システム (VPRI-0270)。1964 年 3 月に RAND によって作成され、当時 JOHNNIAC 上で実行されていた JOSS をデモするフィルム。
