Skip to content

Onion プログラミング言語

Build Status

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"  // デフォルト値のためのエルビス演算子

はじめに

言語ガイド

リファレンス

サンプル集

ツール

コントリビューション

デザインノート

プロジェクト履歴

2005年にJavaで書かれたOnionは、パーサーにJavaCCを使用する以外は、Scala 3.3.7で完全に書き直されました。コンパイラは古典的なマルチフェーズアーキテクチャに従っています:

  1. パース - JavaCC生成パーサーが型なしASTを生成
  2. 書き換え - ASTの正規化と変換
  3. 型チェック - 型推論・名前解決・オーバーロード解決・typed AST 構築
  4. 末尾呼び出し最適化 - 自己末尾再帰のループ化
  5. 相互再帰最適化 - @TailRecursive グループの状態機械化
  6. コード生成 - typed AST から ASM で直接バイトコード生成

コミュニティ

ライセンス

Onionはオープンソースソフトウェアです。詳細はLICENSEをご覧ください。

このソフトウェアにはApache Software Foundationが開発したソフトウェアが含まれています。