自 20 世纪 40 年代以来到现在,编程在本质上没有发生根本性变化。
大多数编程语言仍然遵循冯·诺依曼范式:编写顺序指令并修改内存中的数据。让我们看一个简单的代码例子:
total = 0
for number in range(1, 6):
total += number
print(total) # Outputs: 15
简单又熟悉,是不是?但是有一个问题。现代计算机的速度不再像以前那样缓慢。相反地,它们拥有更多的内核,而我们传统的编程模型并不擅长高效处理多个内核。
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!")
}
这些解决方案对人们会有帮助,但它们也带来了像竞争条件、死锁和复杂状态管理等问题。
我们建立的范式并非为并行执行而设计,而控制流语言本身又很难可视化。
默认情况下所有操作并行运行
数据不可变,可防止竞争条件
程序结构反映数据流
跨多个核心的自然扩展
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
作者:聆听音乐的鱼
本文为 @ 万能的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。