ソースからビルド¶
Onionコンパイラをソースからビルドする完全ガイドです。
前提条件¶
必要なソフトウェア¶
- Java Development Kit (JDK) 17 以降
バージョン確認:
インストール:
- macOS: brew install openjdk@17
- Ubuntu/Debian: sudo apt install openjdk-17-jdk
- Windows: Adoptium からダウンロード
- SBT(Scala Build Tool)
バージョン確認:
インストール:
- macOS: brew install sbt
- Ubuntu/Debian: 公式ガイド に従う
- Windows: MSIインストーラをダウンロード
- Git
リポジトリのクローン¶
ビルド¶
基本的なコンパイル¶
プロジェクト全体をコンパイルします。
これにより以下が行われます。 1. 依存関係のダウンロード(初回のみ) 2. JavaCC文法からのパーサー生成 3. ScalaおよびJavaソースファイルのコンパイル
想定される出力:
[info] compiling ... Scala sources and ... Java sources to target/scala-3.3.7/classes ...
[success] Total time: 45 s
クリーンビルド¶
生成されたファイルをすべて削除してから再ビルドします。
インクリメンタルコンパイル¶
SBTは自動的にインクリメンタルコンパイルを行います。変更したファイルのみが再コンパイルされます。
テスト¶
すべてのテストを実行¶
特定のテストスイートを実行¶
パターンに一致するテストを実行¶
ディストリビューションの作成¶
スタンドアロンJAR¶
すべての依存関係を含むfat JARを作成します。
出力: target/scala-3.3.7/onion.jar
JAR のデフォルトメインクラスはコンパイラ(onionc)なので、java -jar はソースを
.class にコンパイルします:
スクリプトを実行するには ScriptRunner メインクラスを呼びます(onion ランチャが
行っているのと同じです):
ディストリビューションパッケージ¶
完全なZIPディストリビューションを作成します。
出力: target/onion-dist.zip
内容:
onion-dist/
├── onion.jar # メインコンパイラJAR
├── lib/ # 依存関係
│ ├── asm-9.8.jar
│ ├── scala-library-3.3.7.jar
│ └── ...
├── bin/ # 実行ファイル
│ ├── onionc
│ ├── onion
│ └── onion-repl
├── run/ # サンプルプログラム
│ ├── Hello.on
│ ├── Array.on
│ └── ...
└── README.md
展開して使う:
開発ビルド¶
継続的コンパイル¶
変更を検知して自動的に再コンパイルします。
SBTから実行¶
JARを作成せずに実行します。
スクリプトランナーを実行:
推奨REPLを実行:
ベンチマークスイートを実行:
コンパイルプロファイルを出力:
対話型SBT¶
SBTシェルを起動:
その後、コマンドを実行:
パーサー開発¶
文法の修正¶
-
JavaCC文法を編集:
-
パーサーを再生成:
パーサーは以下の場合に自動的に再生成されます。
- 文法ファイルが生成済みパーサーより新しい場合
- sbt clean を実行した場合
パーサーの場所¶
生成されたパーサー:
target/scala-3.3.7/src_managed/main/java/onion/compiler/parser/
├── JJOnionParser.java
├── Token.java
├── TokenManager.java
└── ...
IDE設定¶
IntelliJ IDEA¶
- Scalaプラグインをインストール
- プロジェクトを開く:
File > Open > build.sbt を選択 - インデックス作成が完了するまで待つ
- ビルド:
Build > Build Project
実行設定:
- メインクラス: onion.tools.CompilerFrontend
- プログラム引数: path/to/source.on
- 作業ディレクトリ: $PROJECT_DIR$
Visual Studio Code¶
- Metals拡張機能をインストール
- プロジェクトフォルダを開く
- インポートが完了するまで待つ
- コマンドパレットからビルド:
Metals: Compile workspace
トラブルシューティング¶
パーサー生成に失敗する¶
メモリ不足¶
SBTのメモリを増やします。
または .sbtopts を編集:
依存関係の問題¶
Ivyキャッシュをクリア:
コンパイルエラー¶
ScalaとJavaのバージョンを確認:
要件を満たしていることを確認: - Scala 3.3.7 - Java 17+
ビルド設定¶
build.sbt¶
主な設定:
// バージョンは sbt-dynver によって git タグから導出される
scalaVersion := "3.3.7"
name := "onion"
organization := "org.onion_lang"
// 依存関係
libraryDependencies ++= Seq(
"org.ow2.asm" % "asm" % "9.8",
"net.java.dev.javacc" % "javacc" % "5.0",
"org.scalatest" %% "scalatest" % "3.2.19" % "test"
)
// メインクラス
mainClass := Some("onion.tools.CompilerFrontend")
コンパイラオプション¶
Scalaコンパイラオプション:
Javaコンパイラオプション:
パフォーマンスのヒント¶
より速いビルド¶
- インクリメンタルコンパイルを活用(デフォルト)
- 必要な場合以外は clean を避ける
- JVMメモリを増やす
- 複数のコマンドはSBTシェル内で実行
並列コンパイル¶
SBTはデフォルトで並列コンパイルを行います。スレッド数を調整する場合:
プラットフォーム固有の注意¶
macOS¶
JAVA_HOME の設定が必要な場合があります。
Linux¶
十分なメモリがあることを確認:
Windows¶
PowerShellまたはGit Bashを使用します。パスはバックスラッシュを使います。
sbt assembly
# ソースをコンパイル:
java -jar target\scala-3.3.7\onion.jar Hello.on
# またはスクリプトを実行:
java -cp target\scala-3.3.7\onion.jar onion.tools.ScriptRunner Hello.on
次のステップ¶
- 開発ガイド - Onionへの貢献
- コンパイラアーキテクチャ - 内部構造
- テストの実行 - テストガイド