Intuïtief concurrent programmeren in elke taal | Lingua Franca

Lingua Franca is een coördinatietaal voor efficiënte, deterministische, multi-threaded, tijdgevoelige, embedded en gedistribueerde programma's. Het is het resultaat van decennia aan onderzoek en biedt een meer reproduceerbaar gedrag dan andere frameworks voor concurrent programmeren, waaronder threads, pub-sub, actors en service-georiënteerde architecturen.

Kernfuncties

Deterministische Concurrentie

Lingua Franca biedt een eenvoudige manier om deterministische multi-threaded en gedistribueerde applicaties te schrijven, waardoor zorgen over threadbeheer, synchronisatie en race-condities worden weggenomen.

Ingebouwde Timing-semantiek

Timing is ingebed in de kern van Lingua Franca. Hierdoor kunnen ontwikkelaars tijdgevoelige taken met precisie afhandelen, zonder de complexe timing-logica die gewoonlijk vereist is bij concurrent programmeren.

Vereenvoudigde Distributie

Lingua Franca maakt een naadloze overgang mogelijk van enkelvoudige naar gedistribueerde systeemarchitecturen met minimale aanpassingen, door de complexiteiten van het programmeren van gedistribueerde systemen te abstraheren.

Architectuur in Lingua Franca

Hieronder volgt een voorbeeld van een applicatie-architectuur in LF:

import Player from "../Player.lf"

main reactor RockPaperScissors {
  // Initialiseer hier twee Player-reactoren
  player1 = new Player(id=1)
  player2 = new Player(id=2)

  // Maak verbindingen tussen hen
  player2.reveal -> player1.observe
  player1.reveal -> player2.observe
}

Bijschrift: Lingua Franca-diagram voor het RockPaperScissors-programma (player1:Player, player2:Player, observe, reveal).

Een nieuw programmeerparadigma

Lingua Franca is de eerste reactor-georiënteerde coördinatietaal. Het stelt je in staat om reactieve componenten te specificeren en deze samen te voegen. Lingua Franca elimineert race-condities door constructie, maakt het eenvoudig om getimed gedrag te specificeren en verwijdert de noodzaak voor handmatige synchronisatie.

Neem als voorbeeld een spelletje "steen, papier, schaar" waarbij twee spelers hun keuze gelijktijdig moeten onthullen. In Lingua Franca heeft "op hetzelfde moment" een duidelijke en precieze betekenis. Dit maakt de implementatie eenvoudig en intuïtief, en garandeert dat het spel eerlijk verloopt. Als de Player-klasse de keuze van de ander zou observeren voordat deze zijn eigen keuze onthult, zou de causaliteitsanalyse van Lingua Franca een causaliteitslus vinden en aangeven dat het programma ongeldig is.

Geen nieuwe programmeertaal

Met Lingua Franca vergeet je thread-bibliotheken of message-passing middleware, maar blijf je de talen gebruiken die je leuk vindt. De blokken reactieve code die de functionaliteit van de reactoren vormen, worden geschreven in de programmeertaal naar keuze. Momenteel wordt ondersteuning geboden voor:

  • C
  • C++
  • Python
  • TypeScript
  • Rust

Open-source en ondersteund door onderzoek

Lingua Franca is oorspronkelijk ontwikkeld aan UC Berkeley, waar het werd beïnvloed door decennia aan onderzoek naar computationele modellen.

Kort na de start slootten onderzoekers van de Universiteit van Kiel en de TU Dresden zich aan bij het team. Zij droegen bij aan diagramsynthese en lay-outtechnologie, zeer efficiënte runtime-implementaties en diverse compiler-verbeteringen. Sindsdien is er samengewerkt met experts in real-time systemen van UT Dallas, specialisten in embedded systemen van NTNU, en onderzoekers op het gebied van netwerken en beveiliging van Hanyang University en ASU.