技術

1.2. 簡単な言語

LLVMによるプログラミング言語の実装チュートリアル日本語訳
第1章 万華鏡: まえがきと字句解析器
第2節 簡単な言語

このチュートリアルでは、”万華鏡(Kaleidoscope)”(美しい・構造・見通しという意味を込めて命名)というお遊び言語(toy language)を用いて説明していく。
万華鏡は手続き型言語であり、関数の定義、条件分岐、数学的なもの等々を定義することを考慮に入れたものである。
チュートリアルを通して、if/then/else制御構造やforループ、ユーザ定義演算子、簡単なコマンドラインインターフェースによるJITコンパイル等々の機能を万華鏡に対して追加していく。
訳注: ここでは手続き型言語と明記されてるがそれは8章全て終了した時点における話であり、途中の6章までは関数型言語的である。

物事をシンプルに保ちたいので、万華鏡におけるデータ型は64ビット浮動小数点数(Cで言うところのdouble)のみとする。
つまり、全ての値は暗に倍精度であり、そして言語はデータ型の定義を必要としない。
これによって言語を素晴らしくそしてシンプルな構文にする。
例えば、次の簡単な例はフィボナッチ数を計算する。

# x番目のフィボナッチ数を計算する
def fib(x)
  if x < 3 then
    1
  else
    fib(x-1)+fib(x-2)

# 次の式は40番目の番号を計算する
fib(40)

万華鏡はまた、標準ライブラリ関数の呼び出しも可能とする。(LLVM JITでこれをやるのはとても簡単である。)
これは、標準ライブラリ関数を使う前にexternキーワードによって関数を定義出来る事を意味する。
(これは互いに再帰的な関数においても便利である。)

extern sin(arg);
extern cos(arg);
extern atan2(arg1 arg2);

atan2(sin(.4), cos(42))

これよりもっと面白い例として、色んな拡大率でマンデルブロ集合を表示する小さい万華鏡アプリが、第6章にある。
さぁこの言語の実装にとりかかっていこう!

コメントを残す

メールアドレスが公開されることはありません。



※画像をクリックして別の画像を表示