Skip to content

実装の状況

このサイトは 0.20 系の仕様、つまり目標の言語を書いています。コンパイラはまだ仕様の全部を扱えません。今のコンパイラで何が動き、何がまだかをここにまとめます。各ページでも、未実装の機能には「予定」の注記を付けています。

ここでの「main」は emela リポジトリの main ブランチ(次のリリースに入るもの)を、「0.20.1」は最新のリリースを指します。

機能入った版詳しくは
関数、type、enum、opaque、パターンマッチ、末尾呼び出し、パイプ、List / Option、モジュール、@test、dbg0.20.0束縛と関数、データ型
後置の match、最初の参照で1回だけ評価する const0.20.0パターンマッチ
error、fail、escape、fails 節0.20.0エラー
effect、handler、use、with、@external0.20.0エフェクトとハンドラ、外部関数
suspend fn、Async、Immediate0.20.0中断する操作
フィールドを持つハンドラ、init と release、layer、State0.20.0状態と資源
fiber(Std.Fiber、Std.Cause、Std.Deferred)0.20.0並行処理
Console、Clock、Random、Env、FileSystem、Http のクライアント、Path、Instant / Duration、Platform0.20.0標準ライブラリ
パターンの負の数のリテラル(-1)0.20.1パターンマッチ
エフェクトのラベル(effect L of E、with L by P)mainエフェクトのラベル
C ターゲット(--target c、[build].target)mainターゲット
emela doc(pub な宣言の文書を HTML か Markdown に出す)mainemela コマンド
emela check、build、run、test、fmt、lsp0.20.0emela コマンド

仕様にあって、まだ動かないもの

Section titled “仕様にあって、まだ動かないもの”
機能予定今の動き
trait、impl、derive、Trait の制約の検査0.21trait の宣言は通るが、Trait の関数を呼ぶと not supported yet になる。== と文字列の補間は Trait を見ず、どの型にも構造のまま働く
Map、Set、Array0.21名前が見つからないエラーになる
JSON(Encode / Decode)0.21なし。Trait と一緒に入る
Semaphore、Queue(同時に走る fiber の数の上限)0.21なし
Http のサーバー0.21クライアントの send だけ
WebAssembly の出力(--target wasm)0.21 以降--target に渡せるのは js と c だけ。[build].target = "wasm" はエラー
Pome の依存([dependencies]、[replace]、Pome.lock)未定Pome.toml は有無と [build].target だけを読む。ほかの表は黙って無視する
emela pome add / install / update / remove / list、emela new未定コマンドがない
capture set(能力、fiber のハンドル、Deferred の持ち出しの静的な検査)0.22一部を実行時に検査し、defect にする(handler ... was used after release、fiber scope was used after it ended)
Bytes(バイナリのデータ)未定FileSystem と Http は UTF-8 のテキストだけを扱う
ブラウザで動く JS未定JS ターゲットは Node.js 18 以降、Deno、Bun を前提にする

0.20 で実行時の defect になる持ち出しは、0.22 でコンパイル時のエラーになります。0.20 でエラーになるプログラムは 0.22 でもエラーのままです。

ターゲットTier状況実行に要るもの
JS1既定。実装済みの機能がすべて動くNode.js 18 以降
WASM1出力はまだない
C2main にある。次のリリースで入るC11 のコンパイラ(cc、EMELA_CC)

同じプログラムはどのターゲットでも同じ観測可能な結果を返すことを仕様で求めています。Tier 2 のターゲットも意味は Tier 1 と同じで、同じテストスイートを通すことを条件にします。新しい機能だけは Tier 1 より遅れて入ってかまいません。

C ターゲットは、出力した C と C のランタイムを cc でコンパイルして native の実行ファイル target/emela/c/main を作ります。対象は macOS(arm64)と Linux(x86_64)で、Windows は後の版です。

C ターゲットでも、純粋な部分、エラーとエフェクト、suspend fn、fiber、Console、Clock、Random、Env、FileSystem、テストは動きます。次はまだです。

使えないもの出る診断
String.length、String.chars など、書記素クラスタの表が要る関数`String.length` needs the Unicode grapheme cluster tables, which target `c` does not support yet
String.split(s, "") を ASCII でない文字列に使う実行時の defect
Http(SystemHttp に C の実装がない)has no @external for target c のエラー
コールバックを受け取る外部関数コンパイル時のエラー

with Platform と書いても、Http を実際に使わなければ C ターゲットでビルドできます。たどれない関数の @external は検査しないためです。

0.y.z の範囲では、minor の版で言語に壊れる変更が入ることがあります。変更は emela リポジトリの CHANGELOG に記録しています。