LINUX.ORG.RU

Скриптовые языки в научном ПО (отговорите от Python)

 , ,


2

4

Я пишу некий софт для численного моделирования кое-чего. Мне хочется создать более-менее законченный и, главное, гибкий продукт.

У меня есть всё, что нужно для вычисления. Больше практически ничего нет, входные данные в текстовом файле, до такой вот степени. Что хочется сделать? Дать возможность пользователю расширять и углублять функционал, не залезая в код; создавать сложные входные данные, анализировать выходные, не отходя от кассы, вот это всё.

Поэтому хочу добавить поддержку скриптов, например, на Perl или Python. Поскольку со скриптовыми языками не сталкивался, мне без разницы, с чего начинать. Также мне не будет сложно переписать back-end на другом языке (сейчас он на фортране, прошу прощения). Смотрю в сторону C++ или даже C — скорость критична.

Какую связку языков и тулкитов вы бы посоветовали? Графический интерфейс планируется, но очень нескоро.

Необходимое на реализацию время не имеет значения. Принимаются варианты типа «нинужно, используй MATLAB» (с аргументацией).

Не знаю, возможно, тема должна быть в Development.

UPDATE На данный момент очень сильно склоняюсь к Python, может ли кто-нибудь отговорить?



Последнее исправление: knovich (всего исправлений: 2)

Одним языком вряд-ли обойдёшься.

Алгоритмы и программы для Б3-34 МК-61 попробовать портировать на подходящий язык или среду )

swwwfactory ★★
()
Ответ на: комментарий от swwwfactory

Одним языком вряд ли обойдёшься.

А я и не собираюсь. В том-то и суть, чтоб начинку написать на «шустром» языке, а пользователю дать возможность писать скрипты.

knovich
() автор топика
Ответ на: комментарий от O02eg

Rust завтра созреет.

А, теперь я понял, что имелось в виду!

knovich
() автор топика

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

по поводу бэка на фортране - а в чем стыд? нормально, ты ж не свистопердь писал. плюсы неплохо идут если задача удобно разбивается на классы/объекты, иначе только жизнь портят

upcFrost ★★★★★
()
Ответ на: комментарий от Stil

>в Matlab есть средства разработки GUI

Такие, что лучше бы их не было совсем.

плюсую. А еще есть дыплоймент ака компилятор. Тянет либ на полсотни метров, результат обычно тупит и тормозит.

upcFrost ★★★★★
()

Хочешь к С/С++ проге добавить возможность скриптования? Можно AngelScript или Lua, которые встроить легко, а главное очень простые.

a1batross ★★★★★
()
Ответ на: комментарий от upcFrost

по поводу бэка на фортране - а в чем стыд?

Там в задаче уже довольно настойчиво просится ООП. А изучать фортрановскую реализацию мне как-то не хочется.

knovich
() автор топика
Ответ на: комментарий от knovich

А я и не собираюсь. В том-то и суть, чтоб начинку написать на «шустром» языке, а пользователю дать возможность писать скрипты.

можно примерчик «метафоричного» пользовательского скрипта?

можно что-то из API посмотреть:

+ ssh

+ REST

+ JSON

+ JSON-RPC

+ RPC

+ языки, с развитыми средствами реализации API и богатыми возможностями документирования, включая встроенное

swwwfactory ★★
()
Ответ на: комментарий от swwwfactory

примерчик

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

Так же и с выходными данными — там волновые функции (список пар координата-значение), которые интересно численно интегрировать друг с другом и операторами (матричные элементы считать). Задать все возможные операторы я всё равно не смогу. Ещё нужно отсеивать лишние решения, выбирать по определённым, иногда нетривиальным, признакам нужные, и так далее.

knovich
() автор топика
Ответ на: комментарий от swwwfactory

А, и ещё преобразовывать входные данные из выхлопа бесчисленного множества других программ для моделирования. Все возможные форматы я предусмотреть не смогу всё равно.

knovich
() автор топика
Ответ на: комментарий от knovich

поскольку на данный момент не вижу ему альтернатив, а это немного смущает. Если не вижу альтернатив — значит, чего-то не знаю.

Альтернатива есть. Лазарус со встроенным паскальскриптом или с добавляемым луа. По крайней мере гуёвина набросается легко.

Napilnik ★★★★★
()

UPDATE На данный момент очень сильно склоняюсь к Python, может ли кто-нибудь отговорить?

Нет. Если скорость критична и требуются скрипты на высокоуровневом языке, значит fortran+python+f2py однозначно. И нечего изобретать велосипед.

yvv ★★☆
()

Принимаются варианты типа «нинужно, используй MATLAB» (с аргументацией).

Если хочешь ненужного гемороя с лицензиями, то пойдёт и matlab.

yvv ★★☆
()
Ответ на: комментарий от knovich

Почему, например, Python, а не Perl.

Потому что numpy, scipy, matplotlib, f2py. На perl мене такое не известно.

yvv ★★☆
()
Ответ на: комментарий от ptarh

Продукты? А зачем? По моему вы делаете «вдоль».

В R хватает «графических универсальных оболочек», всё что нужно это написать свой пакет (library()) с уникальными функциями и определить в нём расширения методов для графики и «универсальных оболочек».

Фортрановые страдания просто оставить в неизменном виде (как и сделано в большинстве пакетов R)

psv1967 ★★★★★
()

Регулярно всплывают такие темы. Можно даже приблизительно угадывать что ответят.

Интересно, чем заканчиваются в итоге эти муки выбора? Какие в результате получаются готовые (гибкие) программы?

Deleted
()
Ответ на: комментарий от Deleted

Вижу, подтянулись гуру, так что, видимо, по существу больше никто ничего не скажет. Отметил тему как решённую.

knovich
() автор топика
Ответ на: комментарий от knovich

Вижу, подтянулись гуру

Напрасно подкалываете. Мне и правда интересно. Если хотите, предложу свой вариант - опросить потенциальных пользователей и действовать (вплоть до написания DSL для этой задачи) на основе их пожеланий.

Но это бессмысленное предложение, вы же все равно так не будете делать. А вот как будете - интересно. Если не трудно, напишите на каком варианте остановились и что в итоге получилось.

Deleted
()
Ответ на: комментарий от Deleted

опросить потенциальных пользователей

Вот именно потому, что Python известен как научный язык, а довольно большая часть знакомых мне научных сотрудников (в Англии) использует Perl, я и открыл эту тему — интересно, какой опыт в других научных организациях. Другая половина использует Matlab, но это для меня не вариант.

В российском институте никто вообще ничего не знает, кроме фортрана, но слышали больше о питоне. Синтаксис Python мне кажется проще и прозрачнее для непрограммиста, так что остановлюсь, скорее всего, на нём.

что в итоге получилось

Ничего, я даже не начал. Та часть, которая всё считает, есть уже давно. Торопиться некуда, это большой проект (в который войдёт, возможно, и мой велосипед), деньги под который ещё даже не выделены.

Напрасно подкалываете

Прошу прощения, просто там сверху один странный персонаж был, так что я оценил сразу всё скопом.

knovich
() автор топика

Пользуюсь для сиюминутных расчетов октавой. Для полноценных и тяжелых пишу на сях (иногда с использованием куды). Пока надобности в изучении какого-нибудь ЯП, кроме С, не было.

А вообще, у меня на сях все: от прошивок мелкоконтроллеров до сервер-сайдов веб-морд. Была бы возможность, я и клиент-сайд на сях писал бы (но, увы, приходится жалкий недоязычок под названием жабкоскрипт использовать).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от knovich

Пример: у нас наиболее популярен IDL (да-да, пераццкий); второе место делят MIDAS и матлаб (октавой, вроде бы, кроме меня никто не пользуется); на третьем — всякие пхытоны, но научники ими практически не пользуются, т.к. несерьезно. Крайне редко еще всякие С/С++ (но тут по пальцам одной руки можно пересчитать использующих).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Насколько я помню, у вас экспериментальная работа? У меня просто теоретическая задача (ну это громко сказано, на самом деле тупо расчёт).

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

Спасибо за пример. С возвращением на лор, кстати.

knovich
() автор топика

сейчас он на фортране, прошу прощения

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

exception13 ★★★★★
()
Ответ на: комментарий от exception13

наработанную за десятилетия мат библиотеку

Что вы имеете в виду? Стандартные функции? Потому что всякие IMSL и прочее я не использую.

оптимизирующий компилятор с неплохой поддержкой параллельных вычислений

Вот, кстати, обращаясь вновь к опыту зарубежных коллег. Я общался с человеком (физиком), который руководил созданием сложной, успешной и дорогой (какие-то там десятки тысяч $) программы, которая, в частности, используется на всяких суперкомпьютерах. Так вот, у них вся параллелизация написана самостоятельно, а компилировали они gfortran'ом. Не знаю уж, какая там у него оптимизация, но, наверное, не лучше, чем у Intel Fortran. Библиотек они тоже не использовали вроде, хотя тут не ручаюсь. Да, это как раз у них скрипты на Perl.

Не хочу сказать, что так всем надо делать, но во всяком случае бывает и так.

knovich
() автор топика
Ответ на: комментарий от knovich

Да, у нас вроде как теоретиков уже и не осталось вовсе. Матмодели, обработка результатов наблюдения, разработка нового железа и всякого ПО.

А еще всех людей роднит природная лень. И никому неохота с нуля разрабатывать метод, если он где-то уже реализован. Поэтому наши юниксоиды обычно пользуются MIDAS'ом (хотя потихоньку и переходят на другие вещи), а вендузятники используют IDL или матлаб. И те, и те стараются особо вглубь не копать по возможности. Всякие низкоуровневые штуки — это уже удел тех немногих, кто вместо науки хрен пинает.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от knovich

Мега задача, достаточно «[» и всяких plyr, reshape как синтаксического сахара

Если бы все были такими умными, как ваше величество, то этого форума бы не было.

ты студент по делу что нибудь скажи... например приведи что ты не можешь сделать из:

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

Так же и с выходными данными — там волновые функции (список пар координата-значение), которые интересно численно интегрировать друг с другом и операторами (матричные элементы считать). Задать все возможные операторы я всё равно не смогу. Ещё нужно отсеивать лишние решения, выбирать по определённым, иногда нетривиальным, признакам нужные, и так далее.

с помощью «[», seq, melt-cast и plyr?

psv1967 ★★★★★
()
Ответ на: комментарий от knovich

Соответственно, фокус смещён в сторону высокого уровня абстракции, или как там это называется у программистов. Надо дать учёным возможность быстренько сляпать математическую модель и прогнать её через мою чудо-программу.

Ну пистон, R тогда. Уродцев типа матлаба я во внимание не беру. Пиши свой пакет/модуль, нормально документируй и дальше пусть сами его применяют как хотят. Как бы, все так делают, готовых библиотек с кнопкой «сделай мне все збс» почти не существует. То что он у тебя на фортране - только плюс и обычная практика в написании своих либ к этим языкам.

ptarh ★★★★★
()

варианты типа «нинужно, используй MATLAB»

у матлаба хороший встроенный хэлп и удобно отлаживать программы
а еще многоядерное исполнение

Deleted
()

Прежде чем использовать метлаб, например, стоит трижды подумать. Во-первых, по количеству инженерных батареек они с питоном могут потягаться.

Во-вторых, нормальных средств проектирования ПО в метлабе появилось только недавно, и никто их не использует. Поэтому любая программа длиннее 1000 строк становится проблемой. И это совершено не серьёзно.

В-третьих, гуй в метлабе — это особое кунг-фу. В основном это вытекает из предыдущего пункта.

В-четвёртых, проприетарщина. Каждый баг надо либо отлаживать с саппортом, либо обходить как-то. Иногда так случается, что воркэраунды двух разных багов несовместимы. Ну и привязка к метлабу далеко не всегда удобна заказчикам.

В-пятых, под этот ваш линукс метлаб не оттестирован то ли очень плохо, то ли вообще никак. Глюков море.

nezamudich ★★
()

В ЦЕРНе для анализа данных используют связку C++ + python. Смею предположить что они там знают что делают.

morse ★★★★★
()
Ответ на: комментарий от Deleted

Многоядерное исполнение — это parfor который? На каждый параллельный цикл запускается Н метлабов? Это совсем беднота же. Лучше, чем ничего, конечно, но этого крайне мало.

nezamudich ★★
()

Если выбирать для научного скриптописания между Perl и Python, то однозначно последний. И синтаксис строже, и библиотек научных море.

Если выбирать вообще, то, думаю, нужно между Java и Python выбирать. Они весьма отличаются, так что под задачу выбрать, наверное, проблемы не будет.

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.