【问题标题】:Which programming languages aren't considered high-level? [closed]哪些编程语言不被视为高级语言? [关闭]
【发布时间】:2011-02-07 03:53:11
【问题描述】:

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

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

所以你得到:

低级

  • 汇编器

绝对不是低级

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

高级

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

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

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

【问题讨论】:

  • 二进制不是编程语言 ;)
  • 与一些最早的程序员交谈,他们通过在计算机前面板上设置切换开关来输入代码。我相信他们会很乐意在汇编程序发明之前告诉你所有关于二进制编程的知识。
  • @TheMachineCharmer:从技术上讲,他是正确的。二进制是一个数值系统。机器码是一种语言。
  • 二进制 == 汇编程序。在前面板上键入程序后,原始二进制文件和原始二进制文件的汇编程序版本之间没有有用的区别。
  • C++ 更像是“所有级别都可用”——在您自己的级别特定风险:)

标签: programming-languages low-level high-level


【解决方案1】:

低级 二进制 汇编器

ET IL Java 虚拟机 在 VB6 等环境中使用的其他 P-Code

绝对不是低级

C 基本的 FORTRAN COBOL Python Perl 帕斯卡

高级别的 C++ 红宝石 Python PHP 序言 方案

【讨论】:

    【解决方案2】:

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

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

    高级语言可能包括

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

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

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

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

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

    脚注:很难找到在专业会议上使用的术语的引用,尤其是当专业人士不使用术语“低级”和“高级”时,因为它们并非如此技术的。但是danben 询问了引用,我找到了一对:


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

    【讨论】:

    • “今天,C 被认为(至少在语言专家看来)是一种低级语言。”你能提供一个引用吗?
    • @danben:找到了一些引用。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      作为低级,我会补充:

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

      【讨论】:

      • 它们肯定低于 [C#|VB.Net|whatever]、Java 或 VB6 源代码...
      【解决方案5】:

      你会发现

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

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

      我怀疑那些用 1 和 0 编写 first stored-program computer 的人会认为 Assembler 是一种高级语言。都是相对的。

      (引用自Return of the Jedi

      【讨论】:

      • 可能有很多语言的程序员会认为 Java 是低级的,等等... ;) 谁知道编写 CPU 微码的人(如果仍然存在的话)对汇编程序的看法...
      • @Donal 当我找到措辞时,我会正确地归因于引用:)
      • +1 来自我,我认为这给了你一个“很好的答案”,在我看来这是当之无愧的。一切都是相对的。
      • 冒着不受欢迎的风险,我要说的是,只有当您更改术语的定义时,高级与低级才会变得主观。
      • relative 是这里的关键词。
      【解决方案6】:

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

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

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

      影响实现接近硬件的质量:

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

      从硬件中抽象出实现的相反质量:

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

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

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

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

      最低级别:

      • 相关平台的汇编语言。

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

      • C、C++
      • 帕斯卡

      高级语言:

      • FORTRAN
      • COBOL
      • Python
      • Perl

      *别的语言:

      • 序言
      • Python
      • 方案

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

      【讨论】:

      • 您会将 Java 纳入高级类别还是*别类别?
      【解决方案7】:

      根据Wikipedia,低级语言是机器代码和汇编。

      来源:

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

      那么,回答:

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

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

      【讨论】:

      • 我在大学的几位教授(我刚从那里毕业不到一年)继续讨论“高级”与“低级”语言。我不得不说,我并没有考虑到今天在野外有多少“低级”语言。
      • *文章没有引用任何参考资料或来源。这不是完全的废话,但也不是很好。 -1
      • 我认为 Brabster 应该得到支持。*的答案是废话(虽然不完全,正如诺曼所说)。
      • “但这不符合原始定义的精神” - 然后定义需要更新,因为将 C 和 Python 放在同一个类别中也是非常错误的。在关于 SO 的问题中发表此声明,让我们看看您获得 50 票反对的速度有多快:)
      【解决方案8】:

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

      【讨论】: