计算化学公社

 找回密码 Forget password
 注册 Register
Views: 20672|回复 Reply: 34
打印 Print 上一主题 Last thread 下一主题 Next thread

[综合交流] 各种编程语言的优劣

 关闭 [复制链接 Copy URL]

194

帖子

0

威望

3694

eV
积分
3888

Level 5 (御坂)

Fortran vs C++
胶水语言 Python
3M (Mathematica, Matlab, Maple)
大家各抒己见吧

6万

帖子

99

威望

5万

eV
积分
124694

管理员

公社社长

36#
发表于 Post on 2025-4-28 21:23:30 | 只看该作者 Only view this author
ShiyuWang781 发表于 2025-4-28 21:09
1.我也很喜欢隐式声明,不理解为什么那么多人不喜欢用。
2.cpp要写花括号但fortran要写end呀,写end比写 ...

2 写end并不比写花括号“麻烦多了”。写}还得按着shift。而且Fortran想不分行照样可以和C一样写;(或许不太懂Fortran的人还普遍不知道这点),而C则即便分行也必须写;,明显C的规则麻烦得多。

3 显然用不用指针完全是开发者自己决定。而C的指针普遍的大量的使用容易造成混乱、给读代码和调试造成困难。指针部分一直是C/C++学习的难点。这方面Fortran的学习门槛低多了,读起来也普遍更为容易。

5 不区分大小写至少给我带来了很大方便,省得我还去记忆、区分大小写。

6 Fortran的动态数组用起来方便、直观得多。

7 或许可以说方便,但比Fortran还能“更方便”不可能。Fortran不仅自带的线性代数操作极为方便,结合MKL等主流的数学库做线性代数操作也十分方便。

8 写的人的习惯、水平是影响可读性的一方面,这是独立于语言的;而极为重要的另一方面,若一种语言的特性过于丰富、过于灵活,则容易由于某些开发者的自我风格过于鲜明、过度乃至滥用利用此语言提供的灵活性,导致写出来的代码比其它语言的更难读。

C++和Fortran的主要应用范畴明显不同,没有前提的情况下比较前景没有意义。C++的库的总量虽然远比Fortran更多,但对于Fortran最擅长、使用最广泛的科学计算领域,Fortran的库应有尽有。在量子化学、第一性原理领域,Fortran更是远比C++主流得多得多、使用者多得多,2/3以上这方面的程序都是Fortran开发的(绝非被一些人误以为的历史原因),包括较新的诸如xtb。

PS:不要连续挖老坟。最近挖得太多了。老挖我就删帖了。
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

40

帖子

0

威望

198

eV
积分
238

Level 3 能力者

35#
发表于 Post on 2025-4-28 21:09:30 | 只看该作者 Only view this author
sobereva 发表于 2015-5-21 06:08
不同语言各有所长,没有前提放一起比也不公平,这里只针对科学计算进行讨论。

搞科学计算,Fortran和C必 ...

1.我也很喜欢隐式声明,不理解为什么那么多人不喜欢用。
2.cpp要写花括号但fortran要写end呀,写end比写花括号麻烦多了吧,我特别讨厌用end的语言。至于cpp要写分号是为了方便多行代码,cpp的多行代码是最方便的。
3.cpp也可以不用指针的,而且指针理解起来也不难呀。
4.cpp20已经引入模块的特性了,可以不用传统的include
5.变量不区分大小写在我看来是非常落后的特性,区分大小写之后命名明显方便了很多,最早的计算机上面字母全都是大写的,所以早期编程语言都是不区分大小写的。很难理解为什么现在还保留这种远古特性。
6.cpp也有动态数组呀,而且还有Eigen库的数据结构本身支持线性代数计算。
7.cpp的Eigen库的线性代数计算比fortran更加方便。
8.按照给定标准写的cpp程序是很好读的,没有标准的代码才难读。实际上我看过一套由不同人编写的fortran代码,由于不同人习惯不同,整套代码风格各异,可读性不是很好。提高可读性的关键在于要为不同人规定相同的代码规范。
而且cpp比fortran还有很多优点,比如生态更加丰富,有更多的第三方库,程序员群体更加庞大等,所以我认为cpp要比fortran更有前景。

40

帖子

0

威望

198

eV
积分
238

Level 3 能力者

34#
发表于 Post on 2025-4-28 20:50:03 | 只看该作者 Only view this author
Shannon 发表于 2015-5-21 04:54
没用过Fortran, 只用过c++,指针什么的特烦人还不用不行,简直丧病。 面向对象的设计C++确实非常不错,查 ...

用C++完全可以不用指针只用引用来传参,而且指针的概念其实很好理解,理解指针对于理解程序运行的过程其实很重要。python比3M功能要强大很多还是免费的,胶水语言学一个python就完全够用了。

339

帖子

0

威望

5053

eV
积分
5392

Level 6 (一方通行)

33#
发表于 Post on 2020-5-30 20:38:09 | 只看该作者 Only view this author
beefly 发表于 2020-5-30 17:41
英国国家超算中心ARCHER上可以查到计算资源的近期统计,其中绝大部分来自fortran程序
http://archer.ac.uk ...

VASP贡献了1/3的用量,Fortran写的

743

帖子

21

威望

5339

eV
积分
6502

Level 6 (一方通行)

32#
发表于 Post on 2020-5-30 17:41:13 | 只看该作者 Only view this author
英国国家超算中心ARCHER上可以查到计算资源的近期统计,其中绝大部分来自fortran程序
http://archer.ac.uk/status/codes/

001.png (65.65 KB, 下载次数 Times of downloads: 174)

fortran

fortran

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
chrinide + 5 我很赞同

查看全部评分 View all ratings

6万

帖子

99

威望

5万

eV
积分
124694

管理员

公社社长

31#
发表于 Post on 2020-5-27 05:30:45 | 只看该作者 Only view this author
很多嫌弃Fortran的人实际上都对现代Fortran不充分了解,老是拿着从Fortran90学起的人往往都头痛的Fortran77的代码各种吐槽(诸如Gaussian、GAMESS-US那种风格),Neese在CCL上的发言给我的感觉也是如此。这是很不合理的。Fortran在写很多类型的科学计算代码方面的便利性明显强于C++,而且非常容易学。就算毕了业以后不搞科研,用不着Fortran,即便在博士期间花一个礼拜时间学学Fortran、之后用Fortran解决实际问题,也一点都不亏。

顺便在此强调一下:切勿拿Fortran77来评价Fortran。评价Fortran至少也得是充分掌握Fortran 90/95的基础上(后来Fortran 2003等规范又有很多在面向对象编程上的扩展)。
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

186

帖子

0

威望

4130

eV
积分
4316

Level 6 (一方通行)

30#
发表于 Post on 2020-5-25 14:38:57 | 只看该作者 Only view this author

227

帖子

0

威望

2800

eV
积分
3027

Level 5 (御坂)

29#
发表于 Post on 2020-5-25 12:37:39 | 只看该作者 Only view this author
C和C++的差别比C和Fortran的差别还大。

30

帖子

0

威望

444

eV
积分
474

Level 3 能力者

28#
发表于 Post on 2020-5-25 10:36:32 | 只看该作者 Only view this author
一颗赛艇 发表于 2016-9-5 02:15
干活的硕士和博士们,毕业后大多数都离开了科研。学了C++,学了Python,找相关工作还可以接着用,不算白学 ...

作为刚毕业的博士,深有体会

230

帖子

0

威望

2665

eV
积分
2895

Level 5 (御坂)

27#
发表于 Post on 2016-9-5 02:15:02 | 只看该作者 Only view this author
本帖最后由 一颗赛艇 于 2016-9-5 02:16 编辑

干活的硕士和博士们,毕业后大多数都离开了科研。学了C++,学了Python,找相关工作还可以接着用,不算白学。

学Fortran出来有什么用?没有任何用。

屠龙之术。

47

帖子

0

威望

2680

eV
积分
2727

Level 5 (御坂)

26#
发表于 Post on 2016-2-10 11:42:31 | 只看该作者 Only view this author
http://pymol.chenzhaoqiang.com/index.html

19

帖子

0

威望

84

eV
积分
103

Level 2 能力者

25#
发表于 Post on 2016-2-8 04:21:07 | 只看该作者 Only view this author
python,C和C++都用过,整体感觉如下
pyhton语法简单(对于学过C的同学可能简单的有点过头),适合写一些日常处理文件的脚本(比linux上的bash脚本可读性更好),也适合写一些job flow'control的程序(执行计算A,如果A的能量高于多少多少,执行计算B)

C/C++ 语法严谨,也有很多的开发环境,比较适合开发一些正式的程序。缺点是难入门和指针引用满天飞(听我说个笑话,int *******p),老板办公室有一本介绍c++的书,厚厚的一层灰。

Fortran没实际用过,感觉做大规模数值计算会比较好。

学习这些语言了话,学通C一通百通,想一星期写脚本就去学python,至于fortran,学会了c对着几个sample code一看就会了

评分 Rate

参与人数
Participants 1
eV +2 收起 理由
Reason
sobereva + 2

查看全部评分 View all ratings

592

帖子

12

威望

4811

eV
积分
5643

Level 6 (一方通行)

密度泛函·小卒

24#
发表于 Post on 2015-8-14 07:37:47 来自手机 | 只看该作者 Only view this author
手机回复,回车键都消失了!?

592

帖子

12

威望

4811

eV
积分
5643

Level 6 (一方通行)

密度泛函·小卒

23#
发表于 Post on 2015-8-14 07:37:19 来自手机 | 只看该作者 Only view this author
本帖最后由 yjcmwgk 于 2015-8-14 08:17 编辑

偶然看到在知乎上的回答,用于科研的hpc程序的特点,读来忍俊不禁。  
90%的时间用C/C++、Fortran。 偶尔用mathematica, matlab等高级工具干些零碎的活;
最重要的是正确性,其次是速度;
99%的时间花在除虫上,其中90%的情况是数组指标越界;
大量使用各种数值算法和线性算法,很少使用基于复杂数据结构的算法;
程序快不快,全看会不会迭代; 程序好不好,全凭文章在哪找;
程序里设置很多参数,取值都是试出来的,一般不能改动;
先写串行程序,再写并行程序;
经常访问数学维基或百科网站(wikipedia、mathworld、planetmath等);
科学计算领域的圣经是Abramowitz和 Stegun的数学手册,谭浩强是Numerical Recipe;
代码的长度随着科研项目的进展不断增长;
大量使用组里“祖传”下来的程序,被告知不要改变里面的参数;
使用双精度;
依赖编译器的优化,对硬件构架也有些了解;
被告知尽量不要使用闭源软件;
属于VIM或Emacs阵营之一;
hostname 是个科学家的名字;
有几个从师兄师姐那儿拷来的脚本;
程序的文档就是正在写的文章;
梦想再装块显示器;
有作为人形高级计算器的觉悟;
梦想着有一天写个巨牛逼的脚本把程序从编译到执行到数据处理都自动化了;
程序能跑的时候项目才完成了5%~10%;
用并行(parallelism)不用并发(concurrency),用数组不用链表;
变量名字起的很怪,其实都是直接从方程里来的;
程序不具有可读性,除非你先读懂对应的文章;
不断有新入组的学弟学妹抗议代码不符合软件工程,后来他们要么闭上嘴去灌水,要么拿了master走人了;
常常有重构代码的欲望,试过几次都放弃了,终于有天下午把代码重构了一遍,结果发现跑出来的数据怎么都不对,从此彻底放弃;
总以为做科学计算的人写的代码都很丑,后来看过一个大牛写的代码,彻底惊呆了 —— 但学CS的室友照样说丑;
写着写着,一不小心代码就成了某个领域某个小方向 the state of the art;
常常提醒自己是科学家不是程序员。
专业的程序员总是认为HPC的编程很弱智,真让他/她们去写HPC代码 ——开玩笑——他/她们连流体力学(量子化学、广义相对论 …… )都不懂,怎么可能会做科学计算

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-1-25 12:42 , Processed in 0.201298 second(s), 26 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list