web-dev-qa-db-ja.com

高レベルと見なされないプログラミング言語はどれですか?

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

しかし、今日使用されているアセンブラー以外に(関連する)低水準言語がないため、これが依然として関連している理由がわかりません。

だからあなたは得る:

低レベル

  • アセンブラ

間違いなく低レベルではありません

  • C
  • ベーシック
  • FORTRAN
  • COBOL
  • .。

高いレベル

  • C++
  • Ruby
  • Python
  • PHP
  • .。

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

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

Wikipedia によると、低水準言語は機械語とアセンブリです。

ソースから:

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

次に、答えるために:

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

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

8
danben

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

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

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

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

(引用元 ジェダイの帰還

55
brabster

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

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

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

実装がハードウェアに近いことにカウントされる品質:

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

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

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

他の性質は、それが実行されるハードウェアと比較して、言語を非常に抽象的にするかもしれません:

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

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

最低レベル:

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

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

  • C、C++
  • パスカル

高水準言語:

  • FORTRAN
  • COBOL
  • Python
  • Perl

最高レベルの言語:

  • PROLOG
  • Python
  • スキーム

Pythonは意図的に2回出現します。つまり、コードの記述方法に応じて、スペクトルの一部にまたがっています。

8
Heath Hunnicutt

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

  • .NET IL
  • Java JVM
  • VB6のような環境で使用される他のPコード
5
Cade Roux

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

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

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

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

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

私が若い学者で恐竜が地球を歩き回っていた当時、人々はアイコンを「非常に高級言語」と呼んでいました。つい最近15年前までは、高級言語に関する学習済みのシンポジウムに参加することもできました。しかし、その用語はもうあまり使われていません。

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

「高」と「低」の違いは変わり続けていますが、上記のような区別は依然として重要です。そして、多くの区別があるので、「高い」と「低い」という単語は便利な省略形になります。しかし、それほど有用ではありません。皮肉なことに、高水準言語は、少なくとも私の好きな言語と同じくらい強力に見える言語であり、低水準言語は他のすべてです。言い換えれば、「レベル」は簡単に単なる名前の呼びかけに退化する可能性があります。

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


P.S.特にウィキペディアのリファレンスがリファレンスやソースを引用していない場合は、プログラミング言語に関する適切な情報を得るためにウィキペディアをあまり重視しないでください。

4
Norman Ramsey

低レベルのバイナリアセンブラ

ET IL Java JVMVB6などの環境で使用されるその他のPコード

間違いなく低レベルではありません

C BASIC FORTRAN COBOL Python Perl Pascal

高レベルC++ Ruby Python PHP PROLOGスキーム

0
Solomon Nanda

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

0
davek

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

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

0