C、Python、C++、Java的对比

C、Python、C++、Java的对比

从单个语言介绍

C

C语言是最早的高级语言之一,只支持面向过程,不支持面向对象编程。C语言对类型要求严格,同时又允许强制类型转换(不论从逻辑上是否正确),这需要对内部原理非常熟悉。例如,有8个标志量(只有真、假之分),要节约空间,写在一个字节中,现要判断从高位到低位第2个标志量是否为真,代码如下:

char flags;
// ... 初始化flags的值
if (flags & 0x80){
    /* 标志为真 */
} else {
    /* 标志为假 */
}

这就应用了char(一个字节)在内存中按位存储的特性。0x80即二进制01000000,按位与运算,消除其它位,保留高位第2位数据。
这就意味着,C语言在高级语言中非常贴近硬件,适合做一些底层的工作,例如单片机设计(也可用汇编)、操作系统等;或是对运行速度要求高的,例如巨量数学运算等。

Python

Python是在C的基础上建立起来的。它使用了字节码的形式,使得其代码在大多数情况下可以直接跨平台使用。Python最大的特点是基本不进行类型检查。Python的底层实现中,将每一个Python对象,甚至是每一个类型都声明为PyObject*,这种统一使得Python的类型要求较低。例如对于同一个函数的同一个参数,您既可以传入一个整数(例如0),也可以传入一个浮点数(例如3.14),也可以传入您自定义的对象(例如Student("小明")),甚至一个对象(例如int)。
Python还有一大优点在于,您不用考虑溢出的问题。一方面,对于数值类的基本类型,如intfloat类型,Python底层会根据实际需要分配内存空间,无须考虑溢出。另一方面,Python的Iterable派生出的可迭代类型很多,它们的内存空间也在运行时根据需要动态确定。
但是,正因为上文所述的表达式的统一,使得Python的运行速度较慢。当然,这只是其中一个原因,还有一个原因是Python内部使用了全局解释器锁(Global Interpreter Lock, GIL)。前者是把“双刃剑”,既有好处又有坏处,而后者的问题至今尚未解决。

C++

C++也是从C派生来的,但C++是编译型的语言,可编译为机器码,这使得与Python相比C++的运行速度高出几十倍。实际上,C++的运行速度与C相比差不多。
C++的一大特点在于引入了面向对象编程的思想。C++中使用类的概念,并且类的几大特征(例如封装、继承、多态等)都比较完备。
C++还有一大优点是它比较灵活。C++允许对自定义类型重新定义它的属性,甚至是运算符。
但是,要完全学会C++是非常困难的。C++中有很多很少使用的概念(例如友元friend)。这些一般使用很少。

Java

Java的运行方式与Python相似,使用了字节码。但从类型上讲,Java仍然对类型严格检查,并且在强制类型转换中也会检查其逻辑性。
Java在编译阶段进行词法检查、语法检查和静态类型检查,通过后编译为Java字节码。Java也允许您捕捉异常。
Java的一大特点在于它的代码由类构成。也就是说,类是构成Java程序的基本单位。Java的类也拥有封装、继承、多态等性质,也有公开(public)、私有(private)和保护(protected)三类访问权限,在接口封装方面做得相对较好。
Java有一点令人满意,它在于一个方法允许仅通过参数类型进行重载。例如void print(String s)void print(int i)便是实现了重载。另外Java还允许在对象创建时进行个性化设置。例如:

new Thread(new Runnable(){
    void run(){
        System.println("running");
    }
}.start()

线程(thread)创建时给的参数为一个可执行对象(runnable object),在创建这个对象时,为run方法进行了个性化设置。

从不同领域对比

底层

由于Python和Java使用字节码,需要平台上的虚拟机支持,距离硬件较远,通常不用于底层,而使用C或C++。两者相较而言,C更低一层。前面提到,操作系统通常使用C,因为C可以直接与汇编链接;而应用程序库既可使用C,也可使用C++。例如有名的图形库OpenCV、Qt均是使用了C++。

移动开发

在移动应用开发领域,Java占绝对优势:Android应用绝大多数使用Java进行开发。
但是,随着技术的发展,C++也开始应用于移动开发中。您既可以在Android程序中添加基于C++的Activity,也可直接使用Qt+Qt Creator等集成环境直接由C++用户代码生成Android应用。
另外有一些比较小众的方法,可以使用Python生成Android程序,但在实际开发中几乎没有这类实例。
当然,除了这里对比的几种语言之外,在.NET Framework的支持下,C#也可以进行移动开发。

PC应用程序

PC应用程序类涉及的范围较广。一般来说,针对特定用户的特殊程序,例如命令行应用程序,通常使用C/C++开发,而其它方面,各类语言均占有一定的分量。

数学与统计

数学和统计是Python的绝对优势。Python社区提供了大量的第三方模块,例如numpy(数学工具)、sympy(符号计算)、pandas(各类数据处理)、maplotlib(Python支持,科学图像)等。几乎所有的数学计算和统计均能用Python高效地完成。
另外,C语言也占有一定的比例。一方面利用C语言的速度优势,另一方面利用C和Python交互编程,优势互补。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值