Python to Rust トランスパイラ - 型ヒント付きPythonコードをRustに変換
TsuchinokoはPythonの型ヒント付きコードをRustに変換するトランスパイラです。 Pythonの読みやすい構文でアルゴリズムロジックを書き、Rustの安全性とパフォーマンスを得ることができます。
カバレッジ: Python構文機能の58%(86機能)をサポート。変数、演算子、制御フロー、関数、クラス(継承含む)、@property、データ構造、コレクション(list/dict/set)、文字列メソッド、リソース管理(with文)、Result型によるロバストなエラー処理など、アルゴリズムプログラミングに必要な基本構造をカバーしています。
Tsuchinokoは汎用的なPythonコンパイラではありません。以下の理念に基づいて設計されています:
&[T], &str) を自動的に使用します。lambda x: x + 1 → |x| x + 1__init__とメソッドを持つ構造体的クラス[x*2 for x in nums if x > 0]{1, 2, 3} → HashSetx or default, Noneチェック+三項演算子arr[::2], arr[::-1]mutnumpy / pandas 等をIPC経由でサポートDynamicValue enum + matchHashMap<String, Value>Python (3.x) と Tsuchinoko生成Rustコード (rustc -Oでコンパイル) の速度比較です。
データ生成(LCG)とソート処理を含みます。
| アルゴリズム | データ数 (N) | Python | Tsuchinoko (Rust) | 高速化率 |
|---|---|---|---|---|
| Bubble Sort | 10,000 | 5.394s | 0.037s | 約146倍 🚀 |
| Radix Sort | 10,000,000 | 8.908s | 0.278s | 約32倍 🚀 |
hyperfine を使用してローカル環境 (Linux x86_64, V1.0.0) で計測。
git clone https://github.com/tanep3/Tsuchinoko.git
cd Tsuchinoko
cargo build --release
cargo install --path .
# 基本的な変換
tnk your_file.py
# 出力先指定
tnk your_file.py -o output.rs
# Cargoプロジェクト生成
tnk your_file.py --project my_project
# チェックのみ(出力なし)
tnk your_file.py --check
[!NOTE] 外部ライブラリ (
import) を使用する場合は、--projectオプションを使用して依存関係を含む Cargo プロジェクトを作成してください。
[!IMPORTANT] venv 環境が必要です: Resident Worker (NumPy/Pandas等) を使用するコードは、Python の仮想環境内で
tnkを実行し、生成されたバイナリも同じ venv 環境内で実行してください。source venv/bin/activate tnk script.py --project my_app cd my_app && cargo run --release
def bubble_sort(lists: list[int]) -> tuple[list[int], int]:
sorted_list: list[int] = list(lists)
list_length: int = len(sorted_list)
for i in range(list_length):
for j in range(list_length - i - 1):
if sorted_list[j] > sorted_list[j + 1]:
temp: int = sorted_list[j]
sorted_list[j] = sorted_list[j + 1]
sorted_list[j + 1] = temp
return sorted_list, list_length
fn bubble_sort(lists: &[i64]) -> (Vec<i64>, i64) {
let mut sorted_list: Vec<i64> = lists.to_vec();
let list_length: i64 = sorted_list.len() as i64;
for i in 0..list_length {
for j in 0..((list_length - i) - 1) {
if sorted_list[j as usize] > sorted_list[(j + 1) as usize] {
let temp: i64 = sorted_list[j as usize];
sorted_list[j as usize] = sorted_list[(j + 1) as usize];
sorted_list[(j + 1) as usize] = temp;
}
}
}
return (sorted_list, list_length);
}
エディタ内で直接 Python を Rust に変換!
Ctrl+Alt+P) - リアルタイムで変換結果を表示| 📖 セットアップガイド | Setup Guide |
詳細な機能一覧については以下を参照してください:
**kwargs サポートMIT License
Tane Channel Technology