亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

[原創(chuàng)]nim與rust的特點(diǎn)比較

DevTalking / 3026人閱讀

摘要:與的特點(diǎn)比較這兩個(gè)目前都是小眾語(yǔ)言做了些時(shí)間的研究寫(xiě)了點(diǎn)東西有了點(diǎn)心得相似點(diǎn)有衛(wèi)生宏區(qū)別與的不衛(wèi)生宏在類或定義體之外定義函數(shù)代碼沒(méi)有分成頭與實(shí)現(xiàn)體例如的頭與實(shí)現(xiàn)的與定義的接口定義與實(shí)現(xiàn)定義是分開(kāi)的而與是不分開(kāi)的運(yùn)用函數(shù)式編程高階函數(shù)目前是新

nim與rust的特點(diǎn)比較
這兩個(gè)目前都是小眾語(yǔ)言,做了些時(shí)間的研究,寫(xiě)了點(diǎn)東西有了點(diǎn)心得
相似點(diǎn):

有衛(wèi)生宏.區(qū)別與C++的(不衛(wèi)生)宏

在類(struct或object)定義體之外定義函數(shù)

代碼沒(méi)有分成頭與實(shí)現(xiàn)體.
例如ada的頭(ads)與實(shí)現(xiàn)(adb), C/C++的header(.h/.hpp)與定義(.c/.cc/*.cpp),java的接口定義與實(shí)現(xiàn)定義是分開(kāi)的.而rust與nim是不分開(kāi)的.

運(yùn)用函數(shù)式編程.高階函數(shù)目前是新出現(xiàn)語(yǔ)言的標(biāo)配了
當(dāng)然rust用得更多些,也更方便些

內(nèi)置異步執(zhí)行功能(協(xié)程;比如goroutine/lua coroutine).
Rust:通過(guò)mio+tokio(事實(shí)上的標(biāo)準(zhǔn)), nim內(nèi)置asyncdispatch+async系列庫(kù),帶來(lái)更輕快的多任務(wù)能力

內(nèi)置系統(tǒng)級(jí)線程,使用起來(lái)很方便
C/C++的線程使用起來(lái)真是一把淚.

變量/常量的類型定義與C/C++/JAVA不同,是后置的.這與scale/kotlin相似.

類型自動(dòng)推導(dǎo)能力.
這功能在c++11/OCaml/haskell里也有出現(xiàn)

可編譯成C或asm或js代碼

能編譯成wasm在瀏覽器里執(zhí)行
目前為止,nim與瀏覽器結(jié)合的更緊密些

沒(méi)有GIL限制, 多線程能力不受限

有集成式的包(模塊)管理工具
nim:nimble; rust:cargo
用于初始化項(xiàng)目目錄,創(chuàng)建基本代碼,下載必需的模塊(包)等等功能
nimble起步晚些,功能上不完善點(diǎn)

不同之處:

nim有GC, rust沒(méi)有.
nim據(jù)說(shuō)可以不用GC,手動(dòng)管理內(nèi)存.目前還沒(méi)發(fā)現(xiàn)如何做到.
rust依賴ownship+lifetime+RAII類型的資源管理,受到編譯器的嚴(yán)密分析.

rust編譯出來(lái)的可執(zhí)行文件巨大,nim可執(zhí)行文件相當(dāng)小

nim語(yǔ)法類似pascal與python的混合,rust接近c(diǎn),有一小部分python+go的感覺(jué)

nim的OOP很主流, rust的OOP很另類要求做中層(框架級(jí))設(shè)計(jì)的經(jīng)驗(yàn)必須豐富見(jiàn)多識(shí)廣.
rust概念艱深(與眾不同的ownship/borrow引出lifetime),入門門檻很高.另外方法重載(overload)用宏(macro)與模板(template)實(shí)現(xiàn)對(duì)習(xí)慣了其它語(yǔ)言的開(kāi)發(fā)者也很難.最難的大概就是rust無(wú)法繼承只能用類似接口(interface)的trait來(lái)組合實(shí)現(xiàn)多態(tài).
PS:rust的宏系統(tǒng)還沒(méi)stable.目前正在從macro 1.1 向macro 2.0發(fā)展中.

nim的后端略多些
有c, c++, js, llvm后端

社區(qū)
rust目前社區(qū)很大很活躍, nim 目前社區(qū)較小

成熟度
rust版本1.0以上,版本大約每半年小升級(jí)一次
nim版本仍然在0.19,尚未正式達(dá)到1.0.

FFI(外部接口)
rust可以方便地與C標(biāo)準(zhǔn)接口結(jié)合(調(diào)用或者被調(diào)用), 與C++接口不行(C++自身的ABI比較亂)
nim特色:作為一門正經(jīng)的編譯語(yǔ)言,它能做到與C/C++/Object C結(jié)合是我目前為止所知唯一.
PS:也就是說(shuō)可以做一個(gè)QT的adapter,從而可以利用現(xiàn)有強(qiáng)大的QT做很多事...

其它總結(jié):

rust的[安全第一,裸金屬]理念,高性能,高入門難度使它看起來(lái)用于和C/C++一樣的基礎(chǔ)軟件/底層軟件場(chǎng)合,作為C/C++的安全的升級(jí)版本很合適.

nim,接近python的理念,pascal的語(yǔ)法,易用的自帶庫(kù),容易與C或C++或object C結(jié)合的能力,看起來(lái)是python的升級(jí)版本很合適.非大型的快速開(kāi)發(fā)同樣適用nim,做原型開(kāi)發(fā)/輔助工具/數(shù)據(jù)ETL處理/文本處理/網(wǎng)絡(luò)爬蟲(chóng)之類.

(自認(rèn)為)第五浪潮編程語(yǔ)言劃分
并不是純以時(shí)間線為劃分標(biāo)準(zhǔn)

第一批以fortran/cobol/ada/pascal/c,特點(diǎn):純過(guò)程,編譯語(yǔ)言,運(yùn)用于數(shù)值計(jì)算,事務(wù)處理與基礎(chǔ)軟件.ps:ada比較不同
第二批以C++/object pascal,特點(diǎn):以繼承為特點(diǎn)的OOP的流派,編譯語(yǔ)言,運(yùn)用于框架/游戲/GUI軟件
第三批以java/.net,特點(diǎn):設(shè)計(jì),語(yǔ)法與第二批相似但引入了中間碼與VM運(yùn)行期,運(yùn)用于web/web2.0
第四批以perl/python/php/ruby為代表, 特點(diǎn):腳本化,開(kāi)發(fā)快速,框架簡(jiǎn)單,腳手架完善.運(yùn)用于運(yùn)維,文本處理,數(shù)據(jù)ETL,非高并發(fā)大流量web/web2.0. ps:python有AI的偏向
第五批以scale/kotlin/swift/rust/nim為代表,特點(diǎn):(除rust外)在原有OOP的pattern大量結(jié)合了lisp/ML/haskell函數(shù)編程語(yǔ)言的函數(shù)式編程方法;(scale除外)既能以native方式直接運(yùn)行也能以JS,wasm,中間碼為后端運(yùn)行;rust引入了OOP的另一流派,而完全拋棄了以繼承為特征的主流OOP,而用了以組合(trait)為中心的OOP.

rust概念艱深,與眾不同的ownship/borrow引出lifetime,入門門檻很高.另外方法重載(overload)用宏(macro)與模板(template)實(shí)現(xiàn)對(duì)習(xí)慣了其它語(yǔ)言的開(kāi)發(fā)者也很難.最難的大概就是rust無(wú)法繼承只能用類似接口(interface)的trait來(lái)組合實(shí)現(xiàn)多態(tài)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/44789.html

相關(guān)文章

  • [原創(chuàng)][連載]nimpython異同1

    摘要:與的異同名詞方法與函數(shù)同義僅僅是語(yǔ)言規(guī)定差異在本文中不做區(qū)別都是指定義的處理過(guò)程的有返回值沒(méi)有返回值版之后出現(xiàn)的方法專指類中的函數(shù)的方法指無(wú)返回值的處理函數(shù)指有返回值的處理中的方法指無(wú)返回值的處理函數(shù)指有返回值的處理主模塊的判斷空代碼為保 nim與python的異同 名詞:方法與函數(shù)同義.僅僅是語(yǔ)言規(guī)定差異.在本文中不做區(qū)別. 1. python都是指def定義的處理過(guò)程 2. nim...

    wuaiqiu 評(píng)論0 收藏0
  • [原創(chuàng)][連載]nimpython異同3

    摘要:變量常量綁定無(wú)特定關(guān)鍵字直接設(shè)值將一個(gè)文字列放到名為的變量里的類型由文字列上面定義的正則表達(dá)式變成了整數(shù)這里就帶來(lái)一個(gè)在大工程里很容易帶來(lái)困擾的問(wèn)題理解代碼不得不受制于類型極易變的變量要理解代碼所必需的工作量極大可變變量前綴將變量與 變量(常量)綁定 python無(wú)特定關(guān)鍵字,直接設(shè)值a = r^s*(d{4}-d{2}-d{2})s{1,2}(.+)$ # 將一個(gè)文字列放到名為a的...

    GraphQuery 評(píng)論0 收藏0
  • [原創(chuàng)][連載]nimpython異同2

    摘要:方法重載不支持支持和類似基本類型轉(zhuǎn)換整數(shù)文字列使用整數(shù)內(nèi)置方法由引入使用進(jìn)行格式化由引入操作符可選格式文字列沒(méi)有格式文字列共位小數(shù)位位右對(duì)齊進(jìn)行格式化 overload(方法重載) python 不支持 nim 支持.和c++類似 基本類型轉(zhuǎn)換 整數(shù) → 文字列 使用整數(shù)(int/int8/int16/int32/64/uint/uint8/uint16/uint32/...

    yibinnn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

DevTalking

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<