章节摘要:数值计算软件的第一道信任防线是"数据有没有被说清楚"。本章把 Fortran 类型系统的演化讲透:kind 参数如何让精度声明跨平台一致,派生类型如何把一个物理对象(粒子、网格单元、边界条件)装进一个代码类型,allocatable 与指针又如何决定数据的生命周期由谁负责。读完本章,你会明白为什么 Fortran 写数值代码不怕"算错"——因为大部分错误在声明那一刻就被类型系统拦住了。
阅读完本章,你应当能够:
parameter 与初始化隐含 save 属性的规则,以及它们对并行安全的含义金句:Fortran 的类型系统是"把物理对象写进声明里"的系统——它让你在写第一行代码时就想清楚数据是什么、归谁管、活多久。
整数、实数、复数、逻辑与字符,加上 kind 机制与 parameter 属性。这一节解决最实际的问题:声明一个数,如何保证它在任何机器上都是同一个精度。
从 type :: 定义到嵌套组件、私有字段与类型绑定过程,把粒子、网格单元这类领域概念变成一等数据类型。这是本章的核心,也是第 5 章面向对象的地基。
allocatable 与 pointer 两条路线的所有权差异,自动释放与手动管理的边界,move_alloc 的零拷贝交接,以及内存池这类工程取舍。
三节按"原子 → 分子 → 生命周期"推进:内置类型是原子,派生类型把原子组装成分子,内存管理决定分子从生到死由谁负责。没有 kind 的严谨,派生类型内部的精度就会失控;没有派生类型的封装,内存生命周期就无从谈起归属。
2.1 内置类型与 kind(原子:数的表示与精度) │ ▼ 2.2 派生类型(分子:把物理对象装进类型)────► 第5章 面向对象 │ ▼ 2.3 内存生命周期(从分配到释放由谁负责)──► 第4章 模块封装
还有一个容易低估的事实:类型系统是 Fortran 数值正确性的第一道闸门。一个 real32 与 real64 混用的表达式,编译器会给出警告甚至报错,逼你把精度意图写清楚;一个没有 intent 标注的参数,编译器无法判断它是输入还是输出,优化空间随之收缩。这正是第 1 章"强类型检查"哲学在本章的落地——它不追求编译通过,追求的是"编译通过就基本没错"。学习本章时,遇到每一条类型规则,都值得问一句:它拦住了哪一类真实事故?带着这个问题读,比死记语法收获大得多。