🍅
静的型付けスクリプト言語「Metro」
2 月より私が開発している静的型付けスクリプト言語 Metro を紹介します。
About
Rust のような構文で、Rust よりシンプル、そしてスクリプトなので手軽に実行できることが特徴です。また、1 から全て C++ で書かれており、Lex や Yacc などというライブラリは一切使用しておりません。
ビルド & HelloWorld
git clone https://github.com/bomkei/metro.git
cd metro
make release -j
./metro -c "println(\"Hello, World!\");"
サンプルコード
言語仕様については metro-docs/language.md を参照
ハローワールド
main 関数はいらないので 1 行で書けます。
println("Hello, World!");
変数を定義する
let
文を用いて変数を定義することができます。シャドウイングも可能。
let num = 123;
let num = "num is " + to_string(num);
println(num); // => num is 123
関数を定義する
フィボナッチ数を計算する関数の例。
fn fibo(n: int) -> int {
if n < 2 {
return 1;
}
fibo(n - 2) + fibo(n - 1)
}
println(fibo(10)); // => 89
構造体、列挙型
new
キーワードで構造体 Person
のオブジェクトを初期化子付きで作成し、表示する例です。
列挙型の要素は任意の型の値を一つもたせることができます。
enum Gender {
Red,
Blue,
Other(string)
}
struct Person {
name: string,
gender: Gender,
age: float
}
let person = new Person(name: "letz",
gender: Gender.Blue,
age: 17.5);
println(person);
// => Person{ name: "letz", gender: Gender.Blue, age: 17.5 }
拡張関数
impl
構文を使って、任意の型に拡張関数を追加することができます。
拡張関数は、メンバ関数と同じ構文で呼び出すことができます。
以下、int
の拡張関数 twice を定義して呼び出す例
impl int {
fn twice(self) -> int {
self * 2
}
}
pritnln(10.twice()); // => 20
Discussion