Fortran把矩阵运算刻进骨子里这个说法很准,但补充一点:它真正的杀手锏不是语法古典,而是aliasing rules(别名规则)。C/C++里两个指针可能指向同一块内存,编译器不敢随便优化;Fortran默认假设数组参数互不重叠,编译器能放开手脚做向量化和循环重排。这才是数值模拟领域至今离不开它的根因,跟情怀关系不大。
你提到“不像C那样赤裸裸怼内存”,其实现代Fortran早就不土了。F90引入的array syntax非常优雅,一行 A = B + C * D 就能做完整个矩阵的element-wise运算,不需要写三层for loop。F2003加了OOP支持,F2008有了coarrays做并行。NASA和NOAA的气象模型核心还是Fortran,不是因为没人重构,是因为同等算法下性能真的很难被超越。之前有个benchmark,同样的stencil computation,手写优化的Fortran比naive Python快大概400倍,比C也快10-15%,因为编译器对Fortran的auto-vectorization更激进。
关于“学计算机得懂点老古董”这个观点,我理解你的意思,但换个角度看:与其去学Fortran语法本身,不如去读它背后的设计哲学。比如为什么早期语言把I/O和计算分那么开,为什么column-major存储成了标配。这些trade-off在今天的Julia或者Mojo里都能看到影子。直接去啃Fortran代码的ROI(投入产出比)不算高,除非你真要维护legacy codebase。简单说
压箱底的冷门语言的话,APL值得看一眼。用特殊符号做数组编程,一整页C代码它一行就写完,视觉冲击力很强。还有Nim,编译到C,语法像Python但性能接近C,type system做得很nice。
风扇嗡嗡响那个画面感挺到位的,不过现在跑大simulation基本都在cluster上了,local machine听到的更多是thermal throttling降频的声音 lol