それから約40年が経過しました。 INTERCALは、開発者が望んでいたように、 主流の言語とは何の関係もありませんでした 。 名前付き変数、配列、5つの演算子、および欠落している算術演算を実装する標準ライブラリがある通常の命令型言語は、2次元の非決定性言語はもちろん、Brainfuck自体よりも通常の言語とはるかに共通していることを認めなければなりません言語、妄想言語、単一の命令を備えた言語、およびその他の飼育室の展示。 しかし、彼はこのジャンルの先駆者であり続け、多くの点でユニークです。
まず、リファレンスガイド。 後の難解な言語は、言語の本質にその異常性を集中させ、それらのマニュアルは、コマンドと機能の乾いた事実の説明に限定されています。 INTERCALプログラミング言語リファレンスマニュアルは、プログラミング言語のユニークな説明であり、「不思議の国のアリス」のエピグラフと皮肉なコメントが完全に深刻な口調で発せられています。 さらに、特にこの言語のために、著者は使用されたサービスシンボルのup曲表現システムを開発しました: '-spark、'-rabbit ears ..-spot ,:-double spot ,,-tail ,;-hybrid(「spotted tail」はより論理的ですが)、$-大金、〜-ザゴグリンなど(完全なリストはマニュアルに添付されています) ウサギの耳とウサギを得るためのスポットを組み合わせることは禁止されています!
次に、エラーメッセージ。 適切な言語では、エラーメッセージは情報を提供し、何が起こったのかを正確に示します。 それどころか、不名誉なものでは、メッセージは普遍的であるか、エラーの間違った理由を投げかけます。 INTERCALエラーはマニュアルと同じくらい悪意があり、参照なしでは原則的に解読されません。 実際、E252「言いたいことを忘れてしまった」はI / O操作中のメモリオーバーフローエラーであり、E182「このラベルが本当に好きだと思われる」は同じラベルを数回使用するエラーです。 しかし、E405「プログラムは精神的健康上の理由で拒否されました」という考えを思いついた人は、対応するコンパイラオプションなしでロールバックを伴うマルチスレッドコマンドまたは計算の使用を通知します。E017「これ、本当に対処する必要がありますか?」間違った範囲の定数を使用し、E127「言う」アブラカダブラ「魔法の杖なしでは完全に役に立たない」-標準ライブラリが接続されていないこと?
一部のエラーには、他の言語の類似物がありません。 そのため、E079「プログラマーは丁寧ではありません」とE099「プログラマーは丁寧すぎます」のペアは、プログラム内のPLEASEコマンドの識別子の数を指します(ところで、PLEASE識別子は他の意味的な負荷を運びません)。 エラーE774「ランダムコンパイラのバグ」はその名前と完全に一致しています。偶然に発生し、通常は再コンパイルすると消えます。 E995「なに、これを本当に実装しなければならなかったのですか?」まだ書かれていないコードを実行しようとすると発生します(どうすればいいのか聞かないでください!)
最後に、言語自体。 これについては長い間話すことができますが、元のマニュアルのスタイルは保持しますが、最新の言語実装を使用する改訂リファレンスマニュアルを読むことをお勧めします。 私のお気に入りの場所をいくつかご紹介します。
- INTERCALは学ぶのが非常に簡単な言語であり、新しいプログラマーを開始するのに適していると思われます。 実際、彼はプログラマに別の仕事を探すように促す傾向があります。
- 前のセクションで示したプログラムの例は、言語に不慣れな読者にとっては非常に難解に思えるかもしれません。 この印象を強めるために、言語の説明を提供します。
- INTERCALには、2つのバイナリと3つの単項の5つの演算子があります。 ただし、ある意味では、すべての演算子は引数のバイナリ表現で動作するため、すべての演算子はバイナリですが、この言葉の遊びはプレゼンテーションから私たちを遠ざけます。
- 演算子の優先順位は次のように定義されます:(ページの残りの部分は意図的に空白にします-INTERCALの作成者が優先順位の欠如を目標として設定することを忘れないでください)。
- 各プログラムコマンドは、プログラムの起動時に実行される確率に設定できます。 さらに、特定のタイプの後続のコマンドまたは変数の変更の実行をブロックするコマンドがあります。
- 数字はローマ字表記で表示され、コンパイラがサポートする任意の言語で1桁の単語で入力されます。 文字の入力/出力は、コンパイラごとに異なる方法で実装されており、いずれにしてもここで説明するにはあまりにもひどいものです。
そして今日、INTERCALに忠実でテクノマゾヒストのランクを誇りに思っている人々が残っています-この素晴らしい言語でオペレーティングシステムのソースコードを投げ出す人もいれば 、INTERCALがPerlより優れていることを証明する人もいます:
- より読みやすい変数名(INTERCALでは、変数には名前はなく、数字のみがあります)。
- その型の変数の正確なプレフィックス(。and:-16および32ビット整数、および;-16および32ビット整数の配列);
- 釘のスクラップ(つまり、括弧-INTERCALでの代わりに、一重引用符と二重引用符);
- 操作の優先順位に関する非常に単純なルール(不在よりも単純なものは何ですか?);
- INTERCALにはPerlの拡張機能を必要とする組み込みのものがあります。たとえば、ローマ数字などです。
- プログラムではなくユーザーへの方向付け(ほとんどの言語とは異なり、入力はWRITE INコマンドで実行され、出力はREAD OUTです)。
- 最後に、プログラミングプロセス自体が楽しいはずです。 Perlで15分で記述できるプログラムは、INTERCALで数日かかります-どの言語が優れているかは明らかです;-)