nim与rust的特点比较

这两个目前都是小众语言,做了些时间的研究,写了点东西有了点心得

相似点:

  1. 有卫生宏.区别与C++的(不卫生)宏
  2. 在类(struct或object)定义体之外定义函数
  3. 代码没有分成头与实现体.
    例如ada的头(ads)与实现(adb), C/C++的header(.h/.hpp)与定义(.c/.cc/*.cpp),java的接口定义与实现定义是分开的.而rust与nim是不分开的.
  4. 运用函数式编程.高阶函数目前是新出现语言的标配了
    当然rust用得更多些,也更方便些
  5. 内置异步执行功能(协程;比如goroutine/lua coroutine).
    Rust:通过mio+tokio(事实上的标准), nim内置asyncdispatch+async系列库,带来更轻快的多任务能力
  6. 内置系统级线程,使用起来很方便
    C/C++的线程使用起来真是一把泪.
  7. 变量/常量的类型定义与C/C++/JAVA不同,是后置的.这与scale/kotlin相似.
  8. 类型自动推导能力.
    这功能在c++11/OCaml/haskell里也有出现
  9. 可编译成C或asm或js代码
  10. 能编译成wasm在浏览器里执行
    目前为止,nim与浏览器结合的更紧密些
  11. 没有GIL限制, 多线程能力不受限
  12. 有集成式的包(模块)管理工具
    nim:nimble; rust:cargo
    用于初始化项目目录,创建基本代码,下载必需的模块(包)等等功能
    nimble起步晚些,功能上不完善点

不同之处:

  1. nim有GC, rust没有.
    nim据说可以不用GC,手动管理内存.目前还没发现如何做到.
    rust依赖ownship+lifetime+RAII类型的资源管理,受到编译器的严密分析.
  2. rust编译出来的可执行文件巨大,nim可执行文件相当小
  3. nim语法类似pascal与python的混合,rust接近c,有一小部分python+go的感觉
  4. nim的OOP很主流, rust的OOP很另类要求做中层(框架级)设计的经验必须丰富见多识广.
    rust概念艰深(与众不同的ownship/borrow引出lifetime),入门门槛很高.另外方法重载(overload)用宏(macro)与模板(template)实现对习惯了其它语言的开发者也很难.最难的大概就是rust无法继承只能用类似接口(interface)的trait来组合实现多态.
    PS:rust的宏系统还没stable.目前正在从macro 1.1 向macro 2.0发展中.
  5. nim的后端略多些
    有c, c++, js, llvm后端
  6. 社区
    rust目前社区很大很活跃, nim 目前社区较小
  7. 成熟度
    rust版本1.0以上,版本大约每半年小升级一次
    nim版本仍然在0.19,尚未正式达到1.0.
  8. FFI(外部接口)
    rust可以方便地与C标准接口结合(调用或者被调用), 与C++接口不行(C++自身的ABI比较乱)
    nim特色:作为一门正经的编译语言,它能做到与C/C++/Object C结合是我目前为止所知唯一.
    PS:也就是说可以做一个QT的adapter,从而可以利用现有强大的QT做很多事...

其它总结:

  1. rust的[安全第一,裸金属]理念,高性能,高入门难度使它看起来用于和C/C++一样的基础软件/底层软件场合,作为C/C++的安全的升级版本很合适.
  2. 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来组合实现多态

本文固定链接: http://www.js-code.com/c/c_61902.html