объединение кусков программы, написанных на разных языках

Помогите сориентироваться, пожалуйста. Как можно использовать в программе на новом языке старые куски (программы), написанные на другом языке? Пояснение: Первое: языки меняются, для некоторых вещей, написанных ранее, чуть ли не отдельный комп с досом надо держать. Я инженер (не в it), пишу вспомогательные расчетные программы, но среды устаревают, и все приходится или переписывать, или забывать. Второе: даже если писать на современном языке что-то, но отдельные операции лучше прописываются на другом (распараллеливание вычислений, например), то как это все собрать вместе? (например, каким образом можно на одном языке написать библиотеку для другого языка? это возможно? .. библиотеки писать не приходилось)...........Дополнение: 1) спасибо за варианты, буду пытаться изучать, 2) конкретика такая: из ранее написанного, что жалко - исчезающий паскаль (ну и под специфич программы подпрограммы, но там понятно), именно на будущее хотелось бы писать в том, что не исчезнет или что потом будет можно объединять или хоть как-то использовать, ну плотно занимаюсь питоном и си++ (которого боюсь из-за сложности), вчера порекомендовали Rust (для многопоточности) и фортран (для скорости). Лет на пять уже план) Хотелось бы, чтобы всё вновь написанное не пропало бы, а по возможности, и старое реанимировать


Ответы (1 шт):

Автор решения: gbg

Если рисовать широкими мазками, варианты такие:

  1. Старую программу можно просто откомпилировать новым компилятором, особенно если она написана на хорошо стандартизированном языке вроде C++98. С другой стороны, если там UB через две строчки, ее проще вышвырнуть куда подальше.

  2. Если вы стокнулись с экзотикой, ее можно запустить в эмуляторе, например, в DOSBox или виртуальной машине (KVM, XEN, их десятки). Обмен данными можно органзовать через файлы или эмуляцию пользовательского ввода, если вам нравятся трудные и извилистые пути.

  3. Для современных программ также есть с полдесятка способов, которые можно комбинировать, получая сотни и тысячи. Это называется IPC (Inter Process Communication)

  • путем динамической компоновки (когда программа на, извините, Питоне, большую часть времени вызывает код на Фортране и C, а потом автор хвалится, какой у него Питон быстрый)
  • через файлики
  • через общую память
  • через пайпы и сокеты (в том числе и стандартный ввод/вывод)
    • бинарным потоком
    • или даже JSON и XML (еще и пожатые через gzip, не, gzip уже не модно, модно zstd, а еще помните, был такой SOAP)
  • другие экзотические способы вроде dbus (чтоб ее) или даже оконных сообщений Windows (F, дорогой WinAmp)
  • через базу данных (по сути, через любую, хоть SQLite)
  • через брокер очередей и сообщений (RabbitMQ, Kafka)
  • а еще есть MPI, прекрасно идет на InfiniBand

Все эти способы отличаются скоростью работы (но общая память и динамическая линковка в топе), сложностью получаемых структур обмена (из Кафки можно не только сделать быль, но и реально сложный конвейер), трудоемкостью отладки, и прочим.

→ Ссылка