プログラミング
Jaithon 3: 完璧な構文を持つ高速プログラミング言語
Jaithon 3, a fast programming language with the perfect syntax (github.com)
要約
Jaithon 3は、Javaの構造とPythonやRustの要素を組み合わせた、動的に実行されガベージコレクションを備えたプログラミング言語です。LLM(大規模言語モデル)を開発に活用し、生産性を大幅に向上させながらも、人間の開発者がコードの品質とアーキテクチャを完全に管理しています。この言語は、型システム、パターンマッチング、トレイト、エラー処理などのモダンな機能を備え、高速な実行と拡張性を目指しています。
全文翻訳
Jaithon Javaの最良の部分とPythonを融合させた言語
言語ガイド
Jaithonとは
Jaithonは、動的に実行されガベージコレクションを備えた言語で、バイトコードVMを採用しています。Javaの構造(アーキテクチャのため)から多くのインスピレーションを受け、それ以外の要素はRustとPythonの組み合わせからインスピレーションを得ています。コアのプリミティブ実装部分を除けば、ほぼ全てのものがJaithon自体で書かれており、新しい機能で非常に簡単に拡張できる、ブートストラップされた言語となっています。
AIの利用
.jaiおよび.cファイル内のほとんどのドキュメントは、開発をスピードアップするために現在AIによって生成されていますが、言語の進化に伴い書き直されています。READMEとLANGUAGE.mdの大部分は手書きで、徹底的にレビューされており、現在100%正確です。コード内のDocstringは、LLMによって生成されたため、まだ不正確な場合があります。さらに、このリポジトリの生のコードの約80%は、エージェンティックコーディングツール(Claude Code)によって生成されました。私のワークフローは、まず機能やバグ修正を完全に手作業で設計し、その後LLMを使用して、それを完成させたり、コードベースに統合したり、プッシュ前に追加のバグを検出したり、パフォーマンスを向上させたり、誤った仮定を修正したりするのを支援してもらいます。結果として得られるコードは、私が完全に理解し、責任を持つものであり、私に属するものです。アーキテクチャも100%私自身の、100%人間が生成したもので、AIの支援は受けていません。私はエージェント支援コーディングをソフトウェアエンジニアリングの未来と見ています。これにより、Jaithon 3を一人で開発するよりもはるかに速く構築でき、重要な決定においては常に人間が関与し続けることができます。エージェンティックコーディングなしでは、Jaithon 3は存在しなかった可能性が高く、Jaithonは原始的なレベルに留まっていたでしょう。コードベース全体は私がレビューしており、私は自分を「バイブコーダー」とは見なしていませんし、Jaithonを「AIのスラッジ」とも考えていません。これは、LLMを生産性を指数関数的に高めるための乗数として使用した共同エンジニアリングです。
クイックスタート
```
git clone https://github.com/abhiramasonny/jaithon
cd jaithon
make # ビルド
./jaithon
make test # オプションですが、ベンチマークやテストなどを実行します
./scripts/install.sh # オプションですが、/usr/localにインストールします
```
Jaithonを実行するための要件は、C11コンパイラとmakeです。REPLにはreadlineが使用されます(存在する場合)。macOSでは、MetalおよびCocoaフレームワークがGUIおよびGPUモジュールを有効にしますが、それ以外はそれらなしでビルドおよび実行できます。
コマンド例
```
jaithon run program.jai # ファイルを実行
jaithon # REPL
jaithon check src/ # 実行せずに型チェック
jaithon fmt . # カノニカルフォーマッタ、オプションなし
jaithon test # テストを検出して実行
jaithon doc --out docs/api # APIドキュメントを生成
jaithon disasm program.jai # バイトコードリスト
```
REPLは、行間でバインディングを保持し、...プロンプトで未完了の入力を継続し、メタコマンドを受け付けます。:helpですべてのコマンドを表示できます。
.jaiコードの例
```jai
# let はイミュータブルですが、var はそうではなく、const はコンパイル時定数です
let name = "Jaithon"
var count = 0
const MAX = 1 << 16
# 型はオプションですが、指定されていればチェックされます
let ratio: float = 0.5
let names: list[str] = []
let lookup: dict[str, int] = {}
let maybe: int? = null # T? は T | null を意味します
if names.len() > 0 {
print(names[0])
}
print(maybe ?? -1) # null合体演算子
# ループと範囲
for i in 0..10 {
count += i
}
'outer: for row in grid {
for cell in row {
if cell == target {
break 'outer
}
}
}
# パターンマッチング
let kind = match code {
200 => "ok",
301 | 302 => "redirect",
400..=499 => "client error",
n if n >= 500 => "server error",
_ => "unknown",
}
# 列挙型
enum Shape {
Circle(radius: float),
Rect(w: float, h: float),
}
fn area(s: Shape) -> float {
return match s {
Shape.Circle(r) => math.PI * r ** 2,
Shape.Rect(w, h) => w * h,
}
}
# トレイトはデフォルトメソッドを持つインターフェースであり、型でもあります
trait Printable {
fn to_str(self) -> str
fn describe(self) -> str {
return f"<{self.to_str()}>";
}
}
# エラーはクラスです
fn load(path: str) -> str {
let file = io.open(path, "r")
defer {
file.close()
}
return file.read()
}
# 内包表記と遅延イテレータ
let squares = [x ** 2 for x in 0..10 if x % 2 == 0]
let first_ten = iter(source).map(parse).filter(is_valid).take(10).collect()
```
さらに詳しい情報は LANGUAGE.md を参照してください。examples ディレクトリも確認できます。
パッケージ
Jaithon標準ライブラリの外に出荷できるライブラリは、packages/ の下にあります。各パッケージは、ソース、テスト、バージョン、依存関係マニフェストを所有します。Jaithonは、チェックアウトされたワークスペースパッケージと、インストールされた share/jaithon/packages ディレクトリからパッケージを見つけます。
jaiplot は、ファイルおよびウィンドウバックエンドを備えた Matplotlib スタイルの図と軸のためのライブラリです。
jaitensor は、Metal 常駐の float32 テンソルと Keras スタイルの API を提供します。一般的なテンソル数学、フォーマットに依存しないデータセット、密なモデル、ReLU/sigmoid/tanh/softmax アクティベーション、モーメンタム SGD、Adam、検証、予測、JSON 重みファイルが含まれます。例には、MNIST と非線形スパイラル分類器が含まれます。
エラー
すべてエラーはこの形式なので、デバッグしやすいはずです。
```
error[E0301]: cannot assign to immutable binding `x`
--> examples/demo.jai:7:5
|
5 | let x = 1
| - `x` declared immutable here
...
7 | x = 2
| ^^^^^ assignment to immutable binding
| help: change the declaration to `var x = 1`
```
これらのコードの意味は以下の通りです。
コード エリア
E00xx 字句解析
E01xx 構文
E02xx 名前
E03xx バインディング
E04xx 型
E05xx マッチ
E06xx 関数
E07xx クラス
E08xx モジュール
アーキテクチャ
```
source --> lexer --> parser --> resolver --> type checker --> codegen --> VM
│ │ │ │ │ bytecode
│ │ │ │ tokens AST symbols + types + casts + caches + GC
│ │ │ │ values slots
│ │ │ values slots
│ │ values slots
│ tokens AST
tokens
```
貢献
```
make debug # -O0 -g, アサーションオン
make check # ツリー全体を型チェック
make test # フルスイート
make bootstrap # 差分フロントエンド検証
jaithon fmt --check . # フォーマットゲート
```
ライセンス
MIT. LICENSE を参照してください。Abhirama Sonny によって作成されました。