Universal Program Language
通用编程语言对比
特点\语言 | C | Rust | JavaScript | TypeScript |
---|---|---|---|---|
overview | 静态、强类型、编译 | 静态、强类型、编译,内存安全 | 动态、弱类型、解释 | 动态、强类型、编译+解释 |
scene | 系统、嵌入式领域、信息类竞赛 | 系统、嵌入式领域、前端工程 | web,应用开发 | web,类库开发 |
public | 1972,丹尼斯·里奇,贝尔实验室 | 2010,Mozilla 研究院 | 1995,Brendan Eich,Netscape | 2012,微软 |
grammer | ||||
feature | ||||
paradigm | 函数式 | 函数式、面向对象 | 函数式、面向对象 | 同左 |
std-lib | ? | ? | 内置全局对象 | 同左 |
compiler | gcc(linux\windows)、clang(macos) | rustc | jit | tsc |
runtime | - | - | v8(chrome) | - |
解释型与编译型
主要在代码在执行前的处理方式
- 编译型语言
- 预处理:处理源代码中的预处理指令。
- 编译:将源代码转换成目标代码,通常是机器码。
- 汇编:将汇编语言代码转换成机器码。
- 链接:将多个目标文件或库文件链接在一起,生成可执行文件
- 解释型语言
- 运行时解释器逐行解释执行
- 区别比较
- 执行速度:运行时编译型语言无须转换源代码为机器码,速度更快。
- 跨平台性:编译型语言需要为不同的平台编译不同的可执行文件,而解释型语言只要解释器一致就行。后者跨平台性更好。
- 开发和调试:解释型语言因为无须等待编译,更容易调试。
- 内存管理:解释型语言通常依赖于垃圾回收机制来管理内存,编译型各有不同。
静态和动态
所谓动态:
- 编译时不确定数据类型
- 运行时确定数据类型
- 运行时变量可以修改为任意类型的值
TODO
强类型和弱类型
所谓弱类型:
- 弱类型语言,与是否具有类型系统无关
- 表达式运算中,不强制操作数为相同的类型
- 若操作数为不同类型,则自动进行转化
- 若无法转化,则在运行时报错
TODO