21

情報理論では、常に高水準言語と低水準言語について聞いたり読んだりしています。

しかし、今日使用されているアセンブラ以外に (関連する) 低レベル言語がないため、なぜこれがまだ関連しているのか理解できません。

したがって、次のようになります。

低レベル

  • アセンブラ

決して低レベルではない

  • ベーシック
  • フォートラン
  • コボル
  • ...

上級

  • C++
  • ルビー
  • パイソン
  • PHP
  • ...

また、アセンブラが低レベルの場合、たとえば C を同じリストに入れるにはどうすればよいでしょうか。つまり、Cはアセンブラに比べて非常に高レベルです。COBOL、Fortran などでも同様です。

  • では、アセンブラーが本当に唯一の低水準言語であるのに、なぜ誰もが高水準言語と低水準言語について言及し続けるのでしょうか?
4

8 に答える 8

59

あなたはそれを見つけるでしょう

私たちがしがみついている真実の多くは、私たち自身の視点に依存しています。

Cプログラマーにとって、アセンブラーは低水準言語です。Javaプログラマーにとって、Cは低水準言語などです。

1と0で最初のストアドプログラムコンピュータをプログラミングしている人々は、アセンブラを高級言語だと思っていたのではないかと思います。それはすべて相対的です。

(ジェダイの帰還からの引用)

于 2010-04-12T19:32:09.213 に答える
9

ウィキペディアによると、低水準言語は機械語とアセンブリです。

ソースから:

コンピュータサイエンスでは、低レベルプログラミング言語は、コンピュータの命令セットアーキテクチャからの抽象化をほとんどまたはまったく提供しないプログラミング言語です。「低」という言葉は、言語と機械語の間の抽象化の量が少ないか存在しないことを意味します。このため、低水準言語は「ハードウェアに近い」と表現されることがあります。

次に、答えるために:

では、アセンブラーが本当に唯一の低水準言語であるのに、なぜ誰もが高水準言語と低水準言語に言及し続けるのでしょうか。

「誰もが」誰であるかはわかりませんが、高水準言語が今日ほど一般的ではなかった頃は、低水準言語と高水準言語について話す方が適切だったと思います(なぜならアセンブリコードを書いているプログラマーは比較的かなりの数でした)。現代では、それはそれほど重要な区別ではありません。個人的には、アセンブリを区別するかどうかを除いて、これらの用語を使用する人はほとんどいません(Pythonで誰かがCまたはC ++を低レベルと呼んでいるのを聞く場合を除きますが、これは元の定義の精神ではありません)。

于 2010-04-12T19:33:39.320 に答える
9

あなたは比較的主観的な質問をしています。それは、用語、その方言、および視点についての質問です。

たとえば、Lisp は高水準言語ですか、それとも低水準言語ですか? 実装が Lisp マシンで実行されている場合はどうなるでしょうか?

多くの場合、人々が低レベルから高レベルへのスペクトルを構築しようとするとき、彼らが定量化しようとしているのは、「抽象化」の程度ではなく、「ハードウェアへの近さ」の程度です。

ハードウェアへの実装の近さにカウントされる品質:

  • プログラマは、データのメモリ レイアウトを直接制御し、実行時にデータのメモリ アドレスにアクセスできます。
  • 数学演算は、ハードウェアの観点から定義されるか、さまざまなタイプのハードウェアに準拠するために大まかに定義されます。
  • 動的メモリ割り当てを提供するライブラリがあるかもしれませんが、動的メモリの使用は手動です。
  • 文字列操作時のメモリ管理は手動です。

ハードウェアからの実装の抽象化にカウントされる逆の品質:

  • プログラマーは、データのアドレス (ポインターではなく参照) に実行時にアクセスできません。
  • 数学演算は、特定のハードウェアに結び付けられていない特定の用語で定義されます。(たとえば、ActionScript 3 は、Numberオーバーフローが発生するのではなく、整数から浮動小数点に自己変換する型をサポートしています。)
  • 動的メモリの管理は、おそらく参照カウント、ガベージ コレクション、または別の自動化されたメモリ管理スキームを通じて、環境によって処理されます。
  • 文字列操作中のメモリの管理は、常にプログラマから隠され、環境によって処理されます。

他の特性により、言語は、それが実行されるハードウェアに比べて非常に抽象的になる可能性があります。

  • 宣言型の検索ベースの構文。(例: プロローグ)

このような要因を念頭に置いて、あなたが書いたスペクトルを次のように修正します。

最低レベル:

  • 問題のプラットフォームのアセンブリ言語。

アセンブリよりも高レベルのフロー制御を備えた低レベル言語:

  • C、C++
  • パスカル

高水準言語:

  • フォートラン
  • コボル
  • パイソン
  • パール

最上位言語:

  • プロローグ
  • パイソン
  • 図式

Python は意図的に 2 回表示されます。コードの記述方法に応じて、範囲の一部に広がります。

于 2010-04-12T19:41:34.643 に答える
5

低レベルとして、私は追加します:

  • .NET IL
  • Java JVM
  • VB6などの環境で使用されるその他のPコード
于 2010-04-12T19:49:19.190 に答える
4

言語の「レベル」は動く目標です。 1973 年には、PL/I は高級言語と見なされていました。今日、C は (少なくとも言語の専門家によって) 低水準言語と見なされています [脚注を参照]。いくつかの理由:

  • 数値のマシンレベル表現を公開
  • 「整数」演算はオーバーフローする可能性があります
  • 文字列の実際のサポートはありません。少なくとも、文字列はファーストクラスではありません
  • 手動メモリ管理
  • アドレス演算
  • 安全でない

高水準言語には次のものが含まれる場合があります。

  • ターゲット マシンに依存しない整数型のサポート
  • デフォルトの整数演算は、マシンがメモリ不足にならない限りオーバーフローしません
  • たとえば連結が組み込まれたファーストクラスの値としての文字列
  • アドレス演算のない自動メモリ管理
  • 安全

この定義による「高水準言語」の候補には、Icon、Scheme、Smalltalk、およびお気に入りのスクリプト言語が含まれる場合があります。

私が若い学者で恐竜が地球を歩き回っていた時代、人々はアイコンを「非常に高水準の言語」と呼んでいました。つい 15 年前までは、超高水準言語に関するシンポジウムに参加することさえできました。しかし、その言葉は今ではあまり使われなくなりました。

誰もが高水準言語と低水準言語について言及し続けるのはなぜですか?

「高い」と「低い」の違いは変わり続けていますが、上記のような区別は依然として重要です。そして、「高い」と「低い」という言葉は便利な略語になり得るほど多くの違いがあります. しかし、それほど有用ではありません。皮肉屋にとって、高水準言語は、少なくとも私のお気に入りの言語と同じくらい強力に見える言語であり、低水準言語はそれ以外のすべてです。言い換えれば、「レベル」は単なる悪口に簡単に堕落する可能性があります。

脚注:専門家の会議で使用される用語の引用を見つけるのは困難です。専門家が「低レベル」や「高レベル」という用語をあまり技術的でないために使用しない場合は特にそうです。しかし、danbenが引用について尋ねたところ、次の 2 つが見つかりました。


PS プログラミング言語に関する優れた情報について、ウィキペディアをあまり当てにしないでください。特に、ウィキペディアの参照が参照やソースを引用していない場合

于 2010-04-13T00:01:49.543 に答える
0

ここで純粋に推測しますが、これは言語シフトの場合である可能性があります。これにより、低レベル言語と高レベル言語の区別が、管理言語と非管理言語、型付き言語と非型付き言語の違いに人々の心の中でゆっくりと進化しています。などなど。(少なくとも人々が用語を使用している方法で)。

于 2010-04-12T19:32:01.910 に答える
0

大部分において、「低レベル」と「高レベル」は二項分類ではなく連続体です。明らかに低レベル (アセンブリ、マシン コード) の言語がいくつかありますが、それを超えると、実際には「高レベル」と「低レベル」しかありません。

私が見ているように、「低レベル」言語はコンピューターのアーキテクチャに似たコードを必要とし、「高レベル」言語は問題の構造に似たコードを受け入れます。しかし、そうなると、言語はある問題では高水準になり、別の問題では低水準になる可能性があります。

于 2010-04-12T21:29:36.787 に答える