我正在用一种我不太熟悉的语言(FORTRAN)开始一个新项目,并处于'发现'阶段。通常,读取和计算代码是一项相当简单的任务,但是,这段代码相当大而且不那么结构化。是否有任何方法/提示/技巧/工具来映射50k行相当密集的代码?
答案 0 :(得分:3)
是Fortran IV(不太可能),77还是90/95?这些修改后语言发生了很大变化。高性能标记列出的一些问题在Fortran IV中很常见但在77中很常见,而其他一些在77中仍然很常见。使用最大编译器警告检查代码的建议非常好 - 甚至使用两个编译器。
我首先绘制子程序结构的图表,并获得他们所做工作的高级视图。然后深入了解需要改变的领域。
有分析甚至改进Fortran代码的工具,例如http://www.polyhedron.com/pf-plusfort0html或http://www.crescentbaysoftware.com/vast_77to90.html。
答案 1 :(得分:2)
调试器是你的朋友 - 如果你有一个Fortran。
在你走得太远之前,我会熟悉语言的基本语法以及任何缺点,例如关于变量类型的假设,从名称和声明的位置等。如果你没有得到那些东西那么你很可能即使使用有用的调试器也会迷失方向。
请记住,该结构有时依赖于语言。您正在查看的代码可能对于您习惯使用的语言结构不合理,但对于Fortran来说可能非常有条理,因为Fortran具有自己的一组特性。我想我只是说有一个开放的心态开始,否则你将承担你所看到的代码不好的不必要的倾向。它可能是,但它可能只是你不习惯的东西。
祝你好运。我很喜欢Fortran,当我在20年前为它开始编程时,由于某些平台上的计算速度,它仍然是某些应用程序的首选语言。学术界仍然有很多。答案 2 :(得分:2)
多年前,当我编写Fortran(F77)30( yikes!)时,我们设置的设施有限,无法自动规划未知代码库。它很丑陋,仅限于绘图仪床可供应的房地产。正如@Simon提到的那样,你可以(并且可以当时,有些版本)也使用调试器。
现在,互动探索更容易。此外,您可以尝试使用IDE。我没有亲自尝试过,因为Fortran不再是我的关键开发语言,但Photran是Fortran的Eclipse插件,似乎正在积极开发中(最后一个版本是本月)。
答案 3 :(得分:1)
我总是找到执行的起点,或者其他代码(我没有工作)调用我正在检查的代码。然后我开始从那里开始阅读,按照必要的方法调用来弄清楚发生了什么。
答案 4 :(得分:1)
请记住。 Fortran的一个优点是它非常简单。除非你找到一个编程的代码,以利用'聪明'的技巧。我建议你做的第一件事是通过编译器运行程序,语法检查和标准兼容性达到最大。旧的(前Fortran 90)FORTRAN因人们过去常常克服语言限制的巧妙技巧而臭名昭着。程序员的一些问题更熟悉现代语言:
- 常见块;和其他全球国家机制;特别糟糕的是用于重命名和重新定义变量的常用块;
- 等价(可怕,但你可能会绊倒他们);
- 固定格式的源表单;
- 使用CONTINUE语句,以及让多个循环以相同的CONTINUE语句结束的做法;
- 变量的隐式声明(要对它们进行排序,在PROGRAM,MODULE,SUBROUTINE或FUNCTION语句之后立即插入IMPLICIT NONE行;)
- 进入子程序的多个入口点;
- 以及其他一些我非常熟悉的人,我不记得了。
如果这些对您毫无意义,他们很快就会这样做。最后,你可能想看看了解Fortran。它的成本,但它非常有用。
此致
标记
答案 5 :(得分:1)
您是在Linux或OpenSolaris上运行吗?如果是这样,Sun Studio Fortran编译器就是其中之一。 Sun Studio IDE了解Fortran并附带调试器。 http://developers.sun.com/sunstudio
答案 6 :(得分:1)
我很困,所以我会做空的。)
首先通过grepping out(或你使用的任何工具)程序语句,子程序语句,函数语句等。也许是模块等,如果使用f90。绘制一种基于此的图表,您将在其上看到什么调用什么(什么使用什么子程序,函数等)。
在对情况有一般看法后,获取数据。 Fortran要求在程序/子程序开始时声明所有内容......所以第一行应该为您提供声明。在你刚刚制作的图表中添加了那些之后,那时你应该有一个非常明确的情况。
现在,下一步实际上取决于你想用它做什么。
答案 7 :(得分:1)
@ldigas:“Fortran要求在程序/子程序开始时声明所有内容......”
不,除非在例程开始时出现IMPLICIT NONE,否则Fortran使用隐式类型。因此,以A-H和O-Z开头的变量名称为REAL,I-N为INTEGER。 (这使得GOD成为一个真正的变量,而INT,幸运的是,一个INTEGER,隐含地。)记住,Fortran(实际上当时它是FORTRAN)是由科学家和数学家设计的,对他们来说i,j,k,l,m和n总是整数。
使用IMPLICIT NONE,您将被迫显式键入所有变量,就像在C,C ++或Java中一样。所以你可以拥有INTEGER GOD和REAL INT。