这是一条“与主工程并行的实验性路线”:主模组仍然是 Forge 1.12.2 + Java 8 (RFG);Modern Backend 则面向 Cleanroom Loader / Java 21+。
Modern Backend 位于:PrototypeMachinery/modern-backend/
它是一个 独立 Gradle 工程(不是主工程的 Gradle 子模块)。IDEA 的导入方式与注意事项请看:
主工程新增了一组“可选平台能力”的 API(用于在 Java 8 环境里通过 SPI/反射对接现代实现):
src/main/java/github/kasuminova/prototypemachinery/api/platform/PMPlatform.javasrc/main/java/github/kasuminova/prototypemachinery/api/platform/PMPlatformProvider.javasrc/main/java/github/kasuminova/prototypemachinery/api/platform/PMGeckoVertexPipeline.javasrc/main/java/github/kasuminova/prototypemachinery/impl/platform/PMPlatformManager.java
Modern Backend 通过 SPI 暴露 Provider:
modern-backend/src/main/resources/META-INF/services/github.kasuminova.prototypemachinery.api.platform.PMPlatformProvider
这允许主模组在“检测到现代后端存在”时使用更快的实现;否则自动回退到 Java 8 的默认路径。
Modern Backend 中包含一个“位置变换(PositionTransform)后端选择器”:
modern-backend/src/main/java/.../accel/PositionTransformBackends.java
其策略:
- 优先尝试通过反射加载
VectorPositionTransformBackend - 如果失败(常见原因:没有开启 incubator module、JDK 不支持、类不可用等)则回退到 scalar 实现
Vector 实现位于:
modern-backend/src/vectorAccel/java/.../accel/vector/VectorPositionTransformBackend.java
Vector 实现依赖 jdk.incubator.vector,运行时需要允许该模块解析,例如:
--add-modules=jdk.incubator.vector
在本工程的 Gradle 运行配置中,通过属性控制:
-Penable_vector_api=true
运行时设置 JVM System Property:
-Dpm.debugTransformBackend=true
会在初始化阶段输出当前选用的后端(vector / scalar)。
Modern Backend 的 vectorAccel sourceSet 仍然存在,但其输出会被打进同一个 mod jar:
- 运行时仍由
PositionTransformBackends反射决定是否使用 - 不再需要构建/复制单独的 accel jar
这样能减少工程复杂度,同时保留“未开启 Vector module 时自动回退”的安全性。
- 平台抽象:
PMPlatform*+PMPlatformManager - Modern 平台实现:
modern-backend/src/main/kotlin/.../platform/* - 顶点批处理管线(示例):
modern-backend/src/main/java/.../accel/BatchedVertexPipeline.java - JMH 基准:
modern-backend/src/jmh/java/.../bench/*