とりあえず今できてる段階のをGitHubのリポジトリにプッシュしました
言語名はAegenです
2026/2/1: Aegen v0.1.0-scrap3
AegenからAegithに名称変更しました
2026/2/6: Aegith v0.1.0-scrap
前回の記事:
Aegenについて
| 影響された言語 | Rust, Go, Erlang |
|---|---|
| 文法に影響された言語 | Go, Rust, F# |
| パラダイム | マルチパラダイム |
| ライセンス | GPL-3.0 license |
バージョン管理について
v1.0.0までは正式リリースはしません
-scrap-
「正常に動作する」 or 「言語として実行できる」までこれがつきます。通常は連番です
(最初の1は省略します) -prev-
v1.0.0以降に破壊的変更がある場合、先行でリリースするバージョンです
命名由来
私がシマエナガが好きと言うわけで、学名(Aegithalos Caudacus Japonicus)から名付けました
文法
パッケージ類
パッケージ
package hoge::main
GoベースのRust風です
インポート
import aegen::std::fmt
こちらもGoベースのRust風です
関数定義
func double(i: i32) i32 { ... }
Goベースですが、引数はRustです
pubを前につけることで公開ができます
戻り値の型を省略でき、型推論が働きます
変数定義
let input = fmt.readln()
Rustと変わりません。Rust同様、ブロックも式なので、ブロックを使えます
構造体定義
struct Dog { ... }
構造体名の後にimpl、フレーム名と続けることでフレームを実装できます
この文法は変更される可能性があります
フィールド定義
val hoge = 0
F#のトークンを採用しました。デフォルトで不変です
関数定義同様、前にpubを付けて公開できます
関数定義
関数定義の書き方と変わりません
フレーム定義
frame Animal { ... }
インターフェイスですが、状態を持つことができます
フィールド定義
val hoge = 0
構造体のフィールド定義と変わりませんが、pubは使えません
このフレームを実装する構造体は必ずそのフィールドを実装しなければいけません
関数定義
func greet() { ... }
関数定義と変わりませんが、pubは使えません
前にabsを付けることで、このフレームを実装する構造体に実装を要求します
値
数値、文字、文字列の3つがあります
数値
書き方は.NETのと同じです。128ビットは独自です
| y | i8 |
|---|---|
| s | i16 |
| l (省略可) | i32 |
| L | i64 |
| LL | i128 |
| uy | u8 |
|---|---|
| us | u16 |
| u | u32 |
| UL | u64 |
| ULL | u128 |
文字
.NETと同じです
文字列
.NETと同じです
最後に
いつか、セルフホストができることを目指しています
まだ、全然実装できていませんが、これから頑張っていきます!