современные методы реализации «входных колод» и / или парсеров для научных c кодов - PullRequest
0 голосов
/ 22 апреля 2020

Для большинства больших научных c кодов необходимо предоставить большое количество информации («настройка проблемы»), чтобы определить конкретную c проблему, которую вы, возможно, пытаетесь решить с помощью кода. На самом деле ученый может потратить дни или даже недели, просто написав спецификацию проблемы.

Десятилетия go, для больших научных c программ, написанных на Фортране, было два основных способа запуска программа с указанной c проблемой:

  1. Значения внутренних переменных программы были указаны во внешнем файле «namelist», который программа считала при запуске.
  2. В более общем плане программа считывает файл, называемый «входной колодой». Входная колода может быть намного более сложной, включая ее собственные внутренние переменные, элементарные логики c и т. Д. c, и это может быть проанализировано, например, каким-нибудь пользовательским анализатором, написанным для программы.

Метод (2) до сих пор остается парадигмой, используемой даже сегодня для некоторых очень больших научных c кодов, которые я использовал, которые имеют десятилетние родословные и были написаны либо на современном FORTRAN, либо на C / C ++, и работают на HP C окружение, скажем, на 20 000+ ядер одновременно ... это не тривиальные биты кода.

Вопрос 1 : что такое современный способ реализации этого требования к ключевым функциям для научных c кодов?

Как я уже догадался, здесь действительно есть два варианта:

  1. Компилировать и переносить весь код с помощью языковой вызов более высокого уровня или набор вызовов, например Python, MATLAB, Julia и др. c, и превратите вашу старомодную «входную колоду» в настоящую мастер-программу, написанную на этих языках.
  2. Придумайте базовый синтаксис c и напишите свой собственный синтаксический анализатор "input deck", используя общий инструментарий синтаксического анализатора, такой как lex / ya ccc (о котором я знаю ноль BTW), или найдите другую чью-то бесплатную реализацию то же самое и измените его назначение для своего собственного кода.

Если бы (2) было реалистичным вариантом c, я бы догадался, что многие поиски в Интернете могли бы что-то найти, но я ничего не нашел Это заставляет меня верить, что никто больше этого не делает, и для всех намерений и целей (2) это не очень хорошая практика. Проблема в том, что мне не совсем понятно, что (1) обязательно всегда лучший путь к go.

Вопрос 2 : Это правильно? Является ли (1) в основном _the_ современным способом реализации функциональности «входной колоды» в серьезные, проницательные научные c коды? Или есть другие варианты?

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

Спасибо!

-Петр

...