Linux
Linux 中使用的“標準”配置解析器庫是哪個?
在 Linux 應用程序中,我不想使用“我自己的”配置解析器,而是使用(應該是?)已經可用的配置解析器。簡單地保持應用程序配置的維護簡單而不添加額外的庫。
確實沒有“標準”配置解析器庫。如果您仔細閱讀
/etc
,您會發現以下組合:
- XML 配置
- Windows INI 樣式配置
- 基本 KEY=VALUE 配置
- JSON(主要用於 Web 應用程序)。
- YAML(主要用於較新的東西,尤其是用 Python 編寫的)。
- 看起來像 JSON 或 YAML 或 XML 但不是的東西(例如,請參閱 Nginx 的配置(看起來像 JSON,但不是)、Apache(看起來像 XML,但不是)和 Unbound(看起來像 YAML ,但不是)。
- 各種shell語言。
- 各種看起來像 shell 語言但在技術上不是的東西。
- 各種腳本語言的原始碼片段。
- 可能還有其他我沒有想到的事情。
至於與您的應用程序一起使用的內容:
- 請出於對所有事物的熱愛,避免使用 XML。它不必要地冗長,解析非常複雜(因此需要很長時間和大量記憶體),並帶來許多安全問題。在元素和屬性之間取得適當的平衡也很重要,而且您通常會在稍後的某個時間點後悔做出的選擇。這裡唯一真正的優勢是您幾乎可以保證在您遇到的任何系統上都有一個有效的 XML 解析器。
- Windows 風格的 INI 文件通常是一個安全的選擇,儘管它們限制了配置結構的複雜性。為此存在許多庫,您的系統可能已經至少有一個。它們在 Linux 上並不流行(經典的配置文件傳統上是沒有節頭的 KEY=VALUE 對),但它們仍然被廣泛使用,而且很容易理解。
- 基本的 KEY=VALUE 對(理想情況下每行一個)解析起來非常簡單,你甚至不需要一個庫來解析它,但它們的功能非常有限。
- JSON 安全且易於解析,得到廣泛支持(如今幾乎每種主要語言都至少有一個解析器),並且支持配置結構的任意嵌套。但是,它不支持註釋(某些解析器可能,但結果不能互操作),這對於設計用於使用文本編輯器編輯的文件來說不是很好。
- YAML 是我個人的最愛,它相當安全且易於解析,對大多數人來說看起來很自然,支持評論,並且成本非常小。這裡唯一重要的是縮進真的很重要,因為它佔語法的大約 80%,再加上 YAML 需要空格來縮進(沒有製表符)的事實,如果使用它可能會有點麻煩你沒有一個好的編輯器。
- 如果您使用腳本語言,您可能會考慮使用原始碼片段進行配置,但這樣做要非常小心。除非你對如何解析它們非常小心,否則你幾乎可以讓使用者隨意對你的內部邏輯做任何事情,這是客戶支持的噩夢(你最終會讓人們抱怨你破壞了他們的配置,碰巧包括戳你改變的核心程序內部的東西)。