Lingua Franca, 어떤 언어로든 직관적인 동시성 프로그래밍을 가능하게 하다

Intuitive concurrent programming in any language

UC Berkeley에서 시작된 Lingua Franca는 리액터 지향 조정 언어로, 경쟁 조건을 구조적으로 제거하고 타이밍 의미론을 내장해 결정론적 동시성 프로그래밍을 지원한다. C, C++, Python, TypeScript, Rust 등 기존 언어로 리액터 본문을 작성할 수 있으며, 단일 시스템에서 분산 시스템으로의 전환도 최소한의 수정으로 가능하다. Kiel University, TU Dresden 등 여러 연구 기관이 참여해 런타임과 컴파일러를 개선했다.

Lingua Franca에서는 '동시에'가 명확하고 정확한 의미를 갖는다. 이는 구현을 단순하고 직관적으로 만들며, 공정성을 보장한다.
  1. samuell

    코드 예제를 보면 플로우 기반 프로그래밍에서 "포트" 개념을 가져온 것 같은데, 이게 아마 그 접근법의 가장 강력한 장점 중 하나일 겁니다:

    player2.reveal -> player1.observe

    player1.reveal -> player2.observe

    즉, 컴포넌트 사이가 아니라 개별 입력/출력 사이에 데이터 흐름 연결을 가능하게 하는 건데, 그렇지 않으면 너무 제한적이고 보통 그런 라우팅을 처리하려면 추가 문법이 많이 필요하죠.

    예전에 워크플로 시스템 맥락에서 이에 대해 쓴 적이 있습니다 (https://livingsystems.cc/posts/workflows-dataflow-not-task-d...)

    ---

    11:12 CET 수정: 아래 댓글에서 자세히 설명했듯이, 제가 여기서 염두에 둔 것을 "명명된 포트(named ports)"라고 하는 게 더 정확하다는 걸 깨달았습니다.

  2. XCabbage

    처음 봐서는 이게 어떤 문제를 해결하려는 건지 잘 모르겠네요. 일반 Python으로 작성된 동시성 관련 간단한 예제 프로그램을 보여주고, 동시성 오류를 피할 때 따르는 번거로운 부기(bookkeeping) 작업과 빠지기 쉬운 함정에 대해 논의한 다음, 같은 것을 Lingua Franca로 구현하면 어떻게 되는지, 그리고 그것이 어떻게 그 부기와 함정을 없애는지 설명해 주면 좋겠습니다.

  3. phyzome

    엘리베이터 피치(핵심 소개)가 좀 더 다듬어져야 할 것 같습니다.

    "어떤 언어로든"이라고 해놓고서는 페이지에는 "현재 C, C++, Python, TypeScript, Rust를 지원합니다"라고 하네요.

    "Lingua Franca는 조정(coordination) 언어입니다"라고 해놓고서는 "새로운 프로그래밍 언어가 아닙니다"라고 하고요.

    이게 무엇을 목표로 하는지는 알 것 같은데, 설명이 많이 개선되어야겠네요.

  4. Garlef

    랜딩 페이지의 메인 예제가 좀 직관에 반하는 것 같아요?

    가위바위보인데 그래프에서는 reveal을 관찰에 대한 반응으로 표현하나요? 루프 안에서요? 그리고 어딘가에 마법 같은 1초의 최소 지연이 있네요? 왜 1초고 0.1초는 아닌가요? 이게 누적되어 플레이어들이 동기화에서 벗어날 수 있나요? (분산 시스템의 문제를 해결하는 걸 목표로 하는 언어라면 '그냥 기다려, ㅋㅋ'는 좀 이상하네요).

    전반적으로 예제가 게임과 플레이어를 분리하고 반복 루프도 따로 떼어내면 더 좋을 것 같습니다.

    어쩌면 두 플레이어가 호스트에게 reveal하고 결과(와 선택)를 받도록 하면 어떨까요 ~ 이렇게 하면 두 플레이어 모두 상대의 선택이 관찰과 독립적임을 확신할 수 있습니다.

    (예제가 '올바르다'는 건 압니다. 선택이 관찰과 독립적으로 이루어진다는 점에서요. 하지만 시나리오에 관련된 조정 문제 중 일부를 코드 아키텍처를 통해 더 깔끔하게 해결하면 예제가 개선될 수 있을 것 같습니다.)

    전반적으로 이런 다국어 메타 언어라는 아이디어는 꽤 마음에 듭니다!

  5. gbin

    아이디어가 마음에 들고 로보틱스 분야에서 일한다면 copper-rs를 써보세요. 같은 기본 개념 위에서 동작하지만 Rust의 컴파일 타임에 그래프 설명과 함께 작동합니다.

    커널에 최근 추가된 기능은 프로파일 기반 스케줄링인데, 결정론적 로그에서 이전 타이밍 측정값을 기반으로 그래프의 동시성을 여전히 컴파일 타임에 최적화할 수 있게 해줍니다.

이 날의 다른 글

2026-10-17