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に書いてあるので、そちらを参照。
[参考サイト]
frege-lein-plugin/example at master · Frege/frege-lein-plugin · GitHub