我正在学习python入门课程,讲师说python是高级语言,而C和C ++是低级语言。只是令人困惑。我认为C,C ++,Python,Java等都是高级语言。
我在C,C ++等上的stackoverflow上阅读问题,它们似乎都将这些语言称为高级语言。在我看来,有些程序员可以互换使用这些术语。
我正在学习python入门课程,讲师说python是高级语言,而C和C ++是低级语言。只是令人困惑。我认为C,C ++,Python,Java等都是高级语言。
我在C,C ++等上的stackoverflow上阅读问题,它们似乎都将这些语言称为高级语言。在我看来,有些程序员可以互换使用这些术语。
Answers:
高级别和低级别是相对术语,因此用法随时间而变化。在70年代,UNIX之所以风靡一时,是因为它表明一个操作系统可以主要用高级语言编写:C。当时,与汇编程序相比,C被认为是高级的。
如今,C被认为是一种低级语言,因为该语言和标准库都没有提供任何面包和黄油数据结构,例如矢量,字典,迭代器等。您可以在C程序中拥有所有这些结构,但最终需要自己编写它们。Python,Java等相对于C是高级的,因为许多标准数据结构是内置在语言中或作为标准库的一部分。开箱即用可以更轻松地进行抽象级别的编程。
从第二个意义上讲,C是低电平:它可以直接操纵计算机硬件(至少在操作系统允许的范围内直接操纵)。Python,Java等最常见的实现至少要从硬件中删除一步,因为它们在VM中运行。如果要使用Python操纵硬件,则通常在C或C ++中编写Python VM的扩展。
C ++是一种奇怪的情况。它提供了大量漂亮的数据结构作为标准库的一部分,但也允许对硬件进行低级操作。
unsafePerformIO
)。有IORef
类型,但是reinterpret_cast
我不了解,也没有指针运算。但这并不意味着从人们那里窃取内存是安全的。为了成为一种实用的语言,Haskell必须与实际的操作系统和库进行交互。它具有“外部功能接口”。如果我真的想颠覆它,我所要做的就是使用FFI编写原始的颠覆函数。
从低级语言一直到高级语言,以一种可伸缩的规模来考虑。随着语言从低到高的发展,该语言从与计算机的特定接口提供了越来越多的抽象。
编写低级语言来显式控制计算机-考虑机器代码和汇编代码。
高级语言尝试抽象出所有细节(尤其是内存分配和内存释放)。这个想法是为编程提供一个更“自然”的界面,并希望程序员能够专注于设计和生产。
这些天,C被视为一种低级语言。它仍然具有一些来自机器代码和汇编代码的重要抽象,因此从技术上讲,它们比这些更高。但是,它仍然提供直接的内存寻址,并且不提供垃圾回收。因此,这些是程序员必须设计的细节。
将此与其他语言(例如Python,Ruby或Haskell)进行比较,您会获得更加模糊的界面。这些语言具有大量的代码库,这些代码库抽象了大多数计算机命令。有没有想过当您离开函数的局部范围或删除它时,Python中的变量会发生什么?可能不是吗?那是因为您不必使用高级语言!他们为您照顾内存分配/释放。
高级语言具有功能的优势。它们使我们能够自由(安全地)设计和开发。
在大多数情况下,低级语言具有速度优势。解释高级代码是有代价的。另外,用“计算机速写”编写内容也很酷。
希望这可以帮助
高级别与低级别的关系不是黑白的,而是连续的规模。这些术语用于描述编程语言与硬件的距离。级别越高,则越抽象出硬件。
最低级别显然是二进制机器代码-它是OS加载并馈送给CPU的确切表示。汇编是在其之上构建的第一级抽象:代替二进制代码,人们写出代表二进制机器指令的助记符,人类可读的符号代码。这就是人们在UNIX之前用于系统编程的东西。
C是抽象链中的下一个步骤,它将通用模式绑定到流控制结构中,并将特定于机器的指令抽象到与平台无关的语法中,而最后的抽象是使UNIX既革命性又非常成功的主要因素之一,因为这意味着相同的代码可以在任何平台上进行编译而无需任何重大更改。
C ++增加了另一层抽象:它增加了类(将vtable和上下文抽象到OOP语法中)new
和delete
(将内存分配和变量初始化捆绑到单个结构中),编译时类型检查,模板(类型安全编译时)元编程),以及大量的编译时语法便利,例如名称空间,函数和运算符重载等。
Python向硬件迈出了又一大步。C ++仍使程序员能够完全控制内存分配,并允许直接操作RAM。Python为您处理内存管理。另外,它不是将代码编译为全机指令,而是针对虚拟机运行它。这会带来性能上的损失(有时可能会很沉重,但通常不必担心),但是它也允许在C ++中棘手而在C中难以完成的整洁事情,例如在运行时操作函数和类。时间,在运行时获取任意对象的名称,在运行时按名称实例化类,猴子修补等。
因此,当人们将语言分为“高级”和“低级”两种语言时,他们会在某处画一条任意的线,并且该线并不总是相同的。1970年,这条线位于汇编和C语言之间(决定性的因素是删除特定于平台的机器指令)。在1987年,它可能介于C和C ++之间。今天,它可能在C ++和Java之间(以自动内存管理为决定性因素)。
长话短说:高水平是一个可缩放的尺度,对于您提到的三种语言,它是C <C ++ <Python。
“低级”和“高级”语言之间的界线不时变化。
例如:
在UNIX时代,C是一种高级语言。
如今,C没有像当今的高级语言(如Python)那样具有诸如映射类型(字典),迭代器等的结构。因此,路线发生了变化,C现在属于低级别组。
低级语言:
这些语言与机器可以执行的语言“接近”(最低级是:汇编代码!)。
在使用这些语言时,程序员必须考虑最低级别的东西,例如内存管理。在这种意义上,您与硬件非常接近,因此必须直接使用它。
高级语言:
这些语言使您脱离硬件,因为它们自己管理诸如内存之类的事情。当使用这些语言时,内存是一个因素(显然),但是您不能直接使用硬件。而是由语言来管理,使您远离(可能更高)较低的硬件界面。