首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么有些程序员对C、Python、C++进行了不同的分类?

为什么有些程序员对C、Python、C++进行了不同的分类?
EN

Software Engineering用户
提问于 2013-05-04 04:27:25
回答 4查看 7.2K关注 0票数 18

我正在上一门关于python的入门课程,老师说python是一种高级语言,C和C++是低级语言。只是有点困惑。我认为C、C++、Python等等都是高级语言。

我在C、C++等的堆栈溢出上阅读问题,他们似乎都把这些语言称为高级语言。在我看来,有些程序员似乎可以互换使用这些术语。

EN

回答 4

Software Engineering用户

回答已采纳

发布于 2013-05-04 04:57:44

高级别和低级别是相对的术语,因此随着时间的推移,使用方式发生了变化。在70年代,UNIX引起了轩然大波,因为它表明操作系统可以主要用一种高级语言编写: C。与汇编程序相比,当时C被认为是高级的。

现在,C被认为是一种低级语言,因为无论是语言还是标准库都没有提供任何基本的数据结构,比如向量、字典、迭代器等等。您可以在一个C程序中拥有所有这些结构,但最终您将自己编写它们。Python、Java等相对于C来说是高级别的,因为其中许多标准数据结构都是内置于语言中的,或者是标准库的一部分。有了这些就可以更容易地在更抽象的层次上编程。

在第二性意义上,C是低水平的:它允许直接操作计算机硬件(至少是操作系统允许的直接操作)。Python、Java等最常见的实现至少离硬件更远一步,因为它们在VM中运行。如果您想从Python中操作硬件,那么就需要为Python编写一个扩展,通常使用C或C++。

C++是一个奇怪的案例。它提供了大量优秀的数据结构作为标准库的一部分,但它也允许对硬件进行低级别的操作。

票数 33
EN

Software Engineering用户

发布于 2013-05-04 04:52:25

想一想从低级语言到高级语言的滑动尺度。随着语言规模的上升,从低到高,语言从与计算机的特定接口提供了越来越多的抽象。

底层语言是用来显式地指导计算机思考机器代码和汇编代码的.

高级语言试图抽象出细节(特别是内存分配和内存释放)。这样做的目的是为编程提供一个更“自然”的界面,希望它能够让程序员专注于设计和生产。

如今,C语言被认为是一种低级语言.它仍然有一些重要的抽象从机器代码和汇编代码,所以技术上“更高”比这些。但是,它仍然提供直接内存寻址,而不提供垃圾收集。因此,这些是程序员必须设计的细节。

将其与其他语言(如Python、Ruby或Haskell )进行比较,您的界面就会更加模糊。这些语言有大量的代码库,可以抽象出大多数计算机命令。当您离开函数的本地作用域或删除它时,有没有想过Python中的变量会发生什么呢?可能不对?那是因为在一种高级语言中,你不必这么做!他们负责为您分配/释放内存。

高级语言具有功能优势.他们允许我们自由地设计和开发(并且安全!)

在大多数情况下,低级语言具有速度快的优点。解释高级代码是有代价的。另外,用“电脑语言”写东西也挺酷的。

希望这能有所帮助

票数 8
EN

Software Engineering用户

发布于 2013-05-04 07:37:00

高水平和低水平并不是黑白的东西,而是一个持续的尺度。这些术语用来描述编程语言离硬件有多近;级别越高,就越抽象出硬件。

最底层,很明显,是二进制机器代码--它是操作系统加载和输入到CPU的精确表示。程序集是构建在其之上的第一层抽象:它不是二进制代码,而是编写回忆录,人类可读的表示二进制机器指令的符号代码。这是人们在UNIX之前用于系统编程的方法。

C是抽象链中的下一个步骤,将公共模式绑定到流控制结构中,并将机器特定的指令抽象到与平台无关的语法中,而最后一个抽象是使UNIX革命性和高度成功的主要因素之一,因为这意味着可以为任何平台编译相同的代码,而无需进行任何重大更改。

C++添加了另一层抽象:它添加了类(抽象vtable和上下文,传递到OOP语法中)、newdelete (将内存分配和变量初始化绑定到单个构造中)、编译时类型检查、模板(类型安全编译时元编程)以及一些编译时语法便利,如名称空间、函数和操作符重载等。

Python从硬件上又迈出了一大步。C++仍然让程序员完全控制内存分配,并允许直接操作RAM;Python为您负责内存管理。此外,它没有将代码编译成所有的本机指令,而是在虚拟机上运行它;这会带来性能损失(有时会造成很大的损失,但通常不需要担心),但它也允许在C++中使用一些巧妙的东西,而在C中则非常困难,例如在运行时操纵函数和类,在运行时获取任意对象的名称,在运行时实例化类的名称,猴子-补丁等等。

所以当人们把语言划分为“高层次”和“低层次”时,他们会在某个地方画一条任意的线,而这条线并不总是一样的。1970年,这条线介于组装和C之间(抽象出特定于平台的机器指令是决定性因素);在1987年,它可能介于C和C++之间;今天,它可能介于C++和Java之间(以自动内存管理为决定性因素)。

长话短说:高层是一个滑动尺度,对于您提到的三种语言来说,它是C< C++ < Python。

票数 5
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/196996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档