diff --git a/CalcPi.jl/README.md b/CalcPi.jl/README.md new file mode 100644 index 0000000..c842641 --- /dev/null +++ b/CalcPi.jl/README.md @@ -0,0 +1,80 @@ +# CalcPi.jl + +JuliaからRustで実装されたMonte Carlo法によるπ計算ライブラリ(`calcpi-rs`)を呼び出すためのJuliaパッケージです。 + +## 概要 + +`CalcPi.jl`は、`calcpi-rs`ライブラリへのJuliaバインディングを提供します。Monte Carlo法を使用してπの値を計算できます。 + +## インストール + +```julia +using Pkg +Pkg.add(url="path/to/CalcPi.jl") +``` + +または、開発モードでインストール: + +```julia +using Pkg +Pkg.develop(path="path/to/CalcPi.jl") +``` + +## ビルド + +パッケージをビルドすると、Rustライブラリが自動的にコンパイルされ、C APIバインディングが生成されます: + +```julia +using Pkg +Pkg.build("CalcPi") +``` + +## 使い方 + +```julia +using CalcPi + +# MonteCarloPiインスタンスを作成 +calc = CalcPi.MonteCarloPi() + +# 100万サンプルでπを計算 +result = CalcPi.calculate(calc, UInt64(1_000_000)) +println("π ≈ $result") + +# リソースを解放 +CalcPi.release(calc) +``` + +## プロジェクト構造 + +``` +CalcPi.jl/ +├── deps/ +│ ├── build.jl # ビルドスクリプト +│ └── libcalcpi_rs.* # ビルドされたライブラリ(自動生成) +├── src/ +│ ├── CalcPi.jl # 高レベルAPI +│ └── C_API.jl # C APIバインディング(自動生成) +├── test/ # テストファイル +└── utils/ # C API生成ユーティリティ +``` + +## 開発 + +開発ガイドについては`DEVELOPMENT.md`を参照してください。 + +## テスト + +```julia +using Pkg +Pkg.test("CalcPi") +``` + +## 依存関係 + +- `CEnum.jl` - C enumのサポート +- `RustToolChain.jl` - Rust toolchainの管理(ビルド時のみ) + +## ライセンス + +このプロジェクトのライセンス情報については、ルートディレクトリのREADMEを参照してください。 diff --git a/README.md b/README.md index 3fd703f..6a67b99 100644 --- a/README.md +++ b/README.md @@ -1 +1,38 @@ # RustToolChainExamples.jl + +このリポジトリは、JuliaからRustコードを呼び出す方法を示すサンプルプロジェクトのコレクションです。 + +## プロジェクト構成 + +### メインプロジェクト + +- **`calcpi-rs/`** - Rustで実装されたMonte Carlo法によるπ計算ライブラリ +- **`CalcPi.jl/`** - `calcpi-rs`をJuliaから呼び出すためのJuliaパッケージ + +### サンプルプロジェクト + +- **`cargo_example/`** - Cargoを使ったRustプロジェクトの例 +- **`rustc_example/`** - rustcを直接使ったRustプロジェクトの例 + +## セットアップ + +### 前提条件 + +- Julia 1.6以上 +- Rust toolchain (rustc, cargo) +- [RustToolChain.jl](https://github.com/AtelierArith/RustToolChain.jl) パッケージ + +### インストール + +```julia +using Pkg +Pkg.add("RustToolChain") +``` + +## 使い方 + +各サンプルプロジェクトのREADMEを参照してください。 + +## ライセンス + +このプロジェクトのライセンス情報については、各サブディレクトリのREADMEを参照してください。 diff --git a/calcpi-rs/README.md b/calcpi-rs/README.md new file mode 100644 index 0000000..70221eb --- /dev/null +++ b/calcpi-rs/README.md @@ -0,0 +1,57 @@ +# calcpi-rs + +Monte Carlo法を使用してπ(円周率)を計算するRustライブラリです。 + +## 概要 + +このライブラリは、Monte Carlo法を用いてπの値を推定します。ランダムに生成した点が単位円内に含まれる確率からπを計算します。 + +## ビルド + +### 通常のビルド + +```bash +cargo build --release +``` + +### Cヘッダーファイルの生成 + +ビルド時に`cbindgen`が自動的にCヘッダーファイル(`include/calcpi.h`)を生成します。 + +## 出力ファイル + +ビルド後、以下のファイルが生成されます: + +- **ライブラリファイル**: + - Linux: `target/release/libcalcpi_rs.so` + - macOS: `target/release/libcalcpi_rs.dylib` + - Windows: `target/release/calcpi_rs.dll` + +- **Cヘッダーファイル**: `include/calcpi.h` + +## ライブラリタイプ + +このプロジェクトは以下の3つのライブラリタイプを生成します: + +- `cdylib` - C互換の動的ライブラリ(Juliaから呼び出すために使用) +- `staticlib` - 静的ライブラリ +- `rlib` - Rustライブラリ + +## 依存関係 + +- `rand = "0.8"` - 乱数生成 +- `cbindgen = "0.29"` - Cヘッダーファイル生成(ビルド時のみ) + +## Juliaパッケージとの連携 + +このライブラリは`CalcPi.jl`パッケージから使用されます。詳細は`../CalcPi.jl/README.md`を参照してください。 + +## テスト + +```bash +cargo test +``` + +## ライセンス + +このプロジェクトのライセンス情報については、ルートディレクトリのREADMEを参照してください。 diff --git a/cargo_example/README.md b/cargo_example/README.md index 45556bb..c015a6a 100644 --- a/cargo_example/README.md +++ b/cargo_example/README.md @@ -1,5 +1,47 @@ -Just run: +# cargo_example -```sh -$ julia run.jl +Cargoを使用してRustプロジェクトをビルドし、Juliaから実行する例です。 + +## 概要 + +このサンプルは、Cargoで管理されたRustプロジェクトをJuliaからビルド・実行する方法を示します。 + +## プロジェクト構造 + +``` +cargo_example/ +├── Cargo.toml # Rustプロジェクトの設定 +├── Project.toml # Juliaプロジェクトの設定 +├── run.jl # 実行スクリプト +└── src/ + └── main.rs # Rustのメインコード +``` + +## 使い方 + +### 実行 + +```bash +julia run.jl ``` + +または、Julia REPLから: + +```julia +include("run.jl") +``` + +## 動作の仕組み + +1. `RustToolChain.jl`の`cargo()`関数を使用してCargoコマンドを取得 +2. `cargo build --release`でRustプロジェクトをビルド +3. ビルドされたバイナリを実行 + +## 依存関係 + +- `RustToolChain.jl` - Rust toolchainの管理 + +## 関連プロジェクト + +- `rustc_example/` - rustcを直接使用する例 +- `calcpi-rs/` - より複雑なライブラリプロジェクトの例 diff --git a/rustc_example/README.md b/rustc_example/README.md index 8430f00..4a180e3 100644 --- a/rustc_example/README.md +++ b/rustc_example/README.md @@ -1,7 +1,50 @@ -# Usage +# rustc_example -Just run: +rustcを直接使用してRustコードをコンパイルし、Juliaから実行する例です。 + +## 概要 + +このサンプルは、Cargoを使わずにrustcを直接使用してRustコードをコンパイル・実行する方法を示します。シンプルな単一ファイルのRustプログラムに適しています。 + +## プロジェクト構造 ``` +rustc_example/ +├── main.rs # Rustのソースコード +├── main.jl # Juliaの実行スクリプト +└── Project.toml # Juliaプロジェクトの設定 +``` + +## 使い方 + +### 実行 + +```bash julia main.jl ``` + +または、Julia REPLから: + +```julia +include("main.jl") +``` + +## 動作の仕組み + +1. `RustToolChain.jl`の`rustc()`関数を使用してrustcコマンドを取得 +2. `rustc main.rs`でRustコードをコンパイル(`main`という実行ファイルが生成される) +3. コンパイルされたバイナリ(`./main`)を実行 + +## Cargoとの違い + +- **rustc**: 単一ファイルのコンパイルに適している。依存関係管理なし。 +- **Cargo**: プロジェクト管理、依存関係管理、ビルドシステムを含む。 + +## 依存関係 + +- `RustToolChain.jl` - Rust toolchainの管理 + +## 関連プロジェクト + +- `cargo_example/` - Cargoを使用する例 +- `calcpi-rs/` - より複雑なライブラリプロジェクトの例