연결됨 다시 연결 중 다시 연결 연결 실패 연결 일시 중지 복구 실패
Sollang 0.3 — 흐름을 저장하고 네이티브 세계와 연결하다 대표 이미지

Sollang 0.3 — 흐름을 저장하고 네이티브 세계와 연결하다

공개 로그
@dimohy 2026.07.27 8분 102팔로우

지연 실행 Stream과 EventStream, C ABI·공유 라이브러리·COM·C++ 연동, Windows/Linux Stage3 검증까지 마친 Sollang 0.3 개발 기록입니다.

Sollang 0.3을 릴리스했습니다.

이번 작업의 출발점은 단순한 질문이었습니다.

스트림을 변수에 담아 두었다가 나중에 each로 흘려보낼 수 있을까?

결론부터 말하면, 이제 가능합니다. Stream<T>는 결과를 미리 담아 두는 컨테이너가 아니라 지연 실행 계획입니다. 변수에 저장해도 중간 컬렉션을 즉시 만들지 않고, 최종 소비 시점에 값이 하나씩 흐릅니다. 마우스 이동이나 클릭처럼 끝이 정해지지 않은 입력은 별도의 EventStream<T>으로 다루도록 나눴습니다.

여기서 멈추지 않고 Sollang이 실제 시스템 언어의 경계까지 자연스럽게 이어지도록 네이티브 연동도 크게 확장했습니다.

  • 여러 C ABI 함수를 하나의 네이티브 모듈로 묶는 문법
  • 인자 형식으로부터 Int64, Float64 같은 타입을 추론하는 호출
  • ABI가 안정적인 구조체 전달과 반환
  • Sollang 코드를 Windows DLL과 Linux .so로 내보내 다시 사용하기
  • Windows COM의 QueryInterface, AddRef, Release 수명주기
  • Clang AST를 이용한 C++ 바인딩과 자동 C-shim 생성
  • C++ 예외를 Sollang Result로 넘기는 안전한 경계
  • affine handle과 RAII 기반의 결정적 자원 해제

중요한 원칙은 문법의 아름다움만이 아니라 비용을 숨기지 않는 것이었습니다. 스트림은 불필요한 중간 컨테이너를 만들지 않고, 네이티브 호출 경로에서는 호출당 wrapper allocation과 aggregate 복사가 생기지 않도록 검증했습니다. “제로 메모리”라는 과장된 말 대신, 피할 수 있는 할당과 복사를 만들지 않는 설계를 목표로 삼았습니다.

웹 플레이그라운드도 Stage2 컴파일러와 의미를 맞췄습니다. 범위 each, fold, 스트림, 컨테이너, 표준 입력, 알 수 없는 함수 호출 진단을 전수 확인했고, 모바일에서는 설명 영역이 코드보다 앞을 가리지 않도록 하단으로 이동했습니다. ->=>는 Sollang에서 흐름 그 자체이므로 신텍스 하이라이트에서도 더 분명하게 보이도록 손봤습니다.

검증은 이전보다 훨씬 단단하게 만들었습니다.

  • Windows 전체 예제 866/866 통과
  • Linux 전체 예제 865/865 통과
  • Windows/Linux Stage2 검증 통과
  • Windows/Linux Stage3 고정점 검증 통과
  • C ABI, 공유 라이브러리, COM, C++ C-shim 회귀 검증 통과
  • LLVM emitter 분할 ABI에서 호출당 aggregate copy 0 확인
  • 컴파일러 warm median Windows 약 6971ms, Linux 약 7476ms
  • 기존 성능 기준 대비 5% 회귀 게이트 통과

또 하나 오래 걸린 작업은 거대해진 self-hosted LLVM/text 구현을 현대적인 모듈 구조로 나누는 일이었습니다. 단순히 파일을 쪼개는 데 그치지 않고 상태 소유권과 ABI 경계를 명시해, 유지보수성과 컴파일 성능을 함께 지킬 수 있도록 했습니다.

릴리스에는 Windows x64와 Linux x64용 self-contained 컴파일러, 검증된 Stage3 컴파일러, SHA-256 체크섬을 함께 담았습니다.

이번 0.3은 기능 하나를 추가한 릴리스라기보다, Sollang의 핵심 문장인 **“값은 흐르고, 비용은 드러나야 한다”**를 스트림과 네이티브 경계 양쪽에서 실제 구현으로 증명한 릴리스에 가깝습니다.

0 댓글

댓글 0개

댓글을 남기려면 로그인해 주세요.

아직 이어진 댓글이 없습니다. 첫 댓글을 남겨 보세요.

지식 로그 연결이 잠시 끊겼습니다. 다시 연결 ×