パターンマッチの実装(3)

型でのマッチングの実装を一部実装しました。
これによって関数のオーバーロードが出来るようになりました↓

print(10)            # print_intが呼ばれる
print("Hello World") # print_stringが呼ばれる

関数定義時にはこんな感じで書きます↓

fib(n!Int): fib(n-1) + fib(n-2)
fib(0): 0
fib(1): 1

これでInt以外でfibを呼ぶとパターンマッチエラー(型エラーではなく)になります。これまでと同じく、型のパターンマッチのコードもJITコンパイルで生成しています。

静的型付け言語と違って、rowlでは型によるマッチングであっても実行時検査で行うので、実行時オーバヘッドがあります。
例えば、上の定義でfib(36)を走らせた場合は、4.66秒だったのが6.91秒と遅くなりました。今回整数演算でもパターンマッチを行うようしたので、だいぶ大きなオーバヘッドになっています。

一方、型パターン使用時はJITコンパイラが型の情報を使って最適化をかける事が出来るので、最終的に性能的にもプラスにはたらくことを期待しています。rowlはRuby等と違ってグローバルに関数定義情報を持っていて、高速化が楽になるように作っています。