В чём преимущество Эрланга и на каких задачах оно в принципе реализуемо? Про интегрирование я уже понял. Неактуально. Ещё что-то?
Ещё раз повторю по пунктам.
1. Вы написали функцию для расчёта интеграла на С++. Эта функция принимает 3 аргумента и имеет следующий синтаксис:
Код:
typedef double integrated(double) ;
double integral(double low_limit, double hight_limit, integrated* func) { ... }
Проблемы:
1.1 Вам нужно вычислить интеграл от функции:
Код:
float my_func(float) { ... }
Просто так скастить указатель нельзя. Придётся функцию
my_func оборачивать в другую, чтобы она соотвествовала синтаксису
integrated. Не то, чтобы проблема, но как-то коряво получается. Мало того, функция может зависеть от параметров и нужно, например, вычислить интеграл несколько раз с различными значениями этого параметра.
1.2 Вам потребовалось вычислить двойной интеграл функции двух переменных. Написанную ранее функцию для этой цели использовать уже не получится, т.к. пределы могут быть переменными. Нужно что-то переделывать. На Эрланге такой проблемы не возникает.
1.3 Есть функция векторного аргумента сложная в вычислительном плане. Вам нужно посчитать многомерный интеграл. Если считать в одном потоке, то вычисления могут занять кучу времени.
Все эти проблемы, конечно же решаемы и на С++. Суть не в этом. Суть в том, что В Эрланге этих проблем либо вообще нет (1.1, 1.2), либо они решаются значительно проще (1.3), стандартными средствами языка.
Подобные проблемы возникают, например, при аппроксимации функций многих переменных.
Ни в коем случае не мешаю. Я пытаюсь за что-то зацепиться. Просто обсуждать плохость одного из самых распространённых языков программирования "вообще" мне кажется несколько странным. Это приблизительно как обсуждать, что отвёртка это ненужный инструмент. Вот смотрите -- шуруп можно в стену молотком забить, а гвоздь отвёрткой -- никак...
Это уже конструктивно. Понятное дело, что гвозди отвёрткой забивать неудобно, для каждой задачи должен быть свой инструмент.
Язык С++ хорошо зарекомендовал себя с системном программировании. Язык постоянно развивается. Сначала он был просто надстройкой над языком С, сейчас совместимость с С программами, вообще говоря, отсутствует. Отсюда и пошли многие проблемы. Microsoft попыталась решить существующие проблемы в языке C#. Но у неё это плохо получилось. Шарпные приложения непереносимы, а на плюсах можно писать мультиплатформенный код - хоть под линь, хоть под вынь, хоть под x86, хоть под ARM. Кроме того, шарп заточен под дотнет со всеми вытекающими последствиями. Вообще MS при разработке своих продуктов меньше всего думает об их переносимости, универсальности. Часть проблем бвла решена в относительно новом языке D, в котором нет никакой обратной совместимости ни с C, ни с С++. Мало того, переработан механизм шаблонов, запрещено множественное наследование, упрощён процесс написания классов (в С++ нужно писать много лишнего кода), добавили кое-какие фичи из функциональных языков (н-р вложенные функции). Так что если выбирать между C++ и D, оценивать сами языки, не учитывать наличие уже созданных под них библиотек, существование компиляторов под различные архитектуры и пр., то выбор, конечно же будет в пользу языка D.
Почему всё пишется на С++ вполне очевидно. Есть куча компиляторов для всевозможных архитектур, есть куча готовых библиотек. Язык С++ некоторые учат ещё в школе, переучиваться с туманными перспективами (будет развиваться он или нет - черт его знает) мало кто хочет. Аналогичная ситуация с Эрлангом.
Теперь, собственно к теме разговора. ТС хотел узнать какой ЯП лучше подходит для математических вычислений. Я считаю, что Эрланг довольно удобен для этих целей по ряду причин, которые я назвал выше. Кроме того, у Эрланг есть замечательная возможность - вызывать функции из сторонних библиотек. Если уж так сильно хочется заюзать ALGLib, то можно написать соответствующую длл-ку.