Выбор фронтенда/интерпретатора для научного кода

Инструмент моделирования, который я разработал по нескольким прошлых лет, записан в C++ и в настоящее время имеет tcl интерпретируемый фронтенд. Это было записано таким образом, что это может быть выполнено или в интерактивной оболочке, или путем передачи входного файла. Так или иначе входной файл записан в tcl (со многими определенными для дополнительной симуляции командами, которые я добавил). Это допускает довольно мощные входные файлы (например, - когда рабочий Монте-Карло sims, случайные распределения могут быть запрограммированы как tcl процедуры непосредственно во входном файле).

К сожалению, я нахожу, что tcl интерпретатор становится несколько ограниченным по сравнению с тем, что должны предложить более современные интерпретируемые языки, и его синтаксис кажется немного тайным. Так как вычислительный механизм был записан как библиотека с c-compatible API, это должно быть просто для записи альтернативных фронтендов, и я думаю о перемещении в новый интерпретатор, однако у меня есть что-то вроде времени, выбирая (главным образом, потому что у меня нет значительного опыта со многими интерпретируемыми языками). Опции, которые я начал исследовать, следующие:

Остающийся с tcl:
Профессионалы:
- Никакая потребность изменить существующий код.
- Существующие входные файлы остаются такими же. (хотя я, вероятно, сохранил бы tcl фронтэнд как опцию),
- Сформировавшийся язык с большой общественной поддержкой.
Недостатки:
- Чувство ограничено синтаксисом языка.
- Получение жалоб от пользователей относительно трудности изучения tcl.

Python:
Профессионалы:
- Современный интерпретатор, который, как известно, был довольно эффективен.
- Многочисленное, активное сообщество.
- Известные научные и математические модули, такие как scipy.
- Наиболее часто используемый в академическом Научном/техническом сообществе (типичные пользователи моего кода)
Недостатки:
- Я никогда не использовал его и таким образом занял бы время для изучения языка (это - также про, поскольку я означал изучать Python в течение достаточно долгого времени),
- Строгое форматирование входных файлов (добавление отступа, и т.д.)

Matlab:
Профессионалы:
- Очень питание и широко используемый математический инструмент
- Мощная встроенная визуализация/графическое изображение.
- Расширяемый, через сообщество отправил код, а также коммерческие панели инструментов.
- Многие в академии науки/разработки знакомы с и довольны matlab.
Недостатки:
- Не может распределить, поскольку исполняемый файл - должен был бы быть прибавлением/панелью инструментов.
- Потребовал бы(?) matlab компилятора (который является дорогостоящим).
- Требует Matlab, который является также дорогостоящим.

Эти за и против - то, что я смог придумать, хотя у меня есть очень мало опыта с интерпретируемыми языками в целом. Я хотел бы услышать какие-либо мысли и об интерпретаторах, которые я предложил здесь, если бы эти перечисленные профессионалы/недостатки законны, и какие-либо другие интерпретаторы, о которых я не думал (например, - php подходил бы для чего-то вроде этого? lua?). Собственный опыт со встраиванием интерпретатора в Вашем коде определенно плюс!

6
задан MarkD 2 July 2010 в 16:58
поделиться

3 ответа

Я был сильный сторонник Tcl / Tk с момента предварительного выпуска, до тех пор, пока я не выполнил с ним большой проект и не обнаружил, насколько он неподдерживаемый. К сожалению, поскольку прототипы в Tcl настолько просты, вы заканчиваете тем, что «одноразовые» скрипты живут собственной жизнью.

Приняв Python за последние несколько месяцев, я обнаружил, что это все, что обещал Tcl, и многое другое. Как могут сказать вам многие ветераны Python, отступы в исходном коде беспокоят максимум в течение первого часа, а затем не кажутся помехой, а весьма полезны. Между прочим, автора Tcl, Джона Остерхаута, поочередно хвалили и критиковали за то, что он написал язык, который заставлял One True Brace Style использовать кодировщики Tcl (у меня был 1TBS, так что меня это устраивало).

Единственные конструкции Tcl, которые плохо обрабатываются Python, - это произвольные конструкции eval "$ {prefix} $ {command} arg" , которые в любом случае не должны использоваться в Tcl, но есть и операторы типа uplevel (которые были хорошей идеей, но были сделаны для некоторого сложного кода). В самом деле, Python кажется немного антагонистом динамическому eval , но я думаю, что это хорошо. К сожалению, мне еще не удалось создать язык, который бы охватывал свой графический интерфейс, а также Tcl / Tk; Tkinter выполняет свою работу на Python, но это больно.

Я вообще не могу разговаривать с Matlab.

Имея за плечами несколько месяцев Python, я почти наверняка портирую любую программу Tcl, которая находится в процессе разработки, на Python в целях здравомыслия.

5
ответ дан 16 December 2019 в 21:34
поделиться

Думали ли вы об использовании Octave? Насколько я понимаю, это почти незаменимая замена для большей части Matlab. Это может позволить вам поддерживать Matlab для тех, у кого он есть, и бесплатную альтернативу для тех, у кого его нет. Поскольку «суть» вашей программы кажется написанной на другом языке, соображения производительности кажутся не такими важными, как обеспечение среды, которая имеет: возможности построения графиков и визуализации, является кроссплатформенной, имеет большую базу пользователей и язык, который, вероятно, уже знает почти каждый в академических кругах и / или связанных с моделированием потока жидкости. Matlab / Octave потенциально может иметь все это.

3
ответ дан 16 December 2019 в 21:34
поделиться

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

Я серьезно рассматривал matlab / octave, но при чтении октавного API и Matlab API они достаточно разные, и мне пришлось бы создавать отдельные интерфейсы для каждого (или проявлять творческий подход с макросами). С python я получаю единую, более простую в обслуживании кодовую базу для внешнего интерфейса, и ее используют почти все, кого мы знаем. Всем спасибо за советы / отзывы!

0
ответ дан 16 December 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: