这一节覆盖了各种开发工具和特性。
下面是 glibc 中的新特性
-
支持继承优先级和保持优先级的互斥量(mutex)。这是 POSIX 标准中包含的特性。
-
用于主机名查找的 getaddrinfo() 接口在排序目标地址时可以定制规则,通过 /etc/gai.conf 文件。
-
NIS 和 NIS+ 的速度有很大提升。
-
完善 RFC 3542 支持 (IPv6 的高级套接字 API)。
-
动态符号查找的速度大大提高。
链接器包含对新的 ELF 符号散列表格式的支持。使用 --hash-style 链接器选项来应用这种格式。
本次发布的内核头文件是直接从内核导出的,使用 2.6.18 内核新引入的 headers_install 特性。因此,glibc-kernheaders 软件包被去除,取代它的是 kernel-headers,它是 kernel 的子软件包。
开发者会看到新的内核头文件与过去有所不同,包括但不限于如下内容:
-
文件 <linux/compiler.h> 被去除,因为它对于用户空间没有意义。
-
宏 _syscallX() 被去除。用户空间应当使用 C 库中的 syscall()。
-
宏 PAGE_SIZE 在某些体系中被去除,因为可能是一个变量。用户空间应当使用 sysconf(_SC_PAGE_SIZE) 或 getpagesize()。
-
头文件 <asm/atomic.h> 和 <asm/bitops.h> 被去除。它们不是为用户空间使用的,在一些体系中会出错,而另一些体系中会悄悄执行非原子操作。C 编译器提供了自己的内部原子操作,适于在用户空间使用。
-
以 #ifdef __KERNEL__ 保护的内容被彻底忽略,使用 unifdef 工具。定义 __KERNEL__ 以访问用户空间不应可见的内容这种作法不再有效。
另外,一些其他不适于用户空间使用的头文件被去除。还有更多的头文件被修改,以去除不合适的内容。
![[注意]](/unixcd12/eWebEditor/UploadFile/2007325161134143.png) |
内核头文件的修改并不是 Fedora 特有的 |
|
这些修改是自上游继承的,并不是 Fedora 特有的。任何发行版如果使用最新正式导出的内核头文件,都将是这样。 |
这一版本的 Fedora 使用 GCC 4.1 构建,同时将其包含在发行版中。
-
Fedora 开发者对 ELF 格式中,提供动态链接的符号的 .hash 段做了变动。新的 .gnu.hash 段,使用 gcc 的 --hash-style=gnu 参数来生成,提供与过去的 hash 段相同的功能,但是带来了 50% 的动态链接性能提升。使用新的 hash 函数生成的可执行程序和库与旧的 glibc 以及动态链接器不兼容。要使用过去的 hash 规则,与过去基于 glibc 的版本兼容,可以传递 --hash-style=sysv 选项。
-
需要 GDB 6.1 或更新的版本来调试可执行文件,除非编译时指定了 -fno-var-tracking 编译选项。
-
选项 -fwritable-strings 不再可用。
-
英语的诊断信息以 Unicode 编码,如果无法阅读,请将环境变量 LC_CTYPE 设置为 C 或者换用其他终端模拟程序。
-
在大多数系统中不再安装 specs 文件。普通用户不会注意它,需要调整这个文件的开发者可以使用 -dumpspecs 选项来生成并用于编辑。
-
包含了 SSA 代码优化程序。它提供了更好的 constant propagaion, partial redundancy elimination, load and store code motion, strength reduction, dead storage elimination, better detection of unreachable code 以及累计的尾递归。
-
自动向量化得到支持。这一技术在某些情况下,对于重复的循环可以获得更高性能。
-
新加入的 sentinel 属性使得编译器在遇到 execl(char *path, const char *arg, ...) 这样的需要一个 NULL 参数列终结符的函数中,缺失了 NULL 的情况下会发出警告。
-
cast-as-lvalue , conditional-expression-as-lvalue , 和 compund-expression-as-lvalue 扩展都被去除。
-
#pragma pack() 的语义被修正为更接近其他编译器。
-
对声明时带有 register 修饰符的变量取地址时,产生错误而不是警告。
-
不完整的类型的数组会引发错误。这意味着不能对结构体的定义进行前向引用。
-
基本的编译器,不使用任何优化时 (-O0),经测试在实际代码中速度提高了 25%。
-
在多线程程序中库可以包含函数作用域的静态变量了。嵌入式程序员可以用选项 -fno-threadsafe-statics 关掉这一特性,但普通用户永远不要这样做。
Ruby 的默认搜索路径 $: 被修改,以符合 Ruby 打包准则。rbconfig 模块的 Config::CONFIG 中的一些条目也有调整。最重要的变动是:
-
sitedir 及相关目录 (sitelibdir, sitearchdir) 位于 rubylibdir 之下。它们在 /usr/lib/ruby/site_ruby 目录中,而不是 /usr/lib/site_ruby。
-
平台无关的纯 Ruby 代码位于 /usr/lib,即使是 x86_64 体系也是如此,之前是位于 /usr/lib64。这个变动影响到 Config::CONFIG 中的 rubylibdir 和 sitelibdir 条目。
$: 中列出的目录仍然不变,因此已有代码例如 /usr/lib/site_ruby 不需要修改。但是它们都标为过时,将在 Fedora Core 8 中去除。请遵照 Ruby 打包准则。特别的,Ruby 库只应当安装到 sitelibdir 和 sitearchdir。即使不是打包 RPM,也应当遵守这一规则。
(本文已被浏览 2712 次)
|
|