跳至主要內容
YIM NEWS
† 最新報導
科技 科普

壓縮包裡裝著一個自己:從 LZMA2 到 Quine 壓縮包的一場實測

刊登 2026/11/01 14:19 閱讀約 4 分鐘 全站第 1,408 篇

2026 年 11 月 1 日,開發者 unmayx 在 V2EX 發布了一篇整理自身壓縮實驗的長文摘要,主題分成兩段:前半段是拿幾套壓縮演算法互相比拚,後半段則是玩了一個聽起來像悖論的東西,做一個「包含自己完整位元組副本」的壓縮包,也就是 Quine 壓縮包。

先把實驗數據擺出來。同一份 16MiB 的部落格離線包,7-Zip 預設使用的 LZMA2 是基準線;ZPAQ 花約一分鐘壓到 3.5MiB;PAQ8PX 壓到約 3.1MiB,是這輪冠軍,但代價是一個半小時的時間與 30GiB 記憶體,解壓同樣辛苦;FFmpeg 作者 Fabrice Bellard 的 NNCP 在 RTX 4090 上跑了一個半小時,結果是 4.1MiB,反而輸給 LZMA2;cmix 則在測試中途崩潰。

作者的結論很務實:追求極限壓縮比選 PAQ8PX,日常使用 LZMA2 依然最穩,小檔案想再擠一點可以試 ZPAQ。

壓縮為什麼有極限

用日常比喻來說,壓縮就像搬家時整理行李。衣服可以真空壓縮、書本可以堆疊,但一幅已經裱好的畫,你再怎麼擠也省不了空間。資料也一樣:能壓的是「重複與規律」,越是接近隨機雜訊的內容,越壓不動。

這正是評論區一位網友點出的核心:香農的資訊論早就劃出了壓縮的理論極限。一段資訊的「熵」決定了它最少需要多少位元來表示。PAQ8PX 之所以能贏,是因為它用極重的模型去預測資料的統計規律,而那份運算與記憶體開銷,就是買壓縮比付出的價錢。LZMA2 則是在速度、記憶體與壓縮比之間取了一個工程上合理的平衡點,這也是它二十多年來仍是日常工具箱主力的原因。

壓縮包裝著自己,怎麼可能

後半段的 Quine 壓縮包,概念來自程式語言裡的「自產生程式」:一段程式執行後印出的結果,就是它自己的原始碼。套到壓縮包上,就是這個檔案解開之後,裡面有一份和自己位元組完全相同的副本。

這件事為什麼難?可以把壓縮包想成一封信封,信封上有收件人格式、有校驗印章,內容物要塞進一份「這封信封自己的完整照片」。照片裡又包含信封,信封裡又有照片,無窮反射。實際的做法是靠定點疊代:先猜一個內容,計算整個檔案會長成什麼樣,再回頭修正,直到猜的內容和產出的檔案完全一致。中間還要處理各種格式特有的麻煩。

作者這次嘗試了三種格式。zstd 的版本利用可跳過框架、RAW block 與 XXH64 校驗值構造,最終做成 .tar.zst,連 Windows 檔案總管都能直接打開,並附上完整生成程式碼。ZIP 的版本利用成員資料重疊繞過視窗限制,7-Zip 與 libarchive 都能正常解壓,但 Python 的 zipfile 會因為壓縮資料越過後續局部檔頭而報錯,這是相容性上的代價。RAR 原理上也可行,但因為 RAR 並非開源軟體,文章只放了生成後的樣本供研究。

看不懂的程式碼,與 AI 的角色

這篇分享裡最值得停下來看的一段,是作者自己的坦白:這些構造程式碼他基本看不懂,但 AI 就是能把問題解決。複雜格式、校驗值構造、相容性的坑,全部被 AI 硬啃了下來。

這個現象並不孤單。面試官開始專門考工程師「AI 工具怎麼用」,也有人讓兩個 AI 模型互寫互審程式碼,把 AI 自審容易放水的問題交給另一個模型把關。當基礎設施層的程式碼越來越常由 AI 生成,而人類逐步退到「驗收結果」的位置,作者在文末自問「記錄還有沒有意義」,其實問的是同一件事:當你能用但不理解,這些知識算是你的嗎?

歷史給過一個參照。兩百年前自動織機問世時,織工的技能價格先被壓低,職業本身並未立刻消失。今天 AI 寫出人看不懂的壓縮構造器,情況有點像:技能的擁有者換了,但「判斷結果對不對」的需求還在人這邊。作者能發現 Python zipfile 會報錯、能確認 7-Zip 能解,這種驗證能力目前仍是 AI 產出的必要配套。

所以呢

對一般使用者,這篇實驗的可用結論很短:日常壓縮交給 LZMA2 或 zstd 就好,極限壓縮是特定場景(長期冷存檔、頻寬極貴的傳輸)才值得付出時間與記憶體的選項。

至於 Quine 壓縮包,它沒有實用價值,比較像格式玩家的高難度動作。但它示範了兩件事:一是 zstd、ZIP、RAR 這些我們每天經過的格式,內部其實留著許多設計上的縫隙,能被拿來做格式手術;二是這種縫隙級的工程,如今一個看不懂細節的人靠 AI 也能完成。後者對基礎設施軟體的維護與安全,可能比前者更值得留意。

資料來源

  1. 01 參考來源 www.v2ex.com

本文使用 AI 協助整理或撰稿,引用與分析仍應依原始資料核對。

編輯政策 更正與勘誤