F# Advent Calendar 2011 25日目の記事です。今日が最終日と思いきや、ご好評につきボーナス ステージ突入! とのことで。 もうちっとだけ続くんじゃ。
- 前日分: fsyacc/lex でDSL – F# Advent Clender 2011 12/24 « kazuk は null に触れてしまった
- 翌日分: F#初心者による in キーワドの考察:Gushwell's C# Dev Notes
- 翌々日分: FParsecでパースしてRoslynで組み立てる - ZOETROPEの日記
さて、F# は実に心憎いプログラミング言語です。
たとえば fsi(F# Interactive)、いわゆる REPL と呼ばれる対話型評価環境の存在です。API の動作をちょっと調べたいとき、コード片の実行結果をサクッと見てみたいとき、fsi は実に重宝します。なにより、fsi console を開いて、黒い画面に向かて白い文字列をつかつかと打ち込む行為そのものが、なにかハッカーっぽくてすごく気分のよいものです。
「捕獲・・・完了・・・!」
言っちゃうか、そんなことも。
もう一つ、F# にはハッカー気分に浸ることのできる特徴があります。それは、コンパイラのソースコードが公開されている、それもオープン ソース ライセンスで、ということです。標準ライブラリの詳しい挙動を確認したいとき、必要であれば、ソースコードという生の情報にまでたどることが可能です。そして、ソースはただ参照できるだけではありません。
「君のプログラミング言語で、コンパイラのビルド、できる?」
余裕ッス! そう、F# ならね。
ではでは。まず、F# コンパイラは F# で書かれており、これをビルドするためには、F# + .NET 4 の環境がセットアップされていることを前提とします。
次に、CodePlex 上で公開されるコンパイラ ソースコードを取得します。下記リンクから Source Code ページに飛んで、Last Version 枠内にある Download リンクをクリックしてダウンロードしましょう。
F# PowerPack, with F# Compiler Source Drops
落ちてきた fsharppowerpack-<ChangeSet>.zip 内の compiler\2.0\Aug2011.1 ディレクトリをどこか適当な作業ディレクトリに解凍します。あわせて、ディレクトリ名が Aug2011.1 ではわかりづらいですから、fsharp とでもリネームしておきましょう。
で、ここから実際にビルドしていくわけですが、必要な情報は fsharp ディレクトリ内に同梱の README.html に全部書いてあったりします。で、それをバッチにまとめたものが以下になります。
@echo setting environment
cd %~dp0
call run40.bat
@echo cleaning
cd src
if exist ..\Proto (rmdir /s /q ..\Proto)
if exist ..\Debug (rmdir /s /q ..\Debug)
if exist ..\Release (rmdir /s /q ..\Release)
@echo building a Proto Compiler
msbuild fsharp-proto-build.proj /p:TargetFramework=cli\4.0
@echo for faster future startup (optional)
@rem ngen install ..\Proto\cli\4.0\bin\fsc.exe
@echo building the F# core library and unittests
msbuild fsharp-library-build.proj /p:TargetFramework=cli\4.0
@echo building a bootstrapped F# Compiler
msbuild fsharp-compiler-build.proj /p:TargetFramework=cli\4.0
@echo unit tests for NUnit
@rem msbuild fsharp-library-unittests-build.proj /p:TargetFramework=cli\4.0
@rem msbuild fsharp-compiler-unittests-build.proj /p:TargetFramework=cli\4.0
build.bat など適当な名前を付けて fsharp ディレクトリにこれを保存、そして実行します。ビルドには5分前後かかるので、カプチーノでも作って待ちましょう。すると、fsharp\Debug\cli\4.0\bin に、fsc や fsi や標準ライブラリ群がどっさとできあがります。
そうして最後に、fsi を立ち上げて 1 + 1;; なり任意のコードを実行して、動作確認しておくとよいでしょう。自分でビルドしたコンパイラで実行されるコードには、いつもとは違う、新鮮な感動があります。
今日から君はコンパイラ ハッカー!
ここでは取ってきたソースコードを単にビルドしただけですが、いまや私たちは、コンパイラを、標準ライブラリを、自在に操るチケットを手に入れたのです。思う存分いじくり回しちゃいましょう。
とはいえ、ふつうの F# プログラマーは Visual Studio 搭載の Microsoft 謹製コンパイラを使う・使いたいことでしょう。コンパイラをいじくり倒して、ここはこう改良できるんじゃないかとよいアイデアが浮かんだら、UserVoice サイトがあります。
Visual Studio: Languages - F# – Customer Feedback for Microsoft
UserVoice サイトでは、Visual Studio 次期バージョンへの提案を広く受け付けています。ぜひ、あなたのアイデアをフィードバックしてください。あなたのアイデアが、次期 F# コンパイラに取り込まれるかもしれませんよ?
Enjoy together!