F#談話室(4) LT
F#とトランスレータ
七誌
自己紹介
● F#の構文が好きで触っている人。
– 関数型言語に造詣が深いわけではない。
– 一部機能しか使わないため、知らないことが多い。
– 暇なときにCoreのソースを眺めたりはしている。
● GUIを組むのが好きだが、猫も杓子もWebという
状況に取り残されていた。
– しかし最近マルチプラットフォームGUIに絶望して、よう
やくHTML5/JavaScriptに手を出した
● JavaScriptが動的で柔軟なのは理解したけど、今
の所、静的型付でないのが気持ち悪い。
馴れ初め
● 私の中でC#絶頂期だった2005年頃、周りから関
数型・関数型という声が聞こえ始めた。
● 当時は今ほどHaskellの知名度は高くなく、どちら
かというとSICPの影響でLISP系が見直され始め
たような雰囲気だった。(独断と偏見)
● 私はC#でWinFormsアプリばかり作っていたの
で、GUIを作るのが便利になるなら試してもいい
んだけど・・・という言い訳で何もしなかった。
● そんなときに知ったのがF#。
– WinFormsなどC#の資産がそのまま使える!
構文との苦闘
● とりあえずF#の勉強もそこそこに、C#で作ってい
たものをF#で作り始めた。
● C#脳のままなので、まずクラスから書く。
● クラスの構文があまりにも違っていて、さっぱり分
からなかった。
● 数年の放置後、どうにかC#直訳調で書けるように
なったので、ノウハウを対訳としてまとめた。
C#プログラマのためのF#入門
http://d.hatena.ne.jp/n7shi/20090722
トランスレータ
● はっきり言って直訳ならわざわざ勉強するまでも
ないことなので、自動で変換したくなった。
● サポートする文法を限定すれば、構文解析結果
をほぼ1対1で出力できるはず。
● F# Advent Calendarのネタを兼ねてC#からF#へ
のトランスレータを作成。開発言語はC#。
● トランスレータ自身をF#に変換して、ビルドしたバ
イナリをSilverlightでホスティングして公開。
言語変換でいきなり実用を目指す
http://d.hatena.ne.jp/n7shi/20101226
JavaScript
● トランスレータを放置しているうちに、Silverlightが
ほぼ消えてしまった。
● 人に見せようにも動かす環境がない!
● F#用のトランスレータから派生した俺々言語用を
ベースに、JavaScript用を作成。
– ただしAPIの違いは手動修正が必要。
● それを使ってC#からF#へのトランスレータを
JavaScriptに変換・修正。ブラウザ上で動作。
C# to F# translator
http://7shi.bitbucket.org/cs2fs/
F#入門
● トランスレータで済むようなことはさっさと飛ばし
て、よりF#らしい部分に集中した方が良い。
● とは言えある程度は慣れが必要なので、とりあえ
ず何か作ってみるという方針でF#入門を主催。
– あまり成功しているとは言い難い。
– 「何が良いのか分からなかった」と言われたり。
– C#で別に困っていない、という例のアレ。
● 書いてみて気に入った人だけ残れば上等?
– 職人修業は育成ではなく選別だ、という例のアレ。
– 分母が大きくないと通用しないやり方、というオチ。
アイデア
● 各自の判断に任せるだけだとお後があまりよろし
くないので、もうちょっと踏み込みたい。
● 関数型言語的なちょっと「怖い」世界を楽しむよう
な方法はないだろうか。
● 何か課題を出して書いてもらう、競技プログラミン
グ的な何かとか?
– F#初心者でも何かやる余地があるような方法でないと
単なる振り落としになってしまう。
– 手続型ベタベタなF#コードを提示して、関数型すっきり
なコードに書き換えるとか。
FunScript
● F#からJavaScriptへのトランスレータ。
https://github.com/ZachBray/FunScript
● HTML5アプリをF#で開発できる!
● F#コードをfscでビルドしてアセンブリから変換。
● TypeScriptの型プロバイダでAPIをインポート。
● すごい仕組みだけど、ちょっと重厚すぎるかも。
– TypeScriptみたいに変換・動作確認までブラウザで完
結すれば、一気に使いやすくなりそう。
– fscやコアライブラリすべては大きすぎるので、やるなら
サブセットとして仕様を切り分けるところから?
ご清聴ありがとうございました

F#とトランスレータ