什麼是下一代編譯型語言?

類似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引擎軍備競賽之前,各大動態語言實現的性能還真不行。

不過再怎麼下一代,五行缺爹也沒轍。


一個語言是否成為主流,幾乎不在於語言本身是否優秀,而在於有沒有一個「劃時代的殺手應用」來成就它。讓我們來看一下幾個歷史上的主流語言

  1. C (殺手應用:劃時代的OS內核(UNIX))
  2. C++ (殺手應用:字處理器、電子表格、視頻遊戲等既要求性能又超級複雜的用戶態軟體)
  3. Java、.NET (殺手應用:企業/機構內網應用)
  4. JavaScript (殺手應用:Web前端)
  5. Objective-C、Java (殺手應用:移動應用)

當前未確定主流語言的殺手應用領域之一應該是Web後端(也可以說是雲)。由於Web後端不同站的流量差異巨大(7~8個數量級的差異),因此在開發便捷性和性能上分化出了戰國局面:

  • 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、彙編等底層語言與上層語言的對應關係?

TAG:編程語言 | 編譯 |