haiju's 開発メモ

開発に必要な情報を自分用にメモ

Frege開発環境を構築しサンプルコードをコンパイルして実行してみる

Fregeは去年の終わりくらいに参加した勉強会で、「Haskellっぽい

言語をコンパイルしたらJavaソースを生成する意味分からんのがある」

という情報で知っていた。

で、何それ?変過ぎるけど気になると思い続けて、2ヶ月以上経って、

ようやく実現したので環境構築方法とかをメモ。

[前準備]

1. JREは1.7以上をインストールしておく。

2. ClojureのビルドツールのLeiningenをインストールしておく。

**自分の環境にはClojure開発環境が既にあるので、そこから流用

[手順]

1. Leiningenで以下のコマンドを実行

 Clojure使いの皆さんにはおなじみですね(ΦωΦ)b

 -> % lein new frege myapp

[ログ]

Retrieving frege/lein-template/3.23.450/lein-template-3.23.450.pom from clojars
Retrieving frege/lein-template/3.23.450/lein-template-3.23.450.jar from clojars
Generating fresh 'lein new' frege project.

2. ~/myapp/src/myapp/ 以下にサンプルプログラムの Fibonacci.frが作成される

 ちなみに、内容はこんな感じ。

module Fibonacci where

-- lazy infinite sequence of Fibonacci numbers starting with a, b:
fibs a b = a : fibs b (a + b)

-- lazy infinite sequence of Fibonacci numbers (0, 1, 1, 2, 3, ...):
-- using 0L and 1L instead of 0 and 1 ensure type is inferred as [Long]
fibonacci = fibs 0L 1L

-- exposed API infers type as Long -> Long:
-- drop takes an Int so we need to cast from Long
fib n = head $ drop (Long.int n) $ fibonacci

-- example Frege main that can be run directly:
-- lein fregec :run Fibonacci
main _ = do
print "Fibonacci 12 = "
println $ fib 12

 

 3. 上のコードをコンパイルして実行してみる

-> % lein fregec :run Fibonacci

Fibonacci 12 = 144
runtime 0.06 wallclock seconds. 

 **コンパイルおよび実行方法については、~/srcディレクトリ上の

 README.mdに書いてあるので、そちらを参照。

 

[参考サイト]

github.com

frege-lein-plugin/example at master · Frege/frege-lein-plugin · GitHub

stackoverflow.com

seancorfield.github.io

github.com

github.com

clojars.org

github.com