c# Roslynを使ってbrainf*ckをコンパイルする
kamiyaowl/brainfuck-gui · GitHub
c# T4でbrainf*ckを実装してみる - AccessViolation Exception
でやったbrainf*ck、動的にコードを生成する雑さは怒られそうな気がするけど何より問題なのがT4を実行できる環境がないとそもそも実行するためのコードすらコンパイル時に決め打たなきゃいけないところ
Roslyn
.NET Compiler Platform ("Roslyn")
最近のニュースとか名前でググって下さい、要はコンパイラです。
メタプログラミング的な手法は式木を使ったり色いろあるのですが今回はすでにT4で直接実行できるソースが吐き出せるのでRoslynでコンパイルして実行するように書き換えた。
まとめ
var engine = new ScriptEngine(); engine.ImportNamespace("System"); engine.ImportNamespace("System.Text"); var session = engine.CreateSession(); session.Execute("Console.WriteLine(""Yey!"")");
まぁスクリプトエンジンとして実行したいならこんなかんじで行けます。
セッションごとになっているので前に実行した変数等の利用もできます。
なぜかインクリメントを配列に対してするとぬるりで例外吐くのは何なんだろうか
そんな感じでT4をRoslynに置き換えました。おしまい*1