ほとんどの手続き型言語の基本はほとんど同じです。
彼らは提案する:
- スカラーデータ型:通常、ブール値、整数、浮動小数点数、および文字
- 複合データ型:配列(文字列は特殊なケースです)および構造
- 基本的なコード構成:スカラー上の算術演算、配列/構造体へのアクセス、割り当て
- 単純な制御構造:if-then、if-then-else、while、forループ
- コードブロックのパッケージ:関数、パラメーター付きプロシージャ
- スコープ:識別子が特定の意味を持つ領域
これを理解すれば、地球上の言語の90%を十分に把握できます。これらの言語の理解を少し難しくしているのは、人々が同じ基本的なことを言うのに使用する信じられないほど多様な奇妙な構文です。奇数の句読点を含む簡潔な表記法を使用するものもあります(APLは極端です)。多くのキーワードを使用するものもあります(COBOLは優秀な代表者です)。それは大した問題ではありません。重要なのは、言語がそれ自体で十分に完成していて、髪を引き裂かずに複雑なタスクを実行できる場合です。(Windows DOSシェルスクリプトで深刻な文字列ハッキングをコーディングしてみてください。チューリングは可能ですが、すべてが本当に悪いです)。
より興味深い手続き言語の提供
- ネストされたスコープまたはレキシカルスコープ、名前空間
- 動的なストレージ割り当てにより、あるエンティティが別のエンティティを参照できるようにするポインター
- 関連コードのパッケージ化:パッケージ、メソッドを持つオブジェクト、特性
- より洗練された制御:再帰、継続、クロージャ
- 特殊な演算子:文字列と配列の演算、数学関数
技術的には言語のプロパティではなく、そのような言語が存在するエコシステムのプロパティですが、開発ツールの一部として簡単にアクセスできるか、その言語で提供されるライブラリです。幅広いライブラリ機能を備えていると、ライブラリの機能を再発明する必要がないため、アプリケーションの作成が単純化/高速化されます。JavaとC#はそれ自体で優れた言語であると広く考えられていますが、JavaとC#が本当に役立つのは、それらに付属する巨大なライブラリと、簡単に入手できる拡張ライブラリです。
理解するのが難しい言語は非手続き型です:
- 割り当ても副作用もない純粋に機能的な言語
- シンボリック計算と統合が発生するPrologなどの論理言語
- パターンマッチング言語。問題に一致する形状を指定します。多くの場合、アクションは一致によってトリガーされます。
- 関係言語を指定し、方程式を自動的に解くことができる制約言語
- すべてが並行して実行されるハードウェア記述言語
- SQL、色付きペトリネットなどのドメイン固有の言語。
言語には2つの主要な表現スタイルがあります。
- テキストベース。識別子はエンティティに名前を付け、情報フローは識別子を使用してエンティティに名前を付ける式で暗黙的にエンコードされます(Java、APL、...)
- グラフィカル、エンティティはノードとして描画され、エンティティ間の関係はそれらのノード間の明示的な円弧として描画されます(UML、Simulink、LabView)
グラフィカル言語では、多くの場合、ノードおよびアークの注釈としてテキストのサブ言語を使用できます。Odderグラフィカル言語では、ノードおよびアーク上でグラフ(テキスト付き)を再帰的に使用できます。本当に奇妙なグラフィカル言語は、注釈グラフが注釈されているグラフを指すことを可能にします。
これらの言語のほとんどは、非常に少数の計算モデルに基づいています。
- ラムダ計算(Lispおよびすべての関数型言語の基礎)
- ポストシステム(または文字列/ツリー/グラフの書き換え手法)
- チューリングマシン(状態の変更と新しいメモリセルの選択)
ほとんどの業界が手続き型言語と複雑な制御構造に重点を置いているため、このカテゴリの興味深い言語の1つをよく学べば、特に何らかのオブジェクト指向が含まれていれば、あなたは大いに役立ちます。
特にすばらしい本、「コンピュータプログラムの構造と解釈」からSchemeを学ぶことを強くお勧めし
ます。これは、これらすべての基本概念を説明しています。このことを知っていれば、他の言語は間抜けな構文を除いてかなり簡単に思えます。