编译执行和解释执行
1.编译执行:将源代码一次性转换为机器码文件,然后直接运行机器码文件。
2.解释执行:将源代码一行一行的解释执行。
根本区别是运行时:
解释型需要一边解释,一边运行。
而编译型在运行之前就已经将程序编译成机器码了。所以编译运行比解释运行快
面向过程和面向对象
1、面向过程是一种以过程为中心的编程思想,它首先分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,在使用时依次调用即可。常见的面向过程的编程语言有 C语言
2、面向对象是以对象为中心的编程思想,按人们认识客观世界的思维方式,采用基于对象的概念建立模型,以此模拟客观世界分析、设计、实现软件的一种编程思想,常见的面向对象的编程语言有 java,c++语言。
各自特点:
面向过程:
面向过程性能比面向对象高。 因为类和对象的创建、调用、销毁都需要性能开销。面向对象:
面向对象易维护、易复用、易扩展
。 因为面向对象有封装、继承、多态
等特点,所以可以设计出低耦合的系统,使系统更加灵活易于维护。
函数式编程与命令式编程(面向对象和面向过程)最大的不同其实在于:
函数式编程关心数据的映射,命令式编程关心解决问题的步骤
动静态和强弱类型
静态类型和动态类型说的是什么时候检查的问题
强类型和弱类型说的是就算检查,也检查不出来,或者没法检查的问题
静态语言和动态语言
定义
静态语言:在编译期间
就确定了变量的类型,C/C++,C#、JAVA
动态语言:在运行期间
才确定变量的类型。Python、JavaScript
对比
静态语言的优势:
1、编译时检查出错误的类型匹配,以提高程序的安全性;
2、可以根据对象类型优化相应运算,以提高目标代码的质量;
3、减少运行时刻的开销。
所以适合实现复杂的业务逻辑、开发大型商业系统
动态语言的优势:
更加的灵活
强类型和弱类型
强类型是指不允许变量隐式类型转换,弱类型则允许隐式类型转换。
强类型的速度可能略逊于弱类型语言,但是强类型定义语带来的严谨性又避免了不必要的错误。
注意:强制转换只改变变量的值的类型,而没有改变变量的类型。变量的类型是不允许改变的。
举个js弱类型的例子吧:
var A=5;
var B="5"
sumA=A+B;
sumB=A-B;
sumA=55,系统默认+字符连接符,将A转化为字符串类型;
sumB=0;系统认为-是算数运算符,从而将B转化为int类型,所以sum为5-5=0;
对c++ Java go python js 的一些总结
C++:
静态强类型语言,编译执行,速度很快。兼容c语言,所以支持面向对象和面向过程。
允许程序员手动垃圾回收
java:
静态强类型语言
面向对象
先由java编译器将源程序编译成机器无关的字节码文件,所以可以一次编译,到处运行,与os无关
然后由jvm通过解释+编译的方式将字节码文件编译成机器码
自动垃圾回收
Go:
天然支持高并发,是go语言最大的亮点
支持goroutine协程,可实现大并发处理,高效利用多核。
利用管道通信机制,形成 Go 语言特有的管道 channel 通过管道 channel , 可以实现不同的 goroute 之间的相互通信。
和c++一样编译执行,编译速度很快,内存开销小。
自动垃圾回收,采用标记-清除算法
没有像java那样使用虚拟机,编译器在编译代码的时候会插入相关的代码进源程序,去实现什么时候需要暂停,什么时候启动回收。
没有类和继承的概念,所以严格来说不是面向对象的语言
但是它又通过接口(interface)来实现多态性。支持面向对象的编程风格。
因此可以说go是混合型的语言。
静态强类型,但是Go 语言其实也有一些动态语言的特性(通过关键字 var)
python:
python是动态弱类型、面向对象的,解释执行(所以运行速度慢)、自动垃圾回收的脚本语言
解释+编译:
Python解释器由编译器和虚拟机构成,编译器将源代码编译成字节码,然后再通过Python虚拟机来逐行解释
执行这些字节码。
python解释器有很多种:
CPython:C语言开发,相较JVM没有JIT及时编译,使用最广,官方解释器
IPython:基于CPython之上的交互式解释器
PyPy:采用JIT及时编译技术,对python代码进行动态编译,追求执行速度
Jython:运行在Java平台上的解释器,可以直接编译成Java字节码由JVM运行。
JavaScript
解释执行的脚本语言,动态的弱类型语言。
跨平台性脚本语言。
JavaScript依赖于浏览器本身,与操作环境无关,只要有支持JavaScript的浏览器,就可正确执行