ログ日記

作業ログと日記とメモ

GHCJSを使えるようにしたログ

github.com

ソースからのインストールは出来たんだけど、それをstackで使う方法が分からなかった。
エラーがややこしいので元々入っているcabalを消したりhaskell-platformを消したりしてstackだけ動いている状態にして試した。
コンパイルが1時間近くかかる。長い。


取り敢えず動いたのはいいんだけど、emacsで不備が出る。stackで動かしたい。

https://docs.haskellstack.org/en/stable/ghcjs/#ghcjs
ここからのリンクの
https://github.com/matchwood/ghcjs-stack-dist
この設定をコピペして使う。

jsのビルドはスムーズになった。
だがやっぱり普通のHaskellのソースを書くようには行かない。


どうやらemacsのinteroが動かない。
github.com
closeになっているけどghcjs-base-stubもよく分からなかった。ghcjs --interactiveが無理だと厳しい?


よく考えたら素のHaskellが動くし
http://hackage.haskell.org/package/ghcjs-dom
この辺のGHCJS用のライブラリは普通のGHCで動くんだから、普通のGHCコンパイルし直してプログラミング中はHaskellプログラムとしておけば良さそうに思える。


コンパイルコンパイルコンパイル…長い。
github.com
そしてエラーが出る。
jsaddleのコンパイルでメモリ8GB以上持っていかれる。富豪的過ぎる…。
メモリを15GBにしてもスワップも持って行かれた。でも何とかコンパイル成功。

適当にsrcディレクトリをシンクしてGHCJS用のstackファイルとGHC用のstackファイルを用意して、ソースを書くときはGHC用のディレクトリで作業するようにすれば、何とか出来そうだった。



全体的に参考にしたのはこの辺。
qiita.com
labs.spookies.co.jp




それでstackの初期状態 "someFunc" を出力するプログラムをコンパイルしたらjsが1MBある。Closure Compilerで圧縮しても240Kある。
まあHaskellのbaseとかの環境が全部入っているとそうなるのか。Closure Compilerで未使用関数だと判別できない部分が多かったっぽい。


ちなみにClosure Compilerは

java -jar $DIR/compiler.jar \
     --compilation_level=ADVANCED_OPTIMIZATIONS \
     --define 'goog.LOCALE=ja' \
     --define 'goog.DEBUG=false' \
     --jscomp_off=checkVars \
     $GHCJSOUT \
     > $COMPILEDJS

こんな感じで、 --jscomp_off が必要。普通にやると関数の多重定義でエラーになる。