純文本配置還是注冊表

我們知道Unix/Linux下的程序配置文件從來都是純文本的,你可以自由地修改和查看,他們也沒有什么什么XML之類的玩意(參看XML的這兩篇文章:,),這個最重要的Unix文化(參看Unix傳奇下篇)40多年來就這么沿續下來了。我很佩服Microsoft的創新能力,一會兒用INI,一會兒用注冊表,一會又是用XML,這就是Windows的編程中那“強大”的創新。在網上又看到有人在爭論為什么用注冊表而不是純文本,所以,寫下這篇文章。

引入注冊表所謂的原因

首先,讓我們來看一下為什么微軟覺得要使用注冊表而不是ini文件,下面是一些其列出來的ini方面的毛?。?/p>

  • ini文件不支持Unicode

  • ini文件的安全權限不夠

  • ini文件在多進程下存取會有問題

  • 如果一個進程鎖上了這個文件,另一個進程就無法獲得,只能出錯。

  • ini文件只能包含字符串,無法使用二進制

  • 解析ini文件相對來說性能比較慢,第一次讀寫都需要把整個文件讀入內存,然后再寫回去。

  • ini文件最大只有32K

  • ini文件的默認目錄在Windows系統目錄下,只能這個目錄只能Windows管理員才能訪問

  • ini只能包含了兩層,對于多層不支持。

  • 把ini文件放在中央服務器上管理很困難。

而微軟說,注冊表可以完美地解決這些問題。居然微軟只說到了ini文件,但我覺得不單單是ini,所有的以純文本方式保存配置文件的方法都會出現上述這樣的問題。

我的觀點

那么,當你在看到這些言論時,你是怎么想的?你有沒有經過自己的獨立思考?還是你覺得注冊表完美地解決了所有的一切?下面是我的一些觀點:

  • 首先,我們要知道沒有任何一件事是完美的,凡事必然有好的一面,也有不好的一面。

  • 其次,當我們在改進一個東西時,不單單要解決其不好的東西,還要把其好的東西給傳承下來。

所以,當你看到一些只說好或是只說壞的東西時,這往往意味著“宗教”或“洗腦”,這正是需要你獨立思考的時候。

純文本配置文件的好處

下面,是我覺得純文本配置文件的好處(我用Unix下的純文本配置文件來舉例):

  • 很容易進行版本管理(配置文件和程序代碼一樣都需要版本控制)

  • 很容易移植到別的平臺

  • 很容易自定義文本文件的格式和語法,已也有相關的庫支持(ini只支持ANSI字符,只有32K,只支持兩級,那是ini的問題,解決這些問題不需要引入注冊表)

  • 可以在配置文本中寫注釋信息

  • 你要很容易的使用grep,awk,sed等等以及來和腳本集成。

  • 你可以很容易地拆分配置文件把其放到conf.d中,這樣一來,你就非常靈活

    • 你就不用整個文件都讀入內存,

    • 你也可以分別設置上不同的存取權限,

    • 同樣可以減小多個進程同時存取的問題

    • 同樣可以引用別的二進制配置的文件

  • 你可以很容易地產生備份或是在不同的配置中來回地切換配置文件以進行調試。

  • 你可以很容易地使用rsync來向中央服務器同步你的配置文件。或者使用NFS/NIS直接就把配置放在中央服務器上。

真正的原因

可見,Windows 的注冊表并沒有把純文本配置文件的這些好處都帶過來,所以,經過這樣的獨立思考,我們可以知道,微軟引入注冊表的真正原因是——

  • 讓你的程序不具移植性,讓你的軟件永遠運行在Windows上。

  • 增加你編程的復雜度和你維護配置文件的復雜度,讓你在痛苦之后,苦苦哀求微軟再發布下一個“創新”。

各位程序員——Windows是很危險的,你們還是回火星去吧

轉自:http://coolshell.cn/articles/4077.html

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/2143

(0)
s19930811s19930811
上一篇 2016-08-15 12:10
下一篇 2016-08-15 12:10

相關推薦

  • 8.5-文本處理工具(命令篇)

     1、文件查看命令: cat, tac,rev cat [OPTION]… [FILE]…     -E: 顯示行結束符$     -n: 對顯示出的每一行進行編號     -A:顯…

    Linux干貨 2016-08-07
  • M22 用戶、組學習總結

    Linux系統的登錄方式是通過賬號和密碼。每一個登錄賬號都有一個主組可能有附加組。Linux內的文件和目錄都有所有者和屬組,只有相應權限的賬戶可以對其進行操作,下面我對用戶權限相關內容進行了總結。   1、  用戶ID,每個用戶具有相應的ID號碼,主要分為兩類:系統ID和用戶ID,在Centos6中系統ID為1-499,用戶ID >…

    2017-02-22
  • Linux系統的終端類型

    一、什么是Linux終端     終端–用戶用戶與主機交互,必然要用到的設備。     早期的大型機,想使用的用戶很多,但是主機只有一個,也不可能人手一臺,但是可以做到在主機上接一個分屏器,分屏器的每一個端子上可以接上一套鼠標鍵盤顯示器,就可以直接在主機上進行一些操作了,這就相當于每個人在獨立的操作一臺計算…

    Linux干貨 2016-10-18
  • 第二周作業

    新建 Microsoft Word 文檔.docx

    Linux干貨 2016-12-13
  • 淺談TCP三次握手和四次分手

          TCP(Transmission Control Protocol傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議提供可靠的連接服務,采用三次握手確認建立一個連接,比如我們去訪問一個網站,從輸入網址到頁面顯示我們所想要瀏覽的內容,這個過程其中就包含了小編要說的三次握手和四次揮手。 一、首先我們來了解…

    2017-09-02
  • 馬哥教育網絡班第19期+第7周課程練習

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; 2、創建一個大小為1G的swap分區,并創建好文件系統,并啟用之; 3、寫一個腳本  …

    Linux干貨 2016-08-08
欧美性久久久久