?shù)與數(shù)學(xué)工具鏈驗(yàn)證:從 `math.isPrime` 到 Hangar 編譯快照 `prime.test.w_compile_tf-aws.md`)
編程語言編譯器云原生語言運(yùn)行時(shí)【免費(fèi)下載鏈接】wingA programming language for the cloud ?? A unified programming model, combining infrastructure and runtime code into one language ?項(xiàng)目地址https://gitcode.com/gh_mirrors/wi/wing點(diǎn)擊查看免費(fèi)下載本篇技術(shù)指南以 Wing 倉庫中tests/sdk_tests/math/prime.test.w的編譯快照為切入點(diǎn)講解 Wing 標(biāo)準(zhǔn)庫math.isPrime的實(shí)現(xiàn)原理、素?cái)?shù)的判定邊界以及 Hangar 測(cè)試框架如何把一次wing compile -t tf-aws的執(zhí)行結(jié)果固化為可審計(jì)的 Markdown 快照。讀完本文你將能讀懂prime.test.w_compile_tf-aws.md中每一行 JSON 的含義理解純數(shù)學(xué)函數(shù)編譯到 AWS 目標(biāo)平臺(tái)為何產(chǎn)生最小化的 Terraform 配置并掌握在本地復(fù)現(xiàn)編譯與測(cè)試的完整流程。一、快照文件是什么Hangar 的編譯產(chǎn)物審計(jì)機(jī)制tools/hangar/__snapshots__/test_corpus/sdk_tests/math/prime.test.w_compile_tf-aws.md是 Wing 工具鏈測(cè)試套件 HangarHangar - Wing Toolchain Test Suite見 tools/hangar/README.md為測(cè)試文件 tests/sdk_tests/math/prime.test.w 生成的一等公民快照。文件名遵循{測(cè)試文件}_{測(cè)試用例}_{目標(biāo)平臺(tái)}.md的約定由 createMarkdownSnapshot 中的邏輯拼接生成const snapPath join( snapshotDir, test_corpus, dirname(relativePath), ${wingFile}_${testCase}_${target}.md );其中testCase取值為compile或testtarget取值為tf-aws或sim。因此同一份測(cè)試源碼在__snapshots__下會(huì)有兩份快照本文重點(diǎn)分析的編譯快照prime.test.w_compile_tf-aws.md以及運(yùn)行快照 prime.test.w_test_sim.md??煺漳夸浀母窂接?paths.ts 定義export const snapshotDir path.join(hangarDir, __snapshots__);快照的作用是讓每次 CI 運(yùn)行時(shí)編譯產(chǎn)物與運(yùn)行輸出都被凍結(jié)下來任何行為變更例如isPrime算法改動(dòng)導(dǎo)致 Terraform 輸出變化都會(huì)在快照比對(duì)中暴露從而實(shí)現(xiàn)可審計(jì)、可回放的回歸測(cè)試。二、被測(cè)源碼prime.test.w的雙階段斷言設(shè)計(jì)快照頭部鏈接指向的測(cè)試源碼 tests/sdk_tests/math/prime.test.w 只有 21 行卻完整覆蓋了 Wing 語言兩個(gè)階段的驗(yàn)證模式bring math; assert(math.isPrime(1) false); assert(math.isPrime(2) true); assert(math.isPrime(3) true); assert(math.isPrime(4) false); assert(math.isPrime(10) false); assert(math.isPrime(11) true); assert(math.isPrime(12) false); test inflight prime numbers { assert(math.isPrime(1) false); assert(math.isPrime(2) true); assert(math.isPrime(3) true); assert(math.isPrime(4) false); assert(math.isPrime(10) false); assert(math.isPrime(11) true); assert(math.isPrime(12) false); }preflight 階段文件頂層7 條assert在編譯/部署前的編排階段立即執(zhí)行驗(yàn)證isPrime在 preflight 上下文中可直接調(diào)用inflight 階段test inflight prime numbers代碼塊同樣的 7 條斷言在運(yùn)行時(shí)simulator 或云端函數(shù)中執(zhí)行驗(yàn)證isPrime同樣可以進(jìn)入運(yùn)行時(shí)閉包。測(cè)試用例的選擇很有代表性1是特殊的邊界既非素?cái)?shù)也非合數(shù)2是最小素?cái)?shù)4是最小合數(shù)10/11/12覆蓋了合數(shù)-素?cái)?shù)-合數(shù)的連續(xù)區(qū)間能有效檢驗(yàn)算法對(duì)平方根邊界sqrt(4) 2的處理是否正確。三、底層實(shí)現(xiàn)math.isPrime的算法與邊界語義isPrime的實(shí)現(xiàn)位于 SDK 數(shù)學(xué)模塊 packages/winglang/sdk/src/math/math.tspublic static isPrime(n: number): boolean { if (n 1) { return false; } for (let i 2; i Math.sqrt(n); i) { if (n % i 0) { return false; } } return true; }從源碼可以得出三點(diǎn)明確語義n 1一律返回false包括0、1與負(fù)數(shù)。1按數(shù)學(xué)慣例既不是素?cái)?shù)也不是合數(shù)這里統(tǒng)一按非素?cái)?shù)處理與測(cè)試中的assert(math.isPrime(1) false)完全吻合試除上限為Math.sqrt(n)只需檢查到n的平方根即可判定這是經(jīng)典的試除法優(yōu)化。isPrime(4)時(shí)i 2恰好命中sqrt(4)返回falseisPrime(11)時(shí)sqrt(11) ≈ 3.316試除2、3均不整除最終返回true輸入為num類型Wing 的num對(duì)應(yīng) IEEE 754 雙精度浮點(diǎn)數(shù)因此從源碼結(jié)構(gòu)看該實(shí)現(xiàn)并未對(duì)小數(shù)、NaN、Infinity等非常規(guī)輸入做顯式防御實(shí)際使用中應(yīng)以正整數(shù)調(diào)用為主。SDK 中Util類還提供了abs、sqrt、factorial、fibonacci、combinations等 40 余個(gè)靜態(tài)方法packages/winglang/sdk/src/math/math.tsisPrime是其中唯一負(fù)責(zé)素?cái)?shù)判定的函數(shù)。官方 API 文檔對(duì)它的簽名為bring math; math.isPrime(n: num);參數(shù)n為待判定素性的數(shù)字返回值boolean見 docs/api/04-standard-library/math/api-reference.md。四、逐行解讀main.tf.json為什么一個(gè)素?cái)?shù)測(cè)試只產(chǎn)出 5 行 Terraform快照正文只有一節(jié)## main.tf.json完整內(nèi)容如下{ //: { metadata: { backend: local, stackName: root }, outputs: {} }, provider: { aws: [ {} ] } }這份 JSON 是wing compile -t tf-aws在 compileTest 流程中從target/prime.test.w.tfaws/main.tf.json讀取并清洗后寫入快照的。逐層解讀//.metadataCDKTF 生成的元信息塊聲明后端為local、棧名為root。注意sanitize_json_paths會(huì)刪除其中的version字段tools/hangar/src/utils.ts避免 CDKTF 版本變化污染快照//.outputsTerraform 輸出定義此處為空對(duì)象{}說明prime.test.w沒有聲明任何對(duì)外輸出provider.aws空對(duì)象數(shù)組[{}]表示只注冊(cè)了 AWS provider未綁定任何具體資源配置。這份最小化的 Terraform 恰好印證了 Wing 的架構(gòu)特性math是純函數(shù)式標(biāo)準(zhǔn)庫isPrime既不需要云資源bucket、queue、function也不產(chǎn)生狀態(tài)與權(quán)限綁定。它要么在 preflight 階段作為普通 JS 調(diào)用執(zhí)行要么在 inflight 閉包中被序列化進(jìn)運(yùn)行時(shí)函數(shù)體。由于測(cè)試文件沒有聲明任何cloud.*資源Terraform 合成結(jié)果自然只剩 provider 骨架——這正是無資源即零資源聲明的直觀體現(xiàn)。對(duì)比同一目錄下其他快照如bucket、queue相關(guān)測(cè)試的_compile_tf-aws.md凡是聲明了云資源的測(cè)試其main.tf.json中都會(huì)出現(xiàn)resource鍵與具體的aws_*資源塊而prime.test.w的快照中沒有resource字段從快照體系層面反證了 math 模塊的零資源屬性。五、快照生成流水線從命令行到 Markdown快照不是手寫的而是由 Hangar 的 vitest 用例驅(qū)動(dòng)生成的。以compile為例關(guān)鍵流程如下1. 組裝 CLI 命令。compileTest固定使用tf-aws平臺(tái)tools/hangar/src/generated_test_targets.tsrunWingCommand將其展開為wing --no-update-check --no-analytics compile prime.test.w -t tf-aws命令在測(cè)試文件所在目錄執(zhí)行tools/hangar/src/utils.ts并捕獲stdout/stderr若退出碼非 0 則測(cè)試失敗。2. 讀取并清洗產(chǎn)物。編譯完成后sanitize_json_paths會(huì)按順序?qū)ain.tf.json做規(guī)范化處理tools/hangar/src/utils.ts將asset.*鍵替換為ASSET_KEY占位符將assets/...、source: ...、filemd5(...)等含絕對(duì)路徑的字段替換為ASSET_SOURCE、SOURCE等占位符刪除terraform頂層鍵規(guī)避 Terraform 版本差異刪除元數(shù)據(jù)中的version字段。正是這套清洗規(guī)則保證了快照內(nèi)容與運(yùn)行機(jī)器的絕對(duì)路徑、CDKTF 版本無關(guān)只保留語義穩(wěn)定的部分——這也是為什么prime.test.w_compile_tf-aws.md能保持 20 行的簡(jiǎn)潔體積。3. 落盤快照。createMarkdownSnapshot按標(biāo)題 代碼塊格式生成 Markdown頭部鏈接自動(dòng)回指向測(cè)試源文件tools/hangar/src/utils.ts并通過toMatchFileSnapshot與已存快照比對(duì)tools/hangar/src/utils.ts。4. 運(yùn)行快照的生成路徑略有不同。testTest使用sim平臺(tái)、WING_HIDE_CONTAINER_LOGS1環(huán)境變量執(zhí)行wing test只記錄stdout.log/stderr.logtools/hangar/src/generated_test_targets.ts。prime.test.w_test_sim.md中的輸出即為其結(jié)果pass ─ prime.test.wsim ? root/Default/test:inflight prime numbers Tests 1 passed (1) Snapshots 1 skipped Test Files 1 passed (1) Duration DURATION其中DURATION是sanitizeOutput對(duì)耗時(shí)文本的標(biāo)準(zhǔn)化占位符tools/hangar/src/utils.ts說明inflight prime numbers測(cè)試用例在 simulator 中運(yùn)行并通過7 條 inflight 斷言全部成立。六、本地復(fù)現(xiàn)三步驗(yàn)證素?cái)?shù)測(cè)試與快照內(nèi)容如果你想在本地親自跑通這條驗(yàn)證鏈路操作步驟如下1. 編譯到 tf-aws核對(duì) Terraform 輸出wing compile tests/sdk_tests/math/prime.test.w -t tf-aws編譯成功后檢查tests/sdk_tests/math/target/prime.test.w.tfaws/main.tf.json其內(nèi)容未經(jīng)清洗的原始版應(yīng)與快照結(jié)構(gòu)一致provider.aws為空數(shù)組、無resource塊。2. 運(yùn)行測(cè)試確認(rèn)雙階段斷言通過wing test tests/sdk_tests/math/prime.test.w輸出應(yīng)包含pass ─ prime.test.wsim ? root/Default/test:inflight prime numbers同時(shí) preflight 階段的 7 條assert會(huì)在加載階段靜默通過任一斷言失敗都會(huì)導(dǎo)致編譯/運(yùn)行直接報(bào)錯(cuò)退出。3. 若需參與快照更新僅針對(duì)倉庫貢獻(xiàn)者修改實(shí)現(xiàn)或測(cè)試后通過 Hangar 的 vitest 用例重新生成快照比對(duì)git diff確認(rèn)prime.test.w_compile_tf-aws.md與prime.test.w_test_sim.md的變化是否符合預(yù)期。注意當(dāng)前倉庫為只讀鏡像以上命令僅為本地驗(yàn)證目的倉庫內(nèi)的快照文件不允許直接修改。七、總結(jié)prime.test.w_compile_tf-aws.md雖然只有 20 行卻串聯(lián)起了 Wing 工具鏈的三層事實(shí)語言層math.isPrime是可在 preflight 與 inflight 雙階段調(diào)用的標(biāo)準(zhǔn)庫靜態(tài)函數(shù)算法采用平方根試除法n 1一律判定為非素?cái)?shù)編譯層純函數(shù)式 math 模塊編譯到tf-aws平臺(tái)不產(chǎn)生任何云資源Terraform 輸出僅為 provider 骨架這是 Wing按需生成基礎(chǔ)設(shè)施設(shè)計(jì)在快照中的直接體現(xiàn)工程層Hangar 通過runWingCommandsanitize_json_pathscreateMarkdownSnapshot的流水線把編譯與運(yùn)行結(jié)果固化為路徑確定、內(nèi)容穩(wěn)定的 Markdown 快照為 SDK 行為變更提供回歸防線。相關(guān)文件可繼續(xù)深入閱讀tests/sdk_tests/math/prime.test.w、packages/winglang/sdk/src/math/math.ts、tools/hangar/src/generated_test_targets.ts、tools/hangar/src/utils.ts、docs/api/04-standard-library/math/api-reference.md。贊分享編程語言編譯器云原生語言運(yùn)行時(shí)【免費(fèi)下載鏈接】wingA programming language for the cloud ?? A unified programming model, combining infrastructure and runtime code into one language ?項(xiàng)目地址https://gitcode.com/gh_mirrors/wi/wing點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Wing 標(biāo)準(zhǔn)庫 math.isPrime 素?cái)?shù)檢測(cè)從實(shí)現(xiàn)原理到 hangar 測(cè)試快照全解析Wing 標(biāo)準(zhǔn)庫 math.isPrime 素?cái)?shù)檢測(cè)從實(shí)現(xiàn)原理到 hangar 測(cè)試快照全解析 本篇文章以 Wing 語言標(biāo)準(zhǔn)庫 math 模塊的素?cái)?shù)檢測(cè)函數(shù)編程語言編譯器云原生語言運(yùn)行時(shí)Wing cloud.Function 編譯到 AWS Lambda 的 Terraform 產(chǎn)物解析——基于 hangar 快照 invoke.test.w_compile_tf-aws.mdWing cloud.Function 編譯到 AWS Lambda 的 Terraform 產(chǎn)物解析——基于 hangar 快照 invoke.test.w_編程語言編譯器云原生語言運(yùn)行時(shí)Wing 語言 math.log10 對(duì)數(shù)計(jì)算實(shí)戰(zhàn)從標(biāo)準(zhǔn)庫實(shí)現(xiàn)到 hangar 快照編譯驗(yàn)證Wing 語言 math.log10 對(duì)數(shù)計(jì)算實(shí)戰(zhàn)從標(biāo)準(zhǔn)庫實(shí)現(xiàn)到 hangar 快照編譯驗(yàn)證 math.log10 是 Wing 標(biāo)準(zhǔn)庫 math 模塊中用于編程語言編譯器云原生語言運(yùn)行時(shí)創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考