如何看待 Rust RFC 中 Full Dependent PI type 的提案?

時間 2021-05-07 04:45:24

1樓:一輩子談何容易

對陣列可變性的批判:Rust 的陣列可變性符號,跟 Swift 犯了相同的過錯。Swift 的問題,我已經在之前的文章有具體敘說,所以這兒就不多說了。

簡言之,同乙個符號能表明的可變性,要麼針對陣列指標,要麼針對陣列元素,應該只能挑選其一。而在 Rust 裡邊,你只有乙個當地能夠放「mut」進去,所以要麼陣列指標和元素全部都可變,要麼陣列指標和元素都不可變。你沒有辦法擬定乙個不可變的陣列指標,而它指向的陣列的元素卻是可變的。

Rust 的陣列是值型別,不是引證型別,這個批判是站不住腳的。Rust 野心勃勃的想要替代 C ,他人問你們對 Go 怎麼看的時分他們就直接答覆咱們的方針是 C ,Go 也是個很好的言語balabala。 GitHub Wiki 頁面上有乙個簡略的比較 Rust for CXX programmers · rust-lang/rust Wiki · GitHub 最直觀的差異就是 ...

2樓:Belleve

DT 最大的意義就是打破了 Term 和 Type 的隔閡,讓執行時的屬性變為編譯時的型別,從而盡早地阻止大部分的 bug。結果你告訴我你的 Π 只能依賴編譯期常量……

「讓執行時的屬性變為編譯時的型別」這句話是什麼意思呢,在 idris 之類有完整 DT 的語言裡面我們可以定義乙個 So 的型別:

dataSo:

Bool

->Type

whereOh:

SoTrue

choose

:(b :

Bool

)->Either

(So b)(So

(not b))

choose True

=Left

Ohchoose False

=Right

OhSo 幹的事情最重要的就是把執行時的檢查放進了型別系統裡面,同時支援基於 choose 檢查動態傳入的引數,因此如果你在你的函式中把引數的型別加上了某個 So,編譯器會要求你每次呼叫這個函式都要給出它的入口引數滿足這個 So 的證據,類似於這樣:

fpos

:(n :

Int**

So(n >0))

->Int......

main:IO

()main =

do n <-

...case choose (n >0)

ofLeft p => pure $ fpos (n ** p)

Right p => print "error"

這裡,Left p 後面那個 p 表示的就是 fpos 入口引數所要求的,n > 0 的證據,因此我們把 bug 扼殺在了編譯的時候。

如何看待blackpink中Jennie的某些唯粉?

小呢 不怎麼看,妮芬瘋是因為受得不公平多,至於妮芬唯粉多貌似很正常吧,BP誰家唯粉不多,毒唯多,單反妮受得委屈少一點,歪屁股少一點,團粉一碗水可以端平,隊友粉正常一點也不至於這麼多 我很愛妮也很愛一起追星的妮芬子們 妮芬子們辛苦了!一直陪小妮走下去吧 面向陽光努力生活 瀉藥。我不管粉絲。我只知道我喜...

如何看待文學中的感性?

阿阮 說起感性,本人更多的想到的是共情能力,文學本來就是擁有一定主觀的內容,但是感性的同時,也要保持頭腦的理性,一味地沉迷於其中,會造成心理上的負擔 所謂文學的表達,是要訴諸感性的。當然,這不是說,文學不能或不應該表達理性的東西。拿魯迅的雜文舉例。論拿來主義 是一篇長期霸佔課本的名文,因其說理透徹,...

如何看待Fate Apocrypha中齊格飛這一角色?

暝檸君 齊格飛的話,是 傳統意義上的英雄 生前暫且不論,在劇情中,他有乙個完美的出身 召喚 有乙個聰慧又愚蠢的國王 御主 有乙個足夠強勁的宿敵 迦爾納 以及,乙個並不輝煌的落幕,就像是傳統的英雄那樣。他和胖子御主的關係就像是傳統故事中,聰慧又愚蠢的國王,和手下最勇猛的武士那樣,雖然國王的所有命令都是...