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

さまざまなプログラミング言語。 プログラミング言語

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

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

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

これらのシステムのプロセッサ時間、その配置方法、「カット」、およびユーザーは、この時間の短いセグメントを交互に受け取ることができます。 コンピュータデバイスははるかに速く動作し始め、ユーザーはシステムだけで作業をしているように端末を感じることができました。 装置は、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です。 通常、COBOLは、その煩雑さと冗長性のために批判されます。これは、この言語の作成者の目標の1つが、 英語..。 同時に、プログラミング言語には、データ構造とファイルを使用してアクティビティを実行するための優れたツールがあり、これにより、ビジネスアプリケーションでの長寿命が実現しました。 少なくとも米国では、確かに。

舌足らずの発音

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

Lispプログラムは、式のシーケンス、つまりフォームで構成されています。 プログラムの結果は、リストの形式で書かれたこれらの式の計算です。これは、このタイプの言語の主要な構造の1つです。 Lispプログラムの要点は、象徴的な空間での「生命」です。

ベーシック

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

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

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

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

パスカル

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

そのすべての機能の中で、主要な機能を呼び出すことができます-これらは最も厳密なタイピングであり、構造化タイプのプログラミングツールの可用性です。 パスカルはそのような最初の言語の1つでした。 Pascalプログラミング言語は、プログラムの記述の正確さと問題解決方法の正しい開発を教えており、タスクで使用されるデータを提示および整理するための適切なオプションを選択する方法を学ぶのにも役立ちます。 1983年以来のPascal言語は トレーニングコース米国の中等学校におけるコンピュータサイエンス。

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

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

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

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

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

プロローグ

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

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

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

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

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

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

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

さて、それは今日のすべてのようです、今あなたは彼らが何であるかを知っています プログラミング言語そしてそれらが何であるか。

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

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

1.最初の世界共通言語

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

2.アセンブラー

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

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

3.Fortran

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

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

Fortranでは、次の構造は「インデックスが1から100に変わるときのラベル10までのforループ」を表します。DO10I = 1,100ここでコンマをピリオドに置き換えると、割り当て演算子が得られます。DO10I= 1.100 Itそのようなエラーが開始時にロケットを爆発させたと言われています!

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

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

4.COBOL

1960年に、Cobolプログラミング言語が作成されました。 商用アプリケーションを構築するための言語として考案され、そのようになりました。 何千もの商用アプリケーションがCOBOLで作成されています。 この言語の特徴は、商用アプリケーションに典型的な大量のデータを効率的に処理できることです。 Kobolの人気は非常に高いため、現在でも(構造と設計の点で、Kobolは多くの点で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年、Algolプログラミング言語はPeterNaurが率いるチームによって作成されました。 この言語は、アルゴルのような言語の家族全員を生み出しました(最も重要な代表者はパスカルです)。 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で、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)が登場しました。 アイコンの構文は、CとPascalに同時に似ています。 違いは、文字列を操作するための強力な組み込み関数と、これらの関数に関連付けられた特別なセマンティクスの存在にあります。 Icon and 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.Perl

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

21. Python

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

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

一部の人が信じているように、構造化されたアプローチに取って代わったオブジェクト指向のアプローチは、C ++では最初に登場しませんでした。 そこには純粋なオブジェクト指向言語がたくさんあり、それなしでは私たちの調査は不完全になります。

23.シミュラ

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

24. Smalltalk

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

25.エッフェル

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

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

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

27.Occam言語

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

28.Linda並列コンピューティングモデル

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

29.非命令型言語

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

30.関数型言語

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

エネルギッシュなセマンティクスを持つ言語の中で、MLとその現代の方言の2つであるStandard ML(SML)とCaMLについて言及します。 後者には、オブジェクト指向の子孫であるObjective CaML(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よりも優れている」などの議論を聞いたり、時々参加したりしました。 このレビューを読んだ後、多くの人がそのような論争の無意味さを確信することを願っています。 議論できる最大のことは、特定の条件で特定の問題を解決するときの、ある言語の別の言語に対する利点です。 ここで、確かに、時々議論することがあります。 そして、その決定は時には明白とはほど遠いものです。 しかし、「一般的に」議論することは明らかにナンセンスです。

この記事は、「Xの言語は死ななければならない」と叫ぶ人々への返答を目的としています。 答えが非常に適切で説得力のあるものであることが判明したことを願っています。 私はまた、この記事が論争的で認知的な価値に加えて、持っていることを願っています。

ウィキペディアの資料

プログラミング言語- 丁寧 サインシステム録音用 コンピュータプログラム..。 プログラミング言語はセットを定義します 字句 , 構文セマンティックプログラムの外観と、エグゼキュータ(通常はコンピュータ)がその制御下で実行するアクションを決定するルール。

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

1950年代半ばから、 Fortran , 舌足らずの発音COBOL..。 このタイプのプログラミング言語はより抽象的で(「高級言語」とも呼ばれます)、普遍的であり、特定の言語に厳密に依存していません ハードウェアプラットフォームそしてそれに使用される機械の指示。 高水準言語のプログラムは、この言語の翻訳者がいる任意のコンピューターで実行できます(少なくとも理論的には、実際には、言語実装の特定のバージョンまたは方言がいくつかあります)。プログラムを機械語に変換します。その後、プロセッサで実行できます)。

リストされた言語の更新されたバージョンは、今日でも使用されています。 ソフトウェア、そしてそれらのそれぞれは、プログラミング言語のその後の開発に明確な影響を及ぼしました。 その後、1950年代後半に登場 ALGOL、これは、この分野での多くのさらなる開発の基礎としても機能しました。 初期のプログラミング言語の形式と使用は、 インターフェース制限 。

完璧

仕事の重要な分野は ビジュアル(グラフィカル)プログラミング言語、プログラムをテキストとして「書く」プロセスが、コンピュータ画面上で「描く」(図の形でプログラムを構築する)プロセスに置き換えられます。 視覚言語は、プログラムロジックの明確さとより良い人間の知覚を提供します。

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

多くの普及しているプログラミング言語の場合、 国際規格..。 特定の組織は、関連する言語の仕様と正式な定義を定期的に更新および公開しています。 そのような委員会の枠組みの中で、プログラミング言語の開発と近代化が継続され、既存および新規の言語構造を拡張またはサポートする問題が取り上げられています。

データ型

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

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

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

データ構造

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

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

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

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

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

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

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

プログラミング言語は、1つまたは別の基本に従って構築されています 計算モデルパラダイムプログラミング。

ほとんどの言語が焦点を当てているという事実にもかかわらず 命令計算モデルフォンノイマン型コンピュータアーキテクチャによって与えられる、他のアプローチがあります。 積み重ねられた計算モデルで言語に言及することができます( , 要素 , PostScriptなど)、および 機能的 (舌足らずの発音 , Haskell , , , REFALソビエトの数学者A.A.マルコフジュニアによって導入された計算モデルに基づいています) 論理プログラミング (プロローグ).

現在、彼らも積極的に開発しています 宣言型ビジュアルプログラミング言語開発方法とツールだけでなく 問題固有の言語(CM。 言語指向プログラミング).

言語を実装する方法

プログラミング言語は次のように実装できます 編集済み , 通訳埋め込み.

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

プログラムが通訳言語で書かれている場合は、 通訳者直接実行( 解釈する)予備翻訳なしの元のテキスト。 この場合、プログラムは元の言語のままであり、通訳なしで起動することはできません。 この点で、コンピュータプロセッサはマシンコードのインタプリタと呼ぶことができます。

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

任意のインタプリタ言語用のコンパイラを作成できます。たとえば、ネイティブにインタプリタされたLisp言語は制限なしでコンパイルできます。 実行時に作成されたコードは、実行時に動的にコンパイルすることもできます。

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

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

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

このアプローチは、ある意味で、インタープリターとコンパイラーの両方の利点を利用することを可能にします。 インタプリタとコンパイラの両方を備えた言語があることに言及する必要があります( ).

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

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

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

最も重要な要件がコンパクトさ、速度、能力である場合、原則として、低水準言語は、小さなシステムプログラム、デバイスドライバー、非標準機器とのインターフェイスモジュール、特殊なマイクロプロセッサーのプログラミングに使用されます。 直接アクセスハードウェアリソースに。

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

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

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

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

使用される記号

最新のプログラミング言語は、 ASCII、つまり、すべての可用性 グラフィック ASCII文字は、言語構成を記録するための必要十分条件です。 マネージャー ASCII文字限られた範囲で使用されます。キャリッジリターンCR、ラインフィードLF、および水平タブHTのみが許可されます(垂直タブVTおよび次のページFFへの遷移も許可されます)。

時代に出現した初期の言語 6ビット文字より限定されたセットを使用しました。 たとえば、Fortranのアルファベットには49文字(スペースを含む)が含まれています。ABC 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文字など)の使用は実装に依存します。コメントおよび文字/文字列定数でのみ許可される場合と、識別子でのみ許可される場合があります。 V ソ連すべてのキーワードがロシア語の文字で書かれている言語がありましたが、そのような言語はあまり人気がありませんでした(例外は 組み込みプログラミング言語1C:Enterprise).

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

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

数学的に健全なプログラミング言語

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