精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用 Windsurf 從0實現高性能JSON解析器

發布于 2025-5-13 00:45
瀏覽
0收藏

為了探索和改進 AI 工具在編程方面的體驗,同時也想驗證一些 AI 的邊界,于是又想到了嘗試從 0 實現高性能JSON解析器,說干就干。開始以為比較簡單,不會超過半天就能實現,但是經過各種提示詞優化,最終花了兩天時間...

1. 選用工具

現在有各種 AI Copilot,比較常用的 Cursor,Windsurf,Trae 等,不過我現在用的比較順手的是:Windsurf。除了編程工具,然后就是模型,目前代碼領域比較強的:

  • Claude 3.7 Sonnet 和 Claude 3.7 Sonnet Thinking
  • GPT-4.1
  • o4-mini-high
  • Gemini 2.5 Pro

我在 Windsurf 上,使用 Claude 3.7 Sonnet 和 GPT-4.1 互相切換,簡單問題 GPT-4.1 能快速解決,復雜的問題可以嘗試 Claude 3.7 Sonnet 和 Thinking 分析,不過在使用過程中發現 Gemini 2.5 Pro 在分析性能上很強大,但是上下文不太夠(可能是 Windsurf 上下文導致 prompt 太多了),對于代碼超過 200 行的效果不是很好。

2. Prompt

如果使用輔助編程工具,其實 Prompt 不是特別重要,對于開發者最重要的是如何把需求描述清楚。

比如本項目最開始的 Prompt 是:

用 golang 實現一個類似標準庫 "encoding/json" 的 JSON 解析器,可以參考 github 的 cJSON

通過如上 Prompt,將會獲得比較粗的代碼實現,這個時候不應該基于是實現其他的功能,而是開始讓 AI 幫你生成測試用例:

基于 @lexer.go 生成測試用例,其中測試用例需要覆蓋如下 token 的支持:
EOFToken                           // 文件結束標記
NumberToken                        // 數字標記,例如:123, 45.67
StringToken                        // 字符串標記,例如:"hello"
NullToken                          // null值標記
TrueToken                          // true布爾值標記
FalseToken                         // false布爾值標記
CommaToken                         // 逗號標記 ','
ColonToken                         // 冒號標記 ':'
LeftBraceToken                     // 左大括號標記 '{'
RightBraceToken                    // 右大括號標記 '}'
LeftBracketToken                   // 左方括號標記 '['
RightBracketToken                  // 右方括號標記 ']'

為什么生成測試用例很重要?(1)驗證代碼的功能性問題,當你的代碼覆蓋率做的足夠高,生成的代碼就更安全。(2)通過測試用例可以更好的提示 AI 生成代碼,類似觸發 CoT(Chain of Thought)。(3)測試用例可以更好的幫助開發者理解獨立的模塊。

生成測試用例后,可能會遇到各種測試用例不通過的情況,Prompt 其實就將報錯信息輸入給 AI 即可:

@parser_test.go#L291-729 @types.go @parser.go 執行測試用例出現棧溢出的錯誤:runtime: goroutine stack exceeds 1000000000-byte limit
runtime: sp=0x14020260340 stack=[0x14020260000, 0x14040260000]
fatal error: stack overflow

runtime stack:
runtime.throw({0x10308321f?, 0xa2284a1184611846?})
 /opt/homebrew/Cellar/go/1.24.1/libexec/src/runtime/panic.go:1101 +0x38 fp=0x16d4ced90 sp=0x16d4ced60 pc=0x102f9fff8
runtime.newstack()
 /opt/homebrew/Cellar/go/1.24.1/libexec/src/runtime/stack.go:1107 +0x45c fp=0x16d4ceed0 sp=0x16d4ced90 pc=0x102f8682c
runtime.morestack()
 /opt/homebrew/Cellar/go/1.24.1/libexec/src/runtime/asm_arm64.s:342 +0x70 fp=0x16d4ceed0 sp=0x16d4ceed0 pc=0x102fa57f0
...

需要注意: 測試用例一定要縮小范圍,并且測試用例最好按照 ??標記 #%d 類型錯誤: 期望 %v, 得到 %v???(參考如下代碼),讓 AI 更好的理解問題出在哪里(??期望 -> 得到??)。

比如本項目的測試用例都會將錯誤信息,原始信息等都打印出來:

for _, tt := range tests {
    testCase := tt // 避免閉包問題
    t.Run(testCase.name, func(t *testing.T) {
        lexer := NewLexer(testCase.input)
        for i, expected := range testCase.expected {
            got := lexer.NextToken()
            if got.Type != expected.Type {
                t.Errorf("標記 #%d 類型錯誤: 期望 %v, 得到 %v", i, expected.Type, got.Type)
            }
            if got.Value != expected.Value {
                t.Errorf("標記 #%d 值錯誤: 期望 %q, 得到 %q", i, expected.Value, got.Value)
            }
            if got.Pos != expected.Pos {
                t.Errorf("標記 #%d 位置錯誤: 期望 %d, 得到 %d", i, expected.Pos, got.Pos)
            }
        }
    })
}

3. 限制文件大小

從實踐經驗來看,隨著功能的疊加,AI 生成的代碼在單個文件會越來越長,但是這樣會遇到一些問題(上下文限制,模型思考慢,問題分析不準確),因此需要定期將單個文件按照功能拆分多個文件,建議單個文件不超過 200 行(測試用例倒是不需要,由于測試用例是單一功能的),在 ??sjson?? 的代碼行數基本上都少于 200 行:

用 Windsurf 從0實現高性能JSON解析器-AI.x社區

4. 提供方向性的指引

提出一個問題 讓 AI 解決,可能方案有很多,比如 JSON 解析可以用方案:

  • 遞歸下降方法,邊解析邊賦值(流式解析)
  • 分階段解析(詞法+語法分析)

但是 AI 一開始并不一定能給出最優的方案,比如本項目開始提供分階段解析方案,但是參考其他的開源項目,都是用流式解析,該方案對于 JSON 解析器比較合適(因為沒有需要動態計算的過程,所以掃一遍就可以處理,性能要比分段解析好),當然也要考慮業務場景,比如要實現動態腳本或者 ??expr?? 功能,分階段解析更合適,所以在實現之前可以先了解當前領域的知識并分析方案的優劣勢(其實整個分析的過程也可以喂給 AI 來做判斷并糾正),然后讓 AI 按照提示的方向實現。

不過值得注意的是,當提出用 JIT 等方案優化,AI 會提示方案不合理(實現的確不合理,JIT 需要增加各種適配代碼)。

5. 充分的測試

??sjson??? 需要對比其他庫的功能是否完整,依賴 AI 通常不一定能給全所有的測試用例,所以需要找到測試套件,這里我參考開源項目 ??https://github.com/nst/JSONTestSuite???,修改 ??run_tests.py??:

programs = {
   "JavaScript":
       {
           "url":"",
           "commands":["node", os.path.join(PARSERS_DIR, "test_json.js")]
       },
   "Python 2.7.10":
       {
           "url":"",
           "commands":["python", os.path.join(PARSERS_DIR, "test_json.py")]
       },
    "sjson":
       {
           "url":"",
           "commands":["/Volumes/my/github/mylib/go/sjson/tests/example", "-a"]
       },
    "stdjson":
       {
           "url":"",
           "commands":["/Volumes/my/github/mylib/go/sjson/tests/example", "-b"]
       },
    "jsoniterator":
       {
           "url":"",
           "commands":["/Volumes/my/github/mylib/go/sjson/tests/example", "-c"]
       },
}

可以跑通 ??300+??? 個測試用例,其中與標準庫 ??encoding/json??? 和 ??Jsoniter?? 的對比如下:

用 Windsurf 從0實現高性能JSON解析器-AI.x社區

用 Windsurf 從0實現高性能JSON解析器-AI.x社區

6. 性能優化

通過 AI 生成 ??Benchmark?? 函數,然后進行性能的測試:

BenchmarkComplexJSON/Original-14          13598248       5525 ns/op     9993 B/op      178 allocs/op
BenchmarkComplexJSON/Optimized-14         12703338       5804 ns/op    10645 B/op      179 allocs/op
BenchmarkComplexJSON/Standard-14          17148706       4125 ns/op     5136 B/op      107 allocs/op

以上是第一輪的性能測試,比標準庫性能差了 60%,然后可以將當前性能測試數據當成 Prompt 輸入:

@sjson_marshal.go 性能測試如下:
BenchmarkComplexJSON/Original-14          13598248       5525 ns/op     9993 B/op      178 allocs/op
BenchmarkComplexJSON/Optimized-14         12703338       5804 ns/op    10645 B/op      179 allocs/op
BenchmarkComplexJSON/Standard-14          17148706       4125 ns/op     5136 B/op      107 allocs/op

基于當前性能對比進行性能優化,比如增加緩存,減少 decode 次數,減少 fmt.Sprintf 改為 byte[] 和 append 或者 strings.Builder,目標是減少內存分配和數據拷貝次數。

...  ...

然后經過一系列漫長的優化,最后性能對比標準庫:

BenchmarkUnmarshalCompareMedium/SjsonUnmarshal-14           2203020       5576 ns/op     5923 B/op      115 allocs/op
BenchmarkUnmarshalCompareMedium/StdUnmarshal-14             1484354       8036 ns/op      504 B/op       11 allocs/op
BenchmarkUnmarshalCompareMedium/JsoniterUnmarshal-14        5908438       1986 ns/op      352 B/op       38 allocs/op

性能已經比 ??encoding/json??? 標準庫提升 ??80%???,雖然比 ??Jsoniter??? 性能差(Jsoniter開啟了 ConfigFastest),但是可以嘗試引入 ??reflect2??? 等方案來提升性能,從 ??flamegraph?? 看需要對反射和拷貝的方向進行優化:

用 Windsurf 從0實現高性能JSON解析器-AI.x社區

7. 后續

(1)代碼已經開源:https://github.com/linkxzhou/mylib/tree/master/go/sjson(2)繼續性能優化,嘗試探索讓 AI 如何對項目進行性能優化和構建 ??go pprof MCP Server??

本文轉載自???周末程序猿??,作者:周末程序猿

收藏
回復
舉報
回復
相關推薦
欧美另类视频在线观看| 亚洲一区日韩精品| 欧美zzoo| 日韩精品一级中文字幕精品视频免费观看 | 日韩免费电影一区二区三区| 亚洲综合图片网| 国产精品久久占久久| 日韩美女在线视频 | 激情国产在线| 国产精品久久久久久久岛一牛影视| 亚洲一区二区三区香蕉| 亚洲第一精品在线观看 | 一区二区在线免费视频| 久久精品一卡二卡| 国产va在线视频| 中文字幕一区二区在线播放| 国产高清精品一区二区| 国产视频1区2区| 久久久久午夜电影| 亚洲毛片在线观看| 成人高清在线观看视频| 日本不卡一二三| 亚洲一级电影视频| 亚洲精品中文字幕乱码三区不卡| 国产成人无码www免费视频播放| 中日韩男男gay无套| 久久夜色精品国产欧美乱| 少妇毛片一区二区三区| 日本在线一区二区三区| 欧美视频在线不卡| 欧美亚洲一二三区| 日韩三级电影视频| 国产精品久久久久久久岛一牛影视| 久久福利电影| 欧美特级特黄aaaaaa在线看| 九九视频精品免费| 国产精品欧美日韩久久| 久久久久久久久久久久久av| 国内精品久久久久久久97牛牛| 中文字幕亚洲欧美| 亚洲精品国产91| 亚洲成a人片77777在线播放| 精品国产污网站| 久久综合桃花网| 亚洲国产91视频| 欧美区视频在线观看| 美女黄色片视频| 欧亚一区二区| 欧美视频13p| 免费无码av片在线观看| 国产在线精彩视频| 午夜在线电影亚洲一区| cao在线观看| 182在线视频观看| 精品国产户外野外| 久久综合九色综合88i| 擼擼色在线看观看免费| 天天综合网天天综合色| 草草久久久无码国产专区| 老色鬼在线视频| 色综合中文综合网| 国产免费视频传媒| 国产一区影院| 91精品国模一区二区三区| www.久久久久久久久久久| 日本亚洲欧洲无免费码在线| 欧美美女视频在线观看| 免费欧美一级片| 都市激情亚洲| 亚洲奶大毛多的老太婆| 美女100%无挡| 91亚洲人成网污www| 精品国产拍在线观看| 朝桐光av在线| 精品电影一区| 日韩av电影手机在线| 中文字幕免费观看视频| 国产在线播放一区| 国产精品久久久一区二区三区| 日本高清视频免费看| xf在线a精品一区二区视频网站| 欧美午夜精品久久久久久蜜| 日本中文字幕在线观看| 亚洲一区二区三区激情| 日日摸天天爽天天爽视频| 亚洲三级在线| 亚洲精品国产精品国自产观看浪潮| 青青草视频成人| 天天av综合| 97在线视频一区| 在线观看日批视频| 成人一道本在线| 日韩精品伦理第一区| 污的网站在线观看| 在线一区二区三区做爰视频网站| 一级黄色在线播放| 亚洲理论电影片| 久久不射电影网| 依依成人综合网| 国产精品一区二区三区乱码| 久久手机视频| 2024最新电影在线免费观看| 第一福利永久视频精品| 婷婷激情综合五月天| 色综合久久中文| 久久亚洲国产精品| 久久99国产综合精品免费| 国模娜娜一区二区三区| 免费h精品视频在线播放| 黄色成人影院| 在线观看www91| 黄色在线免费播放| 91成人观看| 国产精品久久久久不卡| 懂色av蜜臀av粉嫩av分享吧| 中文字幕欧美国产| 免费看一级大黄情大片| 欧美特黄不卡| 少妇高潮久久77777| 黄色在线观看国产| 不卡一区二区三区四区| 强开小嫩苞一区二区三区网站| 韩国三级一区| 日韩电影免费观看中文字幕| 日本黄色小说视频| 精品写真视频在线观看| 日本在线一区| 中文字幕在线中文字幕在线中三区| 日韩视频免费直播| 26uuu成人网| 美女免费视频一区| 色姑娘综合网| 亚洲mmav| 尤物九九久久国产精品的分类| 97免费在线观看视频| 高清在线观看日韩| 香蕉视频免费版| 成人短视频软件网站大全app| 亚洲色图在线观看| 特级做a爱片免费69| 不卡av免费在线观看| 成人一级生活片| 成人性生交大片免费看中文视频| 欧美精品做受xxx性少妇| 国产伦精品一区二区三区视频痴汉 | 麻豆tv免费在线观看| 欧美三级欧美一级| 久久午夜精品视频| 久久综合综合久久综合| 亚洲精品成人自拍| 亚洲伦理一区二区| 久久天天躁日日躁| 国产黄色一区二区| 一个色妞综合视频在线观看| av漫画在线观看| 日韩亚洲在线| 欧美日韩成人一区二区三区| 国产综合色区在线观看| 中文字幕日韩欧美在线视频| 久久久久精彩视频| 中文字幕一区在线观看视频| 真实乱偷全部视频| 在线欧美一区| 欧美精品与人动性物交免费看| 国产伦精品一区二区三区视频金莲| 亚洲欧美另类中文字幕| 亚洲永久精品一区| 亚洲色图在线视频| 初高中福利视频网站| 1024精品一区二区三区| 精品一区二区视频| 成人mm视频在线观看| www欧美日韩| 欧美一级性视频| 色婷婷综合久久久中文一区二区| 人与嘼交av免费| 国产精品夜夜爽| 99视频在线免费播放| 精品成av人一区二区三区| 国产精品视频资源| 久久日韩视频| 亚洲国产日韩精品在线| 最新国产中文字幕| 一区二区三区在线免费观看| 亚洲自拍偷拍精品| 美国十次了思思久久精品导航| 欧美交换配乱吟粗大25p| 老司机精品在线| 国产日韩欧美夫妻视频在线观看 | 午夜大片在线观看| 日韩视频在线一区二区三区| 性欧美精品一区二区三区在线播放| 国产午夜久久av| 日本高清不卡的在线| 麻豆传媒在线免费看| 日韩成人久久久| 国产乱码精品一区二区三区精东| 精品久久久久久久久久国产| 精品国产大片大片大片| 91在线码无精品| 五月六月丁香婷婷| 蜜桃视频一区| avav在线播放| 久久免费av| 久久国产精品一区二区三区| 9.1麻豆精品| 国产精品吹潮在线观看| 黄网av在线| 日韩中文字幕网站| 黄色av网址在线免费观看| 欧美大胆人体bbbb| 国产又大又粗又长| 色偷偷久久一区二区三区| 国产乡下妇女做爰视频| 亚洲婷婷综合久久一本伊一区 | 日韩理论片网站| 欧美日韩高清丝袜| av网站一区二区三区| 手机在线国产视频| 日韩av中文字幕一区二区三区| 欧美午夜小视频| 午夜精品久久| 在线观看免费黄色片| av影片在线一区| 欧美一区观看| 丝袜美腿综合| 久久久久久久免费| 国产精品久av福利在线观看| 91夜夜未满十八勿入爽爽影院| 草莓视频成人appios| 2019亚洲男人天堂| www.综合网.com| 欧美黑人xxxx| 中文字幕免费高清电视剧网站在线观看 | 国产精彩精品视频| 成人性生活视频| 欧美在线激情视频| 综合另类专区| 日本精品久久久| 中文字幕影音在线| 青青草原成人在线视频| 在线精品亚洲欧美日韩国产| 欧美又大又粗又长| 成人小电影网站| 国产99在线|中文| 欧美freesex| 国产精品白嫩美女在线观看| 欧美日韩电影免费看| 国产aaa精品| 成人va天堂| 国产精品久久久av| 亚洲精品自拍| 51国偷自产一区二区三区的来源 | 92久久精品| 97碰在线观看| 美女日韩欧美| 国产精品视频久| 国产精久久久| 国产98在线|日韩| 欧美美女在线直播| 明星裸体视频一区二区| 成人久久电影| 97精品国产97久久久久久粉红| 自由日本语亚洲人高潮| 亚洲色成人www永久在线观看| 亚洲国产午夜| 日韩一级片播放| 老司机免费视频一区二区| 不卡中文字幕在线观看| 国产精品一区二区久激情瑜伽 | 久久久久久久97| 国产传媒在线观看| 国产精品电影网| 成人豆花视频| 麻豆av福利av久久av| 欧美精品系列| 国产成人生活片| 国产亚洲毛片在线| 日韩一级免费片| 国产91富婆露脸刺激对白| 中文字幕 亚洲一区| 久久一区二区三区国产精品| 摸摸摸bbb毛毛毛片| 日韩毛片高清在线播放| 日韩成人免费在线视频| 欧美亚洲尤物久久| 亚洲乱码在线观看| 亚洲视频第一页| av网站在线看| 国产精品2018| 99久久香蕉| 日韩高清在线播放| 综合国产精品| 中文字幕国内自拍| 成人18视频日本| 日本一级片免费| 欧美性猛交xxxx黑人猛交| 国产一区二区在线不卡| 日韩h在线观看| а√天堂8资源在线官网| 日本国产一区二区三区| 视频二区欧美毛片免费观看| 人偷久久久久久久偷女厕| 欧美激情视频一区二区三区在线播放 | 国产日产精品一区二区三区四区 | 日韩a级在线观看| 美女视频第一区二区三区免费观看网站| 人妻 丝袜美腿 中文字幕| 国产精品午夜久久| 中文字幕亚洲精品一区| 日韩视频123| 欧美69xxxx| 日韩av免费在线播放| 超碰成人福利| 中文字幕免费高| 免费成人在线视频观看| 精品国产人妻一区二区三区| 亚洲免费观看高清完整| 中文字幕人妻丝袜乱一区三区| 日韩精品高清视频| 丰乳肥臀在线| 91福利入口| 亚洲欧洲美洲一区二区三区| 四季av一区二区| 久久久久国产精品免费免费搜索| 久久精品99国产精| 日韩午夜激情电影| 国产激情视频在线| 成人妇女免费播放久久久| 日韩在线看片| 日韩肉感妇bbwbbwbbw| 久久久久久毛片| 天堂а√在线中文在线新版| 亚洲二区中文字幕| 国产黄色大片在线观看| 99一区二区| 黄色在线成人| 国产av一区二区三区传媒| 亚洲国产色一区| 亚洲成人77777| 久久99久久99精品中文字幕| 国产精品麻豆| 久久国产精品免费观看| 国产精品一区二区男女羞羞无遮挡| 欧美爱爱免费视频| 欧美一区二区精品久久911| 国产在线观看91| 99视频在线免费观看| 精品动漫一区| 中文字幕在线观看的网站| 欧美性生交xxxxxdddd| 久久这里精品| 国产精品入口免费视| 欧美在线观看视频一区| 香港日本韩国三级网站| 日韩美女视频一区二区| www.天堂在线| 91精品国产91久久久久| 天天躁日日躁狠狠躁欧美巨大小说| 男人添女人下面高潮视频| 久久综合久久综合亚洲| 国产精品免费无遮挡无码永久视频| 伊人伊成久久人综合网小说| jvid一区二区三区| 少妇高潮流白浆| 成人性色生活片| 国产农村妇女aaaaa视频| 国产一区二区免费| va天堂va亚洲va影视| 国产91沈先生在线播放| 久久久久久久久久久久久夜| 中文字幕乱码人妻无码久久 | 日本不卡网站| 日韩精品一区二区三区色偷偷| 麻豆精品视频在线观看视频| 少妇aaaaa| 日韩电影在线观看中文字幕| av免费在线一区| www.69av| 国产日韩av一区| 精品人妻无码一区二区三区蜜桃一 | 变态调教一区二区三区| 欧美日韩一区二| 国内外成人在线视频| 亚洲一区欧美在线| 自拍偷拍亚洲在线| 国产在线播放精品| 天天干天天综合| 亚洲高清中文字幕| caoporn国产精品免费视频| 999国内精品视频在线| 久久一区二区三区四区五区| 国产麻豆视频在线观看| 日韩电影大全免费观看2023年上| 日本成人一区二区| 欧美牲交a欧美牲交aⅴ免费真 | 久久伊人影院| 玩弄japan白嫩少妇hd| 亚洲愉拍自拍另类高清精品| 成人资源www网在线最新版|