如何轻松地将FORTRAN代码转换为Python代码(真正的代码,而不是包装器)

Pet*_*sen 14 python fortran code-translation

我在FORTRAN中有一个数值库(我相信FORTRAN IV),我想将它转换为Python代码.我想要真正的源代码,我可以在任何Python虚拟机上导入--- Windows,MacOS-X,Linux,Android.我手动开始这样做,但是库中有大约1000个例程,所以这不是一个合理的解决方案.

小智 10

编辑:添加关于numpy的信息

这样的工具适用于Fortran到Lisp,Fortran到C,甚至Fortran到Java.但是你永远不会有Fortran to Python工具,原因很简单:与Fortran,Lisp或C不同,Python没有GOTO [1].Fortran(尤其是Fortran IV)代码中有许多GOTO.即使Jacopini有一个定理表明你可以用结构化编程模拟GOTO,但实现一个真正的(高效的)语言转换工具实在太麻烦了.

因此,您不仅需要翻译1000个例程的代码,而且还需要了解每个算法及其所有重叠的getos,并在将其编写为Python之前将其转换为结构化程序.祝好运!

嘿,为什么你认为包装好?Windows,OSX和Linux都有Fortran和C [2]编译器以及好的包装器!

对于C(这里不是你的语言,但f2c可能是一个选项),有SWIG,Fortran有f2py,现在与numpy集成.SWIG 对Android有一些支持.

顺便说一下,你可以使用numpy来代替转换为"纯粹的"Python:numpy功能类似于Fortran 90(请参见此处的比较),因此您可以考虑首先将程序翻译为F90以实现更平滑的过渡.Adnroid上似乎也有一个Numpy.如果您在64位Windows上需要numpy,那么这里有二进制文件.

如果您决定使用包装器,gfortran将在Linux上运行(只需从分发包安装),Windows(MinGW)和Android.如果你继续这一行,不要忘记编译FIV代码,因此通常存在"一次性循环"问题(通常编译器选项很好).您可能还需要手动转换一些旧的非标准语句,这些语句在现代编译器中找不到.

显然,您还可以选择将项目语言切换为Lisp或Java ...

[1]您可能会问:但如果GOTO出现问题,那么Fortran to Java工具怎么样呢?好吧,它使用JVM的技巧,它内部有GOTO指令.Python字节码中还有一个GOTO(在这里查找JUMP ),所以这里可能会有一些东西需要调查.所以我之前的陈述是错误的:可能有一个Fortran to Python工具,使用Java中的字节码技巧.但它仍然需要开发,好的库(如numpy,matplotlib,pandas ......)的可用性使得它至少可以说是不必要的.

  • 我正在研究已有近20年历史的代码(尽管仍在维护) - 它没有GOTO.我想这对任何维护良好的fortran代码来说都很常见,因为GOTO真的很难维护.对于所有代码,fortran-to-python转换器仍然有用. (2认同)