ゲノム言語ATGC
プログラムとして実行できるfasta形式のプログラミング言語を作ってみた。いちおうチューリング完全(なはず)。
>HELLO_WORLD
ccggaccgcg gggcaccgcc ggcggaccgc cgccggaccg cccggcgacc gccgccccac
cgcccgccca ccgcggggga ccgccgcccc accgccgccg gaccgccgcc ggaccgccgg
cgcaccgcgg cgggaaccga cacatccata ccacagaacc caaaa
これはatgcというコマンドで解釈して実行します。
$ bin/atgc hello_world.fasta
Hello world!
ゲノム的にGCリッチなほうがいいだろうということで0と1にg,cをそれぞれ割り当てて数字を表現するようにしてる。exitコマンドには終止コドンを割り当てようかとも思ったが、なんとなくaaaにしてみた(polyA)。
しかも(というか当たり前だけど)blastでホモロジーサーチがかけられるし、multifastaにしておけばソース管理もできるうえに、データベース化してインデックスはっておけば、NCBIのツール群でコマンド一発で取り出せる。
ただ今回作ったHELLO_WORLDの配列はblastnだといい感じにヒットしなくて悲しかったので、blastxかけたらブラックコットンウッドからなんかひっかかった。
>gb|ABK94795.1| unknown [Populus trichocarpa]
Length=229
Score = 33.5 bits (75), Expect = 5.9
Identities = 14/21 (66%), Positives = 15/21 (71%), Gaps = 0/21 (0%)
Frame = +1
Query 100 GPPPDRRRTAAGTDTSIPQNP 162
GPPPDRRRT GT S P +P
Sbjct 209 GPPPDRRRTRQGTTKSEPASP 229
コンパイラ側のソースはこんな感じでほとんどWhitespaceだ。
VMとかは特にいじってないのでEsotericの本を参照のこと。
VMを使った中間言語方式の強力さを理解した。
Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

