Lingua Franca macht Nebenläufigkeit deterministisch – ohne neue Sprache
Intuitive concurrent programming in any language
Lingua Franca ist eine Koordinationssprache für deterministische, zeitkritische und verteilte Programme. Sie beseitigt Race Conditions durch Konstruktion, bringt Zeitlogik direkt in den Kern und erlaubt den Wechsel von Einzel- zu Verteiltystemen mit minimalen Änderungen. Der Code in Reaktoren bleibt in C, C++, Python, TypeScript oder Rust. Entwickelt an der UC Berkeley, unterstützt von Forschungsteams aus Kiel, Dresden und Dallas.
Wenn die Player-Klasse die Wahl des anderen beobachten würde, bevor sie ihre eigene preisgibt, würde Lingua Francas Kausalitätsanalyse eine Kausalitätsschleife finden und Ihnen mitteilen, dass das Programm ungültig ist.
- gbin
Wenn dir die Idee gefällt und du in der Robotik arbeitest, probier copper-rs aus – es beruht auf demselben zugrunde liegenden Konzept, aber zur Compile-Zeit in Rust plus einer Graphbeschreibung.
Die neueste Ergänzung des Kernels ist ein profilgeführtes Scheduling-Feature, mit dem du die Nebenläufigkeit des Graphen noch zur Compile-Zeit optimieren kannst, basierend auf früheren Zeitmessungen aus seinen deterministischen Logs.
- samuell
Ich mag, dass das Codebeispiel darauf hindeutet, dass sie das Konzept der "Ports" aus der flussbasierten Programmierung übernommen haben, was wohl einer ihrer absolut stärksten Punkte ist:
player2.reveal -> player1.observe
player1.reveal -> player2.observe
Das heißt, Datenflussverbindungen zwischen einzelnen Ein- und Ausgängen zu ermöglichen und nicht nur zwischen Komponenten, was ansonsten zu einschränkend ist und typischerweise eine Menge zusätzlicher Syntax erfordert, um dieses Routing anderweitig zu bewältigen.
Habe darüber im Kontext von Workflow-Systemen schon vor langer Zeit geschrieben (https://livingsystems.cc/posts/workflows-dataflow-not-task-d...)
---
Edit 11:12 CET: Mir fällt auf, dass "benannte Ports" besser wiedergibt, was ich hier im Sinn hatte, wie in einem Kommentar weiter unten ausgeführt.
- XCabbage
Auf den ersten Blick verstehe ich nicht wirklich, welches Problem das lösen soll. Es wäre schön, ein einfaches Beispielprogramm mit Nebenläufigkeit in reinem Python zu sehen, dann eine Diskussion des lästigen Buchhaltungsaufwands, der nötig ist, um Nebenläufigkeitsfehler zu vermeiden, und welche Fallen leicht zu übersehen wären, und dann ein Beispiel, wie dasselbe mit Lingua Franca implementiert würde, samt einer Erklärung, wie es die Buchhaltung und die Fallen beseitigt.