Ruby 안에 Haskell의 코드 임베딩 Haskell이라는 Gem 만든 요!

인사말



오늘은 코 귀걸이를 콧물처럼 붙인 사람을 보았습니다.
(아니 이것이 진짜로)

Haskell 코드를 Ruby에서 문자열로 전달하고 다른 스레드로 컴파일하고 Ruby 문자열로 가져 오는 Gem입니다.



(동적으로 Haskell의 코드를 생성할 수 있다!)

나는 전면적으로 "런타임에 느슨한 푹신한 유형을 확인하는 Haskell이라는 Gem"을 만들었지 만 조금 그렇게해서 Rubype으로 이름을 바꿨고 Haskell이라는 사람들에게 굉장히 재료 Gem을 넣었습니다.

Github



(내가 숙련하고 하고 있는 아자부.hs의 프로젝트로서 만들었습니다! 아자부에 연고가 있는 Haskeller는 꼭!)

Rubygems



모습


require 'haskell'

# Haskellをコンパイルするためのサンドボックスを作る
Haskell.invoke_sandbox!(File.expand_path('../', __FILE__))

# 別スレッドでコンパイル
Haskell.compile <<-HASKELL
  add :: Integer -> Integer -> Integer
  add x y = x + y
  result = add 1 2
HASKELL

# 待ち時間を楽しみましょう
while Haskell.compiling?
  # wait for....
end

# fooo↑
p Haskell.execute
#=> 3

# サンドボックスを潰すのをお忘れなく
Haskell.revoke_sandbox!

이런 식으로 Haskell을 실행할 수 있습니다. 반환값은 result 에 Haskell의 Show 그렇지 않으면 안됩니다.

다만 단순히 다른 쓰레드 세우고 Show typeclass 로 컴파일하고 있을 뿐이므로 컴파일 + 실행용의 놀이터를 GHC라든지 Haskell.invoke_sandbox! 로 만들거나 닫거나 한다는 상당히 힘든 일을 하고 있다.

사용해보기



오류 처리와 같은 스카스카이지만 소스 코드도 그렇게 긴 것이 아니므로 막히면 읽을 수 있습니다.

우선 퍼스트 컷도 퍼스 컷이므로 Haskell.revoke_sandbox!(사용할 수 있는 장애물을 아직 높게 하고 싶다)

GHC 넣기



"Haskell을 컴파일 할 수있는 무언가에 ghc라는 경로가 다니는 것이 필요합니다"
OS X 그렇다면
$ brew install ghc

에 오 k

Haskell(Gem) 넣기


$ gem install haskell

에 오 k

be rake 에서 Haskell 컴파일 시작 너무 재미



이것은 하스켈 젬 테스트의 모습입니다.

Gyazo

장점을 뒤집어 보았다.



이 젬을 정당화하는 이유를 비틀어 보았습니다.
  • 동적 하스켈 코드를 작성할 수 있습니다
  • Haskell에게 맡기고 싶은 처리를 다른 스레드로 시켜서 Ruby는 다른 일에 집중할 수 있다.
  • 재미
  • 좋은 웹페이지 즐겨찾기