资讯专栏INFORMATION COLUMN

[原创]nim与rust的特点比较

DevTalking / 2659人阅读

摘要:与的特点比较这两个目前都是小众语言做了些时间的研究写了点东西有了点心得相似点有卫生宏区别与的不卫生宏在类或定义体之外定义函数代码没有分成头与实现体例如的头与实现的与定义的接口定义与实现定义是分开的而与是不分开的运用函数式编程高阶函数目前是新

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来组合实现多态

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44789.html

相关文章

  • [原创][连载]nimpython异同1

    摘要:与的异同名词方法与函数同义仅仅是语言规定差异在本文中不做区别都是指定义的处理过程的有返回值没有返回值版之后出现的方法专指类中的函数的方法指无返回值的处理函数指有返回值的处理中的方法指无返回值的处理函数指有返回值的处理主模块的判断空代码为保 nim与python的异同 名词:方法与函数同义.仅仅是语言规定差异.在本文中不做区别. 1. python都是指def定义的处理过程 2. nim...

    wuaiqiu 评论0 收藏0
  • [原创][连载]nimpython异同3

    摘要:变量常量绑定无特定关键字直接设值将一个文字列放到名为的变量里的类型由文字列上面定义的正则表达式变成了整数这里就带来一个在大工程里很容易带来困扰的问题理解代码不得不受制于类型极易变的变量要理解代码所必需的工作量极大可变变量前缀将变量与 变量(常量)绑定 python无特定关键字,直接设值a = r^s*(d{4}-d{2}-d{2})s{1,2}(.+)$ # 将一个文字列放到名为a的...

    GraphQuery 评论0 收藏0
  • [原创][连载]nimpython异同2

    摘要:方法重载不支持支持和类似基本类型转换整数文字列使用整数内置方法由引入使用进行格式化由引入操作符可选格式文字列没有格式文字列共位小数位位右对齐进行格式化 overload(方法重载) python 不支持 nim 支持.和c++类似 基本类型转换 整数 → 文字列 使用整数(int/int8/int16/int32/64/uint/uint8/uint16/uint32/...

    yibinnn 评论0 收藏0
  • 最快文本搜索神器ripgrep -- grep最好代替者

    摘要:最快的文本搜索神器前言说到文本搜索工具,大家一定会知道它是最有用并最常用的工具之一。它是由语言写成,相较与同类工具,它的特点就是无与伦比地快。我相信它对于每一个码农的价值都是无限大的,特别是结合之后。 最快的文本搜索神器 ripgrep 前言 说到文本搜索工具,大家一定会知道 grep, 它是 linux 最有用并最常用的工具之一。但如果要再一个大的工程项目中搜索某个关键词,大家也一定...

    Anleb 评论0 收藏0
  • RustCon Asia 开启之前,聊聊 Rust 中国社区那些事

    摘要:而在最新出炉的开发者调查中,连续年成为最受开发者喜爱的编程语言。在杭州的冬季,这一次直播,再次点燃了中国社区。的到来月日,在中国北京,秘猿科技和将携手开启中国首届社区大会。 亚洲首届 RustCon Asia 将在 4 月 20 日于北京开启(也就是下周六啦~),大会为期 4 天,包括 20 日全天和 21 日上午的主题演讲以及 22-23 日的多个主题 workshop 环节。随着大...

    curlyCheng 评论0 收藏0

发表评论

0条评论

DevTalking

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<