精品欧美一区二区三区在线观看 _久久久久国色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??

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

收藏
回復
舉報
回復
相關推薦
精品国产一区二区三区免费| 亚洲精品久久久久国产| 久久久久亚洲av无码专区喷水| 国产xxxx孕妇| 亚洲欧美bt| 久久精品国产成人| av2014天堂网| 国产欧美88| 色综合久久中文字幕综合网| 一区国产精品| 视频一区二区三区在线看免费看| 捆绑调教美女网站视频一区| 韩国一区二区电影| 国产精品69久久久久孕妇欧美| 天堂精品久久久久| 欧美日韩三级一区| 欧美啪啪免费视频| a级网站在线播放| 久久九九久精品国产免费直播| 亚洲一区二区三区毛片| 久草视频在线免费| 亚洲在线观看| 欧美剧在线观看| www成人啪啪18软件| 日韩精品亚洲aⅴ在线影院| 91精品国产免费| 日本人视频jizz页码69| 末成年女av片一区二区下载| 亚洲精品久久嫩草网站秘色| 亚洲不卡一卡2卡三卡4卡5卡精品| 亚洲av无码一区二区三区性色| 日本亚洲欧美天堂免费| 亲爱的老师9免费观看全集电视剧| h色网站在线观看| 98精品视频| 在线观看国产欧美| 色欲AV无码精品一区二区久久| 欧美综合自拍| 亚洲精品wwwww| 国产女主播在线播放| 另类视频一区二区三区| 7777女厕盗摄久久久| 91在线视频观看免费| 涩涩涩在线视频| 狠狠躁天天躁日日躁欧美| 自拍日韩亚洲一区在线| 不卡av免费观看| 亚洲国产欧美在线| 成人网站免费观看入口| 女囚岛在线观看| 夜夜嗨av一区二区三区中文字幕| 精品一区二区三区毛片| 成人日日夜夜| 一区二区在线观看视频| 国产一区二区三区乱码| 草草影院在线| 欧美日韩亚洲一区二| 国产肥臀一区二区福利视频| a一区二区三区| 欧美日韩亚洲网| 宅男噜噜噜66国产免费观看| jizz久久久久久| 欧美亚洲动漫制服丝袜| 尤物国产在线观看| 精品国产一区二区三区2021| 日韩欧美在线影院| 一级黄色片毛片| 欧美在线导航| 在线激情影院一区| 顶级黑人搡bbw搡bbbb搡| 久久久久久影院| 欧美激情18p| 成人午夜视频精品一区| 久久不射中文字幕| 国产精品自拍网| 国产免费av电影| 成人激情免费网站| 欧美精品一区二区三区在线看午夜 | 手机看片福利视频| 99久久夜色精品国产亚洲96| 精品中文字幕在线| 日韩欧美三级视频| 麻豆91在线观看| 91九色偷拍| 亚洲欧美日韩精品永久在线| 亚洲国产高清不卡| 免费看日b视频| 亚洲私拍视频| 欧美精品一卡两卡| 中文字幕 日本| 日韩免费av| 欧美交受高潮1| 懂色av蜜臀av粉嫩av喷吹| 国产自产v一区二区三区c| 精品国产一二| 免费人成在线观看播放视频| 五月天一区二区三区| 国产小视频精品| 91精品国产乱码久久久竹菊| 日韩精品极品在线观看播放免费视频| 免费成人深夜蜜桃视频| a91a精品视频在线观看| 成人激情免费在线| 日韩一二三四| 亚洲综合一二三区| 一区二区三区网址| 久久综合五月婷婷| 超碰91人人草人人干| 在线永久看片免费的视频| 国产精品中文字幕一区二区三区| 欧美性天天影院| 成人高潮aa毛片免费| 欧美日韩中文国产| 欧美成人午夜精品免费| 欧美日韩天堂| 国产原创欧美精品| 国产人成在线视频| 精品国产91久久久久久| 超级砰砰砰97免费观看最新一期| 欧美综合视频| 欧美一级大片在线观看| 亚洲第一视频在线| 亚洲图片欧美激情| 色婷婷一区二区三区av免费看| 亚洲动漫精品| 97香蕉久久超级碰碰高清版| 亚洲va欧美va| 亚洲欧美日韩电影| 亚洲视频一二三四| 成久久久网站| 国产成人综合一区二区三区| 午夜视频免费看| 亚洲国产精品视频| 亚洲一二三四五| 欧美韩日精品| 91美女片黄在线观| 秋霞a级毛片在线看| 欧美日韩在线精品一区二区三区激情| www.黄色在线| 蜜臀精品一区二区三区在线观看 | 国产日韩精品综合网站| 成人欧美亚洲| 欧美在线观看禁18| 精品国产aaa| 奇米精品一区二区三区在线观看 | 91精品国产综合久久久蜜臀粉嫩 | 欧美精品成人一区二区三区四区| 国产视频123区| 蜜臀av亚洲一区中文字幕| 日韩一区不卡| 日本一区二区中文字幕| 色狠狠av一区二区三区香蕉蜜桃| 亚洲字幕av一区二区三区四区| 欧美高清在线一区| 在线观看国产一级片| 国产国产精品| 亚洲xxx视频| xxxx日本免费| 国产手机视频一区二区 | 天天操天天爽天天干| 成人深夜在线观看| 一区二区传媒有限公司| 亚洲欧美日本伦理| 国产精品美女久久久久av超清| 超碰免费97在线观看| 欧美一区二区在线观看| 69精品久久久| 久久精品欧美日韩| 中文av字幕在线观看| 国产精品a级| 久久视频在线观看中文字幕| 超薄肉色丝袜脚交一区二区| y97精品国产97久久久久久| 性色av蜜臀av| 日韩欧美中文第一页| 懂色av蜜臀av粉嫩av永久| 国产91精品一区二区麻豆亚洲| 国产在线精品91| 欧美日韩中文一区二区| 91九色在线观看| 女人让男人操自己视频在线观看| 一区二区三区天堂av| www.好吊色| 色婷婷综合久色| 黄色一级片中国| 26uuu久久天堂性欧美| 男人搞女人网站| 午夜久久美女| 日韩电影大全在线观看| 伊人www22综合色| 日韩av第一页| 日本三级韩国三级欧美三级| 亚洲欧美日韩一区二区在线| 99国产精品欲| 欧美最新大片在线看| 国产在线视频99| 国产精品乱人伦一区二区| 国产精品手机在线观看| 久久精品二区亚洲w码| 怡红院av亚洲一区二区三区h| 小小影院久久| 清纯唯美一区二区三区| 激情小说一区| 成人亚洲欧美一区二区三区| 国产高清不卡| 国语自产精品视频在线看| 秋霞影院午夜丰满少妇在线视频| 日韩电影大片中文字幕| 精品国产黄色片| 欧美性xxxxxxxx| 在线观看黄网站| 亚洲高清在线视频| 欧美在线视频第一页| 亚洲国产经典视频| 日韩中文字幕电影| 波多野结衣中文字幕一区二区三区 | 精品小视频在线观看| 亚洲欧洲日韩综合一区二区| 亚洲精品视频久久久| 国产成a人亚洲| 亚洲图色中文字幕| 喷水一区二区三区| 久久久久久久久久久久久久国产| 在线精品在线| 免费看欧美一级片| 欧美freesex交免费视频| 亚洲欧美影院| 欧美日韩在线网站| 神马影院午夜我不卡影院| 蜜臀av免费一区二区三区| 激情久久av| 久久久久久久久久久久久久久久久久久久| 91精品视频免费观看| 成人国产在线| 国产精品视频一区国模私拍 | 国产sm调教视频| 久久先锋资源网| 国内精品久久99人妻无码| 成人国产精品免费| 国产成人av免费观看| 国产精品一区二区三区99| 亚洲精品mv在线观看| 狠狠色丁香婷综合久久| 国产福利精品一区二区三区| 精品一二三四在线| 波多野结衣网页| 丁香桃色午夜亚洲一区二区三区| 911亚洲精选| 成人高清av在线| 国产十八熟妇av成人一区| 成人福利视频在线看| 一起草在线视频| 久久先锋影音av| 公肉吊粗大爽色翁浪妇视频| 国产精品国产三级国产普通话蜜臀| 69xxx免费| 亚洲男女一区二区三区| 久久午夜无码鲁丝片午夜精品| 亚洲高清免费在线| 在线观看亚洲天堂| 欧美中文字幕不卡| 91资源在线视频| 91精品国产欧美一区二区成人| www.国产三级| 日韩精品免费在线| www.久久热.com| 久久久精品在线| 99re6在线精品视频免费播放| 欧美怡红院视频一区二区三区| 成人在线观看免费播放| 91免费的视频在线播放| 超碰在线成人| 日韩av大全| 欧美在线三区| 97国产在线播放| 久久精品国产久精国产| 无码人妻一区二区三区免费n鬼沢| 99久久久久久| 精品视频第一页| 亚洲一二三区在线观看| 欧美亚洲另类小说| 日韩一区二区高清| 国产在线电影| 欧美激情第1页| 免费污视频在线一区| 99re视频在线播放| 久久av综合| 欧美大黑帍在线播放| 视频一区二区国产| www.四虎在线| 国产精品区一区二区三区| 日韩欧美三级在线观看| 欧美美女一区二区在线观看| 欧美自拍第一页| 日韩一区二区精品视频| 中文一区一区三区高中清不卡免费| 国产欧美一区二区三区在线 | 丁香婷婷综合五月| 貂蝉被到爽流白浆在线观看| 亚洲一区二区美女| 国产又粗又猛又爽又黄的视频一| 日韩精品免费综合视频在线播放| 好操啊在线观看免费视频| 欧美中文字幕在线| 97精品久久| 一本久久a久久精品vr综合| 国产视频欧美| 欧美极品jizzhd欧美仙踪林| 国产精品少妇自拍| 人人草在线观看| 亚洲成人网在线| 福利视频在线| 国产精品自产拍在线观| 神马影视一区二区| 欧美日韩黄色一级片| 国产99久久久国产精品潘金 | 色又黄又爽网站www久久| 亚洲国产综合一区| 美女扒开尿口让男人操亚洲视频网站| 国产美女久久| 色一情一乱一伦一区二区三区丨 | 亚洲一区在线观看视频| 一级做a爱片性色毛片| 国产一区二区三区在线播放免费观看 | 色综合久久网| 欧美性猛交xxx乱久交| 2021国产精品久久精品| 日韩精品乱码久久久久久| 日韩你懂的电影在线观看| 国产剧情在线| 91免费看片网站| 日韩av片免费在线观看| 欧美人妻精品一区二区三区| 欧美性色aⅴ视频一区日韩精品| 午夜福利视频一区二区| 色在人av网站天堂精品| 日韩一级淫片| 波多野结衣 作品| 国产乱国产乱300精品| 国内偷拍精品视频| 日韩一区二区三区免费观看| 成人免费网址| 92看片淫黄大片看国产片| 亚洲女同一区| 中文写幕一区二区三区免费观成熟| 亚洲精品免费播放| 亚洲av无码国产精品久久不卡| 欧美国产第二页| 99久久香蕉| www黄色日本| 国产欧美日韩另类视频免费观看| 免费av中文字幕| 国产一区二区三区丝袜 | 日韩一区自拍| 日本中文字幕精品—区二区| 国产精品免费免费| 国产内射老熟女aaaa∵| 欧美激情成人在线视频| 牛牛视频精品一区二区不卡| 日本一极黄色片| 国产精品美女www爽爽爽| 国产男女无套免费网站| 久久久久久美女| 少妇一区二区视频| 国产女同无遮挡互慰高潮91| 亚洲精品久久久久久国产精华液| 免费国产羞羞网站视频| 国产成人亚洲综合91| 天天影视综合| 性活交片大全免费看| 色综合天天性综合| 免费在线看黄色| 激情欧美一区二区三区中文字幕| 美女精品在线| 免费在线观看h片| 精品亚洲一区二区| 日韩成人综合网站| www.日本在线播放| 国产欧美日韩在线看| 精品二区在线观看| 日本国产高清不卡| 影音先锋日韩在线| 波多野结衣先锋影音| 欧美人狂配大交3d怪物一区| 国产色婷婷在线| 日韩三级电影网站| 成人午夜在线播放| 性色av一区二区三区四区| 久久777国产线看观看精品| 国产成人一区二区三区影院| 两女双腿交缠激烈磨豆腐| 一本在线高清不卡dvd| 亚洲夜夜综合| 日韩欧美一区二区视频在线播放| 国产高清成人在线| 国产一级片一区二区| 97成人在线视频| 欧美成人69av| 欧美另类69xxxx| 国产视频亚洲视频|