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 貓()) // 可編譯 沒啥缺點。動態鏈結技術的出現是有歷史背景,單機記憶體多少k多少M,所以程式每次都把依賴庫 大家又是公用的乙個庫 copy然後再編譯鏈結,就比較浪費空間和資源,所以提出動態鏈結庫。但是這都馬上18年了,公司伺服器我們一般直接128G RAM,自己用的開發機基本上也是8G保底,多幾M,幾十M,但能夠減少... I老蔡 Python啊 游標卡尺,空格和TAB不能混用.不支援Switch,乙個多分枝選擇還要用到奇怪的技巧.高版本不相容低版本. malt 由於載入檔案本身需要時間 而且是執行期時間 所以絕大多數malt專案寫完後最好aot一遍 jit版本之前,jit目前還沒做出來 malt在doc中建議為了保持... Stanley Luo 關於Android 使用靜態變數,我遇到過的情況是 當應用不處於與當前使用者互動的情況時 例如回到HOME,跳到其他應用 離開的時間比較長時,應用的靜態變數有可能被置null,是不保險的。 郭勳 我好像使用static比較多的只有兩個地方,乙個是用static final定義...Golang 的靜態編譯有哪些值得討論的缺點?
各個程式語言都有哪些令該語言的編譯器 直譯器開發者想掀桌的地方?
Android 程式設計中,使用靜態變數有哪些缺點?應該如何規範使用?