17611538698
webmaster@21cto.com

未来的编程将会是什么样的?

编程语言 1 303 2025-01-25 10:09:16

图片

自 20 世纪 40 年代以来到现在,编程在本质上没有发生根本性变化。

大多数编程语言仍然遵循冯·诺依曼范式:编写顺序指令并修改内存中的数据。让我们看一个简单的代码例子:

total = 0for number in range(1, 6):    total += numberprint(total)  # Outputs: 15

简单又熟悉,是不是?但是有一个问题。现代计算机的速度不再像以前那样缓慢。相反地,它们拥有更多的内核,而我们传统的编程模型并不擅长高效处理多个内核。

多内核的挑战


我们尝试使用并发编程语言提供的来适应。以下以 Go 的 goroutines 为程序案例:


package main
import ( "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

作者:聆听音乐的鱼

评论