DLL和注册表有什么问题?

时间:2009-06-10 06:54:52

标签: windows macos dll operating-system registry

我正在观看WWDC 2009主题演讲以及有人对Windows 7 / Vista的评价让我很好奇......

该发言者声称7仍然是一个糟糕的操作系统,因为它仍然使用相同的技术,如DLL和注册表。他的说法有多准确,OS X的做法有多么不同?即使os x也有动态加载库吗?我猜注册表的东西可能有些重量......

有人可以向我解释每个操作系统策略的差异吗?

我不想在这里或任何地方煽动粉丝,我只是想知道两种操作系统如何解决一般问题..

谢谢,

的Kreb

3 个答案:

答案 0 :(得分:8)

当然两个操作系统都有使用DLL的工具(它们在OS X上被称为dylib或Frameworks,具体取决于它们的打包方式).dylibs非常类似于DLL - 它们是动态链接库,因此可能有多个版本的浮动。另一方面,框架实际上是一个目录结构。它们包含动态链接库(可能是它们的多个版本),资源,标题,文档等.OS X上的动态链接器自动处理从框架中为每个可执行文件选择正确的库版本。该系统似乎比Windows的DLL管理工作得更好,这仍然是一个混乱(当然,Windows系统与苹果公司迁移到OS X时遗留的遗留问题相关联)。公平地说,Unix已经解决了这个问题很长一段时间,并使用符号链接将dylib链接到正确的版本化实现,允许多个已安装的版本。

没有OS X等效的Windows注册表。这是好事还是坏事。好的一面是,通过注册表搞砸来破坏整个OS X系统要困难得多。 OS X将配置存储在许多单独的文件中,通常是每个应用程序,用户等一个或多个文件。这些文件通常是plist(表示字典,数组和基元类型的XML模式)格式化文件。不好的一面是,通过保留这种Unix-y传统,OS X没有相同的über-admin工具,可以通过注册表流失并做各种疯狂的事情。

答案 1 :(得分:5)

<强>的DLL

OS X和Windows之间的主要区别在于Windows历史上试图通过让每个人共享代码来节省空间/内存(即,您安装一个DLL,每个人都可以使用它)。 Apple将所有非系统库静态编译到每个应用程序中(好吧,不是真的,但也可能是)。浪费磁盘空间/内存,但使应用程序部署方式更容易,没有版本问题。

<强>注册表

OS X 有一个注册表,它们只是一个名为plists的平面文件,而不是一个神奇的组件,它主要是一个文件系统,除非它不是。 Apple的方法可以很容易地将设置从一台机器迁移到另一台机器,而Windows的方法在内存中更快,并且允许应用程序轻松“观察”一个键而不会产生大的性能(即一个应用程序更改密钥和另一个应用程序)立即知道它)。

总结

主题演讲者充满了它,10.6与10.5相同的代码,与10.4等大致相同的代码,就像Win7主要是Vista一样,主要是Server '03等等。有远程在操作系统中测试过多的代码,以便在每个版本中丢弃它,特别是如果您真的希望客户的应用程序能够正常运行。

答案 2 :(得分:-4)

DLL是库的不良变体,因为它们无法独立运行,使用它们会自动调用另一个包装器可执行文件,这会增加不必要的开销,并且更难以确定哪些库实际上在使用中。另一个不太重要的缺陷是系统无法真正共享库。 * nix系统通过在顶层运行它们自己或在更大的包装器(如kde-init)下存在库来避免这种情况,这些库可以由任何应用程序共享,这意味着每个库只需要一个副本,并且你可以随时根据需要轻松杀死一个图书馆。

注册表是一个好主意,除了它被用于这么多的事实,几乎任何你安装的将使用注册表,和一个损坏的注册表并使您的操作系统几乎完全无用,直到它被修复。 在* nix系统中通过为不同的内容提供多个不同的文件来避免这种情况,通过Xorg的配置文件引用驱动程序,将已安装的应用程序写入其自己的数据库,并且通常将密钥或标识写入目录,而不是单个通用文件。这减少了严重故障的可能性,并且意味着您可能仍然可以在任何时候修复系统。如果Xorg损坏你只需重新配置它,如果安装的应用程序数据库损坏你可以修复或重建它,如果应用程序个人设置目录损坏,你只需要重新安装一个应用程序(大多数好的商业应该有一个方法来修复无论如何)