摘要:与的特点比较这两个目前都是小众语言做了些时间的研究写了点东西有了点心得相似点有卫生宏区别与的不卫生宏在类或定义体之外定义函数代码没有分成头与实现体例如的头与实现的与定义的接口定义与实现定义是分开的而与是不分开的运用函数式编程高阶函数目前是新
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
摘要:与的异同名词方法与函数同义仅仅是语言规定差异在本文中不做区别都是指定义的处理过程的有返回值没有返回值版之后出现的方法专指类中的函数的方法指无返回值的处理函数指有返回值的处理中的方法指无返回值的处理函数指有返回值的处理主模块的判断空代码为保 nim与python的异同 名词:方法与函数同义.仅仅是语言规定差异.在本文中不做区别. 1. python都是指def定义的处理过程 2. nim...
摘要:变量常量绑定无特定关键字直接设值将一个文字列放到名为的变量里的类型由文字列上面定义的正则表达式变成了整数这里就带来一个在大工程里很容易带来困扰的问题理解代码不得不受制于类型极易变的变量要理解代码所必需的工作量极大可变变量前缀将变量与 变量(常量)绑定 python无特定关键字,直接设值a = r^s*(d{4}-d{2}-d{2})s{1,2}(.+)$ # 将一个文字列放到名为a的...
摘要:方法重载不支持支持和类似基本类型转换整数文字列使用整数内置方法由引入使用进行格式化由引入操作符可选格式文字列没有格式文字列共位小数位位右对齐进行格式化 overload(方法重载) python 不支持 nim 支持.和c++类似 基本类型转换 整数 → 文字列 使用整数(int/int8/int16/int32/64/uint/uint8/uint16/uint32/...
阅读 988·2023-04-25 22:27
阅读 851·2021-11-22 14:56
阅读 940·2021-11-11 16:54
阅读 1651·2019-08-30 15:54
阅读 3480·2019-08-30 13:20
阅读 1193·2019-08-30 10:55
阅读 2057·2019-08-26 13:34
阅读 3264·2019-08-26 11:53