レトロなスタイルの奇妙な

こんにちは! どういうわけか、私にとってはいつの間にか、私は異常なプログラミング自体ではなく、異常なプログラミングに適した言語のコースを取りました。 もちろん、別のC ++プログラムで世間を驚かせることができますが、私は別の方法で進めます。 50年代から70年代にかけて、プログラミングは始まったばかりであり、平均的なプログラマーが何を必要とし、何が危険なのかは不明でした。 Tru-programming言語がそのような構造であり、そのようなツールであるべきことがよくわからなかったため、現代のプログラマーは別のマニュアルを勉強して食べ物に夢中になりました。 ですから、クヌートやシュトラウストラップなどの言葉の巨匠から教えられたことを忘れてしまいます!



エッジ上の自由



PL / 1は常に、ワイルドなプログラマーを投げつける何かを見つけます。 たとえば、式

9<8<7





本当です! 論理的な質問は:なぜですか? これはどのように可能であり、言語開発者はどのようにこれを許可しましたか? まあ、マニュアルを掘り下げる必要があります。 そもそも、PL / 1には論理変数はありません。ゼロは偽であり、その他はすべて真です。 また、ほとんどすべての暗黙的な変換が許可され、これにより約50%のエラーが発生します。 トランスレータが複合論理式を解析する方法を検討してください。

最初に目を引くのは、2つの同一の操作「>」であり、それらの優先順位は同じです。 したがって、式9 <8 <7は次のようになります。

(9<8)<7





9 <8は嘘であるため、括弧が消え、目の前で表情が変わります。

0<7





7は本当にゼロよりも大きいため、真実が返されます。 論理変数が表示されるまでCを吐きます。 また、これは、ほとんどの高水準言語では論理変数が単に必要であるという事実に対する十分な正当化です。 そうでなければ、そのような問題は単に避けられません。

初心者のPL / 1プログラマーがしばしば足を不自由にしたもう1つの奇妙なレーキです。 PL / 1のドキュメントを読みます。 複数の割り当てが許可されていることを示しています。 A、B、Cの3つの変数があるとします。

A=5;

B=6;

C=B=A; /* , */






C変数は何だと思いますか??? まったく5ではなく、... 0に等しい! 待ってください、しかしマニュアルには複数の割り当てが許可されていると書かれていますが、どうですか? はい、おそらく既に推測しています-2番目の等号は論理演算であり、複数の割り当ては次のようになります。

C,B = A;





この種の問題はすべて、論理演算と算術演算の間の線がぼやけているために発生します。 読者、あなたはこれがオリジナリティの高さだと信じているのは間違いです。 さらに奇妙なことを以下に説明します。



星雲の代名詞



各変数には独自の名前があります。これが幼稚園から教えられる方法です。 しかし、あごひげを生やした60年代には、誰もがそう考えたわけではありませんでした。 実際の言語に近づこうとする試みで、コボルや星雲などのモンスターが生まれました。 たとえば、なぜ書かないのですか

();

( );






私には非常に自然で便利な構造ではないようですが、星雲の作成者はそうは思いませんでした。 彼らは代名詞QIH



を言語に導入しました-現在の値へのポインター。 これが狂気の高さだと思うなら、名前のない変数について読むのではなく、構文のワイルドにまっすぐ進むのが最善です。



名前のない変数



Nebulaで十分にプレイした人は、名前を完全に拒否するのが良いことをすぐに認識します。 POP-2ではそうしました。 すべての変数は、VARS演算子に対して宣言されます。

VARS XYZ;





次のように書くことができます

X + Y -> Z;





しかし、誰も私たちを単純に書くことを気にしません

X + Y;





これで、金額はスタックに保存され、暗黙的に使用されます。 これにより、一時的な変数名が不要になります。 X + Yコマンドの後しばらくすると、次のように記述できます

-> Z;





番号はスタックから取得され、変数に配置されます。 POP-2をForthやFactorなどの言語と混同しないでください。 POP-2では、スタックは非常に便利ですが、補助ツールにすぎません。 スタックには、プロシージャコール間でデータを保存できます。これにより、変数の有効期間について考える必要がなくなります。 これら、およびPOP-2のその他の多くの機能により、彼は論理プログラミングの便利なツールになることができましたが、彼はあまり人気がなく、イギリスでのみ使用されていました。



脳を不自由にする条件付き演算子



現在、ほとんどすべての新しいプログラミング言語(Pythonとその派生語、インデント、タブを除く)では、ifステートメントに2つの明確に制限されたブロックがあります。 EifilまたはLuaでは、次のように書くことができます。

if a<b then

...

if c<d then

...

else

...

end

...

end






各ifには独自の終わりがあり、他にifが何を指しているかを正確に伝えることができます。 このため、番組を放送する過程で質問はありません。 しかし、ここにPL / 1の有効なエントリがあります(注、ELSEの前にセミコロンを入力する必要がある場合でも、これについて詳しく説明します)。

IF 9<8<7 THEN IF 9>8>7 THEN CALL AAA; ELSE CALL BBB;





翻訳者は正当に驚いています-ELSEはどのIFに属しますか? このあいまいさのため、IF内の各条件ステートメントに独自のELSEが必要であるという要件を導入する必要がありました。 この例を書き換える方法は次のとおりです。

IF 9<8<7 THEN IF 9>8>7 THEN CALL AAA; ELSE; ELSE CALL BBB;





今、人はすでに驚いています。

ALGOL 60では、この問題は少し改善されていますが、非常にいものです。ifがbegin ... endブロック内にある必要がある場合:

if 9<8<7 then begin

if 9>8>7 then aaa end

else bbb;






状況は、プログラムがパンチカードで導入されたという事実によって複雑になります。そのため、人々は美しいインデントやその他の進歩の利点をそれらに発行できませんでした。すべてのプログラムは、ヒープに積み上げられたシンボルの血まみれの混乱でした。 この黒い混乱には、POP-2という明るいスポットが1つあります。 その中で、ネストされたループはcloseステートメントで閉じることができます:

if b1 then if b2 then S1 close

else S2 close






これはPL / 1契約よりもはるかにエレガントです。 ここで、1つのあいまいさを排除する必要があります。その場合、caseに似た演算子は存在しませんでした。 アルゴルのケースは、本質的に洗練された計算されたgotoを表しています。 したがって、私たちの祖先は、1つのヒープ内にある場合、多くの彫刻を余儀なくされました。



セミコロンがん



むかしむかし、パンチカードでプログラムが導入されました。 翻訳者に届いたのは、文字の連続ストリームです。 このような状況では、セミコロンを使用することは本当の救いでした。 現在、これはそれほど重要ではありませんが、昔はそうは思いませんでした。 PL / 1開発者はこれを文字通り理解しすぎたため、セミコロンは可能なすべてを完了し、すべての亀裂に登ります。 else-branchの前にセミコロンを置く必要があるという事実については、すでに説明しました。 しかし、これはPL / 1のすべての魅力ではありません! DOブロックのDOの後でもセミコロンを設定する必要があります。

IF 9<8<7 THEN CALL ERROR; ELSE DO; A=5; B=6; END;





PL / 1の初期バージョンは、この混乱を喜んで楽しんだ。



予約語



Kobolでは、プログラマは300語まで使用できません! 一方、FortranまたはPL / 1には予約語がまったくないため、ユーザーは何でも自由に実行できます。

IF IF THEN THEN; ELSE ELSE;





言うことすらありません。それを取らず、唾を吐き、通り過ぎることをお勧めします。



おわりに



ご覧のように、私たちの先祖は異常なプログラミングの微妙な点もすべて知っていました。多くの場合、彼らのクイックコードは私たちのものよりも興味深いものです。 ロシア語版ウィキペディアにはPL / 1、AlgolおよびKobolの記事しかなく、Kobolの記事は非常に不完全であるため、通常どおり、プログラミング言語へのリンクは提供していません。 BLISS、CPF、CORAL 66、Nebulaなどのナゲットに関する情報を見つけることは完全に不可能です。 POP-2については、いくつかの情報が見つかりましたが、POP-11に関する記事はありませんが、記事があります。 一般的に、これらの言語は長い間使われていません。他の誰も使用していません。 例外があります。これらはPL / 1とKobolですが、それらの死亡時間はもうすぐです。 コンピュータサイエンスに関する古い本のコレクションにすべての情報が見つかりました。 特に、バロンの本の翻訳が主な知識源となりました。 興味があれば、カバーをネットで検索してください。



All Articles