跳转至

贡献指南

项目采用 MIT 许可证(LICENSE)——这份许可证就是全部法律安排;没有 CLA,也没有它之外的任何贡献者协议。本页讲实用的一半:怎么得到一个能工作的构建、”完成”意味着什么、一个好的改动长什么样。

得到能工作的构建

先完整走一遍安装:钉死的 Julia 1.12.x、打开示 例的 CMake、草稿环境、跑一次 quickstart。本页的一切都假设在你改任何东西 之前这一套是通的。如果改动之前就构建不起来,你先发现了一个值得报告的 bug,再谈写代码。

完成的定义:门

这个仓库里的改动,门说了算才算完,编译通过不算。按成本递增:

  1. 干净构建。 CMake 配置加构建,无新警告。
  2. 文档门。 .venv-docs/bin/mkdocs build --strict 与对拍脚本必须零警 告通过——每个页面在两个语言下都存在、标题已翻译、sync 戳一致、且没 有页面泄漏机器特征串。动了 docs/ 下任何一页,就两条都跑。
  3. 验收门。 验收门的示例门,手工跑,哨兵行全 绿。桥或提取的改动欠的是全套,不是离得最近的那个示例——过去一次修复 带着回归上线,只有布局敏感的门当场抓住。
  4. 改动够得着的产物要重建。 Julia 侧包的改动使 sysimage 与 AOT 构建失 效(从零重建)。

门是刻意手工的(已知限制)。这让它成了 你的活。

一个好的改动长什么样

范围小、按逻辑单元提交。 仓库的提交历史按一个逻辑单元一个 commit 书 写——功能、它的测试、它的示例、它的文档、它的环境变更分开提交,不是一 个大盘子落地。保持这个粒度;正是它让这里的 bisect 真的 bisect 得动。

响亮失败,绝不静默。 本仓库风格是带原因的显式错误压过安静的默认值: 无效句柄带着可经 get_last_error_message() 读到的消息、过期格式拒绝解析 并提示重新生成、欠解析的运行断言报错而不是产出看着挺像的错数。一个添了 静默回退的贡献是在跟整个代码库对着干。

遵守已记录的契约。 公共 ABI 是 bridge.h;Fortran 界面是 src/julia_binding.f90 与 src/julia_sdk.f90;Julia 侧是 FortranBridge 包。扩展其中任何一个意味着更新它上面那层(以及它的文档页),而不是绕过 它。

机器特征一律脱敏。 示例、脚本、文档不得硬编码本机安装路径、主机名或 用户名——用占位符、环境变量覆盖或可执行文件相邻探测,正如现有代码的做 法。文档门对散文强制这条;代码和注释按同一个标准要求自己。

文档跟着代码走。 用户可见的行为变化要同步更新两个语言的相关页面, 并把 sync 戳前移。改了某道门查什么的 PR,在同一提交序列里更新 验收门。

每个说法都有出处。 文档与注释里的数字来自验证运行,出处到产出它的脚 本;你改了一个数字的来源,就改这个数字。没有出处的测量是未来某个人的错 误假设。

Pull request

向主分支(main)开 PR,附上:

  • 改动做什么、为什么(有 issue 就带上链接);
  • 你跑了哪些门、哨兵输出是什么;
  • 动了 src/bridge/ 的,说明为什么桥内部的 GC 与 线程规则对你的改动仍然成立。

评审会聚焦这个项目在乎的失败模式:错误路径覆盖、static 缓存的 GC 扎根、 版本钉死、诚实的文档。如果评审人要你补跑一道你跳过的门,那正是评审在按 设计工作——收据见教训。

接下来去哪

  • 仓库导览——你的改动将住在哪里。
  • 桥内部——桥改动会被评审人对照的那套规则。
  • 延伸阅读——嵌入与打包机制背后的上游手册。