SILang
動的型付け?な言語
関数宣言は動的であり動的型付き言語に静的型を導入したという感じが正しそう
v0.3.0に向けたアイデア
言語仕様
基本的に静的型付けな漸進的型付き言語
型が記述されないところはuntypedブロックで囲まれる必要がある
Rustのunsafeに触発された設計
typedな部分とuntypedな部分を分離することができる
こんな感じのコード
code:silang
= (:: hello string) "Hello, "
# 宣言なしでも変数を利用できる(型推論が働く)
= test "test"
# 宣言なしで関数代入はダメ(型推論が働かない)
# = fres (func)
untyped {
# untypedの外でanyを利用すると実行時エラーとなる
= (:: world any) "world!"
# untyped内でも宣言なしで変数を使うこともできる
= test "test"
# もちろんuntyped内で静的型宣言も可能
= (:: test2 string) "test2"
}
# untypedはブロックなので、any宣言した変数はuntypedブロック外に持ち込めない
実装
untyped句のブロックに遭遇したら何らかの方法でuntypedモードをオンにして、untypedモードがオンの場合のみ上記のような挙動を許せばいいのではないか
untypedブロックから外れたらuntypedモードをオフにする
遅延評価
遅延評価を行うようにする
実装
デフォルトでExpressionを渡すようにし、ユーザから明示的にevalや即時評価関数が呼ばれた場合のみ評価を行う
実装
現在は返り値にFactorをそのまま利用している