摘要:與的特點比較這兩個目前都是小眾語言做了些時間的研究寫了點東西有了點心得相似點有衛生宏區別與的不衛生宏在類或定義體之外定義函數代碼沒有分成頭與實現體例如的頭與實現的與定義的接口定義與實現定義是分開的而與是不分開的運用函數式編程高階函數目前是新
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來組合實現多態
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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/...
閱讀 1017·2023-04-25 22:27
閱讀 872·2021-11-22 14:56
閱讀 984·2021-11-11 16:54
閱讀 1678·2019-08-30 15:54
閱讀 3500·2019-08-30 13:20
閱讀 1213·2019-08-30 10:55
閱讀 2080·2019-08-26 13:34
閱讀 3281·2019-08-26 11:53