Herd 언어, 데이터 레이스(Data Race) 없는 스레딩(Threading) 구현
Herd는 모든 것이 값으로 전달되는 단순 인터프리터 언어(Simple Interpreted Language)로, 리스트와 딕셔너리(Dict)를 포함한 모든 것이 값으로 취급됨
참조 카운팅(Reference Counting)을 통해 불변성을 보장하며, 복사-쓰기(Copy-on-Write) 방식을 활용하여 성능을 최적화함
스레딩(Threading) 환경에서 데이터 레이스(Data Race)를 방지하며, 각 스레드는 데이터의 독립적인 복사본을 사용함
커뮤니티에서는 데이터 미저장 정책(Zero-Retention Policy)과 유사한 불변성(Immutability)으로 인한 장점과 성능에 대한 기대를 표명함
Herd 언어의 불변성(Immutability) 설계
Herd 언어는 모든 값을 불변(Immutable)으로 취급하여 데이터 미저장 정책(Zero-Retention Policy)과 유사한 특징을 가진다. 변수를 `var` 키워드로 선언하지 않으면 변경할 수 없으며, 리스트와 딕셔너리(Dict) 또한 불변성을 유지한다. 이러한 설계는 참조 카운팅(Reference Counting)과 복사-쓰기(Copy-on-Write) 방식을 통해 구현되며, 데이터 레이스(Data Race)를 방지하는 데 기여한다.
스레딩(Threading) 환경에서의 데이터 레이스(Data Race) 방지
Herd 언어는 스레딩(Threading) 환경에서 데이터 레이스(Data Race)를 방지하기 위해 각 스레드에 데이터의 독립적인 복사본을 제공한다. 병렬 처리(Parallel Processing) 시, 공유 자원에 대한 락(Lock)이나 채널(Channel) 없이 안전하게 데이터를 주고받을 수 있다. 이러한 설계는 개발자가 동시성 문제(Concurrency Issues)에 대한 고민 없이 병렬 프로그래밍을 할 수 있도록 돕는다.
성능 최적화 기법: 복사-쓰기(Copy-on-Write)
Herd 언어는 복사-쓰기(Copy-on-Write) 방식을 사용하여 성능을 최적화한다. 값의 복사본을 만들 때, 참조 카운트(Reference Count)를 증가시키고, 수정이 필요한 경우에만 실제 복사를 수행한다. 이러한 방식은 불필요한 복사를 줄여 성능을 향상시키며, 특히 핫 루프(Hot Loop)에서 원자적 연산(Atomic Operations)의 오버헤드를 줄이는 데 기여한다.
언어 설계 및 구현에 대한 커뮤니티 의견
커뮤니티에서는 Herd 언어의 독특한 설계(Unique Design)에 대해 다양한 의견을 제시했다. 특히, 데이터 미저장 정책(Zero-Retention Policy)과 유사한 불변성(Immutability)을 통해 안전한 동시성(Safe Concurrency)을 확보한 점에 주목했다. 또한, Swift와 유사한 아이디어를 차용했지만, 동적 타입(Dynamic Typing)을 사용하고, 사용자 정의 타입을 지원하지 않는다는 점에 대한 논의가 있었다.