工做几年,前后接触c/c++,python,lua,dart,JavaScript,java各类语言,记录下对于一个编程语言的理解java
对一个编程语言的理解,应该关注两个方面node
1、语言特性python
语言特性包括:c++
1. 强类型vs弱类型编程
强类型就是类型很硬,不太接受转换异步
好比c++就是强类型,不一样类型转换须要各类castasync
JavaScript就是弱类型,一个变量,一会数字,一会字符串,一会对象都没问题编程语言
2. 静态类型vs动态类型异步编程
静态类型:程序运行前肯定变量类型,需事先声明或者由编译器推导函数
动态类型,程序运行时才进行类型绑定和检查
3. 静态语言vs动态语言
程序在运行时能够更改代码结构,好比JavaScript随时给一个对象添加成员或者添加函数
4. 值类型vs引用数据类型
JavaScript中除了基本数据类型外,其余都是引用类型,因此变量赋值后其实指向的是同一对象
总结:变量声明时是否须要指定类型->静态类型vs动态类型
声明后的类型可否相互转换->强类型vs弱类型
程序运行时,可否改变对象内部结构->动态语言vs静态语言
但,全部这些都不算数,对于dart语言
既能够编译成二进制,AOT,又能够解释运行
变量声明既能够指定类型,也能够dynamic声明不指定类型
不支持反射,因此是静态语言
类型不可随意转换,是强类型语言
2、运行环境
运行环境就是虚拟机或者真实的操做系统,须要注意的有
1. 编译运行vs解释执行
编译型:源代码->编译器->可执行代码
解释型:解释器读取源代码,编译,而后运行。
区别仅仅是源代码翻译成目标代码的时机不一样。
c/c++是编译型,各源文件编译成obj,后通过链接器连接为可执行文件,后操做系统加载执行
js,python是解释型,先编译为字节码,后由虚拟机加载执行。
要注意编译单位:c/c++是以文件为单位,nodejs和python一样,但网页中js是以代码块(<script>分割)独立翻译,执行,但各代码块共享变量
2. 异步编程模型
nodejs是单线程异步模型,异步模型致使回调地狱问题,后出现await,async,以同步编程方式来编写异步代码。更好维护
3. 垃圾回收
我的理解,但愿有大神能够纠正或补充。