我們知道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