[原创]nim与rust的特点比较
nim与rust的特点比较
这两个目前都是小众语言,做了些时间的研究,写了点东西有了点心得相似点:
- 有卫生宏.区别与C++的(不卫生)宏
- 在类(struct或object)定义体之外定义函数
- 代码没有分成头与实现体.
例如ada的头(ads)与实现(adb), C/C++的header(.h/.hpp)与定义(.c/.cc/*.cpp),java的接口定义与实现定义是分开的.而rust与nim是不分开的. - 运用函数式编程.高阶函数目前是新出现语言的标配了
当然rust用得更多些,也更方便些 - 内置异步执行功能(协程;比如goroutine/lua coroutine).
Rust:通过mio+tokio(事实上的标准), nim内置asyncdispatch+async系列库,带来更轻快的多任务能力 - 内置系统级线程,使用起来很方便
C/C++的线程使用起来真是一把泪. - 变量/常量的类型定义与C/C++/JAVA不同,是后置的.这与scale/kotlin相似.
- 类型自动推导能力.
这功能在c++11/OCaml/haskell里也有出现 - 可编译成C或asm或js代码
- 能编译成wasm在浏览器里执行
目前为止,nim与浏览器结合的更紧密些 - 没有GIL限制, 多线程能力不受限
- 有集成式的包(模块)管理工具
nim:nimble; rust:cargo
用于初始化项目目录,创建基本代码,下载必需的模块(包)等等功能
nimble起步晚些,功能上不完善点
不同之处:
- nim有GC, rust没有.
nim据说可以不用GC,手动管理内存.目前还没发现如何做到.
rust依赖ownship+lifetime+RAII类型的资源管理,受到编译器的严密分析. - rust编译出来的可执行文件巨大,nim可执行文件相当小
- nim语法类似pascal与python的混合,rust接近c,有一小部分python+go的感觉
- nim的OOP很主流, rust的OOP很另类要求做中层(框架级)设计的经验必须丰富见多识广.
rust概念艰深(与众不同的ownship/borrow引出lifetime),入门门槛很高.另外方法重载(overload)用宏(macro)与模板(template)实现对习惯了其它语言的开发者也很难.最难的大概就是rust无法继承只能用类似接口(interface)的trait来组合实现多态.
PS:rust的宏系统还没stable.目前正在从macro 1.1 向macro 2.0发展中. - nim的后端略多些
有c, c++, js, llvm后端 - 社区
rust目前社区很大很活跃, nim 目前社区较小 - 成熟度
rust版本1.0以上,版本大约每半年小升级一次
nim版本仍然在0.19,尚未正式达到1.0. - FFI(外部接口)
rust可以方便地与C标准接口结合(调用或者被调用), 与C++接口不行(C++自身的ABI比较乱)
nim特色:作为一门正经的编译语言,它能做到与C/C++/Object C结合是我目前为止所知唯一.
PS:也就是说可以做一个QT的adapter,从而可以利用现有强大的QT做很多事...
其它总结:
- rust的[安全第一,裸金属]理念,高性能,高入门难度使它看起来用于和C/C++一样的基础软件/底层软件场合,作为C/C++的安全的升级版本很合适.
- nim,接近python的理念,pascal的语法,易用的自带库,容易与C或C++或object C结合的能力,看起来是python的升级版本很合适.非大型的快速开发同样适用nim,做原型开发/辅助工具/数据ETL处理/文本处理/网络爬虫之类.
(自认为)第五浪潮编程语言划分
并不是纯以时间线为划分标准第一批以fortran/cobol/ada/pascal/c,特点:纯过程,编译语言,运用于数值计算,事务处理与基础软件.ps:ada比较不同
第二批以C++/object pascal,特点:以继承为特点的OOP的流派,编译语言,运用于框架/游戏/GUI软件
第三批以java/.net,特点:设计,语法与第二批相似但引入了中间码与VM运行期,运用于web/web2.0
第四批以perl/python/php/ruby为代表, 特点:脚本化,开发快速,框架简单,脚手架完善.运用于运维,文本处理,数据ETL,非高并发大流量web/web2.0. ps:python有AI的偏向
第五批以scale/kotlin/swift/rust/nim为代表,特点:(除rust外)在原有OOP的pattern大量结合了lisp/ML/haskell函数编程语言的函数式编程方法;(scale除外)既能以native方式直接运行也能以JS,wasm,中间码为后端运行;rust引入了OOP的另一流派,而完全抛弃了以继承为特征的主流OOP,而用了以组合(trait)为中心的OOP.
rust概念艰深,与众不同的ownship/borrow引出lifetime,入门门槛很高.另外方法重载(overload)用宏(macro)与模板(template)实现对习惯了其它语言的开发者也很难.最难的大概就是rust无法继承只能用类似接口(interface)的trait来组合实现多态
相关推荐
tkernel 2020-09-03
svap 2020-08-25
zhangxiafll 2020-11-13
svap 2020-11-09
viplinux 2020-10-28
Justhavefun 2020-10-22
lousir 2020-10-21
longzhiwen 2020-10-16
Justhavefun 2020-09-25
归去来兮 2020-09-18
zhouxiaojie 2020-09-16
gamedevd 2020-09-04
Trustport 2020-09-01
tkernel 2020-08-18
lihn 2020-08-18
归去来兮 2020-07-28
TianlangStudio 2020-07-18
iammjun 2020-07-07
Colourful 2020-07-03