본문으로 건너뛰기
피드

Herd: 모든 것이 값(value)인 프로그래밍 언어

open-source 약 4분
vote
0
댓글
북마크

모든 것이 pass-by-value인 인터프리터 언어 Herd. Copy-on-Write + 레퍼런스 카운팅으로 사이드 이펙트 없는 프로그래밍을 제공하고, 구조적으로 데이터 레이스가 불가능한 멀티스레딩을 지원함.

  • 1

    모든 타입이 pass-by-value, COW + 레퍼런스 카운팅으로 불필요한 복사 최소화

  • 2

    참조 순환이 구조적으로 불가능해서 GC에 사이클 탐지 불필요

  • 3

    데이터 레이스가 불가능한 빌트인 멀티스레딩

  • 4

    Cranelift 기반 싱글패스 JIT로 CPython보다 빠른 성능

  • 5

    동적 타입 언어에서 mutable value semantics를 본격 탐구한 최초 사례

  • Herd는 모든 것이 pass-by-value인 인터프리터 언어임. 리스트든 딕셔너리든 함수에 넘기면 원본이 절대 변하지 않음. 사이드 이펙트 걱정 없이 로컬에서 마음대로 수정 가능

  • 핵심 트릭은 Copy-on-Write + 레퍼런스 카운팅 조합임:

    • 참조가 1개뿐이면 → 그냥 in-place 수정 (복사 안 함)
    • 참조가 2개 이상이면 → 얕은 복사 후 수정. 복사본은 참조 카운트가 1이니까 이후 수정은 다시 in-place
    • 이 방식의 보너스: 참조 순환(reference cycle)이 구조적으로 불가능해서 GC에 사이클 탐지가 필요 없음
  • Swift의 "Mutable Value Semantics"와 비슷한 아이디어지만, Swift는 정적 타입이고 훨씬 복잡함. Matlab/R도 배열에 COW를 쓰지만 참조 카운트가 1로 돌아왔을 때 안정적으로 추적을 못 해서 불필요한 복사가 더 잦음. PHP는 배열만, Perl은 보장을 깨는 방법이 너무 많음

언어 특징

  • 타입: () (유닛), bool, number (f64), string, list, dict, function
  • var로 선언해야만 뮤터블. 기본은 이뮤터블. 수정은 set 키워드 필요
  • 함수 문법이 독특함: \x y\ x + y 같은 식. Rust 클로저(|x|)에서 | 대신 \를 쓰고 ML 스타일 호출(f x y)을 섞은 느낌
  • 파이프 연산자 |로 체이닝 가능, |=로 in-place 수정도 됨
  • 패턴 매칭, 디스트럭처링(!), switch 표현식 지원

멀티스레딩이 되는데 데이터 레이스가 불가능

  • Parallel.parallelMap, Parallel.parallelRun 같은 빌트인 멀티스레딩 지원
  • 모든 뮤테이션이 현재 스레드의 복사본에만 영향을 주니까 데이터 레이스가 구조적으로 불가능함. 복잡한 데이터 구조를 동기화 걱정 없이 스레드 간 전달 가능. 다만 통신은 리턴 값으로만 가능

구현과 성능

  • 싱글패스 JIT 컴파일러로 런타임에 머신코드 생성, 백엔드는 Cranelift 사용
  • 값 표현은 NaN-boxing 방식이라 primitive 타입은 힙 할당 없이 처리됨
  • CPython보다는 빠르고, Node.js보다는 느린 수준. "모던 JS 런타임급은 아니지만 인터프리터 언어치곤 경쟁력 있음"
  • 현재 성능 병목: 아토믹 레퍼런스 카운팅 오버헤드 (특히 핫 루프), 싱글패스 JIT의 최적화 한계, 임포트 시 전체 컴파일 오버헤드

ℹ️참고

> 취미 프로젝트라 프로덕션 사용은 비추라고 본인이 직접 말하고 있음. 하지만 "동적 타입 언어에서 mutable value semantics를 제대로 탐구한 건 처음"이라는 주장은 꽤 설득력 있음

Swift의 value semantics를 동적 타입 언어로 가져온 실험. 프로덕션용은 아니지만 '값 의미론으로 모든 걸 해결하면 어떻게 될까?'라는 질문에 대한 깔끔한 답변.

댓글

댓글

댓글을 불러오는 중...

open-source

위키피디아에도 빅테크식 반노조 플레이북이 들어왔다

위키미디어 재단이 5월 열흘 사이 MediaWiki 장기 핵심 개발자를 해고하고, 자원봉사 편집자 요청을 처리하던 Community Tech 팀을 해산했다는 비판 글이다. 해고된 인력 상당수가 노조 조직 활동과 연결돼 있었고, 위키피디아 편집자들은 연대 파업까지 거론하고 있다. 재단은 2억9660만 달러의 준비금과 빠르게 성장하는 AI 대상 API 매출을 갖고 있어, 이 사안이 단순 비용 절감으로 보기 어렵다는 게 글의 핵심이다.

open-source

캘리포니아, 연령 확인법에서 리눅스 빼려는 수정안 추진

캘리포니아가 운영체제에 사용자 나이 확인을 요구하는 법안에서 대부분의 오픈소스 운영체제를 제외하는 수정안을 추진 중이다. 데비안, 페도라, 우분투, 아치, 리눅스 민트 같은 배포판은 빠질 가능성이 커졌지만, 스팀OS처럼 독점 앱 생태계와 연결된 플랫폼은 여전히 애매한 상태다.

open-source

마이크로소프트, 45년 전 86-DOS 소스코드를 오픈소스로 공개

마이크로소프트가 86-DOS 1.00 출시 45주년에 맞춰 지금까지 발견된 것 중 가장 오래된 DOS 소스코드를 공개했어. 팀 패터슨의 차고에 있던 도트 매트릭스 출력물을 스캔하고 옮겨 적어, 원본 바이너리와 바이트 단위로 동일하게 다시 컴파일되는 수준까지 복원한 게 포인트야.

open-source

밤부 랩, AGPLv3 위반 논란으로 오픈소스 커뮤니티와 충돌

3D 프린터 제조사 밤부 랩이 AGPLv3 라이선스 위반 논란에 휘말렸고, Software Freedom Conservancy가 두 건의 위반 사례를 확인했다는 내용이야. Louis Rossmann과 Gamers Nexus는 관련 개발자의 법적 방어를 위해 2만달러를 기부했고, 갈등의 핵심은 오픈소스 기반 생태계를 클라우드와 DRM으로 점점 닫아가려는 움직임이야.

open-source

플리퍼, 리눅스 기반 확장형 기기 '플리퍼 원' 공개

플리퍼가 기존 플리퍼 제로를 대체하는 후속작이 아니라, 리눅스 기반 네트워킹·확장형 기기인 플리퍼 원을 공개했어. RK3576 8코어 ARM 칩, 와이파이 6E, 듀얼 이더넷, NVMe, HDMI 4K 120Hz까지 넣으면서 장난감 같은 해킹 도구에서 훨씬 범용적인 리눅스 장비 쪽으로 방향을 넓히는 그림이야.