Lingua Franca:让并发编程变简单
Intuitive concurrent programming in any language
并发编程常因线程管理、同步和竞争条件而变得复杂难测。Lingua Franca 作为一种反应式协调语言,旨在构建可预测、时间敏感且分布式的系统。它通过内置的时序语义和确定性并发模型,从根源上消除了竞争条件,让开发者无需手动处理同步问题。更重要的是,Lingua Franca 并非一种全新的编程语言,而是支持 C、C++、Python、TypeScript 和 Rust 等主流语言的框架。你只需在熟悉的语言中编写反应体代码,即可轻松实现从单机到分布式架构的无缝过渡,让复杂的并发逻辑变得直观且易于维护。
在 Lingua Franca 中,'同时'这一概念拥有清晰且精确的定义。
HN 评论区
35- samuell
我喜欢这个代码示例似乎表明他们从流式编程(flow-based programming)中借用了“端口”(ports)的概念,这可能是它最强大的优点之一:
player2.reveal -> player1.observe
player1.reveal -> player2.observe
也就是说,它允许在单个输入/输出之间建立数据流连接,而不仅仅是在组件之间。否则,这种限制太强了,通常会导致大量额外的语法来处理路由问题。
我很久以前就在工作流系统的背景下写过相关内容(https://livingsystems.cc/posts/workflows-dataflow-not-task-d...)
---
编辑 11:12 CET:我意识到“命名端口”(named ports)能更好地表达我这里的想法,如下方评论中所述。
- XCabbage
乍一看,我不太明白这个项目打算解决什么问题。如果能先看到一个用纯 Python 编写的简单并发程序示例,然后讨论一下在避免并发错误时涉及的繁琐记录工作,以及容易掉入哪些陷阱,接着再展示如何用 Lingua Franca 实现同样的功能,并解释它是如何消除这些记录工作和陷阱的,那就太好了。
- phyzome
这个项目的电梯演讲(elevator pitch)还需要打磨。
文中说“在任何语言中”,但页面上却写着“我们目前支持 C、C++、Python、TypeScript 和 Rust”。
又说“Lingua Franca 是一种协调语言”,紧接着却是“不是一种新的编程语言”。
我想我明白他们想表达什么,但这些描述需要大幅改进。
- Garlef
我觉得落地页上的主要示例有点反直觉?
石头剪刀布游戏,但图中的“揭示”(reveal)被呈现为对“观察”(observation)的反应?而且是在一个循环里?某处还有个神奇的 1 秒最小延迟?为什么是 1 秒而不是 0.1 秒?这会不会导致累积误差,让玩家失去同步?(如果这门语言旨在解决分布式系统的问题,那么“就等着吧,哈哈”这种处理方式有点奇怪)。
总体而言,如果示例能将游戏逻辑与玩家分离,并把重复循环单独拆分出来,效果会更好。
也许可以让两个玩家都向主机揭示选择,然后接收结果(以及对方的选择)~ 这样双方都能确信对方的选择是独立于观察行为的。
(我知道这个示例在“选择独立于观察”这一点上是“正确”的,但我认为如果代码架构能更干净地解决该场景中涉及的一些协调问题,示例就能得到改进)。
总的来说,我很欣赏这种多语言元语言的理念!
- gbin
如果你喜欢这个理念并且从事机器人领域的工作,可以试试 copper-rs。它基于相同的底层概念,但在 Rust 中于编译时运行,并配合一个图描述。
内核最新的添加是一个基于配置文件引导的调度功能,它允许你根据确定性日志中的先前时间测量结果,在编译时优化图的并发性能。