コンピューター ウィンドウズ インターネット

エンジニアリングソリューションのプログラミング言語。 プログラミング言語

ウィキペディアの資料

プログラミング言語-コンピュータプログラムを記録するために設計された正式なサインシステム。 プログラミング言語は、定義する語彙、構文、および意味規則のセットを定義します 外観実行者(通常はコンピューター)がその制御下で実行するプログラムとアクション。

同時に、1940年代に電気デジタルコンピュータが登場し、最初の高級コンピュータプログラミング言語と見なすことができる言語が開発されました。プランカルキュールは、1945年から1945年までの期間にドイツのエンジニアK.ツーゼによって作成されました。

1950年代半ばから、Fortran、Lisp、Cobolなどの第三世代言語が登場し始めました。 このタイプのプログラミング言語はより抽象的です(これらは「の言語」とも呼ばれます 上級」)そして普遍的であり、特定のハードウェアプラットフォームとそれに使用される機械命令に厳密に依存することはありません。 高水準言語のプログラムを実行することができます( 少なくとも理論的には、実際には、通常、この言語の翻訳者(プログラムを機械語に翻訳するツール)が存在するコンピューターには、特定のバージョンまたは言語の実装の方言がいくつかあります。プロセッサで実行できます)。

リストされた言語の更新されたバージョンはまだ開発中です。 ソフトウェア、そしてそれらのそれぞれは、プログラミング言語のその後の開発に一定の影響を及ぼしました。 その後、1950年代後半に、アルゴルが登場しました。これは、この分野での多くのさらなる発展の基礎としても機能しました。 初期のプログラミング言語の形式と使用は、インターフェイスの制約に大きく影響されていたことに注意してください。

完璧

視覚的(グラフィック)プログラミング言語は、テキストとしてプログラムを「書く」プロセスが「描画」するプロセス(図の形でプログラムを設計する)に置き換えられる重要な作業領域になりつつあります。コンピューターの画面上。 視覚言語は、人によるプログラムロジックの可視性とより良い認識を提供します。

プログラミング言語の標準化

広く使用されている多くのプログラミング言語用に国際標準が作成されています。 特別な組織は、対応する言語の仕様と正式な定義を定期的に更新および公開しています。 そのような委員会の枠組みの中で、プログラミング言語の開発と近代化は継続され、既存および新規の言語構造の拡張またはサポートに関する問題が解決されます。

データ型

最新のデジタルコンピュータはバイナリであり、データはバイナリ(バイナリ)コードで保存されます(ただし、他の数値システムでの実装も可能です)。 このデータは通常、高レベルの概念を表す実際の情報(名前、銀行口座、測定値など)を反映しています。

プログラムでデータを整理するための特別なシステムは 型システムプログラミング言語; 型システムの開発と研究は型理論として知られています。 言語はに分けることができます 静的型付け動的型付け、 としても 型なし言語(例えば、 前方へ).

静的に型付けされた言語は、次の言語にさらに細分化できます 必須の宣言、すべての変数と関数の宣言には必須の型宣言があり、言語は 推測されるタイプ。 動的に型付けされた言語が呼ばれることもあります 潜在的にタイプされた.

データ構造

高水準言語の型システムでは、複雑な複合型、いわゆるデータ構造を定義できます。 通常、構造データ型は、基本(アトミック)型と以前に定義された複合型の直積として形成されます。

基本的なデータ構造(リスト、キュー、ハッシュテーブル、バイナリツリー、およびペア)は、多くの場合、高級言語の特別な構文構造で表されます。 このようなデータは自動的に構造化されます。

プログラミング言語の意味論

プログラミング言語のセマンティクスを定義するには、いくつかのアプローチがあります。

次の3つの中で最も普及している種類:運用、派生(公理)および外延(数学)。

  • フレームワーク内でセマンティクスを記述する場合 運用アプローチでは、プログラミング言語構造の実行は通常、架空の(抽象)コンピューターの助けを借りて解釈されます。
  • 公理的意味論は、論理の言語を使用して言語構造を実行し、事前条件と事後条件を設定した場合の結果を説明します。
  • 歯科セマンティクスは、数学に典型的な概念(集合、対応、および判断、ステートメントなど)で動作します。

プログラミングパラダイム

プログラミング言語は、1つまたは別の基本的なコンピューティングモデルとプログラミングパラダイムに従って構築されます。

ほとんどの言語は、フォンノイマン型コンピュータアーキテクチャによって与えられた命令型のコンピューティングモデルに焦点を合わせているという事実にもかかわらず、他のアプローチがあります。 スタックコンピューティングモデル(Forth、Factor、PostScriptなど)と機能(Lisp、Haskell 、、、 REFAL、ソビエト数学者A. A. Markov Jr.によって導入されたコンピューティングモデルに基づくREFAL)を備えた言語に言及できます。など)およびロジックプログラミング(Prolog)。

現在、宣言型およびビジュアルプログラミング言語も積極的に開発されており、問題固有の言語を開発するための方法とツールも開発されています(言語指向プログラミングを参照)。

言語を実装する方法

プログラミング言語は、コンパイル、インタプリタ、および埋め込み可能として実装できます。

コンパイラ(特別なプログラム)の助けを借りてコンパイルされた言語のプログラムは、特定のタイプのプロセッサのマシンコード(一連の命令)に変換(コンパイル)され、実行用に起動できる実行可能モジュールにアセンブルされます別のプログラムとして。 つまり、コンパイラは、プログラムのソースコードを高級プログラミング言語からプロセッサ命令のバイナリコードに変換します。

プログラムが通訳言語で書かれている場合、インタプリタは事前の翻訳なしで原文を直接実行(通訳)します。 プログラムは元の言語のままであり、通訳なしで実行することはできません。 これに関連して、コンピューターのプロセッサーは、マシンコードのインタープリターと呼ぶことができます。

コンパイルされた言語とインタプリタされた言語への分割は条件付きです。 したがって、Pascalなどの従来のコンパイル言語の場合は、インタプリタを作成できます。 さらに、最新の「純粋な」インタプリタのほとんどは、言語構造を直接実行しませんが、それらを高レベルの中間表現にコンパイルします(たとえば、変数の間接参照とマクロ展開を使用)。

インタプリタされた言語であれば、コンパイラを作成できます。たとえば、元々インタプリタされていた言語Lispは、制限なしでコンパイルできます。 実行時に生成されたコードは、実行時に動的にコンパイルすることもできます。

原則として、コンパイルされたプログラムはより高速に実行され、 追加プログラム、すでに機械語に翻訳されているため。 同時に、プログラムテキストを変更するたびに再コンパイルする必要があるため、開発プロセスが遅くなります。 さらに、コンパイルされたプログラムは、同じタイプのコンピューターでのみ実行でき、通常は、コンパイラーが設計された同じオペレーティングシステムで実行できます。 作成するには 実行可能ファイル別のタイプのマシンの場合は、新しいコンパイルが必要です。

インタプリタ言語にはいくつかの特定のものがあります 追加機能(上記参照)さらに、変更後すぐにプログラムを実行できるため、開発が容易になります。 通訳言語プログラムは、多くの場合、で実行できます。 他の種類追加の労力なしでマシンとオペレーティングシステム。

ただし、インタプリタプログラムは、コンパイルされたプログラムよりも実行速度が著しく遅く、インタプリタプログラムなしでは実行できません。

このアプローチは、ある意味で、インタープリターとコンパイラーの両方の利点を利用することを可能にします。 インタプリタとコンパイラの両方を備えた言語があることに注意してください(Forth)。

低水準プログラミング言語

最初のコンピューターは、バイナリマシンコードでプログラムする必要がありました。 ただし、この方法でのプログラミングは、かなり時間のかかる重い作業です。 このタスクを簡素化するために、低レベルのプログラミング言語が登場し始めました。これにより、機械命令を人間が理解できる形式で設定できるようになりました。 それらをに変換するには バイナリコード特別なプログラム-翻訳者が作成されました。

低水準言語の例はアセンブリ言語です。 低水準言語は特定のタイプのプロセッサに焦点を当てており、その機能を考慮に入れているため、アセンブラプログラムを別のハードウェアプラットフォームに移植するには、ほぼ完全に書き直す必要があります。 コンパイラごとにプログラムの構文にも一定の違いがあります。 確かに、AMDとIntelのコンピューターの中央処理装置は実質的に互換性があり、特定のコマンドのみが異なります。 ただし、ビデオカードや電話などの他のデバイス専用のプロセッサには大きな違いがあります。

低水準言語は通常、小さなシステムプログラム、デバイスドライバー、非標準機器とのインターフェイスモジュール、特殊なマイクロプロセッサーのプログラミングを作成するために使用されます。最も重要な要件は、コンパクトさ、速度、および 直接アクセスハードウェアリソースに。

高水準プログラミング言語

特定のコンピュータアーキテクチャの機能は考慮されていないため、作成されたアプリケーションはコンピュータ間で簡単に転送できます。 ほとんどの場合、特定のコンピュータアーキテクチャとオペレーティングシステム用にプログラムを再コンパイルするだけで十分です。 そのような言語でプログラムを開発する方がはるかに簡単で、エラーも少なくなります。 プログラムの開発時間は大幅に短縮されます。これは、大規模なソフトウェアプロジェクトで作業する場合に特に重要です。

現在、開発者コミュニティでは、メモリやレジスタに直接アクセスできるプログラミング言語、またはアセンブラインサートを備えたプログラミング言語は、抽象度の低いプログラミング言語と見なす必要があると考えられています。 したがって、2000年より前に高級言語と見なされていたほとんどの言語は、もはや高級言語とは見なされません。

一部の高級言語の欠点は ビッグサイズ低水準言語のプログラムと比較したプログラム。 一方、アルゴリズム的および構造的に複雑なプログラムの場合、スーパーコンパイルを使用する場合、高級言語の側に利点がある可能性があります。 高水準言語のプログラムのテキストは小さくなりますが、バイト単位で取得すると、元々アセンブラーで記述されたコードはよりコンパクトになります。 したがって、高級言語は主に、大量のメモリを搭載したコンピューターやデバイス用のソフトウェアを開発するために使用されます。 また、プログラムのサイズが重要な他のデバイスのプログラミングには、アセンブラのさまざまなサブタイプが使用されます。

使用される記号

最新のプログラミング言語は、ASCIIを使用するように設計されています。つまり、すべての言語が利用可能です。 グラフィック ASCII文字は、言語構造を書くための必要十分条件です。 マネージャー ASCII文字使用制限:キャリッジリターンCR、ラインフィードLF、および水平タブHT(場合によっては垂直タブVTおよび次のページFF)のみが許可されます。

6ビット文字の時代に登場した初期の言語は、より限定されたセットを使用していました。 たとえば、Fortranのアルファベットには49文字(スペースを含む)があります。AB C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = +-* /()。 、$ ":

注目すべき例外は、多くの特殊文字を使用するAPL言語です。

非ASCII文字(KOI8-R文字やUnicode文字など)の使用は実装に依存します。コメントおよび文字/文字列定数でのみ許可される場合もあれば、識別子でも許可される場合があります。 ソ連では、すべてのキーワードがロシア語で書かれている言語がありましたが、そのような言語はあまり人気がありませんでした(例外は組み込みプログラミング言語1C:エンタープライズです)。

使用される文字セットの拡張は、多くのソフトウェア開発プロジェクトが国際的であるという事実によって制約されています。 一部の変数の名前がロシア語の文字で書かれ、他の変数の名前がアラビア語で書かれ、さらに他の変数の名前が漢字で書かれているコードを操作するのは非常に困難です。 同時に、新世代のプログラミング言語(Delphi 2006、Java)は、テキストデータを処理するためにUnicodeをサポートしています。

プログラミング言語のカテゴリー

数学ベースのプログラミング言語

これらは、セマンティクスが 直接実際のプログラムを開発するためのより実用的な言語となるために、(整合性を侵害することなく)わずかに適合されたいくつかの数学的モデルの実施形態。 このカテゴリに分類される言語はごくわずかです。ほとんどの言語は、チューリングマシンに効率的に翻訳できることを優先して設計されており、一部の言語しかありません。 サブセットその構成において、1つまたは別のものを具体化する 数学モデル- から

60年代半ばまで、パーソナルコンピュータは、特別なタスク専用に使用され、一度に1つのタスクしか実行しない非常に高価なマシンでした。

当時のプログラミング言語、およびそれらが使用されていたコンピューターデバイスは、特定の計画のタスクを実行するためにのみ開発されました。たとえば、科学計算用ではありません。 上で述べたように、マシンは非常に高価な喜びであり、一度に1つのタスクしか実行されなかったため、時間は高価であると見なされました。したがって、プログラムの実行速度が最前線にありました。

しかし、60年代にコストが下がり始め、小さな会社でもこの喜びを味わえるようになりました。 さらに、速度が向上し、マシンはタスクを実行せずに長時間アイドル状態になりました。 そしてこれを止めるために、タイムシェアリングシステムが導入されました。

これらのシステムのプロセッサ時間は、いわば「カット」されており、ユーザーはこの時間の短いセグメントを交互に受け取ることができました。 コンピュータデバイスははるかに速く動作し始め、ユーザーはシステムだけで作業しているように端末を感じることができました。 次に、デバイスは1つではなく複数のタスクを同時に実行したため、アイドル状態が少なくなりました。 タイムシェアリングは、ハードウェア時間のコストを大幅に削減しました。これはすべて、1つのデバイスを1人のユーザー、または2人のユーザーではなく、数百人で共有できるという事実のおかげです。

したがって、電力がより安く、よりアクセスしやすくなると、プログラミング言語を作成した人々は、実行速度ではなく、ソフトウェアをより便利に書くことについてますます考え始めました。 「小さな」操作、つまり、デバイスのデバイスによって直接実行されたアトミックタイプの操作は、より「大量の」高レベルの操作と単一の構造に結合され、より便利で簡単になりました。ユーザーがアクティビティを実行します。

プログラミング言語とは何ですか?

ここで、この質問に明確な答えを示します。 プログラミング言語は、たとえば、実行者にとってより便利な形式でアルゴリズムを記述することを目的とした正式な記号システムです。 パソコン。 プログラミング言語には、作成に使用されるセマンティック、構文、およびレキシカルルールのパッケージが含まれています コンピュータープログラム。 このような言語の助けを借りて、プログラマーは、PCが応答するイベント、情報の保存と送信の方法、およびさまざまなタイプのこれらの状況で実行する必要のあるアクションを正確に決定できます。

最初のプログラマブルデバイスの作成中に、約3,000のプログラミング言語が発明されました。 それらの数は毎年増加し、リストには新しいものが補充されます。 それらを開発した少数のクリエイターだけが使用できる言語もあれば、多数のユーザーに知られるようになる言語もあります。 彼らの仕事では、プログラマーは10以上を使用します さまざまな言語プログラミング。

プログラミング言語は何のためにありますか?

PCを実行するプロセスは、プログラムの実行です。 もっと言えば 分かりやすい言葉つまり、特定の順序で続くコマンドのバッチです。 ゼロと1で構成されるマシンタイプ命令のタイプは、中央処理装置が実行する必要のあるアクションを示します。 これから、次のようになります。実行するアクションのシーケンスをPCに設定するために、対応するコマンドのバイナリタイプコードのシーケンスが設定されます。 機械語では、ソフトウェアは多くの命令で構成されています。 そのようなソフトウェアを書くことは、骨の折れる、重くて退屈なものです。 プログラマは、各プログラムのバイナリタイプコードの1と0の組み合わせを知っている必要があります。さらに、実行に使用されるデータアドレスのバイナリタイプコードを覚えている必要があります。 人間の自然言語に近い言語でソフトウェアを作成し、PCにそのプログラムをマシンタイプコードに変換させる方がはるかに簡単です。 これは、特にソフトウェアを書くことを目的としたプログラミング言語がどのように登場したかです。

今はたくさんあります 異なる言語プログラミング。 多くの問題を解決するために、それぞれを適用できます。 それぞれの言語には独自の機能、特定の種類のタスクへの方向性が備わっており、オブジェクトや概念を説明する独自の方法もあるため、各分野のスペシャリストは、問題を解決するためにどのプログラミング言語を使用するかを知っています。多数の問題を解決するために使用されます。

プログラミング言語は2つのグループに分けられます

低レベルの言語と高レベルの言語があります。

最初のグループにはアセンブリ言語が含まれ、命令記号はすばやく明確に記憶される記号の形式で使用されます。 記号バイナリタイプの一連のコマンドの代わりに、コマンドの実行時に使用されるバイナリタイプのデータのアドレスの代わりに、プログラマーが選択した名前と文字形式のこれらのデータの名前が書き込まれます。取られます。 このようなプログラミング言語には、autocodeまたはニーモニックコードという別の名前があります。

しかし、高レベルのプログラミング言語は、それらを作成する人によってプログラムに最も頻繁に使用されます。 このような言語は、原則として、人間の言語と同じように、独自のアルファベット、つまり言語で使用される多数の記号を持っています。 これらの文字は、言語のキーワードを形成するために必要です。 各キーワードには、私たちが慣れ親しんでいる言語と同じように、アルファベットで構成された単語に独自の機能があります。 キーワードは、言語の構文規則を使用して互いに文に結合されます。 すべての文のそれぞれは、PCが実行する一連のアクションに責任があります。

高レベルのプログラミング言語は、PCとユーザーの間のリンクであり、ユーザーが最も便利な方法でPCと通信できるようにします。 多くの場合、この言語は問題を解決するための正しい方法を選択するのに役立ちます。

専門家は、高度なプログラミング言語でソフトウェアを書き始める前に、問題を解決するためのアルゴリズムを作成します。つまり、この問題を解決するために実行する必要のある段階的なアクションプランを作成します。 したがって、アルゴリズムの予備コンパイルを必要とするプログラミング言語は、アルゴリズム型言語と呼ばれます。

さて、ここに来て、私たちは主なことを言うことができます。 次に、プログラミング言語とは何かを説明します。

プログラミング言語は何ですか

Fortran

50年代半ばに、科学者はプログラミング言語を作成し始めました。 そして、このタイプの最初の言語はFortranと呼ばれ、1957年に開発されました。 これは、デジタルコンピュータを使用して科学的および技術的なタイプの問題を解決するためのアルゴリズムを説明するために使用されます。 さらに、最初のコンピューティングユニットと同様に、このタイプの言語は自然科学と数学計算を実行するために使用されました。 改良されたタイプのこの言語は、私たちの時代まで生き残っており、高レベルの現代言語の中で、科学研究で最も使用されています。 今日の最も一般的なバリアントは、Fortran-I2、Fortran-I4、EASICFortranおよびそれらの一般化です。

ALGOL

私たちはプログラミング言語のテーマを続けています。 すでにご存知のように、1958年から1960年に登場したAlgolなどのプログラミング言語について説明します。 1964年から1968年に改良されたため、Algol-68が登場しました。このタイプの言語は、アメリカとヨーロッパの科学者を含む委員会によって開発され、高レベルの言語に起因するとされています。 このタイプの言語を使用すると、簡単に次のように翻訳できます。 プログラムコマンド代数式。 アルゴルはヨーロッパだけでなくロシアでも人気がありました。 しばらくして作成されたすべてのプログラミング言語で、このタイプの言語は顕著な影響を及ぼし、特に、これはPascal言語に影響を及ぼしました。 このタイプの言語は、原則として、Fortran言語と同様に、科学的および技術的なタイプの問題を解決するために作成されました。 さらに、この言語は、プログラミングの基本、つまりソフトウェアのコンパイル技術を教える手段として使用されました。

COBOL

Cobolプログラミング言語は1959-1960年に作成され、この言語は第3世代に属しています。 まず第一に、それはビジネスのためのアプリケーションの開発と経済的なタイプの問題の解決のために、銀行データを処理するために、保険会社と他の機関のために意図されています。 Cobolの「発明者」はGraceHopperです。 通常、この言語の作成者の目標の1つは、 英語。 同時に、プログラミング言語は、当時、データ構造とファイルを使用してアクティビティを実行するための優れた手段を備えていました。これにより、ビジネスアプリケーションでの長寿命が実現しました。 少なくとも米国では、それは確かです。

舌足らずの発音

次に並んでいるのはLispプログラミング言語です。 Lispプログラミング言語は、Cobolプログラミング言語とほぼ同時に開発されました。 この言語は、言語の主要なデータ構造であるシンボルのシステム線形リストのプログラム表現に基づいています。 これは、Fortranに次ぐ2番目に古いプログラミング言語です。 シンボルの形で情報を処理するために広く使用されており、人間の脳の活動を模倣するソフトウェアを作成するために使用されます。

Lispで作成されたプログラムは、式のシーケンス、つまりフォームで構成されています。 プログラムの結果は、これらの式の計算です。これらの式は、このタイプの言語の主要な構造の1つであるリストの形式で記述されています。 Lispプログラムの主な意味は、文字空間での「生活」です。

ベーシック

BASICプログラミング言語は、60年代半ばに米国のダートマス大学のプログラマーによって開発されました。 この言語は、一部はFortran 2に、一部はAlgol-60に基づいており、タイムシェアリングモードでの作業に便利な追加も行われ、数年後にはテキスト処理と行列演算に便利になりました。 この種のプログラミング言語は、元々、多数の端末をサポートするGE-265メインフレームに実装されていました。 当初は、一般的な信念に反して、コンパイル型言語でした。

この種のプログラミング言語は、学生がタイムシェアリング端末を使用してプログラムを作成できるように設計されています。 これは、問題のある古い言語に関連する問題を解決するためだけでなく、プログラムの速度には関心がないが、使用の可能性に関心がある「単純な」ユーザーが使用することを目的として作成されました。タスクを解決するためのPC。 ほとんどの初心者プログラマーは、このタイプの言語が単純であるため、プログラミングの旅をそれから始めます。

Forthプログラミング言語は、60年代後半から70年代前半に登場しました。 このタイプの言語は、作成者のムーア・チャールズがアリゾナ天文台の電波望遠鏡を制御することを目的としたソフトウェアを作成した後、さまざまな種類のシステムを制御するタスクで使用されました。

柔軟性、双方向性、「発明」の容易さなどの多くの特性により、Forthは、応用研究やツールタイプのツールの作成において効果的で魅力的な言語になっています。 この種のプログラミング言語の明らかなアプリケーションは、組み込み制御システムです。 上記のすべてに加えて、彼はさまざまな種類のオペレーティングシステムを実行しているPCのプログラミングにも応用できました。

パスカル

トピックを続けると、Pascalのようなタイプのプログラミング言語に注意することを忘れることはできません。 パスカルは1972年に作成され、かつては偉大な数学者であり、世界初の算術演算装置の発明者であったブレーズパスカルにちなんで名付けられました。 当然のことながら、スイスの科学者、コンピューター科学者のニコラウスワースは、この言語の作成者と見なされています。 このイノベーションは、プログラミング手法を教えるために使用されました。 Pascalはプログラミング言語です 一般的用途.

そのすべての機能の中で、主要な機能を呼び出すことができます-これは最も厳密なタイピングであり、構造型のプログラミングツールの可用性です。 パスカルはそのような最初の言語の1つでした。 Pascalプログラミング言語は、プログラムを正しく作成する方法と問題を解決する方法を開発する方法を教えます。また、問題で使用されるデータを表現および整理するための適切なオプションを選択する方法を学ぶのにも役立ちます。 Pascal言語は、1983年から導入されています。 トレーニングコースアメリカの中等教育学校の情報学。

プログラミング言語のトピックを続けて、私たちは別のタイプの言語、つまりAda言語について話すことにしました。 Adaプログラミング言語は、70年代後半にパスカルから作成され、才能のある女性数学者であるAdaLovelaceにちなんで名付けられました。 1843年にチャールズバベッジの分析ユニットの可能性を全世界に説明したのはこの才能のある女性でした。 このタイプの言語は、米国国防総省の命令によって開発され、もともとは宇宙飛行制御の問題を解決するために使用されていました。

Adaプログラミング言語は、モジュール式の構造化されたオブジェクト指向プログラミング言語であり、高レベルの並列プロセスプログラミングツールが含まれています。 構文 プログラミング言語このタイプはPascalとAlgolから取得され、論理的かつ厳密なスタイルで拡張および実行されています。 Adaは強い型付けを持つプログラミング言語であり、型を持たないオブジェクトでの作業を完全に排除し、自動変換を最小限に抑えます。

Cプログラミング言語は、プログラマーの間で群を抜いて最も人気があり、使用されています。 このタイプのプログラミング言語は、BCPLとBの2つの言語に由来します。MartinRichardsは、システムソフトウェアとコンパイラの作成を目的とした言語として1967年にBCPLを作成しました。 それが何であるか、以下に説明します。 Ken Thompsonは、1970年にPCでDEC PDP-7を使用して、以前のバージョンのUNIXを構築しました。 第1言語と第2言語の両方で、変数はタイプに分割されませんでした。各データ値のメモリには1つの単語がありました。

Cプログラミング言語は、1972年にDECPDP-11PCに最初に実装されました。 しかし、彼はなんとか彼の人気と名声を得ることができました オペレーティング·システム UNIX。 今日のすべての主要なオペレーティングシステムは、CまたはC++で記述されています。 Cプログラミング言語は、数十年後、多数のPCで利用できるようになりました。 ちなみに、ハードウェアから完全に独立していることは注目に値します。

従来のプログラミング言語では、C言語は70年代後半になりました。 このタイプの言語には、あらゆる種類の最新のPCで使用される柔軟なソフトウェアを作成する機能を提供する豊富なツールが装備されています。

プロローグ

さて、終わりになりました。 プログラミング言語に関するトピックは、この分野の最新言語についての話で終わります-そしてそれはPrologと呼ばれています。 このタイプの言語は、将来のプログラミング言語と見なされており、70年代初頭に作成されました。 マルセイユ大学の専門家が開発に参加しました。 彼らはそれを「論理言語でのプログラミング」という言葉から名付けました。 プログラミング言語は、数理論理学の法則に基づいて作成されました。 このタイプの言語は、上記で説明したプログラミング言語とは異なり、アルゴリズムではなく、いわゆる記述言語、つまり記述言語に属します。

それでは、コンパイラとインタプリタについて話しましょう。

コンパイラとインタプリタ

プログラムを書くのに便利な言語を開発するだけでは十分ではありません。 各言語には通訳が必要です。 特別プログラム-翻訳者。

つまり、トランスレータは、あるプログラミング言語で作成されたソフトウェアを別のプログラミング言語のソフトウェアに翻訳するように設計されたプログラムです。 この翻訳プロセスは、翻訳と呼ばれます。 トランスレータの例は、プログラムでもあるコンパイラです。 これは、任意の言語で記述されたソフトウェアをマシンタイプコードのソフトウェアに翻訳することを目的としています。 このプロセスはコンパイルと呼ばれます。

翻訳とプログラム実行のプロセスを組み合わせることができる別の方法があり、それは解釈と呼ばれます。 プロセスの本質は次のとおりです。最初にマシンタイプコードに変換され、次にソフトウェアの最初の行が実行されます。 最初の行の実行が完了すると、2番目の行の変換が開始されます。

したがって、このことから、解釈は行ごとの翻訳と元のプログラムを対象としたプログラムであると結論付けることができます。

さて、今日はこれですべてのようです。 プログラミング言語そしてそれらが何であるか。

よく知られています 情報技術現代生活の中で最も急速に成長している分野の1つです。 新しいテクノロジー、プロジェクト、名前、略語はほぼ毎日登場します。 そして、進歩を追求する上で、それに追いつくために、少しの間立ち止まり、つま先立ちして周りを見回すことが役立つ場合があります。 地平線を見て、歴史を思い出し、未来について考えてください...新鮮なエネルギーで仕事に戻るために、新しいテクノロジーを習得し、あなた自身の効率と幸福を高めてください。 再びつま先立ちしたくなるまで...

この記事を書くきっかけとなったのは、Microsoftの新しい.NETプラットフォームの主要コンポーネントの1つであるC#を鋭く批判した投稿の後に、dotSITEフォーラムの1つで話題になったディスカッションです。 このメッセージには、Microsoft全般、特に(Microsoftを批判するものが何もないと言っているのではなく、この批判がすでにかなり歯を食いしばっているというだけの)、すでにかなり平凡な批判が含まれていました。特にC#に関するステートメント。 その後の議論の過程で、いくつかの奇妙な発言がなされましたが、いくつかの質問は手つかずのままでした。 このすべてが私に、特定のプログラミング言語の独占性についての意見のキャリアを何らかの方法で「調整」しようとする記事を書くように促しました。 さまざまな言語の開発の歴史的な概要を示し、いくつかの一般的な傾向を例を挙げて説明します。 おそらく、上記のような議論を行うことの無益さを誰かに納得させることができます。 私は客観的である(私はそうしようとしますが)、または完全であるふりをしません。 それは「つま先立ちで周りを見回す」試みにすぎません...

1.最初の世界共通言語

それでは、始めましょう。 コンピュータ技術の発展の起源に目を向けましょう。 それらのための最初のコンピュータとプログラムを思い出しましょう。 これは機械語で直接プログラミングする時代であり、パンチカードとパンチテープが情報の主なキャリアでした。 プログラマーは、マシンのアーキテクチャを完全に理解する必要がありました。 プログラムは非常に単純でした。これは、第一に、これらのマシンの機能が非常に限られていること、第二に、プログラムを機械語で直接開発およびデバッグすることが非常に複雑であることが原因でした。 同時に、この開発方法により、プログラマーはシステムに対して信じられないほどの力を発揮しました。 なりました 可能な使用現代の開発者が夢にも思わなかったような独創的なアルゴリズムとプログラムの編成方法。 たとえば、自己変更コードなどの機会を利用することができます(そして利用されました!) コマンドのバイナリ表現の知識により、一部のデータを個別に保存するのではなく、コマンドとしてコードに埋め込むことができる場合がありました。 そしてそれは遠く離れています 全リストテクニック、少なくとも1つを所有すると、すぐにエクストラクラスの「達人」のレベルに昇格します。

2.アセンブラー

最初の重要なステップは、アセンブリ言語への移行であるように思われます(少し叙情的な逸脱を許しましょう: 英語名アセンブリ言語、またはアセンブラは、上記で使用された用語とまったく同じようにロシア語に翻訳されます。 この場合、初心者は、言語がアセンブラーという名前の特定の人にちなんで名付けられているという印象を受けます。 かなりおかしな状況ですね)。 一見あまり目立たないステップ、つまりマシン命令のシンボリックコーディングへの移行は、実際には非常に重要でした。 プログラマーは、ハードウェアレベルでコマンドをエンコードする複雑な方法を掘り下げる必要がなくなりました。 さらに、多くの場合、本質的に同一のコマンドは、パラメーターに応じて完全に異なる方法でエンコードされます(最近のコンピューターの世界でよく知られている例は、Intelプロセッサーでのmov命令のコーディングです。完全に異なるエンコードされたコマンドオプションがいくつかあります。選択実行される操作の本質は同じですが、1つまたは別のオプションの内容はオペランドによって異なります。2番目のオペランドの内容(または値)を最初のオペランドに入れます。 マクロとラベルを使用する可能性もあり、プログラムの作成、変更、およびデバッグも簡素化されました。 移植性の類似点さえありました-バイナリ互換性を保証する必要はありませんでしたが、同様の命令システムとそれらのためのいくつかの共通のアセンブラを備えたマシンのファミリー全体を開発することが可能でした。

同時に、新しい言語への移行には、いくつかの否定的な(少なくとも一見したところ)側面がありました。 上記のような巧妙なトリックを使うことはほとんど不可能になりました。 さらに、プログラミング開発の歴史の中で初めて、プログラムの2つの表現がここに登場しました。ソーステキストとコンパイルされた形式です。 当初、アセンブラはニーモニックを機械語に変換するだけでしたが、一方を他方に簡単に変換したり、その逆を行ったりしていましたが、ラベルやマクロなどの機能が登場するにつれて、逆アセンブルはますます困難になりました。 アセンブラ時代の終わりまでに、両方向の自動翻訳の可能性は完全に失われました。 この点で、逆変換を実行する特別な逆アセンブラプログラムが多数開発されていますが、ほとんどの場合、コードとデータを分離することはほとんどできません。 さらに、すべての論理情報(変数の名前、ラベルなど)は永久に失われます。 高水準言語の逆コンパイルの問題の場合、問題に対する満足のいく解決策の例は非常にまれです。

3.Fortran

1954年、John Backusが率いる開発者グループが、IBMCorporationの内部でFortranプログラミング言語を作成しました。

このイベントの重要性を過大評価することはできません。 これは、最初の高級プログラミング言語です。 初めて、プログラマーはマシンアーキテクチャの特性から真に抽象化することができました。 を区別する重要なアイデア 新しい言語アセンブラから、サブルーチンの概念でした。 これを思い出してください 現代のコンピューターハードウェアレベルでサブルーチンをサポートし、適切なコマンドとデータ構造(スタック)をアセンブラレベルで直接提供します。1954年には、これは完全に異なりました。 したがって、Fortranのコンパイルは決して簡単なプロセスではありませんでした。 さらに、言語の構文構造は、主にスペースが構文単位としてまったく使用されなかったという事実のために、機械処理にとって非常に困難でした。 これにより、次のような隠れたエラーが発生する可能性が高くなりました。

Fortranでは、次の構文は「インデックスが1から100に変わるときのラベル10までのforループ」を記述しています。DO10 I = 1,100ここでコンマをドットに置き換えると、代入ステートメントが得られます。DO10I = 1.100 Itそのようなエラーがロケットを開始時に爆発させたと言われています!

科学計算にはFortranが使用されました(そして今日でも使用されています)。 多くの使い慣れた言語構造と属性がないという問題があり、コンパイラーは実際には構文的にチェックしません。 適切なプログラムセマンティックの正確さ(タイプマッチングなど)の観点から。 コードとデータを構造化する最新の方法はサポートしていません。 開発者自身もこれに気づいていました。 Backus自身によると、彼らは言語ではなくコンパイラを開発するという課題に直面していました。 プログラミング言語の独立した重要性の理解は後で来ました。

Fortranの導入は、アセンブラーの導入よりもさらに激しい批判にさらされました。 プログラマーは、コンパイラーの形で中間リンクを使用することによるプログラム効率の低下を恐れていました。 そして、これらの恐れは正当化されました。実際、優れたプログラマーは、小さな問題を手作業で解決するときに、コンパイルの結果として得られるコードよりも高速に動作するコードを作成する可能性があります。 しばらくすると、高級言語を使用しないと大規模なプロジェクトの実装は不可能であることが理解されました。 コンピュータの能力が高まり、以前は脅威と考えられていた効率の低下により、それを我慢することが可能になりました。 高水準言語の利点は非常に明白になり、開発者はますます完璧な新しい言語を作成するようになりました。

4.COBOL

1960年に、Cobolプログラミング言語が作成されました。 商用アプリケーションを作成するための言語として考案され、1つになりました。 何千もの応用商用システムがKobolで書かれています。 この言語の特徴は、商用アプリケーションに典型的な大規模なデータセットを効果的に処理できることです。 Cobolの人気は非常に高いため、現在でも(構造と設計において、Cobolは多くの点でFortranに似ています)、新しい方言とその実装が登場しています。 そのため、最近、Microsoft .NET互換のCobolの実装が登場しました。これには、おそらくオブジェクト指向言語のいくつかの機能を言語に導入する必要がありました。

1964年に、同じIBM企業がPL / 1言語を作成しました。これは、ほとんどのアプリケーションでCobolおよびFortranを置き換えることを目的としていました。 この言語は、非常に豊富な構文構造を持っていました。 例外処理と同時実行のサポートが初めて導入されました。 言語の構文構造は非常に複雑であることに注意してください。 スペースはすでに構文の区切り文字として使用されていますが、キーワードは予約されていません。 特に、次の行は完全に通常のPL/1ステートメントです。IFELSE=THEN THEN THEN; ELSE ELSE

このような機能のため、PL/1用のコンパイラの開発は非常に困難でした。 この言語は、IBMの世界以外では決して普及しませんでした。

6.ベーシック

1963年、ダートマス大学でBASIC(Beginners'All-Purpose Symbolic Instruction Code)プログラミング言語が作成されました。 この言語は、主に学習の手段として、また最初に学習されるプログラミング言語として考案されました。 解釈とコンパイルが簡単であるはずでした。 BASICは本当に人々がプログラミングを学ぶ言語になっていると言わなければなりません(少なくとも数年前はそうだったのですが、今ではこの役割はPascalに引き継がれています)。 最新のプログラミング概念をサポートするBASICの強力な実装がいくつか作成されています(最も明確な例はMicrosoft Visual Basicです)。

7アルゴル

1960年、PeterNaurが率いるチームがAlgolプログラミング言語を作成しました。 この言語は、アルゴルのような言語の家族全員を生み出しました(最も重要な代表者はパスカルです)。 1968年に登場 新しいバージョン言語。 最初のバージョンほど実用的なアプリケーションは見つかりませんでしたが、理論家の間で非常に人気がありました。 当時独特の特徴がたくさんあったので、とても面白かったです。

8. さらなる開発プログラミング言語

ここで、立ち止まって発言したいと思います。 上記の各言語の作成(Algolを除く可能性があります)は、いくつかの実用的な要件によって推進されました。 これらの言語は、後の開発の基盤を提供しました。 それらはすべて同じプログラミングパラダイムを表しています。 次の言語は、より深い抽象化に向けて、開発がさらに進んだものです。

後の言語に関する情報を、言語族の説明の形で提供します。 これにより、個々の言語間の関係をより正確に追跡できるようになります。

9.パスカルのような言語

1970年、NiklausWirthはPascalプログラミング言語を作成しました。 この言語は、構造化プログラミングで最初に広く使用された言語であるという点で注目に値します(厳密に言えば、最初の言語はAlgolでしたが、広く使用されていませんでした)。 初めて、無条件分岐演算子は、演算子が実行される順序を制御する上で基本的な役割を果たさなくなりました。 この言語では、強力な型チェックも導入され、コンパイル時に多くのエラーを検出できるようになりました。

この言語のマイナスの特徴は、プログラムをモジュールに分割するための手段がないことでした。 Wirthはこれを認識し、Modula-2言語(1978)を開発しました。この言語では、モジュールのアイデアが言語の重要な概念の1つになりました。 1988年に、オブジェクト指向機能を追加したModula-3が登場しました。 OberonとOberon-2は、PascalとModulaの論理的な続きです。 それらは、オブジェクトとコンポーネントの方向への動きによって特徴付けられます。

10.Cのような言語

1972年にカーニハンとリッチーによってCプログラミング言語が作成され、UNIXオペレーティングシステムを開発するための言語として作成されました。 Cは「ポータブルアセンブラ」と呼ばれることがよくあります。これは、構造化された制御構造と高レベルの抽象化(構造と配列)を提供しながら、アセンブラとほぼ同じ効率でデータを処理できることを意味します。 これが今日まで絶大な人気を誇る理由です。 そして、これはまさにそのアキレス腱です。 Cコンパイラは型をほとんど制御できないため、完全に正しいように見えても論理的に間違っているプログラムを作成するのは非常に簡単です。

1986年、BjarneStroustrupはC++言語の最初のバージョンを作成し、Simula(以下を参照)から取得したオブジェクト指向機能をC言語に追加し、言語のバグと誤った決定の一部を修正しました。 C ++は現在も改善を続けているため、1998年に、かなり重要な変更を含む新しい(3番目の)バージョンの標準がリリースされました。 この言語は、現代の大規模で複雑なプロジェクトの開発の基礎となっています。 しかし、彼はまた持っています 弱点効率要件から生じます。

1995年、Sun Microsystems Corporationで、KenArnoldとJamesGoslingが作成しました。 Java言語。 それはCとC++の構文を継承し、後者の厄介な機能のいくつかを免れた。 この言語の特徴は、ある抽象マシンのコードにコンパイルすることです。このコードに対して、エミュレーター(Java仮想マシン)が実際のシステム用に作成されます。 さらに、Javaにはポインタや多重継承がないため、プログラミングの信頼性が大幅に向上します。

1999年から2000年にかけて、MicrosoftはC#言語を作成しました。 これはJavaに非常に似ていますが(後者の代替として考案されました)、特徴的な機能も備えています。 主にマルチコンポーネントインターネットアプリケーションの開発に焦点を当てています。

11.言語AdaおよびAda95

1983年に、Ada言語は米国国防総省の支援の下で作成されました。 この言語は、コンパイル段階で多くのエラーを検出できるという点で注目に値します。 さらに、オペレーティングシステムに任されていることが多いプログラミングの多くの側面(並列処理、例外処理)がサポートされています。 1995年に、Ada95言語標準が採用されました。 前のバージョン、それにオブジェクト指向を追加し、いくつかの不正確さを修正します。 これらの言語は両方とも、軍隊やその他の大規模プロジェクト(航空、鉄道輸送)以外では広く使用されていません。 主な理由は、言語を習得するのが難しいことと、かなり面倒な構文(Pascalよりもはるかに面倒)です。

12.データ処理言語

上記の言語はすべて、特定のデータ構造での使用または特定の領域での使用を目的としていない、または最適化されていないという意味で、汎用言語です。 非常に特定のアプリケーション向けに多数の言語が開発されています。 以下であり 短いレビューそのような言語。

1957年に、データの数学的処理を記述するための言語を作成する試みが行われました。 この言語はAPL(アプリケーションプログラミング言語)と名付けられました。 その際立った特徴は使用でした 数学記号(これにより、テキスト端末での使用が困難になりました。グラフィカルインターフェイスの出現により、この問題は解消されました)、非常に強力な構文により、多くの重要な操作を直接実行できます。 複雑なオブジェクト、それらをコンポーネントに分割することに頼ることなく。 すでに述べたように、構文要素として非標準文字を使用することにより、広く使用されることは防がれました。

14.Snobolとアイコン

1962年に、文字列を処理するように設計されたSnobol言語(および1974年にその後継のIcon)が登場しました。 Iconの構文は、CとPascalを同時に連想させます。 違いは、文字列を操作するための強力な組み込み関数と、これらの関数に関連付けられた特別なセマンティクスの存在にあります。 IconとSnobolに相当する最新の機能は、オブジェクト指向機能を追加する文字列およびテキスト処理言語であるPerlです。 非常に実用的な言語と考えられていますが、優雅さが欠けています。

15.SETL

1969年に、SETL言語が作成されました。これは、セットの操作を記述するための言語です。 言語の主なデータ構造は集合であり、演算は集合の数学演算に似ています。 複雑な抽象オブジェクトを処理するプログラムを作成するときに便利です。

16.Lispおよび同様の言語

1958年に、リストを処理するための言語であるLisp言語が登場しました。 それは人工知能システムでかなり普及しています。 Planner(1967)、Scheme(1975)、Common Lisp(1984)などの子孫がいます。 彼の特徴の多くは継承されました 現代語関数型プログラミング。

17.スクリプト言語

最近、インターネットテクノロジーの開発、高性能コンピューターの普及、およびその他の多くの要因により、いわゆるスクリプト言語が普及しています。 これらの言語は元々、あらゆる種類の内部統制言語として使用されることを目的としていました。 複雑なシステム。 ただし、それらの多くは元のアプリケーションの範囲を超えており、現在はまったく異なる分野で使用されています。 これらの言語の特徴は、第一に、それらの解釈可能性(コンパイルが不可能または望ましくない)、第二に、構文の単純さ、そして第三に、簡単な拡張性です。 したがって、頻繁に使用するのに理想的です。 変更可能なプログラム、 とても 小さなプログラムまたは、言語ステートメントの実行に、解析される時間と比較できない時間がかかる場合。 かなりの数のそのような言語が作成されており、主要で最も一般的に使用されている言語のみをリストしています。

18.JavaScript

この言語は、Webページの複雑な動作を記述するための言語としてNetscapeCommunicationsによって作成されました。 元々はLiveScriptと呼ばれていましたが、名前が変更された理由はマーケティング上の考慮事項でした。 Webページをレンダリングするときにブラウザによって解釈されます。 構文はJavaに似ており、(リモートで)C /C++に似ています。 ブラウザの組み込みオブジェクト機能を使用する機能がありますが、真のオブジェクト指向言語ではありません。

19.VBScript

この言語は、JavaScriptの代わりとしてさまざまな方法でMicrosoftによって作成されました。 同様のスコープを持っています。 構文的にはVisualBasic言語に似ています(後者の切り捨てられたバージョンです)。 JacaScriptと同様に、Webページを表示するときにブラウザによって実行され、同じ程度のオブジェクト指向を持ちます。

20.パール

この言語は、オペレーティングシステムのシステム管理者を支援するために作成されました。 Unixシステムさまざまな種類のテキストを処理し、必要な情報を抽出します。 テキストを操作するための強力なツールに開発されました。 これはインタプリタ言語であり、ほとんどすべての既存のプラットフォームに実装されています。 ワードプロセッシングや、WebサーバーでのWebページの動的生成に使用されます。

21.Python

インタプリタされたオブジェクト指向プログラミング言語。 構造と範囲はPerlに似ていますが、あまり一般的ではなく、より厳密で論理的です。 ほとんどの既存のプラットフォームには実装があります。

22.オブジェクト指向言語

一部の人が信じているように、構造的アプローチに取って代わったオブジェクト指向アプローチは、C++では最初に登場しませんでした。 私たちのレビューが不完全になる情報がない、純粋なオブジェクト指向言語のシリーズ全体があります。

23.シミュラ

最初のオブジェクト指向言語はSimula(1967)でした。 この言語は、さまざまなオブジェクトやプロセスをモデル化することを目的としており、モデルオブジェクトのプロパティを正確に記述するために、オブジェクト指向の機能がこの言語に登場しました。

24.Smalltalk

オブジェクト指向プログラミングの人気は、1972年に作成されたSmalltalk言語によってもたらされました。 この言語は、複雑なグラフィカルインターフェイスを設計することを目的としており、最初の真のオブジェクト指向言語でした。 その中で、クラスとオブジェクトは唯一のプログラミング構造です。 Smalltalkの大きな欠点は、メモリ要件が大きく、結果として得られるプログラムのパフォーマンスが低いことです。 これは、オブジェクト指向機能の実装があまり成功していないためです。 C++とAda95の人気は、オブジェクト指向の実装がパフォーマンスを大幅に低下させることなく実装されているという事実によるものです。

25.エッフェル

他の言語へのアドオンではない、非常に優れたオブジェクト指向の実装を備えた言語があります。 これはEiffel(1986)の言語です。 純粋なオブジェクト指向プログラミング言語であるため、「制御アサーション」を使用することでプログラムの信頼性も向上します。

26.並列プログラミング言語

ほとんどのコンピュータアーキテクチャとプログラミング言語は、プログラムステートメントの順次実行を対象としています。 ただし、現在、同じ計算プロセスのさまざまな部分の並列実行を整理できるソフトウェアおよびハードウェアシステムがあります。 このようなシステムのプログラミングには、プログラミングツール、特にプログラミング言語による特別なサポートが必要です。 一部の汎用言語には並列処理のサポート要素が含まれていますが、真の並列システムのプログラミングには特別な技術が必要な場合があります。

27.Occam言語

Okcam言語は、1982年に作成され、トランスピュータ(分散データ処理用のマルチプロセッサシステム)のプログラミングを目的としています。 並列プロセスの相互作用をチャネルの形式で説明します。つまり、あるプロセスから別のプロセスに情報を転送する方法です。 Uccam言語の構文の特徴に注意してください。その中で、演算子の実行の順序と並列順序は等しく、明示的に指定する必要があります。 キーワード PARおよびSEQ。

28.Linda並列計算モデル

1985年に、Linda並列計算モデルが提案されました。 その主なタスクは、並列実行プロセス間の相互作用を整理することです。 これは、グローバルタプルスペースを使用することで実現されます。 プロセスは、そこにデータを含むタプル(つまり、複数の、場合によっては異種のデータのコレクション)を配置でき、別のプロセスは、タプルがタプル領域に表示されるのを待って、表示された後、可能なタプルを読み取ることができます。その後の削除。 たとえば、プロセスがタプルをリージョンに配置して終了し、別のプロセスがしばらくしてタプルを使用する場合があることに注意してください。 これにより、非同期通信の可能性が提供されます。 明らかに、そのようなモデルの助けを借りて、同期相互作用もシミュレートすることができます。 Lindaは並列計算モデルであり、任意のプログラミング言語に追加できます。 潜在的に無制限の量のメモリを持つグローバルタプルエリアの存在の問題を回避するLindaの非常に効率的な実装があります。

29.非命令型言語

前に説明したすべての言語には、共通点が1つあります。それは、命令型であるということです。 これは、それらのプログラムが、最終的に、特定の問題の解決策の段階的な説明であることを意味します。 問題ステートメントのみを記述して、問題の解決をコンパイラーに任せることができます。 このアイデアを発展させる主なアプローチは、関数型プログラミングと論理プログラミングの2つです。

30.関数型言語

関数型プログラミングの背後にある基本的な考え方は、プログラムを数学関数(つまり、実行コンテキストではなく、引数によってのみ値が決定される関数)として表現することです。 代入演算子はそのような言語では使用されません(または少なくとも推奨されません)。 命令型のオプションは通常利用可能ですが、それらの使用は厳しく制限されています。 怠惰でエネルギッシュなセマンティクスを持つ言語があります。 違いは、大まかに言えば、エネルギッシュなセマンティクスを持つ言語では、評価は宣言された場所と同じ場所で実行されますが、怠惰なセマンティクスの場合、評価は本当に必要な場合にのみ実行されます。 前者の言語はより効率的な実装を持っていますが、後者はより良いセマンティクスを持っています。

エネルギッシュなセマンティクスを持つ言語の中で、MLとその2つの現代方言(Standard ML(SML)とCaML)について言及しましょう。 後者にはオブジェクト指向の子があります-ObjectiveCaML(O'CaML)。

怠惰なセマンティクスを持つ言語の中で、2つが最も一般的です:Haskellとそのより単純な方言であるClean。

関数型言語の詳細については、こちらをご覧ください:

31.論理プログラミング言語

論理プログラミング言語のプログラムは数理論理学の公式として表現され、コンパイラーはそれらから結果を導き出そうとします。

ほとんどの論理プログラミング言語の祖先はProlog(1971)です。 それには多くの子孫があります-Parlog(1983、並列コンピューティングに焦点を当てています)、Delta Prologなど。関数型プログラミングのような論理プログラミングは、プログラミングの別の領域です。 詳細読者に専門的な文献を紹介します。

32.結論の代わりに

プログラミング言語の開発におけるいくつかの一般的な傾向を強調しましょう。 賢明な読者は、おそらくずっと前に私が何を言おうとしているのかを推測していたでしょう。 言語はますます抽象化に向かって進化しています。 そして、これは効率の低下を伴います。 質問:抽象化はそれだけの価値がありますか? 回答:それだけの価値があります。 抽象化のレベルを上げると、プログラミングの信頼性のレベルが上がるため、それだけの価値があります。 低効率は、より多くを作成することによって戦うことができます 高速コンピュータ。 メモリ要件が高すぎる場合は、量を増やすことができます。 もちろん、これには時間とお金がかかりますが、解決することはできます。 ただし、プログラムのエラーに対処する方法は1つしかありません。それは、修正する必要があるということです。 さらに良いことに、それをしないでください。 さらに良いことに、それらを可能な限り難しくします。 そして、これはプログラミング言語の分野でのすべての研究が目指しているものです。 そして、あなたは効率の低下に耐えなければなりません。

このレビューの目的は、読者に既存のプログラミング言語の多様性についてのアイデアを与える試みでした。 プログラマーの間では、特定の言語(C、C ++、Pascalなど)の「普遍的な適用性」についての意見がよくあります。 この意見はいくつかの理由で生じます:情報の欠如、習慣、思考の慣性。 私は最初の要因をわずかに相殺しようとしました。 残りの部分については、真の専門家は常に彼の専門的スキルを向上させるために努力すべきであると私は言うことができます。 そして、このためにあなたは実験することを恐れる必要はありません。 では、周りのみんながC / C ++ / VB / Pascal / Perl / Java /…(必要に応じて下線を引く)で書いたらどうなるでしょうか? 何か新しいことを試してみませんか? これはより効率的でしょうか? もちろん、新しい言語を使い始める前に、効果的な実装の存在、既存のモジュールと対話する機能など、そのすべての機能を注意深く調べてから、決定を下す必要があります。 もちろん、間違った方向に進むリスクは常にありますが...何もしない人だけが間違っているわけではありません。

そしてさらに。 「言語Aは言語Bよりも優れている」という形の議論を聞いたり、時には参加したりしました。 このレビューを読んだ後、多くの人がそのような論争の無益さを確信することを願っています。 議論できる最大のことは、特定の条件で特定の問題を解決する上で、ある言語が別の言語よりも優れていることです。 ここで、確かに、議論することが時々あります。 そして時々、解決策は決して明白ではありません。 しかし、「一般的に」と主張するのは明らかにばかげています。

この記事は、「LanguageXMUSTDIE」と叫ぶ人々への返答を意図したものです。 答えが非常に適切で説得力のあるものであることが判明したことを願っています。 私はまた、この記事が論争的で教育的な価値に加えて、持っていることを願っています。