`
lucene321
  • 浏览: 175858 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

    ?转自http://coolshell.cn/articles/4077.html <span class="date">2011-03-28 陈皓</span>


?

我们知道Unix/Linux下的程序配置文件从来都是纯文本的,你可以自由地修改和查看,他们也没有什么什么XML之类的玩意(参看XML的这两篇文章:<a title="信XML,得永生!" href="http://coolshell.cn/articles/2504.html" target="_blank">一</a>
,<a title="信XML,得自信" href="http://coolshell.cn/articles/3498.html" target="_blank">二</a>
),这个最重要的Unix文化(参看<a title="Unix传奇(下篇)" href="http://coolshell.cn/articles/2324.html" target="_blank">Unix传奇下篇</a>
)40多年来就这么沿续下来了。我很佩服Microsoft的创新能力,一会儿用INI,一会儿用注册表,一会又是用XML,这就是<a title="Windows编程革命简史" href="http://coolshell.cn/articles/3008.html" target="_blank">Windows的编程中那“强大”的创新</a>
。在网上又看到有人在争论为什么用注册表而不是纯文本,所以,写下这篇文章。

<h4>引入注册表所谓的原因</h4>
首先,让我们来看一下为什么微软觉得要使用注册表而不是ini文件,下面是一些其列出来的ini方面的毛病:

  • ini文件不支持Unicode
  • ini文件的安全权限不够
  • ini文件在多进程下存取会有问题
  • 如果一个进程锁上了这个文件,另一个进程就无法获得,只能出错。
  • ini文件只能包含字符串,无法使用二进制
  • 解析ini文件相对来说性能比较慢,第一次读写都需要把整个文件读入内存,然后再写回去。
  • ini文件最大只有32K
  • ini文件的默认目录在Windows系统目录下,只能这个目录只能Windows管理员才能访问
  • ini只能包含了两层,对于多层不支持。
  • 把ini文件放在中央服务器上管理很困难。


而微软说,注册表可以完美地解决这些问题。居然微软只说到了ini文件,但我觉得不单单是ini,所有的以纯文本方式保存配置文件的方法都会出现上述这样的问题。

<h4>我的观点</h4>
那么,当你在看到这些言论时,你是怎么想的?你有没有经过自己的独立思考?还是你觉得注册表完美地解决了所有的一切?下面是我的一些观点:

?


    <li>
    <span style="color: #800000;">首先,我们要知道没有任何一件事是完美的,凡事必然有好的一面,也有不好的一面。</span>
    </li>
    <li>
    <span style="color: #800000;">其次,当我们在改进一个东西时,不单单要解决其不好的东西,还要把其好的东西给传承下来。</span>
    </li>

所以,当你看到一些只说好或是只说坏的东西时,这往往意味着“宗教”或“洗脑”,这正是需要你独立思考的时候。

<h4>纯文本配置文件的好处</h4>
下面,是我觉得纯文本配置文件的好处(我用Unix下的纯文本配置文件来举例):

  • 很容易进行版本管理(配置文件和程序代码一样都需要版本控制)
  • 很容易移植到别的平台
  • 很容易自定义文本文件的格式和语法,已也有相关的库支持(ini只支持ANSI字符,只有32K,只支持两级,那是ini的问题,解决这些问题不需要引入注册表)
  • 可以在配置文本中写注释信息
  • 你要很容易的使用grep,awk,sed等等以及来和脚本集成。

  • <li>你可以很容易地拆分配置文件把其放到conf.d中,这样一来,你就非常灵活
    [list]
  • 你就不用整个文件都读入内存,
  • 你也可以分别设置上不同的存取权限,
  • 同样可以减小多个进程同时存取的问题
  • 同样可以引用别的二进制配置的文件


</li>
  • 你可以很容易地产生备份或是在不同的配置中来回地切换配置文件以进行调试。
  • 你可以很容易地使用rsync来向中央服务器同步你的配置文件。或者使用NFS/NIS直接就把配置放在中央服务器上。

  • [/list]
    <h4>真正的原因</h4>
    可见,Windows 的注册表并没有把纯文本配置文件的这些好处都带过来,所以,经过这样的独立思考,我们可以知道,微软引入注册表的真正原因是——

    • 让你的程序不具移植性,让你的软件永远运行在Windows上。
    • 增加你编程的复杂度和你维护配置文件的复杂度,让你在痛苦之后,苦苦哀求微软再发布下一个“创新”。


    各位程序员——Windows是很危险的,你们还是回火星去吧。

    ?

    ?转自http://coolshell.cn/articles/4077.html <span class="date">2011-03-28 陈皓</span>


     
    0
    0
    分享到:
    评论

    相关推荐

      将IE浏览器的纯文本字体修改为微软雅黑.docx

      为实现将IE浏览器的纯文本字体修改为微软雅黑,我们可以通过修改注册表来实现。 知识点1:注册表的作用 注册表(Registry)是Windows操作系统的一种配置数据库,用于存储系统和应用程序的设置信息。在本文中,我们...

      txt格式文件怎么转换成bat文件.docx

      txt格式文件是一种纯文本文件,它可以使用文本编辑器打开和编辑。txt格式文件通常用于存储文本信息,例如文本文件、配置文件、日志文件等。 bat文件是什么? ---------------- bat文件是一种批处理文件,它可以在...

      水淼·文件批量处理器 v1.73

      ◆ 支持自由选择配置是存储在本地文件还是在注册表中 ◆ 支持建立和自由切换多个 ftp 帐户,支持上传下载(使用“打开”命令),支持ftp和本地列表混合输入和操作 ◆ 支持内置内容查看,查看内容包括媒体文件(wmp...

      易语言540个易模块

      取纯数字时间文本模块 取非系统进程全路径文件名 取功能键状态 取汉字笔画 取汉字笔画模块-寒风 取汉字代码 取控件或窗口的标题 取拼音带声调1.2 取拼音首个字母 取声调拼音模块1.0 取十进制 取图片尺寸 取...

      易语言模块大全(共775个模块)

      十六进制文本转十进制文本(1.0).zip 十进制转为十六进制1.1(1.0).zip 双功能自动编号模块(1.0).zip 四则混合运算(1.1).zip 世恒软件-登陆确认(1.0).zip 属性列静态控件(1.0).zip 搜索邮件(1.0).zip 数字的单双判断...

      增强 Notepad 无标题 记事本

      7:程序无需安装无写入注册表纯绿色软件,程序所作修改全保存在 Notepad.ini 配置文件中,不想用了随时Del删除就可以了..方便无残留 8:增加工具快捷栏 9:增加文字前景色和背景色 软件用法: 拷贝 Notepad.ini 到 C:\...

      790个易模块打包下载-2

      取纯数字时间文本模块.ec 取非系统进程全路径文件名.ec 取功能键状态.ec 取汉字笔画.ec 取汉字笔画模块-寒风.ec 取汉字代码.ec 取控件或窗口的标题.ec 取拼音带声调1.2.ec 取拼音首个字母.ec 取声调拼音...

      790个易模块-3

      取纯数字时间文本模块.ec 取非系统进程全路径文件名.ec 取功能键状态.ec 取汉字笔画.ec 取汉字笔画模块-寒风.ec 取汉字代码.ec 取控件或窗口的标题.ec 取拼音带声调1.2.ec 取拼音首个字母.ec 取声调拼音...

      易语言模块914个

      取纯数字时间文本模块.ec 取网卡参数.ec 取网页元素.ec 取腾讯TT浏览器的地址栏文本模块.ec 取非系统进程全路径文件名.ec 变速模块(1.0).EC 变速模块.ec 同步目录.ec 同步缩放控件.ec 同步缩放控件1.0.ec ...

      790个易模块打包

      取纯数字时间文本模块.ec 取非系统进程全路径文件名.ec 取功能键状态.ec 取汉字笔画.ec 取汉字笔画模块-寒风.ec 取汉字代码.ec 取控件或窗口的标题.ec 取拼音带声调1.2.ec 取拼音首个字母.ec 取声调拼音...

      易语言模块大全(374个)

      取纯数字时间文本模块.ec 磁性窗口2.0.ec 超级表达式计算.ec Excel功能模块.ec 隐藏进程.ec 隐藏进程模块(1).ec ODBC方式填充树型框.ec ADO方式填充树型框.ec 软件注册模块.ec 软件注册算号器模块.ec 超级列表框操作...

      精易模块[源码] V5.15

      8、修正“时间_时间戳转文本”代码不严谨出现数组错误的BUG,感谢易友[455275321]反馈。 MD5:3E66BFA15806DEAFBCF11806EB99CC11 精易模块 V5.13 what’s new:(20150202) 1、修正“编码_ansi到usc2”当末尾出现10...

      1345个易语言模块

      取纯数字时间文本模块.ec 取网卡MAC.ec 取网卡参数.ec 取网络文件尺寸.ec 取网页元素.ec 取 腾讯TT浏览器的地址栏文本模块.ec 取节气模块.ec 取试用数据.ec 取非系统进程全路径文件名.ec 变身_超级编辑 框.ec 变速...

      1350多个精品易语言模块

      取纯数字时间文本模块.ec 取网卡MAC.ec 取网卡参数.ec 取网络文件尺寸.ec 取网页元素.ec 取 腾讯TT浏览器的地址栏文本模块.ec 取节气模块.ec 取试用数据.ec 取非系统进程全路径文件名.ec 变身_超级编辑 框.ec 变速...

      易语言700模块打包

      取纯数字时间模块(1.0).zip 取网卡参数(1.0).zip 取浏览器信息(1.1).zip 取数字型组合时间(1.0).zip 求真函数动态调用类(1.0).zip 求真文件对话框模块(1.0).zip 求真文件拖放模块(1.0).zip 求真树型框操作类...

      cp-ansible:Confluent平台的Ansible剧本

      提供纯文本,SSL,SASL_SSL和Kerberos的配置选项。 可以从此存储库安装的服务是: 动物园管理员 卡夫卡 架构注册表 REST代理 融合控制中心 Kafka Connect(分布式模式) KSQL服务器 文献资料 您可以在找到运行CP...

      Windows Hosts 文件编辑器 BlueLife Hosts Editor 1.3.zip

      该程序使您可以从纯文本文件中导入带有域名的列表,或直接在主面板中键入主机名。此外,您还可以阻止,删除和解析域名,启用或禁用所选域以及使用默认的网络浏览器启动当前域。 BlueLife Hosts Editor 使您能够将...

    Global site tag (gtag.js) - Google Analytics