openjdk/detroit-python: https://openjdk.org/projects/detroit
openjdk/detroit-python: https://openjdk.org/projects/detroit
Project DetroitのPython版(detroit-python)のGitHubリポジトリ
JavaOne 2026で発表された、JavaにCPythonランタイムを直接組み込むプロジェクト
Python 3.14が必要で、pyenvとpyenv-virtualenvでバージョン管理
javax.scriptのScriptEngineとして実装されており、JavaからPythonスクリプトを実行可能
jextractでPython C APIのバインディングクラスを自動生成する設計
ビルドはMaven(mvn clean verify)で行い、jpython.shでREPLまたはスクリプト実行が可能
V8版(detroit-js)との技術的差異
V8版はJNI(Java Native Interface)でC++ブリッジを構築するのに対し、Python版はFFM API(Project Panama / java.lang.foreign)を採用
PythonLibraryLoader.javaではLinker・SymbolLookup・FunctionDescriptor・MethodHandleなどFFM APIの中核クラスを直接使用
PyObject.javaではMemorySegment・Arena・MemoryLayoutを使いCPythonのPyObject*をJavaでラップ
V8版がC++の複雑なコールバック連携のためJNIを選んだのに対し、Python版はC言語APIであるPython C APIとのフラットな関数呼び出しにFFM APIが適合
jextractによるバインディング自動生成(Python_h.*)がFFM API採用の大きな動機
共通事項
両版ともJEP 472(JDK 24)への対応として--enable-native-access=org.openjdk.engine.pythonを起動スクリプトに明示指定
JPMSモジュールとして構成され、最小権限でのネイティブアクセス許可を実現
GraalVMのPolyglot APIとは異なり、本物のネイティブエンジンをJNI/FFMでJVMに横付けするアプローチ
Written by Claude Code