《Fortran 面向 C 程序员——Flang 编译器》

这是一份关于 Fortran 语言的笔记,主要内容如下:

  • Know This At Least:Fortran 有多个实现版本,标准语言由美国和国际标准组织定义;向前兼容性重要;有两种源形式(固定形式和自由形式),变量声明默认可选,Fortran 使用括号进行数组引用和函数调用,有很多内置函数,现代语言可在编译模块中声明类型等。
  • A Rosetta Stone:Fortran 语言标准及其他文档使用的术语与常见英语术语有所不同,如 Association 等。
  • Data Types:有五种内置类型(INTEGER、REAL、COMPLEX、LOGICAL、CHARACTER),可参数化,还有用户定义类型,如派生类型可继承、有默认初始值等,还有“typeless”二进制常量。
  • Arrays:数组不是类型,是对象或函数的属性,多维数组按特定方式存储,默认下限为 1。
  • Allocatables:现代 Fortran 程序广泛使用 ALLOCATABLE 数据,动态分配和自动释放,其相关属性可延迟到运行时。
  • I/O:输入输出功能内置于语言语法,有多种 I/O 方式,如二进制 I/O、格式化 I/O 等,格式规范类似 C 的 printf。
  • Subprograms:有 FUNCTION 和 SUBROUTINE 子程序,共享名称空间,可嵌套,子程序调用用 CALL 语句,函数用函数引用调用。
  • Modules:现代 Fortran 支持独立编译和命名空间管理,模块是基本编译单位,可通过 USE 语句共享模块中的对象。
  • Arguments:函数和子程序的参数是动态关联的,默认按引用传递,可限制参数访问,编译器可假设参数别名安全。
  • Overloading:通过接口特性支持重载,可重载内置运算符和 I/O 语句。
  • Polymorphism:可使用 CLASS 接受派生类型数据,用 SELECT TYPE 区分具体类型。
  • Pointers:指针是对象,可指向数据等,默认隐式解引用,不能指向指针本身,也不能用于管理 allocatable,有 legacy 的“Cray 指针”。
  • Preprocessing:没有标准预处理功能,但 Fortran 实现通常支持通过 C 源预处理程序处理 Fortran 源,预处理行为因实现而异。
  • “Object Oriented” Programming:Fortran 有类似 C++的“this”的 type-bound procedures,可实现类似面向对象编程的功能。
  • Pitfalls:变量初始化是静态的,要注意定义 statement function,Fortran 表达式绑定与 C 不同,编译器可短路表达式求值,实数常量默认类型为 REAL 等。
阅读 42
0 条评论