Plankalkülは、ドイツのエンジニアKonrad Zuseによって開発された世界初の高レベルプログラミング言語です。
1942年と1946年、彼のZ4コンピューター(下の写真のコンピューター、ウィキペディアからの写真)。
第二次世界大戦があり、ツェセは他の国の科学者から完全に独立して働いていました。 この間、彼はプログラミング言語だけでなく、
チェスのポジションを評価するためのプログラムの49ページも書いています。 彼の全作品は、ずっと後の1972年に出版されました。
考古学的調査として、このプログラミング言語について話をしようと思います。 さらに、この言語についてはロシア語ではほとんど語られていません。
1957年にのみ(作業は1954年に開始されました)
Fortranが登場しました。これは、最初の高水準言語を最も考慮する言語です。
「Z4」は電気機械式であったため、プランクアルキルコンパイラーまたはインタープリターは存在しませんでしたが、2000年にはスボボドニーで
ベルリン大学(ベルリン大学)の
通訳を作成しました
方言(ブラウザでJavaアプレットとして起動)。
実装されている方言はPlankalkül-2000と呼ばれ、さまざまな簡略化が元の言語とは異なります。
たとえば、記録形式が簡素化され、Zuse
は 2次元記録を
使用しました -
最初の行は式自体であり、その引数の一部(変数のタイプ、インデックスなど)の下に記述されています。 さらに、操作自体のアイコンが簡素化され、
より身近な形に縮小されました。
私の意見では、言語は非常に豊富で、40代には条件付きの構成、2種類のループ(whileとforのアナログ)、配列とタプル、
ルーチンを記述して呼び出すことができます(ただし、再帰はありません)。
すべての変数は4つのタイプに分けられます。
- 「変数」(入力変数)は、「V」の文字と数字で始まる読み取り専用のサブルーチンの入力変数です。
- 「Zwischenwert」(中間の3つの始まり)、読み取りと書き込みに使用でき、「Z」と数字で始まる中間の計算値を格納するように設計されています。
- 「Resultatwerte」(結果)-計算結果はこれらの変数で返され、「R」と数字で始まります。
- 「Indizes」( およびインデックス)-ループ変数(forに類似)、「i」で始まり、番号が存在する場合があります。ネストされたループを整理するには番号が必要です。
3種類の変数が利用可能です。 「Z4」は浮動小数点数で動作できたという事実にもかかわらず、インタープリターはその方法を知りません。
- 負でない整数の場合、ビット単位の次元が示されます。 「0」の書き込みには2つの形式があります-1ビット、「n.0」-「n」ビット、たとえば8.0-1バイト(8ビット)。
- タプルはカッコ内に示されています。たとえば(3.0、4.0)-これらは3ビットと4ビットの2つの変数であり、タプルには複数の要素が必要です。
- 配列は、ポイントを介して書き込まれます。たとえば、4.5.0-各5ビットの4つの要素の配列、32。(0、8.0、16.0)-32個のタプル。
16。
Plankalkyulは構文によって明らかに大幅に単純化できますが、現代の方言はZuseが使用したレコードをほぼ正確にコピーします。そのような構文は、
プログラムを紙で「デバッグ」する必要がある。 ただし、言語は非常に単純なので、約15分ですべてを習得し、いくつかのバージョンでいくつかのプログラムを作成しました。
それらの1つは、示された(順序で)
フィボナッチ数を計算します。
P0 FactEvgenyStepanischev (V0[:4.0]) => (R0[:10.0]) (0, 1) => (Z0[:10.0], Z1[:10.0]) W1 (V0[:4.0]) [ i > 0 -> (Z0[:10.0] + Z1[:10.0], Z1[:10.0] - Z0[:10.0]) => (Z1[:10.0], Z0[:10.0]) ] Z1[:10.0] => R0[:10.0] END
この方法で開始する必要があり
ます。インタープリターで
ページを開き、プログラムをウィンドウにコピーし、「コンパイル」をクリックすると、別のウィンドウが開きます
Javaアプレットのあるウィンドウ(コンピューターにJavaをインストールする必要があります)、開いたウィンドウで、マウスを使用してビットごとに初期値V0を選択します(緑色の円をクリックする必要があります)。
次に、ブラウザウィンドウで[実行]をクリックすると、赤い線(R0)に結果の値が表示されます。
言語のサブプログラムは、文字「P」と一意の番号で始まり、それを呼び出すことができる名前が付いています。「FactEvgenyStepanischev」というサブプログラムがあり、終了します
キーワード「END」を持つサブルーチン(元のプランクアルキルではそうではありませんでした)。
サブルーチンは、受け入れられた値と戻り値を記述し、入力に1つの変数、サイズが4ビット、出力に1つの変数、サイズ10を使用します。
値「ゼロ」と「1」が中間変数Z0とZ1に割り当てられます。 変数のタイプは使用するたびに指定する必要があり、変数を別の変数に変換します
タイプは不可能です。
以下は「for」ループ(W1)です。ループ変数(ここでは省略されている最初の角括弧で示されている)の番号を示していないため、ループ変数「i」が番号なしで使用されます。
繰り返し回数は括弧内に示され、サイクルの本体は後続の角括弧内に示されます。 詳細は
説明にあります。
操作 "arrow"( "->")は条件付きの構成であり、左側の式が真の場合、右側の部分が実行されます。 方言では、最も単純な式のみが機能します。たとえば、
ループはそこで置換できますが、アプレットの[実行]ボタンは表示されなかったため、ループ内での割り当てに限定しました。
ここでは、Pearl、Python、またはPCPを使用している人には馴染みのある複雑な割り当てを使用しましたが、動作が異なります-割り当てが実行されます
連続して、左から右に、「(Z0 [:10.0] + Z1 [:10.0]、Z1 [:10.0])=>(Z1 [:10.0]、Z0 [:10.0])」に制限できないため、結果は期待されるもの。
最後に、中間値をサブルーチンの結果値に割り当てます。
さらに、言語にはほとんど何もありません。 配列の要素、関数呼び出し、およびwhileループを別々に記述することは意味がありません;これらはこの構文のフレームワーク内で非常に自然に見えます。
言語でサポートされているすべての操作(論理操作、ビット操作、4つの算術操作など、ごく一部しかありません)は見慣れています。