Этот ответ - скорее история, чем исчерпывающий ответ, но я использовал смесь Haskell, Python и C ++ для своей диссертации в области компьютерной лингвистики, а также несколько инструментов на C и Java, которые я не писал.Я обнаружил, что проще всего запускать все как отдельный процесс, используя Python в качестве связующего кода для запуска программ на Haskell, C ++ и Java.
C ++ был довольно простым, трудным циклом, который подсчитывал появления объектов.В основном все, что он делал, было математикой и простым вводом / выводом.Я фактически управлял опциями, заставляя клейкий код Python записывать заголовок, полный #define
s, и перекомпилировать.Вроде хак, но это сработало.
На Haskell была вся промежуточная обработка: получение сложного вывода из различных анализаторов C и Java, которые я использовал, фильтрация посторонних данных и преобразование их в простой формат кода C ++.ожидается.Затем я взял вывод C ++ и преобразовал его в разметку LaTeX (среди других форматов).
Это область, в которой можно ожидать сильного Python, но я обнаружил, что Haskell упрощает манипулирование сложными структурами;Python, вероятно, лучше подходит для простых межстрочных преобразований, но я разбил и разбил деревья разбора и обнаружил, что забыл типы ввода и вывода, когда писал код на Python.
Поскольку я использовал Haskellво многом как более структурированный язык сценариев, я закончил тем, что написал несколько утилит для ввода / вывода файлов, но помимо этого было достаточно встроенных библиотек для манипулирования списками и деревьями.
В итоге, если у вас естьКак и моя проблема, я бы предложил C ++ для ограниченного по памяти, критичного по скорости компонента, Haskell для высокоуровневых преобразований и Python для запуска всего этого.