Onion プログラミング言語¶
Onion は、JVMバイトコードにコンパイルされる静的型付けのオブジェクト指向プログラミング言語です。静的型付けの堅牢性と、簡潔で表現力豊かな構文、そしてJavaとのシームレスな相互運用性を兼ね備えています。
主な特徴¶
- 静的型付け - ローカル型推論によりコンパイル時にエラーを検出
- Null安全 - Nullable型 (
T?)、安全呼び出し (?.)・安全添字 (?[])・Elvis (?:)・非nullアサーション (!!)、スマートキャスト、nullable対応ジェネリクス - データ型 - レコード(分解宣言・ジェネリクス対応)、データ付きenum、sealed階層の網羅性検査つきパターンマッチ
- 簡潔なクラス定義 - プライマリコンストラクタ
class Point(val x: Int, val y: Int) - オブジェクト指向 - クラス、継承、インターフェース、メソッドオーバーロード
- 関数型要素 - ラムダ式、クロージャ、第一級関数
- モナド合成 - Option、Result、Future型のためのdo記法
- 非同期プログラミング - 関数型コンビネータを備えた組み込みFuture型
- Java相互運用 - Javaライブラリとフレームワークへの直接アクセス
- JVMターゲット - 効率的なJVMバイトコードにコンパイル
- 簡潔な構文 - 末尾ラムダをサポートするクリーンで読みやすいコード
クイックサンプル¶
// Hello World
println("Hello, World!")
// 継承を伴うクラス定義
class Calculator : JFrame <: ActionListener {
var result: Long
public:
def this {
// コンストラクタロジック
this.result = 0L;
}
def calculate(x: Long, y: Long): Long {
return x + y;
}
}
// ラムダ式
val filter: String -> Boolean = (line: String) -> {
return line.startsWith("ERROR");
}
// selectによるパターンマッチング
val value = 3
select value {
case 0, 1, 2:
println("Low")
case 3, 4, 5:
println("Medium")
else:
println("High")
}
// モナド合成のためのdo記法
val result: Option[Int] = do[Option] {
x <- parseNumber("42")
y <- parseNumber("10")
ret x + y
}
// Futureによる非同期プログラミング
val future: Future[String] = Future::async(() -> { return fetchData(); })
future.map { data => processData(data) }
.onSuccess { result => println(result) }
// 安全呼び出し演算子によるNull安全
val name: String? = getUserName() // Nullable型
val upper: Object? = name?.toUpperCase() // 安全呼び出し - nameがnullならnullを返す
val display: String = name ?: "unknown" // デフォルト値のためのエルビス演算子
はじめに¶
- インストールガイド - システムにOnionをセットアップ
- Hello Worldチュートリアル - 最初のOnionプログラム
- クイックスタート - 基本的な言語機能
言語ガイド¶
- 言語概要 - 言語の設計思想
- 基本構文 - 変数、演算子、式
- 変数と型 - 型システムとキャスト
- Null安全 - nullable型とスマートキャスト
- 制御フロー - if、ループ、select、例外処理
- 関数 - 関数定義とラムダ
- ラムダ式 - クロージャと末尾ラムダ
- クラスとオブジェクト - オブジェクト指向
- 継承 - サブクラスとインターフェース実装
- コレクション - リスト、マップ、組み込みパイプライン
- Javaとの相互運用 - Javaライブラリの利用
- スクリプティング - リテラル、derive!、law/example、パイプライン
リファレンス¶
- 言語仕様 - Onion言語の完全な仕様
- 標準ライブラリ - IO、Option、Result、Future、Rand、Assert、Timing、Json、Yamlなど
- コンパイラアーキテクチャ - コンパイラの内部構造
- エラーコード - よくあるコンパイルエラーと修正方法
- 末尾呼び出し最適化 - TCOの検出と今後の変換
サンプル集¶
- サンプル集の概要 - プログラム例の一覧
- 基本例 - Hello World、配列、ループ、入出力
- オブジェクト指向の例 - クラス、継承、インターフェース、委譲
- 関数型の例 - ラムダ、クロージャ、再帰、do記法、Future
- スクリプティングとCLIの例 - コマンドライン引数、プロセス実行、ファイル入出力
- JSONとHTTPの例 - JSON/YAMLの解析、HTTPクライアント
- 非同期・並行処理の例 - Future、非同期合成、do記法
- エラーハンドリングの例 - Option、Result、検証パターン
ツール¶
- コンパイラ(onionc) - Onionソースファイルを.classファイルにコンパイル
- スクリプトランナー(onion) - Onionスクリプトを直接実行(コンパイルして実行)
- REPL - 対話型REPL
コントリビューション¶
デザインノート¶
- ジェネリクス設計 - 消去ベースジェネリクスの設計
- パーサーリファクタリング - Builderパターンによる文法とASTの分離
- 品質基準 - 実用的品質の測定可能な指標
プロジェクト履歴¶
2005年にJavaで書かれたOnionは、パーサーにJavaCCを使用する以外は、Scala 3.3.7で完全に書き直されました。コンパイラは古典的なマルチフェーズアーキテクチャに従っています:
- パース - JavaCC生成パーサーが型なしASTを生成
- 書き換え - ASTの正規化と変換
- 型チェック - 型推論・名前解決・オーバーロード解決・typed AST 構築
- 末尾呼び出し最適化 - 自己末尾再帰のループ化
- 相互再帰最適化 -
@TailRecursiveグループの状態機械化 - コード生成 - typed AST から ASM で直接バイトコード生成
コミュニティ¶
ライセンス¶
Onionはオープンソースソフトウェアです。詳細はLICENSEをご覧ください。
このソフトウェアにはApache Software Foundationが開発したソフトウェアが含まれています。