未來的程式設計將會是什麼樣的?

自 20 世紀 40 年代以來到現在,程式設計在本質上沒有發生根本性變化。
大多數程式語言仍然遵循馮·諾依曼正規化:編寫順序指令並修改記憶體中的資料。讓我們看一個簡單的程式碼例子:
total = 0for number in range(1, 6): total += numberprint(total)  # Outputs: 15
簡單又熟悉,是不是?但是有一個問題。現代計算機的速度不再像以前那樣緩慢。相反地,它們擁有更多的核心,而我們傳統的程式設計模型並不擅長高效處理多個核心。

多核心的挑戰

我們嘗試使用併發程式語言提供的來適應。以下以 Go 的 goroutines 為程式案例:

package mainimport ( "fmt" "sync")func main() { var wg sync.WaitGroup numbers := []int{1, 2, 3, 4, 5} for _, n := range numbers { wg.Add(1) go func(x int) { defer wg.Done() fmt.Printf("Processing %d\n", x) }(n) } wg.Wait() fmt.Println("All done!")}
這些解決方案對人們會有幫助,但它們也帶來了像競爭條件、死鎖和複雜狀態管理等問題。
我們建立的正規化並非為並行執行而設計,而控制流語言本身又很難視覺化。

將會有一種不同的方法:資料流程式設計

如果我們可以用以往不同的方式編寫程式會怎麼樣?

想象一下將你的程式描述為一個由獨立節點組成的網路,這些節點相互傳遞資料 – 沒有共享狀態,只有流經系統的資料:

  • 預設情況下所有操作並行執行
  • 資料不可變,可防止競爭條件
  • 程式結構反映資料流
  • 跨多個核心的自然擴充套件

進入 Nevalang

Nevalang就是這麼做的。它是一種圍繞資料流構建的現代語言,將程式視為訊息傳遞圖,而不是指令序列:

import { fmt }def Main(start any) (stop any) { for_print For{Print} wait Wait --- :start -> 1..5 -> for_print -> wait -> :stop}
這裡我們定義了一個Main接收start訊號和傳送stop訊號的元件。它有兩個節點:(內部帶有for_print)和。啟動時,它會建立一個數字 1-5 的流,透過列印每個數字,等待完成,然後傳送訊號。
For Print wait for_print stop
視覺化:
Nevalang 代表了程式設計的根本轉變,它採用一種自然適合並行性和視覺化的正規化,而不是對抗傳統程式設計的限制。
在 GitHub 上試用 Nevalang
程式設計的未來可能與過去大不相同。
隨著硬體的不斷發展,程式設計模型也需要不斷發展。Nevalang 向我們展示了未來的一種令人興奮的可能性。
警告:Nevalang 目前處於開發階段,尚未投入生產環境。
這是一個很酷的語言,由一小群愛好者維護的雄心勃勃的專案。
地址:https://nevalang.org/
GitHub:https://github.com/nevalang/neva
作者:聆聽音樂的魚
相關閱讀:

相關文章