基础:我有非常大的并行Fortran90 / MPI程序,它代表复杂的物理模型。我想为它添加新功能:例如,我需要组织消息队列,在某处引入mergesort并使用哈希表。
问题:我知道如何写自己的写哈希表,创建队列和代码合并,但我不认为发明一辆自行车是个好主意。
问题: Fortran大师在这种情况下应该做些什么?我是否应该构建与Fortran的C ++类绑定并使用STL实现逻辑,或者您可以建议一些类似Fortran STL的库?谢谢。
答案 0 :(得分:11)
Fortran中没有模板,因此没有STL。对于某些通用库,您可以尝试FLIBS。它通常使用transfer()
技巧来实现通用编程。
有一个预处理器可以为Fortran添加一些模板,并附带一些小的STL,您也可以尝试使用PyF95++。如果您可以通过某些图书馆访问学术论文,则可以阅读here。
我会避免在这种特殊情况下将它与C ++混合,尽管可以这样做。您必须单独实例化每个案例,并使用包装器(bind(C)
和iso_c_binding
)将其与Fortran连接。只有当你想要使用非常有限数量的类型时,才有必要使用它。
你也可以尝试使用Fortran中的C预处理器来实现一些穷人的模板。对于较小的库,它可以工作,但对于复杂的事情来说可能变得难以维护或丑陋。作为示例,您可以看到我的链接列表https://github.com/LadaF/fortran-list的实现。
一般来说,没有明确正确的方法或答案,你总是要从更多的可能性中进行选择。
答案 1 :(得分:2)
除了Vladimir F已提到的所有内容之外,现在还有Fortran Template Library(FTL)。大部分FTL是在Fortran中重新实现C ++的STL,其中C预处理器被滥用于模板实例化。您必须手动设置模板,但从最终用户的角度来看应该非常方便。可以找到文档here。
该库仍然相当新,虽然它附带了大量的单元测试,但它还没有在野外使用过多。您还需要一个非常新的Fortran编译器来使用它。
免责声明:我是这个图书馆的作者。