Подтвердить что ты не робот

STL-аналог в Фортране

Основа: У меня очень большая параллельная программа Fortran90/MPI, которая представляет собой сложную физическую модель. Я хочу добавить к нему новые функции: например, мне нужно организовать очередь сообщений, ввести meresort где-нибудь и использовать хеш-таблицы.

Проблема: Я знаю, как писать хеш-таблицу, создавать очереди и код слияния самостоятельно, но я не думаю, что это хорошая идея, чтобы изобрести велосипед.

Вопрос:, что должен делать Гуру Фортрана в такой ситуации? Должен ли я строить привязки к классам С++ из Fortran и реализовывать логику там, используя STL, или вы можете предложить некоторые библиотеки, подобные Fortran STL? Спасибо.

4b9b3361

Ответ 1

В Fortran нет шаблонов и, следовательно, нет STL. Вы можете попробовать FLIBS для некоторых общих библиотек. Он обычно использует трюки transfer() для достижения общего программирования.

Существует препроцессор, который добавляет некоторые шаблоны в Fortran и поставляется с небольшим STL, вы можете попробовать это тоже имя PyF95 ++. Если у вас есть доступ к академическим документам через некоторую библиотеку, вы можете прочитать об этом здесь.

Я бы не стал смешивать его с С++ в этом конкретном случае, хотя это можно сделать. Вы должны создать экземпляр каждого случая отдельно и связать его с Fortran с помощью обертки (bind(C) и iso_c_binding). Только если у вас очень ограниченное количество типов, которые вы хотите использовать для этого, алгоритмы могут стоить того.

Вы также можете попытаться внедрить некоторые шаблоны для малоимущих, используя C-препроцессоры в Fortran. Для небольших библиотек он работает, но может стать слишком сложным для поддержания или уродливости для сложных вещей. В качестве примера вы можете увидеть мою реализацию связанного списка https://github.com/LadaF/fortran-list.

Как правило, нет четкого правильного подхода или ответа, вам всегда нужно выбирать из большего количества возможностей.

Ответ 2

В дополнение ко всему, что уже упоминал Владимир Ф, теперь существует Библиотека шаблонов Fortran (FTL). Большая часть FTL является повторной реализацией С++ STL в Fortran, где препроцессор C используется для создания шаблона. Вы должны установить шаблоны вручную, но в остальном это должно быть довольно удобно с точки зрения конечного пользователя. Документацию можно найти здесь.

Библиотека по-прежнему довольно новая, и в то время как она поставляется с множеством модульных тестов, она пока еще не использовалась в дикой природе. Вам также понадобится очень недавний компилятор Fortran, чтобы использовать его.

Отказ от ответственности: я являюсь автором этой библиотеки.