본문 바로가기

좋아하는 것_매직IT/96.IT 핫이슈

High-order Virtual Machine (HVM) - GC가 없는 순수 함수형 런타임 (github.com/Kindelia)

반응형

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처리에 강점이 있음

좀 더 자세한 내용은 아래 웹페이지를 방문해보시면 좋을것 같고요..


오늘의 블로그는 여기까지고요..
항상믿고봐주셔서 감사합니다. 

728x90
300x250