Hibana, Rust로 멀티파티 프로토콜을 하나의 안무로 실행하다
Choreographic Programming in Rust
Hibana는 Rust에서 하나의 글로벌 안무(choreography)로 최대 256개 역할의 유한 멀티파티 프로토콜을 실행하는 런타임 강제 커널이다. 각 역할에 맞게 투영된 컴팩트 프로그램과 일치할 때만 진행이 커밋되며, no_std 환경에서 할당자 없이 호출자 제공 저장소를 사용한다. 프로토콜 상태를 컴팩트 디스크립터로 유지해 상태 증가가 엔드포인트 타입 증가로 이어지지 않는다. 비동기 send, seq, par, 라우트, 롤을 지원하고 Transport 트레이트로 전송 계층과 분리된다. 각 엔드포인트에서 로컬 보장을 제공하며, 분산 보장은 전달·배포·코덱·스케줄링 조건에 의존한다.
Hibana는 네트워크 스택이나 분산 알고리즘을 구현하지 않는다. 각 연결된 엔드포인트에서 프로토콜을 강제하고, 그 로컬 결과를 분산 보장으로 끌어올리는 데 필요한 전달자, 배포, 코덱, 스케줄링 조건을 명시한다.
HN 토론
30- sebastianconcpt
우리 문화가 우리가 발명한 것들의 적용 가능성을 설명하는 방식이 훨씬 훨씬 훨씬 더 강력했으면 정말 좋겠어요.
추상화는 공들여 얻어야 하는 거예요.
실행하는 게 비싸서가 아니라, 이해하는 게 비싸기 때문이죠.
- dplyukhin
Rust의 기존 안무적 프로그래밍 라이브러리인 ChoRus [1]와 비교하면 어떤지 궁금하네요. 동기 부여를 원하시는 분들은 함께 있는 논문 [2]을 즐기실 수 있을 텐데, 정말 잘 쓰여졌어요. Lindsey Kuper의 그룹은 안무적 프로그래밍을 DSL로 대중화하는 데 엄청난 일을 해왔습니다.
안무적 프로그래밍을 컴파일러에 직접 통합하면 훨씬 더 많은 힘을 얻을 수 있습니다. 그 예로 제가 몇 년간 기여해온 Java 확장인 Choral을 보시면 됩니다 [3].
[1]: https://github.com/lsd-ucsc/ChoRus
- ch4s3
최근에 인기 있는 아이디어인 것 같네요. 이 논문[1]을 읽고 나서 제 액터 기반 언어[2]에 이걸 구현하게 됐어요. 액터 기반 동시성에서는 정말 말이 되는데, Rust 개발자들이 이걸 어떻게 생각하는지 궁금하네요. 그들이 흔히 동시성을 다루는 방식과는 좀 다르니까요.
- zanderwohl
README가 사람이 쓴 영어로 개정되었으면 정말 좋겠어요. Claudish는 제 뇌가 정보를 흡수하는 걸 싫어하게 만드네요.
- 6gvONxR4sf7o
언젠가는 안무적 프로그래밍이 언어 런타임에 내장되어서, 마치 특정 데이터를 RAM/캐시의 특정 부분에 수동으로 배치하는 것처럼 느껴지길 바랍니다. 좋은 아이디어 중 하나인데, 수동 구현은 항상 엉망인 것 같아요.