4. Solaris Studio Fortran 的功能与差异
5. FORTRAN 77 兼容性:迁移到 Solaris Studio Fortran
B.1 Oracle Solaris Studio 12.2 Fortran 发行版
B.2 Sun Studio 12 Update 1 Fortran 发行版
B.5 Sun Studio 10 Fortran 发行版:
增强的 -openmp 选项:
-openmp 选项标志已增强,有助于调试 OpenMP 程序。要使用 dbx 调试 OpenMP 应用程序,请使用以下选项进行编译:
-openmp=noopt -g
随后您可以使用 dbx 在并行区域内设置断点,并显示变量的内容。
多进程编译:
将 -xjobs=n 和 -xipo 一起指定,过程间优化器将调用最多 n 个代码生成器实例,以编译命令行上列出的文件。该选项可大大缩短在多 CPU 机器上生成较大应用程序所需的时间。请参见3.4.134 -xjobs= n。
使用 PRAGMA ASSUME进行断言:
ASSUME pragma 是此发行版编译器中的新增功能。该 pragma 提示编译器在编译过程中某些点上的条件程序员确信为真。这有助于编译器更好地优化代码。程序员也可以使用断言在程序运行时检查程序的合理性。请参见2.3.1.8 ASSUME 指令和3.4.111 -xassume_control[ =keywords]。
更多 Fortran 2003 功能:
在此版本的 Fortran 编译器中,已经实现了 Fortran 2003 标准中的以下功能。第 4 章中描述了这些功能。
异常和 IEEE 运算:
在 Fortran 语言中,新的内部模块 IEEE_ARITHMETIC 和 IEEE_FEATURES 提供了对异常和 IEEE 算法的支持。请参见4.6.2 IEEE 浮点异常处理。
与 C 之间的互操作性:
Fortran 标准提供了一种引用 C 语言过程的方法,以及一种指定 Fortran 子程序可从 C 函数引用的方法。它还提供了一种声明与外部 C 变量链接的全局变量的方法。请参见4.6.1 与 C 函数之间的互操作性。
PROTECTED 属性
现在,Fortran 编译器接受 Fortran 2003 的 PROTECTED 属性。PROTECTED 对模块实体的使用进行了限制。具有 PROTECTED 属性的对象只能在声明这些对象的模块中定义。4.6.4 PROTECTED 属性。
ASYNCHRONOUS I/O 说明符
编译器可识别 I/O 语句中的 ASYNCHRONOUS 说明符:
ASYNCHRONOUS=[’YES’ | ’NO’]
与传统 f77 之间的兼容性得到增强:
很多新增功能增强了 Fortran 编译器与传统 Fortran 77 编译器 f77 之间的兼容性。其中包括变量格式表达式 (variable format expression, VFE)、长标识符、-arg=local 和 -vax 编译器选项。请参见第 3 章和第 4 章。
I/O 错误处理程序:
通过两个新函数,用户可以为逻辑单元上的格式化输入指定自己的错误处理例程。这些例程在4.7.1 I/O 错误处理例程、相关手册页以及《 Fortran 库参考》中进行说明。
无符号整数:
在此发行版中,Fortran 编译器接受一种新的数据类型 (UNSIGNED) 作为对该语言的一种扩展。请参见4.5 无符号整数。
设置首选的栈/堆页面大小:
新的命令行选项 -xpagesize 允许正在运行的程序在程序启动时设置首选的栈和堆页面大小。请参见3.4.155 -xpagesize= size。
更快和增强的分析:
此发行版引入了新的命令行选项 -xprofile_ircache= path,可减少分析反馈过程中“使用”阶段的编译时间。请参见3.4.165 -xprofile_ircache[ =path]。另请参见3.4.166 -xprofile_pathmap= collect_prefix:use_prefix。
增强的“已知库”:
-xknown_lib 选项已增强,可以包括基本线性代数库 (Basic Linear Algebra library, BLAS) 中的更多例程。请参见3.4.136 -xknown_lib=library_list。
链接时优化:
使用新的 -xlinkopt 标志进行编译和链接,可以在链接时调用后优化器,以便对所生成的二进制目标代码应用一些高级性能优化。请参见3.4.144 -xlinkopt[={ 1|2|0}]。
局部变量初始化:
对 -xcheck 选项标志进行了新扩展,从而允许对局部变量进行特殊的初始化。使用 -xcheck=init_local 进行编译时,如果在程序对局部变量进行赋值前使用了该变量,则会将该变量初始化为一个有可能导致运算异常的值。请参见3.4.115 -xcheck=keyword。