计算化学公社

标题: 计算软件的使用语言 [打印本页]

作者
Author:
泡泡媛    时间: 2022-8-1 11:30
标题: 计算软件的使用语言
本帖最后由 泡泡媛 于 2022-8-1 12:02 编辑

比较好奇为什么现在在计算领域还是有非常多的软件使用Fortran语言编写,感觉C++应该是更好的选择,没有写过计算软件,比较好奇如果使用C++重构的话,会是很大工程么?

作者
Author:
lyj714    时间: 2022-8-1 11:54
这东西本身就没啥可讨论的,一千个人就有一千个理由。并且很早就讨论过这类话题了,永恒导火索。
http://bbs.keinsci.com/thread-1145-1-1.html
作者
Author:
泡泡媛    时间: 2022-8-1 12:16
lyj714 发表于 2022-8-1 11:54
这东西本身就没啥可讨论的,一千个人就有一千个理由。并且很早就讨论过这类话题了,永恒导火索。
http://b ...

好咧,感谢指路我去看看
作者
Author:
万里云    时间: 2022-8-1 12:51
很重要的一个原因是历史遗留问题。开发程序的时候,C++还没有现在的诸多特性,写起来非常不方便。实际上,就算在今天,如果涉及高阶稠密数组,用C++写依然非常麻烦。

C++提供的语法特性太多了,和Java/Python等更“面向对象”的语言比起来,也不是特别完美。导致一些开发人员掉书袋,写一些炫技的复杂程序,可读性很差。一层层模板套起来,哪有FORTRAN直接声明数组简洁?

关于软件重构这件事,VASP开发者曾在介绍VASP6的ppt里倒过苦水,说为什么要收费。因为重构软件只有工程价值而非学术价值,拿不到基金。
作者
Author:
万里云    时间: 2022-8-1 12:56
计算软件需要处理的问题,实际上可以大致分为两类。

一类是问题不复杂,但计算量很大。这类程序的数据类型不多,也比较齐整,非常适合分类统一成数组,用FORTRAN或者C写。
另一类是计算量不大,但问题很复杂。为描述模型,就需要大量复杂的数据类型。这种就适合用C++或Python等支持面向对象的语言编写。

举个例子:有100个原子,每个原子有坐标、电荷、质量、磁矩等属性。按FORTRAN和C的写法,就是每种属性统一存在一个大数组里。C++/Python就是定义一个Atom类,再用一个List存储Atom。前者性能好,后者更灵活。
作者
Author:
泡泡媛    时间: 2022-8-1 19:23
万里云 发表于 2022-8-1 12:56
计算软件需要处理的问题,实际上可以大致分为两类。

一类是问题不复杂,但计算量很大。这类程序的数据类 ...

回答的很清楚,看来混着用也挺好,难怪我看有些软件是两种语言编写的
作者
Author:
sobereva    时间: 2022-8-1 21:25
FORTRAN极其好用
学习难度远远低于C++,语法特性也没那么复杂
FORTRAN的数组特性好用至极
FORTRAN用不着每行末尾写分号,方便得多。而FORTRAN也同时支持通过分号进行连行
FORTRAN对变量的隐式声明极其方便(虽然往往被妖魔化)
FORTRAN的序号从1开始记,至少对我来说明显比从0记要好
FORTRAN里也有指针并且可以方便地使用,却远没有C/C++复杂
等等

另外,很多人完全不了解现代的FORTRAN,且不说FORTRAN 2003及之后提供的丰富的面向对象特征,甚至居然都不知道FORTRAN 90开始就能自定义type(诸如可以定义用于描述原子的type,一个原子的各种属性都可以作为此type下属的变量)。

如今那么多人用FORTRAN,主流量化/第一性原理程序大部分也都是FORTRAN写的(比较知名的Fortran写的计算化学类程序:Gaussian、Multiwfn、GAMESS-US、NWChem、MOPAC、xtb、Molcas、Molpro、Turbomole、Dalton、ADF、NBO、AMBER、CHARMM、CP2K、Quantum-ESPRESSO、VASP、CASTEP、SIESTA、Tinker、CPMD、WIEN2k、Crystal、CFOUR、Abinit、Octopus、Dmol3、Wannier90、Exciting),哪怕包括年代并不远的CP2K、xtb等(二者都充分利用了现代FORTRAN的特性),绝对不仅仅是历史原因,而是在于FORTRAN的设计对于从事科学技术研究的人在开发计算程序方面提供了大量的便利。科学技术工作者大量用Fortran自有其理由。


顺带一提,评论FORTRAN极其忌讳拿老掉牙的、在现在来看相当难用的FORTRAN 77说事。FORTRAN 77是我如论如何也不会去用的。
FORTRAN 77写的程序,像Gaussian那样,若为了可持续发展,用现代FORTRAN重构是有明显意义的。



作者
Author:
hxd_yi    时间: 2022-8-21 22:14
各有优劣,有些只是语法糖。真正的区别不是使用什么语言,而是使用语言的人。

验证一些算法,用matlab、python,后续上超算跑,用fortran、C/C++。
作者
Author:
泡泡媛    时间: 2022-8-28 19:58
贴个在知乎上看到的有趣的的讨论
对于科学计算,大家对新出来语言Julia怎么看,相比C、Python和Fortran有什么优势发展? - EigenSolver的回答 - 知乎
https://www.zhihu.com/question/391088022/answer/2312952244
我原先是不知道fortran其实是专门为科学计算设计的,我觉得相比底层开发,科学计算还是挺重要的,自然科学的研究领域可能是学科属性的原因,开放性要差得多,更新迭代的速率也要慢得多,有时候接受一些新鲜事物感觉还是有意思的。
作者
Author:
scf    时间: 2022-9-13 23:04
Fortran的作者是化学转数学的背景,可能更偏向科学计算来设计,虽然不是说背景是什么就要做什么




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3