【问题标题】:STL analogue in FortranFortran 中的 STL 类似物
【发布时间】:2017-08-29 16:10:54
【问题描述】:

基础:我有非常大的并行 Fortran90/MPI 程序,代表复杂的物理模型。我想为其添加新功能:例如,我需要组织消息队列,在某处引入合并排序并使用哈希表。

问题:我知道如何编写哈希表、创建队列和代码归并排序,但我认为发明自行车不是一个好主意。

问题:在这种情况下,Fortran 大师应该怎么做?我应该从 Fortran 构建绑定到 C++ 类并使用 STL 实现逻辑,还是您可以建议一些类似 Fortran STL 的库?谢谢。

【问题讨论】:

    标签: c++ stl fortran


    【解决方案1】:

    Fortran 中没有模板,因此没有 STL。对于一些通用库,您可以尝试FLIBS。它一般使用transfer()技巧来实现泛型编程。

    有一个预处理器可以为 Fortran 添加一些模板并附带一些小的 STL,您也可以尝试使用它,命名为 PyF95++。如果您可以通过某些图书馆访问学术论文,您可以阅读它here

    在这种特定情况下,我会避免将它与 C++ 混合,尽管可以这样做。您必须分别实例化每个案例并使用包装器(bind(C)iso_c_binding)将其连接到 Fortran。只有当您想要使用算法的类型非常有限时,它才值得。

    您还可以尝试使用 Fortran 中的 C 预处理器来实现一些穷人的模板,对于较小的库它可以工作,但对于复杂的事情可能变得太难维护或丑陋。作为一个例子,你可以看到我的链表实现https://github.com/LadaF/fortran-list

    通常,没有明确正确的方法或答案,您总是需要从更多的可能性中进行选择。

    【讨论】:

    • 感谢您的回答。我考虑过用 C++ 封装新逻辑,因为它看起来像更“现代”的方式,而且我考虑到未来开发人员的健康)但我从不关心 FLIBS:它是否有良好的文档记录、无错误和受支持的代码?跨度>
    • FLIBS 或多或少是 Arjen Markus 的单人秀,但经过了很好的测试。关于什么是现代的,如果是 C++ 或 Fortran,我根本不会评论。显然我是一名 Fortran 开发人员,因为我喜欢它。你的意见可能不同。
    • 我也喜欢 Fortran,但我不应该考虑情绪,而应该考虑健壮的代码。我刚刚尝试了 FLIBS 示例,并且易于集成给我留下了深刻的印象。你知道为什么上一次发布这么方便的库是在 2008 年吗?
    • 据此站点sourceforge.net/projects/flibs 最新更新是在 2013 年。无论如何你可以问作者,他在 comp.lang.fortran 用户网列表上很活跃,我相信他会对你开放电子邮件问题甚至补丁和增强功能。
    【解决方案2】:

    除了 Vladimir F 已经提到的所有内容之外,现在还有 Fortran Template Library (FTL)。大部分 FTL 是在 Fortran 中重新实现 C++ 的 STL,其中 C 预处理器被滥用于模板实例化。您必须手动设置模板,否则从最终用户的角度来看应该非常方便。可以在here找到文档。

    这个库还是相当新的,虽然它带有很多单元测试,但它还没有在野外看到太多用处。您还需要一个最新的 Fortran 编译器才能使用它。

    免责声明:我是这个库的作者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多