High-order Virtual Machine (HVM) - GC가 없는 순수 함수형 런타임을 소개합니다.
깃허브에서는 아래와 같이 소개하고 있고요..
High-order Virtual Machine (HVM) is a pure functional compile target that is lazy, non-garbage-collected and massively parallel. It is also beta-optimal, meaning that, in several cases, it can be exponentially faster than most functional runtimes, including Haskell's GHC.
한마디로, High-order Virtual Machine (HVM)는 GC가 없는 순수 함수형 런타임이라고 머릿속에 넣어두시면 됩니다.
간단한 사용방법은 아래와 같습니다.
Usage
1. Install it
First, install Rust. Then, type:
cargo install hvm
2. Create an HVM file
HVM files look like untyped Haskell. Save the file below as main.hvm:
// Creates a tree with `2^n` elements
(Gen 0) = (Leaf 1)
(Gen n) = (Node (Gen(- n 1)) (Gen(- n 1)))
// Adds all elements of a tree
(Sum (Leaf x)) = x
(Sum (Node a b)) = (+ (Sum a) (Sum b))
// Performs 2^n additions in parallel
(Main n) = (Sum (Gen n))
The program above creates a perfect binary tree with 2^n elements and adds them up. Since it is recursive, HVM will parallelize it automatically.
3. Run and compile
hvm r main 10 # runs it with n=10
hvm c main # compiles HVM to C
clang -O2 main.c -o main -pthread # compiles C to BIN
./main 30 # runs it with n=30
The program above runs in about 6.4 seconds in a modern 8-core processor, while the identical Haskell code takes about 19.2 seconds in the same machine with GHC. This is HVM: write a functional program, get a parallel C runtime. And that's just the tip of iceberg!
그리고 특징을 간단하게 정리해보자면 아래와 같습니다.
- Turing Machine과 Lambda Calculus를 결합한 Interaction Net이라는 새로운 계산 모델
- 러스트의 복잡한 차용모델 대신 하스켈의 평가 방식과 비슷한 lazy clone primitive를 사용
- Lazy하기 때문에 복제 비용이 무료에 가까우며 하스켈과 다르게 람다 내부에서 계산을 공유할 수 있음 (병렬처리에서 이득이 큼)
- SIC(Symmetric Interaction Calculus) 기반 메모리 모델을 선택하여 하스켈등에서 Graph Reduction이라 일컬었던 방식에서 요구했던 포인터 간접 참조 비용을 상당부분 제거함 (Optimal 을 찾을 수 있을때 이득)
- 즉, 일반 언어 런타임에 비해 GC가 없고, 병렬과 Optimal처리에 강점이 있음
좀 더 자세한 내용은 아래 웹페이지를 방문해보시면 좋을것 같고요..
오늘의 블로그는 여기까지고요..
항상믿고봐주셔서 감사합니다.