登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
园子
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
VIP申请
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
区别对比 Python、Perl、VB、Ruby、C/C++、C# .Net、PHP ...
区别对比 Python、Perl、VB、Ruby、C/C++、C# .Net、PHP、Java… 等多编程语言
[ 复制链接 ]
闵雇
昨天 08:25
1. 编程语言类型:
首先,Python、C/C++、Java 都是
强类型
的编程语言。强类型的编程语言定义如下:
强类型的编程语言是一种强制类型定义的编程语言,即一旦某一个变量被定义类型,如果不经强制转换,那么它永远就是该数据类型。而弱类型的编程语言是一种弱类型定义的编程语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过现行强制转换。
强类型的编程语言包括:Python、C/C++、.Net、Java 等编程语言。其中 Python 是动态编程语言,是强类型定义编程语言,是类型安全的编程语言;Java 是静态的编程语言,是强类型定义编程语言,也是类型安全的编程语言;
弱类型的编程语言包括:VB,PHP,JavaScript 等编程语言。其中 VBScript 是动态的编程语言,是一种类型不安全的原因。
强类型的编程语言 和 弱类型的编程语言,其判断的根本是“是否会隐形进行编程语言类型转变”。强类型的编程语言在速度上可能略逊于弱类型的编程语言,但是强类型定义语带来的严谨性又避免了不必要的错误。
上面提到了 动态的编程语言 与 静态的编程语言,那就讲讲“动态的编程语言 与 静态的编程语言”的区别:
动态类型:动态性语言是指在运行期间才去做数据类型检查的语言,也就是说动态类型语言编程时,永远不用给任何变量指定数据类型,该语言会在第一次赋值给变量时,在内部将数据类型记录下来。Python 和 Ruby 就是一种典型的动态类型语言,其它的各种脚本语言,如 VBScript 也多少属于动态类型语言。
静态类型语言:静态类型语言与动态类则刚好相反,它的数据类型在编译期间检查,也就是说在写程序时要声明所有变量的数据类型,C/C++ 是静态类型语言的典型代表,其它静态语言还有 C#、Java 等。
对于动态语言与静态语言的区分,其根本在于判断是在运行期间去做数据类型还是在编译期间检查。
2. 面向过程与面向对象
C 语言是
面向过程
的,Python、C++、JAVA 都是
面向对象
的。
面向过程是直接将解决问题的步骤分析出来,然后用函数把步骤一步一步实现,然后再依次调用就可以了。
而面向对象是将构成问题的事物,分解成若干个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在解决问题过程中的行为。
打个比方,我们想求长方形的面积:
++++++++++++++++++++++++++++++++++++++++++++++
面向过程会以,求解数学题的思路去思考:
设定长方形的长 和 宽分别为 x 和 y,
确定长方形面积的算法
编写出计算面积的函数
将 x、y 传入相对应的函数,求解长方形的面积。
++++++++++++++++++++++++++++++++++++++++++++++
面向对象会以,描述对象的思路去思考:
对规则图形的一般属性 和 性质进行定义,如周长 和 面积
在规则图形的基础上,创建长方形,描述长方形的属性 和 性质
创建长方形的对象,调用它的面积函数,以求解长方形的面积
++++++++++++++++++++++++++++++++++++++++++++++
从这个简单的例子中我们可以看出面向对象 和 面向过程解决问题的不同,但似乎它们的规模并没有太大区别。这是因为例子中问题规模非常小,当我们实际解决一个规模不小的问题时,可能会涉及多个对象间的交互、代码的复用及扩展问题,此时面向对象的优点就显现出来了。
毕竟,面向对象就是为了降低系统的耦合度而提出的。(耦合度:各模块间相互联系程度的度量)
但面向过程也并非一无是处,其优良的效率是面向对象难以达到的。
因此,我们可以将它们的优缺点概括如下:
面向过程
特性
自顶向下、逐步求精、模块化
优点
性能比面向对象高,因为类调用需要实例化,开销比较大,比较消耗资源。
如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发,因为在它们看来性能是最重要的因素。
缺点
没有面向对象易维护、易复用、易扩展
(按照面向过程的思想,在解决问题时,各函数之间是为了这个问题服务;而面向对象的思想,则是站在提出问题的主体的角度去解决问题,可将解决这一具体问题的步骤,抽象为解决这一类问题的方法,以后再遇到类似的问题,可以复用解决思路)
面向对象
特性
封装、继承、多态、抽象
优点
易维护、易复用、易扩展
缺点
性能比面向过程低
3. 编译型 和 解释型语言
计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式有两种:
1.编译
2.解释
由此高级语言也分为编译型语言 和 解释型语言。
主要区别在于,前者源程序编译后即可在该平台运行,后者是在运行期间才编译。所以前者运行速度快,后者跨平台性好。
编译型语言
编译型语言使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。
特点
在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如 exe 格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行 exe 文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。
总结
1. 一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;
2. 与特定平台相关,一般无法移植到其它平台;
3. 现有的 C/C++、Objective 等都属于编译型语言。
解释型语言
使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译 和 执行,而不是在执行之前就完成翻译。
特点
解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。
总结
1. 解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低;
2. 只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;
3. Python 等属于解释型语言。
编译型与解释型,两者各有利弊
前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像 C/C++、Pascal/Object Pascal(Delphi) 等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如 Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。
关于 Java
Java 和 其它的语言不太一样。因为 Java 针对不同的平台有不同的 JVM,实现了跨平台。所以 Java 语言有一次编译到处运行的说法。
1. 你可以说它是编译型的:因为所有的 Java 代码都是要编译的,.java 文件不经过编译就什么用都没有。
2. 你可以说它是解释型的:因为 Java 代码编译后不能直接运行,它是解释运行在 JVM 上的,所以它是解释运行的,那也就算是解释的了。
3. 但是,现在的 JVM 为了效率,都有一些JIT优化。它又会把 .class 文件的二进制代码编译为本地的代码直接运行,所以,又是编译的。
笔者认为 Java 更偏向解释型的语言,因为虽然 Java 也需要编译,编译成 .class 文件,但是并不是机器可以识别的语言,而是字节码,最终还是需要 JVM 的解释,才能在各个平台执行,这同时也是 Java 跨平台的原因。
因此可以如下分类:
编译型的语言:C/C++
解释型的语言:
Python
、
Java
另附上一张 JAVA 与 C/C++ 对比的图片,是笔者在学习时看到的,有些方面笔者也正在学习中,因此不一一解释了,供大家一起学习。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
如何优雅的使用RabbitMQ
分布式锁1 Java常用技术方案
浅谈我对DDD领域驱动设计的理解
游戏编程十年总结(下)
【前端性能】高性能滚动 scroll 及页面渲染优化
验证码对抗之路及现有验证机制介绍
从零开始入门 K8s | 手把手带你理解 etcd
NHibernate之旅(2):第一个NHibernate程序
中文写程序,何陋之有?
公司的中场
FFmpeg开发笔记(六十二)Windows给FFmpeg集成H.266编码器vvenc
Android 系统缺陷不完全点评
谈谈如何从本质上理解sql语句, 存储过程,ORM之间的联系和取舍。
[一步一步MVC]第一回:使用ActionSelector控制Action的选择
.net环境下跨进程、高频率读写数据
第二个iPhone应用程序:“Say Hello”
关于编程的胡扯
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
代码
签约作者
程序园优秀签约作者
发帖
闵雇
昨天 08:25
关注
0
粉丝关注
13
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9986
森萌黠
9994
里豳朝
9994
4
背竽
9994
5
猷咎
9992
6
凶契帽
9992
7
柴古香
9992
8
黎瑞芝
9992
9
松菊
9992
10
尝琨
9992
查看更多