有哪些程式語言有靜態 編譯期的duck typing

時間 2021-06-01 19:54:14

1樓:羊牮

f# inline 函式通過靜態解析就可以做到,這是編譯期完成的事情,而且不需要用到反射。

具體語法見另乙個答案:各個程式語言都有哪些「亮點」? - 知乎

2樓:Belleve

Wiki 上面的例子有 OCaml(OOP 的部分)和 Go

Purescript 的 Row polymorphism 也可以看作是其中的一種

3樓:

Scala的Structural Type可以實現型別安全的duck typing(編譯期間型別檢查),但是實現用到了反射,執行期有開銷(參考Scala』s Types of Types):

class

MySomeObj

}class

OtherSomeObj

//call 方法只允許引數some_obj有實現some_method

defcall

(some_obj:)

=call

(new

MySomeObj

)//編譯通過輸出「do 一些引數 in MySomeObj」

call

(new

OtherSomeObj

)//編譯錯誤

4樓:cyberpiok

糾正一下,Rust可以通過trait來實現編譯期duck typing;這可以說是它的亮點之一了

---糾正一下我自己,rust trait無法實現題目描述的duck typing

5樓:

TypeScript? 不過TS這個檢查只有編譯期, 不保證執行時的行為, 也不是必需

可以到 playground 試試這樣的程式碼: Playground · TypeScript

function

consumeDuck

>(duck: D

)consumeDuck

({})

// 編譯錯誤

consumeDuck

()// 可編譯

class貓}

consumeDuck

(new

貓())

// 可編譯

Golang 的靜態編譯有哪些值得討論的缺點?

沒啥缺點。動態鏈結技術的出現是有歷史背景,單機記憶體多少k多少M,所以程式每次都把依賴庫 大家又是公用的乙個庫 copy然後再編譯鏈結,就比較浪費空間和資源,所以提出動態鏈結庫。但是這都馬上18年了,公司伺服器我們一般直接128G RAM,自己用的開發機基本上也是8G保底,多幾M,幾十M,但能夠減少...

各個程式語言都有哪些令該語言的編譯器 直譯器開發者想掀桌的地方?

I老蔡 Python啊 游標卡尺,空格和TAB不能混用.不支援Switch,乙個多分枝選擇還要用到奇怪的技巧.高版本不相容低版本. malt 由於載入檔案本身需要時間 而且是執行期時間 所以絕大多數malt專案寫完後最好aot一遍 jit版本之前,jit目前還沒做出來 malt在doc中建議為了保持...

Android 程式設計中,使用靜態變數有哪些缺點?應該如何規範使用?

Stanley Luo 關於Android 使用靜態變數,我遇到過的情況是 當應用不處於與當前使用者互動的情況時 例如回到HOME,跳到其他應用 離開的時間比較長時,應用的靜態變數有可能被置null,是不保險的。 郭勳 我好像使用static比較多的只有兩個地方,乙個是用static final定義...