[原创]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来组合实现多态
推荐阅读
为什么Python使用者远远大于perl
python是预编译然后从pypi上下载 python(pip)将package下载到本地 然后解压后将package内容安装到不同的指定目录
德熀阅读 255
数据结构与算法:二分查找
一、常见数据结构简单数据结构(必须理解和掌握)有序数据结构:栈、队列、链表。有序数据结构省空间(储存空间小)无序数据结构:集合、字典、散列表,无序数据结构省时间(读取时间快)复杂数据结构树、 堆图二...
白鲸鱼赞 9阅读 5.4k
滚蛋吧,正则表达式!
你是不是也有这样的操作,比如你需要使用「电子邮箱正则表达式」,首先想到的就是直接百度上搜索一个,然后采用 CV 大法神奇地接入到你的代码中?
良许赞 3阅读 1.6k
搭个ChatGPT算法模型,从哪开始?
最近 ChatGPT 很火,火到了各行各业。记得去年更多的还是码农最新体验后拿它搜代码,现在各行各业都进来体验,问它咋理财、怎么写报告和给小孩起名。😂 也因此让小傅哥在头条的一篇关于 ChatGPT 的文章都有了26万...
小傅哥赞 6阅读 1.4k
程序员适合创业吗?
大家好,我是良许。从去年 12 月开始,我已经在视频号、抖音等主流视频平台上连续更新视频到现在,并得到了不错的评价。每个视频都花了很多时间精力用心制作,欢迎大家关注哦~考虑到有些小伙伴没有看过我的视频,...
良许赞 3阅读 1.3k
PyCharm 激活破解教程, 2023 年 2 月亲测有用
本文分享一下PyCharm 2022.2.3 版本最新激活破解教程,注意不要使用太新的版本,都是 Jetbrains 产品,本文专门配上了 Pycharm 的图片,跟着下面教程一步一步来即可。
程序员徐公阅读 11.1k评论 1
Ubuntu20.04 从源代码编译安装 python3.10
Ubuntu 22.04 Release DateUbuntu 22.04 Jammy Jellyfish is scheduled for release on April 21, 2022If you’re ready to use Ubuntu 22.04 Jammy Jellyfish, you can either upgrade your current Ubuntu syste...
ponponon赞 1阅读 4.6k评论 1
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。