21

在信息学理论中,我一直在听到和阅读有关高级和低级语言的信息。

然而我不明白为什么这仍然相关,因为除了今天使用的汇编程序之外没有任何(相关的)低级语言。

所以你得到:

低级

  • 汇编器

绝对不是低级

  • C
  • 基本的
  • FORTRAN
  • COBOL
  • ...

高水平

  • C++
  • 红宝石
  • Python
  • PHP
  • ...

如果汇编程序是低级的,你怎么能把例如 C 放到同一个列表中。我的意思是:与汇编程序相比,C 语言非常高级。即使对于 COBOL、Fortran 等也是如此。

  • 那么,如果汇编程序真的是唯一的低级语言,为什么每个人都不停地提到高级和低级语言呢?
4

8 回答 8

59

你会发现

我们坚持的许多真理取决于我们自己的观点。

对于 C 程序员来说,汇编程序是一种低级语言。对于 Java 程序员来说,C 是一种低级语言等等。

我怀疑那些用 1 和 0 编写第一台存储程序计算机的人会认为 Assembler 是一种高级语言。都是相对的。

(引自绝地归来

于 2010-04-12T19:32:09.213 回答
9

根据维基百科,低级语言是机器代码和汇编。

从来源:

在计算机科学中,低级编程语言是一种对计算机指令集架构提供很少或不提供抽象的编程语言。“低”一词是指语言和机器语言之间的少量抽象或不存在抽象;正因为如此,低级语言有时被描述为“接近硬件”。

然后,回答:

那么,如果汇编程序真的是唯一的低级语言,为什么每个人都一直提到高级和低级语言。

我不知道“每个人”是谁,但我敢猜测,当高级语言不像今天这样普遍时,谈论低级与高级更相关(因为有相当多的程序员编写汇编代码)。在现代,这是一个不太重要的区别。就个人而言,我很少听到人们使用这些术语,除非是为了区分汇编与否(除了那些你可能会听到有人在 Python 上提到 C 或 C++ 是低级的,但这不符合原始定义的精神)。

于 2010-04-12T19:33:39.320 回答
9

你问的是一个相对主观的问题;这是一个关于术语、白话和观点的问题。

例如,Lisp 是高级语言还是低级语言?如果实现在 Lisp 机器上运行怎么办?

通常,当人们试图构建从低级到高级的频谱时,他们试图量化的是“与硬件的接近”程度,而不是“抽象”的程度。

影响实现与硬件的接近程度的品质:

  • 程序员直接控制数据的内存布局,并在运行时访问数据的内存地址。
  • 数学运算是根据硬件定义的或松散定义的,以符合不同类型的硬件。
  • 可能有一个库提供动态内存分配,但动态内存的使用是手动的。
  • 字符串操作期间的内存管理是手动的。

对硬件实现的抽象计数的相反质量:

  • 程序员没有对数据地址的运行时访问(引用而不是指针)。
  • 数学运算以不依赖于特定硬件的特定术语定义。(例如,ActionScript 3 支持Number从整数自动转换为浮点的类型,而不会出现溢出。)
  • 动态内存的管理由环境处理,可能通过引用计数、垃圾收集或其他自动内存管理方案。
  • 字符串操作期间的内存管理始终对程序员隐藏并由环境处理。

与运行它的硬件相比,其他特性可能会使语言非常抽象:

  • 声明性的、基于搜索的语法。(例如序言)

考虑到这些因素,我将修改您编写的频谱如下:

最低等级:

  • 相关平台的汇编语言。

比汇编具有更高级别流控制的低级语言:

  • C、C++
  • 帕斯卡

高级语言:

  • FORTRAN
  • COBOL
  • Python
  • Perl

最高级别的语言:

  • 序言
  • Python
  • 方案

Python 有意出现两次——它跨越了一部分范围,具体取决于代码的编写方式。

于 2010-04-12T19:41:34.643 回答
5

作为低级,我会补充:

  • .NET IL
  • Java 虚拟机
  • 在 VB6 等环境中使用的其他 P 代码
于 2010-04-12T19:49:19.190 回答
4

语言的“水平”是一个移动的目标。 1973 年,PL/I 被认为是一种高级语言。今天,C 被认为(至少由语言专业人士)是一种低级语言 [见脚注]。一些原因:

  • 公开数字的机器级表示
  • “整数”算术可以溢出
  • 对字符串没有真正的支持,或者至少,字符串不是一流的
  • 手动内存管理
  • 地址算术
  • 不安全

高级语言可能包括

  • 支持独立于目标机器的整数类型
  • 除非机器内存不足,否则默认整数运算永远不会溢出
  • 字符串作为一等值,例如内置连接
  • 无需地址算法的自动内存管理
  • 安全的

根据这个定义,一些候选“高级语言”可能包括 Icon、Scheme、Smalltalk 和一些您最喜欢的脚本语言。

早在我还是一个年轻的学者,恐龙在地球上漫游的时候,人们把Icon称为“非常高级的语言”。就在 15 年前,您甚至可以参加关于高级语言的学术研讨会。但这个词不再使用了。

为什么每个人都在提到高级语言和低级语言?

尽管“高”和“低”之间的区别不断变化,但上面列出的区别仍然很重要。而且有很多区别,以至于“高”和“低”这两个词可以成为有用的速记。但没那么有用——对于愤世嫉俗的人来说,高级语言看起来至少和我最喜欢的语言一样强大,而低级语言就是其他一切。换句话说,“级别”很容易退化为单纯的骂人。

脚注:很难找到专业会议上使用的术语的引用,尤其是当专业人士不使用术语“低级”和“高级”时,因为它们不是那么技术性。但丹本询问了引文,我找到了一对:


PS 不要过于依赖 Wikipedia 来获取有关编程语言的良好信息,尤其是在 Wikipedia 参考资料没有引用参考资料或来源的情况下

于 2010-04-13T00:01:49.543 回答
0

在这里纯粹是猜测,但这可能是语言转换的情况,低级和高级语言之间的区别正在人们的脑海中慢慢演变为托管语言和非托管语言、类型化语言和非类型化语言之间的区别等等等等 (至少在人们使用术语的方式上)。

于 2010-04-12T19:32:01.910 回答
0

在很大程度上,“低级”和“高级”不是二元范畴,而是一个连续统一体。有些语言显然是低级的(汇编、机器代码),但除此之外,实际上只有“高级”和“低级”。

正如我所看到的,“低级”语言需要看起来更像计算机体系结构的代码,而“高级”语言接受看起来更像问题结构的代码。但是这样一来,语言对于一个问题可以是高级的,而对于另一个问题可以是低级的。

于 2010-04-12T21:29:36.787 回答
0

低级二进制汇编器

ET IL Java JVM 在 VB6 等环境中使用的其他 P 代码

绝对不是低级

C BASIC FORTRAN COBOL Python Perl Pascal

高级 C++ Ruby Python PHP PROLOG 方案

于 2018-02-01T11:43:23.300 回答