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++
解释型的语言:PythonJava

另附上一张 JAVA 与 C/C++ 对比的图片,是笔者在学习时看到的,有些方面笔者也正在学习中,因此不一一解释了,供大家一起学习。

区别对比 Python、Perl、VB、Ruby、C/C++、C# .Net、PHP、Java… 等多编程语言的更多相关文章

  1. 工具推荐. 在线unix, 在线python/perl脚本测试环境

    在线python, perl, javascript, Lisp, Ruby等  http://melpon.org/wandbox/ 正则表达式在线测试工具 http://tools.jb51.ne ...

  2. Atitit 颜色平均值cloor grb hsv模式的区别对比

    Atitit 颜色平均值cloor grb hsv模式的区别对比 使用hsv模式平均后会变得更加的靓丽一些..2 public class imgT { public static void main ...

  3. Windows8 各种版本区别对比详解

    微软的 Windows8 操作系统提供了4个不同的版本,分别是 Windows RT.Windows 8 标准版.Windows 8 Pro 专业版 以及 Windows 8 Enterprise 企 ...

  4. 基于Spark环境对比Python和Scala语言利弊

    在数据挖掘中,Python和Scala语言都是极受欢迎的,本文总结两种语言在Spark环境各自特点. 本文翻译自  https://www.dezyre.com/article/Scala-vs-Py ...

  5. 【Centos】Postgresql连接测试(Perl和Ruby)

    Centos安装了PostgreSQL之后,将考虑如何让Perl与Ruby连接它. Perl连接方式 1,安装Perl的数据库连接包 perl-DBD-Pg perl-DBI yum install ...

  6. 开源数据库 H2, HSQLDB, DERBY, PostgreSQL, MySQL区别/对比图表( 附加翻译) h2数据库

    开源数据库 H2, HSQLDB, DERBY, PostgreSQL, MySQL区别/对比图表 浪天涯博主翻译: referential integrity 参考完整性transactions 事 ...

  7. SpringCloud与Dubbo区别对比

    1:SpringCloud与Dubbo区别对比 (1):活跃度 目前SpringCloud的活跃度明显远高于Dubbo(参考github) (2):主要区别   Dubbo Spring Cloud ...

  8. jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jquery筛选方法

    jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jq ...

  9. Oracle与MySQL的区别对比

    本文对数据库Oracle与MySQL进行了区别对比,其中从并发性.一致性.事务.数据持久性等十三方面进行了对比. 本文摘自 51cto 一.并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源 ...

  10. MarkDown编辑器的区别对比

    标题: MarkDown编辑器的区别对比 作者: 梦幻之心星 sky-seeker@qq.com 标签: [MarkDown, 编辑器,区别] 目录: [软件] 日期: 2020-6-22 前提说明 ...

随机推荐

  1. dpt-shell 抽取壳实现原理分析(执行逻辑)

    开源项目位置(为大佬开源精神点赞) https://github.com/luoyesiqiu/dpt-shell 抽取壳分为两个步骤 加壳逻辑: 一 对apk进行解析,将codeItem抽出到一个文 ...

  2. CentOS8安装Geant4笔记(二):CentOS8安装Qt5.15.2并测试运行环境

    前言   在服务器CentOs8.2上安装geant4软件,但是运行不起来,所以本节开始主要是安装qt,测试qt基本功能.   要点   添加qt环境到系统环境中,是geant4启动qt的必要条件. ...

  3. day05---系统的重要文件(2)

    回顾 /etc/sysconfig/network-scripts/ifcfg-eth0 网卡配置文件 TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=et ...

  4. Nebula Graph 的 KV 存储分离原理和性能测评

    本文首发于 Nebula Graph Community 公众号 1. 概述 过去十年,图计算无论在学术界还是工业界热度持续升高.相伴而来的是,全世界的数据正以几何级数形式增长.在这种情况下,对于数据 ...

  5. Java 程序员第一次运行 Python 项目,使用 python-pptx 提取 ppt 中的文字和图片

    人工智能时代,最需要学习的编程语言是:python .笔者是个 python 小白,昨天花了两个小时,第一次成功运行起来 python 项目 . 项目是 powerpoint-extractor ,可 ...

  6. PlayBook 详解

    4)Playbook 4.1)Playbook 介绍 PlayBook 与 ad-hoc 相比,是一种完全不同的运用 Ansible 的方式,类似与 Saltstack 的 state 状态文件.ad ...

  7. 解决jenkins Git Publisher自动打tag的问题

    简单配置一下 然后开始构建,然后报错如下 The recommended git tool is: NONE using credential 647ee613-5032-4894-aaeb-fe07 ...

  8. Java/Kotlin 实现控制台输出日志保存到文件

    原文:Java/Kotlin 实现控制台输出日志保存到文件 | Stars-One的杂货小窝 之前开发的几款软件,用户用着的过程中,偶尔会存在报错问题,想保留一份日志出来,之后可由用户发过来,进行问题 ...

  9. window.showModalDialog与opener及returnValue

    首先来看看 window.showModalDialog 的参数 vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatu ...

  10. Caffe源码编译,win10+vs2015+Ninja,C++接口测试(mnist),Python接口测试(mnist),(坑爹篇)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...