<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Native - tag - 沐木</title><link>https://oldletter.cn/tags/native/</link><description>Native - tag - 沐木</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sat, 11 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://oldletter.cn/tags/native/" rel="self" type="application/rss+xml"/><item><title>工程正确性（四）：构建成功不等于交付物可用</title><link>https://oldletter.cn/posts/engineering-correctness-04-coordinate-precision/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><author>mumu</author><guid>https://oldletter.cn/posts/engineering-correctness-04-coordinate-precision/</guid><description><![CDATA[<blockquote>
<p>系列导航：<a href="/posts/engineering-correctness-01-green-tests-can-be-wrong/" rel="">11</a> | <a href="/posts/engineering-correctness-02-crypto-interoperability/" rel="">12</a> | <a href="/posts/engineering-correctness-03-database-migrations/" rel="">13</a> | <a href="/posts/engineering-correctness-04-coordinate-precision/" rel="">14</a></p></blockquote>
<p>编译器显示成功，只能证明源码在当前环境生成了产物。用户安装的是 JAR、npm 包或容器，真正的验收对象是这些文件能否被目标运行时加载，Native 资源是否随包分发，文档示例是否使用了正确入口。发布链路如果只跑单元测试，问题会在上传后才出现。</p>
<p>GMKit 的发布整理说明了这条边界：Java 的 <code>gmkit-sm9</code> 需要把多平台 Native 运行时装入同一个 JAR，TypeScript 包还要检查 tarball 内容和生产依赖。源码测试通过并不能证明打出来的包包含这些资源。</p>
<div class="mermaid" id="id-2" data-mermaid-definition="Zmxvd2NoYXJ0IFRECiAgICBzdWJncmFwaCBCdWlsZFvmupDnoIHpqozor4HkuI7mnoTlu7pdCiAgICAgICAgZGlyZWN0aW9uIExSCiAgICAgICAgU291cmNlW&#43;a6kOeggeS4juWQkemHj10gLS0&#43;IFZlcmlmeVvmtYvor5XkuI4gcGFyaXR5XSAtLT4gUGFja2FnZVvmnoTlu7rliLblk4FdCiAgICBlbmQKICAgIHN1YmdyYXBoIEF1ZGl0W&#43;WItuWTgeWuoeiuoV0KICAgICAgICBkaXJlY3Rpb24gTFIKICAgICAgICBJbnNwZWN0W&#43;WMheWGheWuueS4jiBjaGVja3N1bV0gLS0&#43;IEluc3RhbGxb5bmy5YeA546v5aKD5a6J6KOFXSAtLT4gU21va2Vb6L&#43;Q6KGM5pe2IHNtb2tlXQogICAgZW5kCiAgICBzdWJncmFwaCBSZWxlYXNlW&#43;WPkeW4g10KICAgICAgICBkaXJlY3Rpb24gTFIKICAgICAgICBQdWJsaXNoW&#43;WPkeW4g&#43;S7k&#43;W6k10KICAgIGVuZAogICAgUGFja2FnZSAtLT4gSW5zcGVjdAogICAgU21va2UgLS0&#43;IFB1Ymxpc2gKICAgIEluc3BlY3QgLS0&#43;fOe8uui1hOa6kOaIluWkmuS9meaWh&#43;S7tnwgUmVqZWN0W&#43;mYu&#43;aWreWPkeW4g10=">flowchart TD
    subgraph Build[源码验证与构建]
        direction LR
        Source[源码与向量] --&gt; Verify[测试与 parity] --&gt; Package[构建制品]
    end
    subgraph Audit[制品审计]
        direction LR
        Inspect[包内容与 checksum] --&gt; Install[干净环境安装] --&gt; Smoke[运行时 smoke]
    end
    subgraph Release[发布]
        direction LR
        Publish[发布仓库]
    end
    Package --&gt; Inspect
    Smoke --&gt; Publish
    Inspect --&gt;|缺资源或多余文件| Reject[阻断发布]</div><h2 id="先确定交付清单">先确定交付清单</h2>
<p>Java 发布清单写明 group、artifact、版本、依赖、服务文件和 Native 路径。<code>gmkit-sm9</code> 的 JAR 中应有 <code>META-INF/gmkit/sm9-native.properties</code>、各平台运行时和摘要文件，加载逻辑按当前平台选择资源并校验 checksum。Native 库缺失时启动要给出明确错误，不能回退到一个“未实现但返回成功”的空实现。</p>]]></description></item></channel></rss>