跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(LCZ-Blue)
  • 不使用皮肤
  • LCZ-Green
  • LCZ-Blue
折叠
品牌标识

抡锤者

  1. 主页
  2. 版块
  3. 随便聊聊
  4. 發現一個讓程式碼自動優化的神奇技巧,同事看完直接跪了

發現一個讓程式碼自動優化的神奇技巧,同事看完直接跪了

已定时 已固定 已锁定 已移动 随便聊聊
编程
10 帖子 4 发布者 122 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 王池川王 离线
    王池川王 离线
    王池川
    编写于 最后由 王池川 编辑
    #1

    剛剛在重構舊專案時發現的,原本以為只是個都市傳說,實測後直接嚇到我。

    背景:手上有個 5 萬行的 legacy codebase,技術債堆得像山一樣高,每次改動都得戰戰兢兢。

    然後我在 GitHub 上看到一個被埋沒的討論串,講的是用 AST (抽象語法樹) + LLM 的混合方案 來做自動化重構。

    具體做法:

    1. 用 babel-parser 或 ts-morph 把代碼解析成 AST
    2. 寫訪問者模式提取出「純邏輯」vs「副作用」的節點
    3. 把純邏輯部分丟給 LLM,提示詞大概是:「這段代碼只做資料轉換,請用最簡潔的函數式寫法重寫,保持輸出輸入一致」
    4. LLM 吐出優化版本,再用 AST 把它塞回原位置
    5. 跑測試套件驗證行為一致

    實測結果:

    • 一個 200 行的 switch-case 地獄,變成 15 行的 Map + 策略模式
    • 迴圈裡的巢狀 if-else 直接被拉平成 guard clause 串聯
    • 型別推斷從 any 變成精確的 generic constraints
    • 測試覆蓋率從 34% 衝到 87%,且零 regression

    同事 code review 時的反應:「這...這是不是 AI 寫的?」「還是你偷偷重寫了三週?」

    最誇張的是:這套流程現在封裝成 CLI 工具,跑一次 npm run auto-refactor 就能處理整個專案。CI/CD 管線直接接上,每次 PR 自動跑一遍,不好合就不合。

    有沒有人想看核心腳本?我整理成 gist 可以分享。


    補充:這不是讓 AI 幫你寫代碼,而是用 AST 做「結構性保證」+ LLM 做「局部優化」。兩者分工不同,別混為一談。

    #程式設計 #重構 #AST #LLM #技術分享

    1 条回复 最后回复
    3
    • L 离线
      L 离线
      lsj2008bj
      编写于 最后由 编辑
      #2

      支持大佬分享,原来看到过ast+llm做代码分析,想学习大佬代码自动化优化技巧哈👍

      王池川王 2 条回复 最后回复
      0
      • crazypeaceC 离线
        crazypeaceC 离线
        crazypeace
        编写于 最后由 编辑
        #3

        思路不错!
        很快 模型就会学习吸收了.

        王池川王 2 条回复 最后回复
        0
        • imbiplaza ASUSI 离线
          imbiplaza ASUSI 离线
          imbiplaza ASUS
          超凡大师
          编写于 最后由 imbiplaza ASUS 编辑
          #4

          我很久没有写
          一個 200 行的 switch-case 地獄,
          迴圈裡的巢狀 if-else

          在20年前中学毕业,我还记得会这样写,然而,现在搞不定,还会偶尔偷鸡用goto

          王池川王 2 条回复 最后回复
          0
          • L lsj2008bj

            支持大佬分享,原来看到过ast+llm做代码分析,想学习大佬代码自动化优化技巧哈👍

            王池川王 离线
            王池川王 离线
            王池川
            编写于 最后由 编辑
            #5

            整理好了,核心腳本在這:
            https://gist.github.com/Wang200935/dbffd7104c9170fca494f7ee7bedc865

            AST 用 babel-parser 解析,visitor pattern 萃取純邏輯函式(無副作用的才丢 LLM),重構完用 AST 替換回原位再跑測試。TS 可以把 babel-parser 換成 ts-morph,流程一樣。

            1 条回复 最后回复
            0
            • crazypeaceC crazypeace

              思路不错!
              很快 模型就会学习吸收了.

              王池川王 离线
              王池川王 离线
              王池川
              编写于 最后由 编辑
              #6

              對,最大的風險就是模型偷學了這套 pattern 之後直接輸出,反而繞過了 AST 的結構保證。不過目前還是靠 AST 把關輸出入一致性,模型怎麼進化都還有測試套件兜底。

              1 条回复 最后回复
              0
              • imbiplaza ASUSI imbiplaza ASUS

                我很久没有写
                一個 200 行的 switch-case 地獄,
                迴圈裡的巢狀 if-else

                在20年前中学毕业,我还记得会这样写,然而,现在搞不定,还会偶尔偷鸡用goto

                王池川王 离线
                王池川王 离线
                王池川
                编写于 最后由 编辑
                #7

                goto 哈哈,其實 guard clause 本質上就是有結構的 goto,只是 compiler 幫你管 label。20 年前寫的那種 switch-case 大家都經歷過,現在回頭看也是一種修行。

                1 条回复 最后回复
                0
                • L lsj2008bj

                  支持大佬分享,原来看到过ast+llm做代码分析,想学习大佬代码自动化优化技巧哈👍

                  王池川王 离线
                  王池川王 离线
                  王池川
                  编写于 最后由 编辑
                  #8

                  整理好了,核心腳本在這:
                  https://gist.github.com/Wang200935/dbffd7104c9170fca494f7ee7bedc865

                  AST 用 babel-parser 解析,visitor pattern 萃取純邏輯函式(無副作用的才丢 LLM),重構完用 AST 替換回原位再跑測試。TS 可以把 babel-parser 換成 ts-morph,流程一樣。

                  1 条回复 最后回复
                  0
                  • crazypeaceC crazypeace

                    思路不错!
                    很快 模型就会学习吸收了.

                    王池川王 离线
                    王池川王 离线
                    王池川
                    编写于 最后由 编辑
                    #9

                    對,最大的風險就是模型偷學了這套 pattern 之後直接輸出,反而繞過了 AST 的結構保證。不過目前還是靠 AST 把關輸出入一致性,模型怎麼進化都還有測試套件兜底。

                    1 条回复 最后回复
                    0
                    • imbiplaza ASUSI imbiplaza ASUS

                      我很久没有写
                      一個 200 行的 switch-case 地獄,
                      迴圈裡的巢狀 if-else

                      在20年前中学毕业,我还记得会这样写,然而,现在搞不定,还会偶尔偷鸡用goto

                      王池川王 离线
                      王池川王 离线
                      王池川
                      编写于 最后由 编辑
                      #10

                      goto 哈哈,其實 guard clause 本質上就是有結構的 goto,只是 compiler 幫你管 label。20 年前寫的那種 switch-case 大家都經歷過,現在回頭看也是一種修行。

                      1 条回复 最后回复
                      0

                      你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

                      厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

                      有了你的建议,这篇帖子会更精彩哦 💗

                      注册 登录
                      回复
                      • 在新帖中回复
                      登录后回复
                      • 从旧到新
                      • 从新到旧
                      • 最多赞同


                      • 登录

                      • 没有帐号? 注册

                      • 登录或注册以进行搜索。
                      • 第一个帖子
                        最后一个帖子
                      0
                      • 版块
                      • 最新
                      • 标签
                      • 热门
                      • 用户
                      • 群组