编程语言选取
当你选择一个编程语言时,选择的是它的生态圈。
当一款新编程语言不能给你带来新的思想时,它毫无用处。
-
候选者:
编程语言 特点 C 静态。简单,快速,包含指针,基本宏,内存自管理。原始的模块(文件包含) C++ 静态。C基础上,添加面向对象,模板,lambda,类型推导。 Rust 类型推导,lambda,模板,契约式,模式匹配,迭代,模块。 Go 静态。类型推导,lambda,契约式,模式匹配,迭代,模块(包),异步(channel)。垃圾回收。 Ruby 动态。类型推导,lambda,代码块,面向对象,类开闭,模块。完善的类型系统。垃圾回收。 Lua 动态。简单,类型推导,lambda,原始模块,迭代。垃圾回收。 Python 动态。简单,类型推导,完善的类型系统,模块,迭代,lambda,多返回值。垃圾回收。 Swift 动静结合。类型推导,完善的类型系统。模块。迭代。lambda,多返回值。契约式。模式匹配。垃圾回收。 -
类型:
- 提供类型推导和自省。
- is 判断是否是某类型
- as 转换成某类型
- let 类型推导关键字
- 提供基本数据结构:tuple,array,hashmap,
- 基本数据结构字面量构建:
- (),[],{},
- 0x,0,0b,1_000_000,”ABC”,’A’
- 提供类型推导和自省。
-
函数,与数据是同等重要的。
- lambda
- (arg1,arg2) => {}
- 闭包。能绑定及捕获参数作用域
- 多返回值
- 能对多返回值进行解包
- 块:编写DSL
- 异步执行
- 让权
- 函数别名
- lambda
-
控制结构:
- 模式匹配
- 迭代:对容器对象进行迭代
- for .. in ..
-
arr.each x {dowith(x)} - arr.each {x => dowith(x)}
-
面向对象:
- 开闭。类都是可打开的,可以扩展功能,以实现更定制化的功能。
- class Array{}
- fn Array.classExtMethod() {}
- fn arr.instanceExtMethod{}
- 单继承 + 混合
- 协议/契约式
- 开闭。类都是可打开的,可以扩展功能,以实现更定制化的功能。
-
模块化:
- 模块定义
- 通过显式的module关键字
- 通过文件系统,文件结构与文件名
- 模块导入
- import 关键字,导入模块
- 通过文件系统,文件结构与文件名
- 模块定义