摘要:與的特點比較這兩個目前都是小眾語言做了些時間的研究寫了點東西有了點心得相似點有衛(wèi)生宏區(qū)別與的不衛(wèi)生宏在類或定義體之外定義函數(shù)代碼沒有分成頭與實現(xiàn)體例如的頭與實現(xiàn)的與定義的接口定義與實現(xiàn)定義是分開的而與是不分開的運用函數(shù)式編程高階函數(shù)目前是新
nim與rust的特點比較
這兩個目前都是小眾語言,做了些時間的研究,寫了點東西有了點心得相似點:
有衛(wèi)生宏.區(qū)別與C++的(不衛(wèi)生)宏
在類(struct或object)定義體之外定義函數(shù)
代碼沒有分成頭與實現(xiàn)體.
例如ada的頭(ads)與實現(xiàn)(adb), C/C++的header(.h/.hpp)與定義(.c/.cc/*.cpp),java的接口定義與實現(xiàn)定義是分開的.而rust與nim是不分開的.
運用函數(shù)式編程.高階函數(shù)目前是新出現(xiàn)語言的標配了
當然rust用得更多些,也更方便些
內(nèi)置異步執(zhí)行功能(協(xié)程;比如goroutine/lua coroutine).
Rust:通過mio+tokio(事實上的標準), nim內(nèi)置asyncdispatch+async系列庫,帶來更輕快的多任務能力
內(nèi)置系統(tǒng)級線程,使用起來很方便
C/C++的線程使用起來真是一把淚.
變量/常量的類型定義與C/C++/JAVA不同,是后置的.這與scale/kotlin相似.
類型自動推導能力.
這功能在c++11/OCaml/haskell里也有出現(xiàn)
可編譯成C或asm或js代碼
能編譯成wasm在瀏覽器里執(zhí)行
目前為止,nim與瀏覽器結(jié)合的更緊密些
沒有GIL限制, 多線程能力不受限
有集成式的包(模塊)管理工具
nim:nimble; rust:cargo
用于初始化項目目錄,創(chuàng)建基本代碼,下載必需的模塊(包)等等功能
nimble起步晚些,功能上不完善點
nim有GC, rust沒有.
nim據(jù)說可以不用GC,手動管理內(nèi)存.目前還沒發(fā)現(xiàn)如何做到.
rust依賴ownship+lifetime+RAII類型的資源管理,受到編譯器的嚴密分析.
rust編譯出來的可執(zhí)行文件巨大,nim可執(zhí)行文件相當小
nim語法類似pascal與python的混合,rust接近c,有一小部分python+go的感覺
nim的OOP很主流, rust的OOP很另類要求做中層(框架級)設計的經(jīng)驗必須豐富見多識廣.
rust概念艱深(與眾不同的ownship/borrow引出lifetime),入門門檻很高.另外方法重載(overload)用宏(macro)與模板(template)實現(xiàn)對習慣了其它語言的開發(fā)者也很難.最難的大概就是rust無法繼承只能用類似接口(interface)的trait來組合實現(xiàn)多態(tài).
PS:rust的宏系統(tǒng)還沒stable.目前正在從macro 1.1 向macro 2.0發(fā)展中.
nim的后端略多些
有c, c++, js, llvm后端
社區(qū)
rust目前社區(qū)很大很活躍, nim 目前社區(qū)較小
成熟度
rust版本1.0以上,版本大約每半年小升級一次
nim版本仍然在0.19,尚未正式達到1.0.
FFI(外部接口)
rust可以方便地與C標準接口結(jié)合(調(diào)用或者被調(diào)用), 與C++接口不行(C++自身的ABI比較亂)
nim特色:作為一門正經(jīng)的編譯語言,它能做到與C/C++/Object C結(jié)合是我目前為止所知唯一.
PS:也就是說可以做一個QT的adapter,從而可以利用現(xiàn)有強大的QT做很多事...
rust的[安全第一,裸金屬]理念,高性能,高入門難度使它看起來用于和C/C++一樣的基礎軟件/底層軟件場合,作為C/C++的安全的升級版本很合適.
nim,接近python的理念,pascal的語法,易用的自帶庫,容易與C或C++或object C結(jié)合的能力,看起來是python的升級版本很合適.非大型的快速開發(fā)同樣適用nim,做原型開發(fā)/輔助工具/數(shù)據(jù)ETL處理/文本處理/網(wǎng)絡爬蟲之類.
(自認為)第五浪潮編程語言劃分并不是純以時間線為劃分標準
第一批以fortran/cobol/ada/pascal/c,特點:純過程,編譯語言,運用于數(shù)值計算,事務處理與基礎軟件.ps:ada比較不同
第二批以C++/object pascal,特點:以繼承為特點的OOP的流派,編譯語言,運用于框架/游戲/GUI軟件
第三批以java/.net,特點:設計,語法與第二批相似但引入了中間碼與VM運行期,運用于web/web2.0
第四批以perl/python/php/ruby為代表, 特點:腳本化,開發(fā)快速,框架簡單,腳手架完善.運用于運維,文本處理,數(shù)據(jù)ETL,非高并發(fā)大流量web/web2.0. ps:python有AI的偏向
第五批以scale/kotlin/swift/rust/nim為代表,特點:(除rust外)在原有OOP的pattern大量結(jié)合了lisp/ML/haskell函數(shù)編程語言的函數(shù)式編程方法;(scale除外)既能以native方式直接運行也能以JS,wasm,中間碼為后端運行;rust引入了OOP的另一流派,而完全拋棄了以繼承為特征的主流OOP,而用了以組合(trait)為中心的OOP.
rust概念艱深,與眾不同的ownship/borrow引出lifetime,入門門檻很高.另外方法重載(overload)用宏(macro)與模板(template)實現(xiàn)對習慣了其它語言的開發(fā)者也很難.最難的大概就是rust無法繼承只能用類似接口(interface)的trait來組合實現(xiàn)多態(tài)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44789.html
摘要:與的異同名詞方法與函數(shù)同義僅僅是語言規(guī)定差異在本文中不做區(qū)別都是指定義的處理過程的有返回值沒有返回值版之后出現(xiàn)的方法專指類中的函數(shù)的方法指無返回值的處理函數(shù)指有返回值的處理中的方法指無返回值的處理函數(shù)指有返回值的處理主模塊的判斷空代碼為保 nim與python的異同 名詞:方法與函數(shù)同義.僅僅是語言規(guī)定差異.在本文中不做區(qū)別. 1. python都是指def定義的處理過程 2. nim...
摘要:變量常量綁定無特定關鍵字直接設值將一個文字列放到名為的變量里的類型由文字列上面定義的正則表達式變成了整數(shù)這里就帶來一個在大工程里很容易帶來困擾的問題理解代碼不得不受制于類型極易變的變量要理解代碼所必需的工作量極大可變變量前綴將變量與 變量(常量)綁定 python無特定關鍵字,直接設值a = r^s*(d{4}-d{2}-d{2})s{1,2}(.+)$ # 將一個文字列放到名為a的...
摘要:方法重載不支持支持和類似基本類型轉(zhuǎn)換整數(shù)文字列使用整數(shù)內(nèi)置方法由引入使用進行格式化由引入操作符可選格式文字列沒有格式文字列共位小數(shù)位位右對齊進行格式化 overload(方法重載) python 不支持 nim 支持.和c++類似 基本類型轉(zhuǎn)換 整數(shù) → 文字列 使用整數(shù)(int/int8/int16/int32/64/uint/uint8/uint16/uint32/...
閱讀 1037·2023-04-25 22:27
閱讀 884·2021-11-22 14:56
閱讀 998·2021-11-11 16:54
閱讀 1701·2019-08-30 15:54
閱讀 3513·2019-08-30 13:20
閱讀 1224·2019-08-30 10:55
閱讀 2093·2019-08-26 13:34
閱讀 3296·2019-08-26 11:53