编程语言的思考

a 夏天 提交于 2019-12-08 10:47:31

工作几年,先后接触c/c++,python,lua,dart,JavaScript,java各种语言,记录下对于一个编程语言的理解

对一个编程语言的理解,应该关注两个方面

一、语言特性

语言特性包括:

1. 编译型vs解释型

编译型:源代码->编译器->可执行代码

解释型:解释器读取源代码,编译,然后运行。

区别仅仅是源代码翻译成目标代码的时机不同。

c/c++是编译型,经过编译连接生成可执行文件,由操作系统加载执行

python,JavaScript是解释型,必须安装解释器才可执行

2. 强类型vs弱类型

强类型就是类型很硬,不太接受转换

比如c++就是强类型,不同类型转换需要各种cast

JavaScript就是弱类型,一个变量,一会数字,一会字符串,一会对象都没问题

3. 静态类型vs动态类型

静态类型:程序运行前确定变量类型,需事先声明或者由编译器推导

动态类型,程序运行时才进行类型绑定和检查

4. 静态语言vs动态语言

程序在运行时可以更改代码结构,比如JavaScript随时给一个对象添加成员或者添加函数

 

 

总结:变量声明时是否需要指定类型->静态类型vs动态类型

声明后的类型能否相互转换->强类型vs弱类型

程序运行时,能否改变对象内部结构->动态语言vs静态语言

 

但,所有这些都不算数,对于dart语言

既可以编译成二进制,AOT,又可以解释运行

变量声明既可以指定类型,也可以dynamic声明不指定类型

不支持反射,所以是静态语言

类型不可随意转换,是强类型语言

 

二、运行环境

运行环境就是虚拟机或者真实的操作系统,需要注意的有

1. 引用数据类型

JavaScript中除了基本数据类型外,其他都是引用类型,所以变量赋值后其实指向的是同一对象

2. 异步编程模型

nodejs是单线程异步模型,异步模型导致回调地狱问题,后出现await,async,以同步编程方式来编写异步代码。更好维护

3. 垃圾回收

 

个人理解,希望有大神可以纠正或补充。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!