什麼是下一代編譯型語言?
類似Go、Rust、Zimbu這些靜態語言,請教,到底什麼是下一代編譯型語言?
語法高度正交,不區分 expression 和 statement。
生成 native code。採用 Haskell 的類型系統(不過就別玩 curry 了;改成和 C/C++ 程序員更熟悉的形式。可以加 Rank-N polymorphism 和多元的 Class,Dependent 也可以酌情加進去),有模式匹配。
Isoreursive,區分值、佔有性引用和觀察性引用。不整個採納 Rust 的那套(有些過於複雜了),而是靠 Immutability、RAII「語法糖」和優化(如 Escape analysis, Stack allocation 等)降低 GC 的延遲,使得可以用於軟實時環境。出於私心我很想加 Undelimited continuation,不過這個可能會非常影響優化效果……Delimited 就是現在 C# async 的那套,用起來也還行吧。可能會長成這樣
exists[P, Q]
class Convert[P, Q] {
Q convert(byref P)
}
instance Convert[Int32, Int64] {
convert(x) = native.signed_expansion_32_to_64(x)
}
forall[P, Q: Convert[P, Q]]
instance Convert[List[P], List[Q]] {
convert(arr) = arr.map(Convert[P, Q].convert)
}
//
exists[Left, Right]
type MultiplyResult[Left, Right]
forall[Left, Right: exists MultiplyResult[Left, Right]]
class Multiply[Left, Right, MultiplyResult[Left, Right]] {
MultiplyResult[Left, Right] (*)(Left x, Right y)
}
instance MultiplyResult[Matrix, Vector] = Vector
instance MultiplyResult[Matrix, Matrix] = Matrix
via C# for Systems Programminghmm...大概的定位是X那個位置吧...詳細可以看原文
所謂下一代,核心特徵還是靜態類型的回歸。玩PHP/Perl/Python/Ruby這幫人發現代碼庫一大就容易玩脫,而且至少在V8挑起JavaScript引擎軍備競賽之前,各大動態語言實現的性能還真不行。
不過再怎麼下一代,五行缺爹也沒轍。
一個語言是否成為主流,幾乎不在於語言本身是否優秀,而在於有沒有一個「劃時代的殺手應用」來成就它。讓我們來看一下幾個歷史上的主流語言
- C (殺手應用:劃時代的OS內核(UNIX))
- C++ (殺手應用:字處理器、電子表格、視頻遊戲等既要求性能又超級複雜的用戶態軟體)
- Java、.NET (殺手應用:企業/機構內網應用)
- JavaScript (殺手應用:Web前端)
- Objective-C、Java (殺手應用:移動應用)
- PHP、Ruby、Python、.NET、Java、JavaScript、C ....
如果某個語言在Web後端的開發上能綜合上一行語言的所有優點,那它就是Web後端時代成就的主流語言
下一代也不一定用文本表示,可以是圖形化的,比如scratch要知道小學已經有開始教這些了
rust吧
類似Go、Rust、Zimbu這些,目前看起來哪個都不是,至於到底「下一代」是哪個,真的要等到「下一代」才知道。
Dart ?按著Google的思路,想把多端系統包括Web平台全部用dart進行統一,如果項目沒斷做下去,那麼應該是它了。語言好壞不重要,拼爹吧。
這個問題一直在想,我覺得未來的編程語言應該更傾向於用結構化數據和dsl組合使用表示,然後還可以靈活定製輸入和展現方式。
具體用哪種結構化數據或dsl根據場景決定,例如界面用xml,數據轉換用函數式的dsl,數據查詢的用類sql的。
好像現在就是這種情況,未來應該會更極致和高效。編譯型語言和腳本型語言的邊界正在模糊化。換而言之, 是否是「編譯型」語言其實變得不再重要:V8引擎都能把JS變得那麼快,Python也還是那麼慘淡,就能看得出很多問題。
一種編程語言變為「主流」,看的通常不是程序員們吵得火熱的語言特性、安全性、類庫完善程度、性能等等,而是其應用場景及該語言對這個場景的壟斷能力。
就像一樓說的,不太可能有人能在iOS開發方面去搶ObjectiveC的飯碗,而iOS如果佔有份額能繼續放大,那ObjC當然能水漲船高。
所以,關心語言,不如關心應用場景:
你覺得未來在哪裡?WEB?可穿戴?移動設備?家電設備?汽車行業?嵌入式?雲?全息?推薦閱讀:
※如何編寫將彙編代碼翻譯成機器碼的程序?
※clang編譯CUDA程序,為何會生成多個LLVM bitcode文件?
※為什麼有了 遞歸, select-case, 約定數據結構(數組) 就可以證明圖靈完備?
另為什麼遞歸如此重要?
※C語言或C++語言如何實現尾調用消除?
※如何理解ByteCode、IL、彙編等底層語言與上層語言的對應關係?