Lingua Franca elimina las condiciones de carrera por construcción

Intuitive concurrent programming in any language

Lingua Franca es un lenguaje de coordinación que permite escribir programas concurrentes y distribuidos deterministas sin gestionar hilos ni sincronización manual. Desarrollado en UC Berkeley y respaldado por décadas de investigación, integra semántica temporal en su núcleo y facilita la transición de sistemas locales a distribuidos. No es un lenguaje nuevo: el código reactivo se escribe en C, C++, Python, TypeScript o Rust, y su análisis de causalidad detecta bucles inválidos.

En Lingua Franca, «al mismo tiempo» tiene un significado claro y preciso. Esto hace que la implementación sea simple e intuitiva, y garantiza que sea justa.
  1. samuell

    Me gusta que el ejemplo de código parezca indicar que tomaron el concepto de "puertos" de la programación basada en flujos, que podría ser uno de sus puntos más fuertes:

    player2.reveal -> player1.observe

    player1.reveal -> player2.observe

    Es decir, permitir conexiones de flujo de datos entre entradas/salidas individuales, y no solo entre componentes, lo que de otro modo es demasiado limitante y normalmente provoca un montón de sintaxis extra para manejar ese enrutamiento.

    Escribí sobre ello en el contexto de sistemas de flujo de trabajo hace tiempo (https://livingsystems.cc/posts/workflows-dataflow-not-task-d...)

    ---

    Edición 11:12 CET: Me doy cuenta de que "puertos con nombre" captura mejor lo que tenía en mente aquí, como se detalla en un comentario más abajo.

  2. XCabbage

    A primera vista, realmente no entiendo qué problema se supone que esto resuelve. Sería bueno ver un programa de ejemplo simple que involucre concurrencia escrito en Python puro, luego una discusión sobre la molesta contabilidad involucrada en evitar errores de concurrencia y qué trampas serían fáciles de pisar, y después un ejemplo de cómo se implementaría lo mismo usando Lingua Franca y una explicación de cómo elimina la contabilidad y las trampas.

  3. phyzome

    El elevator pitch necesita trabajo.

    "en cualquier lenguaje", pero luego la página dice "Actualmente soportamos C, C++, Python, TypeScript y Rust".

    "Lingua Franca es un lenguaje de coordinación" pero luego "No es un nuevo lenguaje de programación".

    Creo que veo hacia dónde va esto, pero las descripciones necesitan mucha mejora.

  4. gbin

    Si te gusta la idea y trabajas en robótica, prueba copper-rs, funciona sobre el mismo concepto subyacente pero en tiempo de compilación en Rust + una descripción de grafo.

    La última incorporación al kernel es una característica de planificación guiada por perfiles que te permite optimizar la concurrencia del grafo aún en tiempo de compilación basándose en mediciones de tiempo previas de sus registros deterministas.

  5. Garlef

    Creo que el ejemplo principal en la página de inicio es un poco contraintuitivo.

    Piedra, papel o tijera, pero ¿el grafo presenta la revelación como una reacción a la observación? ¿En un bucle? ¿Y en algún lugar hay un retardo mínimo de un mágico 1 segundo? ¿Por qué 1 segundo y no 0.1 segundos? ¿Puede esto acumularse y los jugadores desincronizarse? (Un poco extraño decir 'solo espera, lol' si el lenguaje apunta a resolver problemas en sistemas distribuidos).

    En general, el ejemplo sería mejor si separara el juego de los jugadores y también dividiera el bucle de repetición.

    Quizás permitir que ambos jugadores revelen a un anfitrión y luego reciban un resultado (y las elecciones) ~ De esta manera ambos jugadores pueden estar seguros de que la elección del otro jugador es independiente de la observación.

    (Sé que el ejemplo es 'correcto' en el sentido de que la elección se hace independientemente de la observación, pero creo que el ejemplo podría mejorarse si resolviera algunos de los problemas de coordinación involucrados en el escenario de manera más limpia a través de la arquitectura del código).

    En general, ¡me gusta bastante la idea de tener este metalenguaje políglota!

Más de este día

2026-10-17