计算化学公社

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

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

[复制链接 Copy URL]

194

帖子

0

威望

3694

eV
积分
3888

Level 5 (御坂)

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

5万

帖子

99

威望

5万

eV
积分
112353

管理员

公社社长

2#
发表于 Post on 2015-5-21 03:48:49 | 只看该作者 Only view this author
这个话题是永恒的导火索
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入“北京科音”微信公众号获取北京科音培训的最新消息、避免错过网上有价值的计算化学文章!
欢迎加入人气非常高、专业性特别强的综合性理论与计算化学交流QQ群“思想家公社QQ群”:1号:18616395,2号:466017436,3号:764390338,搜索群号能搜到哪个说明目前哪个能加,合计9000人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大的量子化学波函数分析程序)
ResearchGate:https://www.researchgate.net/profile/Tian_Lu
Money and papers are rubbish, get a real life!

127

帖子

1

威望

1231

eV
积分
1378

Level 4 (黑子)

3#
发表于 Post on 2015-5-21 04:54:04 | 只看该作者 Only view this author
没用过Fortran, 只用过c++,指针什么的特烦人还不用不行,简直丧病。 面向对象的设计C++确实非常不错,查找程序模块容易。
3M 在科研中用来写代码 最好不过, 调试方便,但和python的胶水性质比起来就大不如了。
比如matlab, 对java程序能很好的黏起来, 和C++混编 问题 一大堆,挑编译器, 各种无端跳出.,外来的库文件直接用经常出问题。

评分 Rate

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

查看全部评分 View all ratings

5万

帖子

99

威望

5万

eV
积分
112353

管理员

公社社长

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

搞科学计算,Fortran和C必会其一,能写出独立的程序,而另一个语言也得能读能改。

对于纯粹科学计算目的,Fortran相对于C有极大好处,是我坚决拥护Fortran的理由:
1 隐式声明万岁!
2 不需要写分号、花括号
3 很少需要用到那些C中看着就心烦的指针
4 不用各种include
5 变量不区分大小写
6 动态声明数组很方便
7 矩阵、向量运算极为方便
8 语法没C那么过度自由,读别人的程序容易

总的来说,Fortran比C易学、易写、易读得多,运算效率与之基本持平(或更高),编译器广泛,是纯粹科学计算的人的首选。主流量化程序>=3/4、主流动力学程序约一半都是Fortran开发的。

我眼里简单、简洁、高效、该有的都有就是美,Fortran正满足这一点。但不同的人有不同个性,有些用C的人就是喜欢C,或者以前学的是C又不想再学别的,我也并不表示否定的态度。


Python那东西,在我实际研究中从没觉得有用它的任何必要,所有涉及编程的事情Fortran都能很好解决。有些人第一门语言学Python,我看决不如学Fortran(若是需要写的代码不涉及密集运算,并且就是喜欢Python的风格倒也罢)。

至于C++,对于纯粹科学计算相比C改进的意义不大(大部分情况而言),塞进的一大堆面向对象概念导致学习起来困难,代码更难读。这个问题在另一个帖子《面向对象的编程思想是否会成功的应用于计算科学领域》(http://bbs.keinsci.com/forum.php?mod=viewthread&tid=272)有不少讨论。

评分 Rate

参与人数
Participants 2
eV +5 收起 理由
Reason
c1_wangyf + 3 我很赞同
卡开发发 + 2 我很赞同

查看全部评分 View all ratings

北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入“北京科音”微信公众号获取北京科音培训的最新消息、避免错过网上有价值的计算化学文章!
欢迎加入人气非常高、专业性特别强的综合性理论与计算化学交流QQ群“思想家公社QQ群”:1号:18616395,2号:466017436,3号:764390338,搜索群号能搜到哪个说明目前哪个能加,合计9000人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大的量子化学波函数分析程序)
ResearchGate:https://www.researchgate.net/profile/Tian_Lu
Money and papers are rubbish, get a real life!

294

帖子

1

威望

2557

eV
积分
2871

科音成员

5#
发表于 Post on 2015-5-21 09:31:15 | 只看该作者 Only view this author
这学期要上matlab课,逼得我从头学了一下matlab。一学期下来,感觉入门了。
不知道学生们入门没有。
华北电力大学数理学院,理论与计算化学,团簇、表面的结构与反应机理。(招第一性原理计算,量子化学计算方向的教师、硕士/博士研究生)

20

帖子

0

威望

1417

eV
积分
1437

Level 4 (黑子)

6#
发表于 Post on 2015-5-21 09:44:59 | 只看该作者 Only view this author
本帖最后由 excalibur 于 2015-5-21 09:46 编辑

每种语言都有自己的优势和劣势,如果能流行起来肯定有其偶然或者必然的原因。科学计算方面估计大家争论的焦点在Fortran、C和C++上。从学习的难度上来说Fortran < C << C++。Fortran易学易用且有数量庞大的数学库,或许依然是数值计算的第一选择。C/C++是通用型编程语言,更擅长处理各种复杂的数据结构,而数值计算中最常见的数据结构是array,所以通常来说编写同样优秀的数值代码,用Fortran编写时间上可能要稍微短一点。不过基于C/C++的科学计算软件和数学库也在不断增多,比如Orca就是用C++开发。如果想学一门解释型语言,Python应该是个不错的选择。

对于Mathematica, Maple和Matlab,前两者的长处在符号运算,Matlab的长处在数值计算。他们都是收费软件,还有很多免费的替代方案,比如maxima、sage可以做符号运算,octave和scilab可以部分替代matlab。当然也可以用numpy + scipy + matplotlib + sympy +……

萝卜白菜,各有所爱。选择让自己感觉最舒服的就行,毕竟每个人的看法和喜好不同。

PS: 有个说法是CPP = C Plus Python……

想起那个“PHP是最好的编程语言”的老梗。。。。。。



评分 Rate

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

查看全部评分 View all ratings

1093

帖子

6

威望

6269

eV
积分
7482

Level 6 (一方通行)

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

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

不同意
和C比也就算了,在科学计算领域,Fortran很难和C++再竞争了。
如果说20年前,99%的科学计算程序都是由Fortran所写的话,那现在,其中的90%已经被废弃了,原因就是面向过程的大型代码很难维护,(易读更是无从说起)

据我说知,主流分子动力学软件中,NAMD是自打开始就用C++语言写的,GROMACS和LAMMPS是用FORTRAN写的,后来实在无法继续下去,用C++重写(如果不是无法再下去的话,没人会去重写一个软件)
量子化学软件中,新兴之流orca和qchem用的是c++,而gaussian和gamess用的是Fortran,其中gaussian也遇到了严重的维护问题,很多老代码都无法维护了,只有gamess由于软件工程方面做得好,得以健康的发展。

面向对象比面向过程的程序易读、易于维护得多,可以从几个方面明显的看出来:
1、类提供的接口只包括较少的代码。维护面向过程的程序时,程序员需要花大量的时间在判断哪一部分代码“不希望”被暴露为接口,这是一个很糟糕的工作,当然这可以通过大量的注释文档来解决(可是这相当于一个认为的拙劣的对封装性的模拟,而且即便这样,也常常解决不好)
2、并不需要接触过多的源代码。一个好的面向对象程序有很清晰的层次,程序员可以很容易的找到自己感兴趣的代码进行修改或者调用,这个过程的多数时间只需要看类名和少量接口函数注释。而在面向过程的程序中,除非有很好的软件工程设计,否则这是一个很难的过程(LINUX的原作者不喜欢面向对象的风格,于是在创造LINUX时使用了C语言,在其后的过程中,LINUX程序员在维护时遇到了前所未有的困难,于是他们使用了C语言的面向对象写法,这是我所知道的除了C++的模板元编程以外最糟糕的语法之一,但是他们宁愿忍受这种语法也不愿忍受面向对象)
3、继承。继承不仅仅是可以省掉程序员X%的劳力那么简单,他在程序的易读性上的贡献是巨大的,1个小时的时间足以将这个星球上最强大的C++库之一——QT了解个大概,这就得益于其良好的继承关系。

不过以上说的都是基于优秀的程序员而言,对于糟糕的程序员,不管任何语言都能写出垃圾代码,从这一方面讲,C++最为难学,产生糟糕程序员的概率最高,C++的糟糕代码也不少。

至于PYTHON,那是和MATLAB一类的上层语言一起讨论的东西,和fortran,C++等没有可比性

评分 Rate

参与人数
Participants 3
eV +10 收起 理由
Reason
一颗赛艇 + 4 我很赞同
北纬18° + 3 赞!
nagami + 3 赞!

查看全部评分 View all ratings

265

帖子

5

威望

2363

eV
积分
2728

Level 5 (御坂)

8#
发表于 Post on 2015-5-21 12:58:25 | 只看该作者 Only view this author
本帖最后由 zhanfei 于 2015-5-21 13:15 编辑

感觉C和fortran总感觉是先学的哪个一般就会对哪个评价高,或者用哪个成功开发出程序就对哪个评价高。比如C的指针开始就接触了也就习惯了,甚至连数组也写成指针样式,还有函数声明,如果之后学的fortran会总感觉fortran的接口块声明怪怪的。至于面向,只看过c++和pytho面向对象的几个数据处理脚本,还没见识过大型面向对象程序的代码。至于可读性我觉得主要是依赖1软件设计人的思路和2英文注释(这很重要,软件涉及再好一堆法文德文注释也晕死你,而且变量名暗法文等写你看出代表含义比较麻烦),还有3读代码人本身对所写原理的理解(这是根本)。这里吐槽下f77,有时候就是思路理清了。。。你也下不了手改。
说一下python和matlab
其实我感觉matlab的优势就是能快速写出一些小的应用脚本毕竟toolbox多而且gui也方便。python虽然模块也越来越多但是还是有着积累上的差距,比如我前几天想找个完整实现各种因子分析的模块就找不到,而matlan至少有2 3个。而且python的gui如果和绘图的plotmatlib绘图的backend连接好才能写好带绘图的gui,这一点上也没有matlab把实现细节隐藏的好。
本周目已沉沦,下个世界再会

20

帖子

0

威望

1417

eV
积分
1437

Level 4 (黑子)

9#
发表于 Post on 2015-5-21 13:30:00 | 只看该作者 Only view this author
fhh2626 发表于 2015-5-21 10:51
不同意
和C比也就算了,在科学计算领域,Fortran很难和C++再竞争了。
如果说20年前,99%的科学计算程序 ...

首先申明,我对C/C++更熟悉,我也很希望科学计算领域有更多更好的C/C++软件和库出现。

不过我有几个疑问。首先,如何判断诸如Gaussian等用Fortran写的软件遇到了严重的维护问题?其次,如何得出科学计算领域Fortran再难与C++竞争?至少从http://en.wikipedia.org/wiki/Lis ... te_physics_software上看,在量子化学和固体物理中,Fortran依然是使用最多的编程语言。另外就是既然面向对象有这么多的优势,而Fortran早就支持了面向对象,您所提及的优势是不是也可以适用于Fortran?最后就是本人不太明白上层语言的具体定义是什么,我只听说过静态类型语言和动态类型语言、静态编程语言和动态编程语言以及编译型语言和解释型语言,倒是第一次听说上层语言。

3621

帖子

3

威望

1万

eV
积分
18427

Level 6 (一方通行)

第一原理惨品小作坊

10#
发表于 Post on 2015-5-21 14:46:46 | 只看该作者 Only view this author
两者我都学过,C学的比较浅,C比较麻烦,一大堆指针比较头疼不太容易读,但个人觉得C控制格式方便得多,指针麻烦但有时候反而也简单;速度上没进行过比较,但估计两者应该都很不错。

有程序就是Fortran写计算模块C写控制模块的,现在我自己使用的是Fortran。实际上作为计算中两种主流的语言,选择哪一种只是个人喜好,有人采用python(GPAW)或3M做计算也是一种选择,只是些条条框框的东西罢了,根本不是最重要的,折腾来折腾去没写个像样的程序而白白花费精力,这才是不可取的。

评分 Rate

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

查看全部评分 View all ratings

日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

5万

帖子

99

威望

5万

eV
积分
112353

管理员

公社社长

11#
发表于 Post on 2015-5-21 17:35:54 | 只看该作者 Only view this author
fhh2626 发表于 2015-5-21 10:51
不同意
和C比也就算了,在科学计算领域,Fortran很难和C++再竞争了。
如果说20年前,99%的科学计算程序 ...


“在科学计算领域,Fortran很难和C++再竞争了”、“那现在,其中的90%已经被废弃了”根本没有这回事。只能说各有各的优势,从软件工程角度看无疑C++有优势,但Fortran具有的前述优势(尤其是高效、易读性)在C++中没有,而那对于科学计算程序是极为重要的。

可以看看这个页面,有多少是用Fortran多少是用C/C++写的:http://en.wikipedia.org/wiki/Lis ... te_physics_software。不光是老程序,其中大量后来发展的都是Fortran的。

谁说Q-Chem是靠C++来写的?实际上C++的代码只占了其不到一半,底层为了高效率用的都是Fortran。

ORCA、Q-Chem并非算是新兴,都有近20年的历史了。Gaussian是有严重维护问题,但这根本不是因为Fortran,而是当初那批写代码的人不注意写注释,结构乱,老的开发者又不断离去,新人搞不懂老代码。

还要考虑,并不是所有程序都非得需要C++的那一大套面向对象东西,绝大多数科研工作者根本没机会去开发大型程序,只希望用最短的时间学会语言、用最少的精力写出自己需要的代码,对这些人Fortran是完美的选择。把搞计算机的人的思路、看法、习惯强加到科研工作者上是明显不合适的。何况开发大型科学计算程序(尤其是量化类),Fortran也并无困难。

看问题要从实际受众的角度出发。


我在第一个回帖中就说,语言之争是永恒的导火索,争论的人总是带有主观偏好,不管自己有没有理也不爱听对方的,只是单纯地找理由驳回,甚至脱离了客观、脱离了实际问题、脱离了实际需求。所以这个问题我不爱参与讨论,但我在前面回帖中列出的8条Fortran的优势(给书写代码带来了极大便利),以及易学易写易读,是C++显然没有的,这点是非常客观的。
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入“北京科音”微信公众号获取北京科音培训的最新消息、避免错过网上有价值的计算化学文章!
欢迎加入人气非常高、专业性特别强的综合性理论与计算化学交流QQ群“思想家公社QQ群”:1号:18616395,2号:466017436,3号:764390338,搜索群号能搜到哪个说明目前哪个能加,合计9000人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大的量子化学波函数分析程序)
ResearchGate:https://www.researchgate.net/profile/Tian_Lu
Money and papers are rubbish, get a real life!

1093

帖子

6

威望

6269

eV
积分
7482

Level 6 (一方通行)

12#
发表于 Post on 2015-5-21 23:13:58 | 只看该作者 Only view this author
本帖最后由 fhh2626 于 2015-5-21 23:16 编辑
excalibur 发表于 2015-5-21 13:30
首先申明,我对C/C++更熟悉,我也很希望科学计算领域有更多更好的C/C++软件和库出现。

不过我有几个疑 ...

无意进一步争论,我保留“Fortran再难与C++竞争”的观点,你的其他疑问解答如下

Fortran当然可以享受到面向对象的优势,但是恐怕fortran程序员并不熟悉这样的编程方式,这一点可以从大多数fortran程序代码中读出来

我并没有说“等”,不过Gaussian遇到了严重的维护问题是业内众所周知的。另外GROMACS,LAMPPMS遇到了维护问题而导致用C++重写,这是可以查到的

如果你不太明白上层语言的定义,可以在这个页面进一步学习“http://en.wikipedia.org/wiki/High-level_programming_language” (实际使用中,这个词一般用作相对比较,抽象层面越高,便说这个语言更为“上层”。不过你对编程语言了解颇深,第一次听说上层语言这个词挺令人惊讶

20

帖子

0

威望

1417

eV
积分
1437

Level 4 (黑子)

13#
发表于 Post on 2015-5-22 08:59:02 | 只看该作者 Only view this author
fhh2626 发表于 2015-5-21 23:13
无意进一步争论,我保留“Fortran再难与C++竞争”的观点,你的其他疑问解答如下

Fortran当然可以享受 ...

莫非你说的上层语言是指高级语言?好吧,我孤陋寡闻了。学C那会低级语言是指汇编,C被人称为“高级汇编”。现在C都已经划成低级语言了。

编程语言之争是一件挺没有意义的事情,就此打住吧

3621

帖子

3

威望

1万

eV
积分
18427

Level 6 (一方通行)

第一原理惨品小作坊

14#
发表于 Post on 2015-5-22 09:23:41 | 只看该作者 Only view this author
excalibur 发表于 2015-5-22 08:59
莫非你说的上层语言是指高级语言?好吧,我孤陋寡闻了。学C那会低级语言是指汇编,C被人称为“高级汇编” ...

语言是分上层和底层的,越接近计算机本身的语言越底层,汇编已经就是很底层的语言(再往下估计就是000111。。。这样的了)。

剩余问题我赞同兄台的,感觉没有讨论的意义,与“甜咸豆浆之争”没什么区别,只是个人口味而已。
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

77

帖子

1

威望

593

eV
积分
690

Level 4 (黑子)

15#
发表于 Post on 2015-6-4 17:29:38 | 只看该作者 Only view this author
python 很好用恩恩 net本地一体化 现在就是用py建立了一个可以远程在线管理输入文件输出文件 有了py曾经的php呀都可以封存了,py的类更加灵活相比较c++而言,因为下半年才开学 所以 还没学fortran,c是从tc开始的,但是...指针很方便啊啊啊 明明 但是 我还是觉着 如果有一种语言可以明白清楚的表达给人类理解和电脑运行就是好语言吧

评分 Rate

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

查看全部评分 View all ratings

本版积分规则 Credits rule

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

GMT+8, 2024-11-23 21:02 , Processed in 0.207998 second(s), 23 queries , Gzip On.

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