现代语言与FORTRAN的优势?

Jas*_*uit 12 fortran scientific-computing modern-languages

我最近一直在和很多FORTRAN 77一起工作,虽然我最初有所保留,但我现在看到了这种语言的一些优点.它是:

  • 简单易学(无面向对象或功能编程并发症)
  • 易于阅读
  • 数字运算速度快

这些品质对于非程序员工程师和科学家来说自然很有吸引力,他们只是想让计算机快速给出答案.但根据其年龄和一些基本假设,它有很多局限性.我对非程序员如何轻易地理解Fortran更高版本的一些附加功能持怀疑态度.

是否有一种像FORTRAN一样简单的现代语言,对于数学应用来说速度一样快,而且受限制较少?或者是Fortran 90,95,2003的答案...?

Wil*_*cat 17

或者是Fortran 90,95,2003的答案...?

是.大多数编译器支持的Fortran 95是您正在寻找的语言.但是Fortran 2003有一些主要的增强功能(除了你对OOP的支持不必要),这可能是有用的.编译器支持Fortran 2003标准.


Roo*_*ook 10

好吧,我是一名非程序员工程师(无论那意味着什么;我收集它意味着没有太多与计算机科学研究的联系)和......

部分继续JasonFruit对S. Lott答案的评论:

是的,该标准增加了从F90到2003的相当多的功能.但是"问题",如果可以这样称呼(我无法想到或关心更合适的词)是许多使用Fortran的人不知道它,保存他们需要的基本功能.在某种程度上,这是一种祝福和诅咒.他们从来没有学过它,从来没有读过它的书 - 他们只是随着它们的进展而捡起它.这种方式肯定可以工作一段时间(如果你简单地构建你的程序,像许多人已经做了几个世纪,并且有一种心理训练,这种方法可以持续一生/你的整个职业生涯),但过了一段时间它开始显示其不利之处.例如,尝试对comp.lang.fortran上的最新功能进行一些讨论,以测试您的知识.

所以,拿一本好书(很多人推荐三个中的一个给初学者; a)Chapman J. Stephen's b)Maine,或者c)Metcalf,Reid和Cohen(被称为"MRC书") - 之后很多"更加模糊"的特征不仅变得更加清晰,而且"显而易见"(在某种程度上; 这确实是更好的方式 - 为什么我这样做......之前?).

这就解决了这个问题.现在,Fortran值得学习的另一个问题 - 一定会出现这个问题吗?(它总是这样,相信我:).这已经被覆盖了很多次,所以我将直接发表关于上述内容的帖子,以及我的旧文章(你必须向下滚动一下),这些问题与这里提到的其他一些问题相比有些问题. .

最后一件事,在大多数情况下是所有这些问题的原因,是人们对Fortran的看法,强调意见!一般来说(我们可以把这个论坛作为我们分析的一个很好的样本)是它不太好.很少喜欢[在这个论坛上关注fortran的问题一个月,你会很快知道他们是谁.顺便说一下,根据你的名字出现的频率来判断,你很快就会成为俱乐部的成员:)],大多数人要么无动于衷,有些人就是出于无知(比较F66和今天的语言经常使用),一些出于自己的原因.现在,如果我们采用这些并将其与一般人口进行比较,通过简单的帐户,结果肯定会变坏.

Thhhh-aaa-ttt就是它.

哦,还有一件事 - Fortran是/现在仍然主要针对的是工程师,而不是数学家.它更适合于求解大型系统,然后将pi计算为ka-zi-llion十进制数.我不知道这是你的问题中的拼写错误,还是故意的.对于纯粹的数学应用(在经典的数学家意义上)我会(我是那个领域的一部分)可能选择,我不知道,Mathematica?或Pascal(不知道为什么它总是Pascal;但它似乎非常受那些人的欢迎).

  • 对Fotran来说这不是一件好事吗?您不必花费全部时间在comp.lang.xx上通过非虚拟lamba仿函数研究部分模板专业化的最新细节 - 为了完成您实际付出的工作! (4认同)

Jon*_*rsi 10

我很惊讶这里的共识是现代Fortran,我勉强同意.

无论其失败如何,Fortran是唯一一种明确为科学编程而设计的语言.科学编程比网络服务器更精细(每行)和更简单(结构),它只需要不同的工具.例如,垃圾收集几乎从不用于解决主数据结构固定的大型2d/3d PDE.

任何甚至没有多d数组作为第一类对象的编程语言都可以立即被解除,以便进行科学编程.这就是所有基于C语言的.任何编程语言本质上都是神奇可怕的慢 - Java,我在看着你 - 可以立即被解雇.任何编程语言都是专有的并且需要数千美元的许可费用--Matlab - 可以立即被解雇.

Python和相关语言适用于原型设计,绘图很容易,一旦你有工作,可以用编译语言编写数值内核以提高速度; 但它又缺乏真正的数组(Numpy很好,但不是很好)而且它是s..l..o..w.

顺便说一句-别以往由数字食谱书籍.他们是垃圾,他们推测的算法是约会的,而且代码的范围从差到错.拿一个真正的数值算法课程 - 有好的在线 - 或购买一本真正的数值算法书 - 并且为了爱上帝,不要输入书中的代码来做线性代数或其他任何东西; 使用数以万计的真实,专业品质的图书馆.


Tim*_*omb 6

对于你问题的最直接的答案,我认为kemiisto的答案是正确的,由Idigas确定的警告.

也就是说,我发现更多的数字代码与FTP,网络以及更接近图形的东西接触.我已经看到MATLAB在另一个答案中提出了建议,但我一直在编写越来越多的Python(使用NumPy)并在需要速度时调用Fortran.我几乎肯定不会用这种方式编写整个系统(例如整个数值天气预测模型),但它确实让我在很多方面都能充分利用这两个世界.


M. *_* B. 5

或者是Fortran 90,95,2003的答案...? 是.对于科学计算,Fortran> = 90消除了FORTRAN 77的限制.了解如何使用可分配数组来生成动态大小的数组.学习如何使用模块来组织过程和变量 - 并轻松提供实际和伪参数之间的自动一致性检查.从FORTRAN 77开始,您可以使用对您有用的任何功能逐步学习Fortran 90/95/2003.您不必学习OO功能,可以忽略该部分语言,直到有一天它可以为您提供实用程序.

我推荐Metcalf,Reid和Cohen的书.