Для большинства больших научных c кодов необходимо предоставить большое количество информации («настройка проблемы»), чтобы определить конкретную c проблему, которую вы, возможно, пытаетесь решить с помощью кода. На самом деле ученый может потратить дни или даже недели, просто написав спецификацию проблемы.
Десятилетия go, для больших научных c программ, написанных на Фортране, было два основных способа запуска программа с указанной c проблемой:
- Значения внутренних переменных программы были указаны во внешнем файле «namelist», который программа считала при запуске.
- В более общем плане программа считывает файл, называемый «входной колодой». Входная колода может быть намного более сложной, включая ее собственные внутренние переменные, элементарные логики c и т. Д. c, и это может быть проанализировано, например, каким-нибудь пользовательским анализатором, написанным для программы.
Метод (2) до сих пор остается парадигмой, используемой даже сегодня для некоторых очень больших научных c кодов, которые я использовал, которые имеют десятилетние родословные и были написаны либо на современном FORTRAN, либо на C / C ++, и работают на HP C окружение, скажем, на 20 000+ ядер одновременно ... это не тривиальные биты кода.
Вопрос 1 : что такое современный способ реализации этого требования к ключевым функциям для научных c кодов?
Как я уже догадался, здесь действительно есть два варианта:
- Компилировать и переносить весь код с помощью языковой вызов более высокого уровня или набор вызовов, например Python, MATLAB, Julia и др. c, и превратите вашу старомодную «входную колоду» в настоящую мастер-программу, написанную на этих языках.
- Придумайте базовый синтаксис c и напишите свой собственный синтаксический анализатор "input deck", используя общий инструментарий синтаксического анализатора, такой как lex / ya ccc (о котором я знаю ноль BTW), или найдите другую чью-то бесплатную реализацию то же самое и измените его назначение для своего собственного кода.
Если бы (2) было реалистичным вариантом c, я бы догадался, что многие поиски в Интернете могли бы что-то найти, но я ничего не нашел Это заставляет меня верить, что никто больше этого не делает, и для всех намерений и целей (2) это не очень хорошая практика. Проблема в том, что мне не совсем понятно, что (1) обязательно всегда лучший путь к go.
Вопрос 2 : Это правильно? Является ли (1) в основном _the_ современным способом реализации функциональности «входной колоды» в серьезные, проницательные научные c коды? Или есть другие варианты?
Примечание: любой вид GUI находится за пределами области, которую я рассматриваю здесь. Если это не коммерческий продукт, то коды, с которыми я сталкивался, не используют GUI.
Спасибо!
-Петр