Go to main content

Oracle® Solaris 11.4 新增功能

退出打印视图

更新时间: 2018 年 8 月
 
 

针对开发者的增强功能

本节介绍此发行版中针对开发者新增的增强功能,这些增强功能提供了先进的库和可靠的框架,使得在 Oracle Solaris 平台上开发应用程序变得非常容易。

C11 编程语言标准支持

Oracle Solaris 11.4 包含对 C11 编程语言标准“ISO/IEC 9899:2011 信息技术-编程语言-C”的支持。C11 标准是 C99 标准的兼容修订版。在历史上,C 编程语言标准已是单一 UNIX 规范的一部分。但是,新的 C 编程语言标准 C11 与下一个 UNIX 规范分开提供,而且在下一个 UNIX 规范推出之前即可提供。

Oracle Solaris 11.4 为 C11 和 C99 提供支持,可以在将 C11 包含在未来的 UNIX 规范之前为客户提供 C11 支持。新标准可以与 Oracle Developer Studio 12.5 或 12.6、GCC 5 或 7 以及 LLVM/Clang 6.0 C 编译器结合使用。开发者还可以使用最新推出的 C 编程语言标准编写 C 程序。

标准编译环境

在 Oracle Solaris 11.4 中,缺省编译模式(不使用功能测试宏来请求符合特定的 POSIX 标准)会使得以下内容可见:

  • 与最新的 POSIX 规范相对应的名称空间

  • 通常由 Oracle Solaris OS 提供的所有其他函数和名称

对于 Oracle Solaris 11.4,最新的 POSIX 规范是 IEEE 标准 1003.1-2008 基本规范第 7 期(又称 XPG7、UNIX V7、SUSv4)。

二进制兼容性得以保持。但是,源兼容性可能会在以下几个方面受到影响:

POSIX 线程

功能测试宏 _POSIX_PTHREAD_SEMANTICS 已过时而且不再需要。它将不会由任何头文件进行测试。以前只能通过使用 -D_POSIX_PTHREAD_SEMANTICS 或相应的标准功能测试宏才可见的接口版本现在缺省可见。这些包括 asctime_r()ctime_r()getgrgid_r()getgrnam_r()getlogin_r()getpwnam_r()getpwuid_r()readdir_r()sigwait()ttyname_r()。以前的缺省接口(基于草稿 POSIX 线程标准)在编译时仍可通过使用 -D__USE_DRAFT6_PROTOTYPES__ 来提供。有关更多信息,请参见 intro(3) 手册页。

X/Open 套接字(XNS 第 4 期)

在以前,需要设置 -D_XOPEN_SOURCE=500 才能使用由 X/Open 标准定义的套接字接口。现在,这些接口在缺省编译环境中也可见。现在,如果对依赖旧 SunOS4.x 样式套接字的应用程序进行编译,需要使用 -D__USE_SUNOS_SOCKETS__。有关更多信息,请参见 socket.h(3HEAD)

进程控制库

Oracle Solaris 11.4 包括一个新的进程控制库 libproc,该库为 /proc 接口的功能提供更高级的接口。该库还提供对符号表等信息的访问,符号表是检查和控制进程和线程所必需的。

使用 libproc 的控制进程通常可以:

  • 抓取落入圈套的进程,暂停其执行

  • 检查落入圈套的进程的状态

  • 检查和修改落入圈套的进程的地址空间

  • 让落入圈套的进程代表控制进程执行系统调用

  • 释放落入圈套的进程,使其可以重新不受干扰地运行

libproc 库提供断点调试器完成其工作所需的全部机制。它还便于创建简单的一次性控制应用程序针对落入圈套的进程执行简单的操作,而不让这些进程意识到入侵。

有关更多信息,请参见 libproc(3LIB) 手册页。

改进了语言环境支持

Oracle Solaris 11.4 改进了由 libc 提供的现有语言环境支持 API,增加了在 UNIX V7 标准中定义的新 API。已引入了在 UNIX V7 标准中定义的 uselocale 和其他 API,以支持线程之间的语言环境并支持更改线程的语言环境。新 API 连同现有的语言环境支持 API 已更新为完全多线程安全 API。已改进在 libc 中处理的底层语言环境,以提高性能并降低采用多个语言环境的应用程序对资源的使用率。

有关更多信息,请参见 uselocale(3C)newlocale(3C)freelocale(3C)wctype(3C)localedef(1) 手册页。

用户模式监视点

Oracle Solaris 11.4 现在使用芯片化安全内存 (Silicon Secured Memory, SSM) 而非虚拟内存映射实现了用户模式监视点。监视点是一种在针对内存位置执行写入或读取操作时触发的事件,可用于进行调试和性能分析。目前,可以通过将包含地址的页面设为不可访问来实现监视点。如果线程频繁接触同一页面上的无关位置,则此操作的执行速度会大大减慢。相比之下,SSM 对于 64 字节高速缓存行具有更细的粒度。另外,SSM 是多线程的,而所有的线程都共享相同的虚拟内存页面。

有关更多信息,请参见 dbx(1)mdb(1) 手册页。

DTrace 库

Oracle Solaris 11.4 包括一个名为 libdtrace 的新进程控制库,该库使开发者能够写入 bespoke DTrace 应用程序。

有关更多信息,请参见Oracle Solaris 12 DTrace(动态跟踪)指南 中的 附录 A, libdtrace API Reference,

DTrace 中的 DWARF 支持

在 Oracle Solaris 11.4 中,DTrace 可以使用 DWARF 对用户进程的源代码元数据转换执行寻址。使用新的 uresolve 选项,DTrace 的 ustackuaddrprintf 操作可以将用户地址转换为源代码文件名和行号,但前提是存在 DWARF 调试信息。此功能为常见的诊断输出提供更直观的解释,同时保留与常见编译器标准的兼容性。

有关更多信息,请参见Oracle Solaris 12 DTrace(动态跟踪)指南 中的 Data Recording Actions中的 ustackuaddrprintf 操作。

pstack 对 DWARF 编码行号的支持

在 Oracle Solaris 11.4 中,pstack 命令将使用源代码元数据对帧进行注释,但前提是存在 DWARF 调试信息。此功能为常见的诊断输出提供更直观的解释,同时保留与常见编译器标准的兼容性。

有关更多信息,请参见 proc(1) 手册页中的 pstack

pstackmdb 中的 DWARF 展开

在 Oracle Solaris 11.4 中,pstackmdb 支持 DWARF 和 DWARF 样式的用户进程堆栈展开。另外,pstackmdb 还允许从通过 Oracle Developer Studio 的新 -preserve_argvalues=complete 选项编译的进程恢复函数参数。此功能对 amd64 进程的可观察性和诊断能力提供独有的改进功能,尽管此功能在 x64 和 SPARC 上同时适用于 32 位和 64 位进程。

现在,针对 amd64 启用了 mdb ::stackregs dcmd,其中帧的注册器使用 DWARF 样式的展开表进行恢复。

Cython

Cython 是一种优化静态编译器,既适用于 Python 编程语言,又适用于基于 Pyrex 的扩展 Cython 编程语言。此功能允许使用 Python 生成高性能代码。

有关更多信息,请参见 Cython C-Extensions for Python(用于 Python 的 Cython C 扩展)。

Oracle 数据库编程接口 C

Oracle 数据库编程接口 C (Oracle Database Programming Interface-C, ODPI-C) 是一个围绕 Oracle 调用接口 (Oracle Call Interface, OCI) 的包装器,以透明方式处理不同版本的 Oracle Instant Client 库。

有了 ODPI-C,无需先设置 LD_LIBRARY_PATH 即可执行应用程序。另外,ODPI-C 以透明方式处理多个版本的 Oracle Instant Client 库。需要使用 Oracle Instant Client 库的软件不需要先设置 ORACLE_HOME 即可执行。

要使用 ODPI-C,请安装 developer/oracle/odpi 软件包。

有关 ODPI-C 的更多信息,请参见 GitHub 上的驱动程序和应用程序的 Oracle 数据库编程接口项目,以及 libodpic(3LIB) 手册页。Oracle Instant Client 以 IPS 格式提供,不必访问 OTN 即可下载 .zip 文件。

cx_Oracle Python 模块

cx_Oracle 是一个 Python 模块,允许您从 Python 应用程序访问 Oracle Database 12c 和 11i。尽管通常可以通过其他操作系统的预建软件包使用此模块,但是,到目前为止,尚未以类似的方式为 Oracle Solaris 提供此模块。此模块以 32 位和 64 位形式提供。Oracle Solaris 打包版本 5.2 可以与 Python 2.7 和 3.4 一起使用。

有关更多信息,请参见 cx_Oracle 的文档