Научная библиотека GNU (или GSL ) — это библиотека программного обеспечения для численных вычислений в прикладной математике и естественных науках . GSL написан на C ; оболочки доступны для других языков программирования. GSL является частью проекта GNU [2] и распространяется по лицензии GNU General Public License .
Проект GSL был инициирован в 1996 году физиками Марком Галасси и Джеймсом Тейлером из Национальной лаборатории Лос-Аламоса . [3] Они стремились написать современную замену широко используемым, но несколько устаревшим библиотекам Фортрана , таким как Netlib . [4] Они выполнили общий дизайн и написали первые модули; Готовясь к этому, они привлекли к участию других ученых.
«Общую разработку библиотеки, а также разработку и реализацию основных модулей» выполнили Брайан Гоф и Джерард Юнгман. [3] Другими крупными участниками были Джим Дэвис , Рид Приедхорски, М. Бут и Ф. Росси. [3]
Версия 1.0 была выпущена в 2001 году. В последующие годы библиотека расширялась очень медленно; как говорилось в документации, сопровождающих больше интересовала стабильность, чем дополнительная функциональность. Основная версия 1 закончилась выпуском 1.16 от июля 2013 г.; это было единственное публичное мероприятие за три года (2012–2014 гг.).
Активная разработка возобновилась с публикацией версии 2.0 в октябре 2015 года. Последняя версия 2.7 была выпущена в июне 2021 года.
Следующий пример программы вычисляет значение функции Бесселя первого рода и нулевого порядка для 5: [5]
#include <stdio.h> #include <gsl/gsl_sf_bessel.h> int main ( void ) { double x = 5,0 ; двойной y = gsl_sf_bessel_J0 ( x ); printf ( "J0(%g) = %.18e \n " , x , y ); вернуть 0 ; }
Пример программы должен быть связан с библиотекой GSL после компиляции:
$ gcc $( gsl-config --cflags ) example.c $( gsl-config --libs )
Вывод показан ниже и должен быть правильным с точностью до двойной точности :
J0(5) = -1,775967713143382920e-01
Библиотека программного обеспечения предоставляет возможности для:
Поскольку GSL написан на C, можно легко предоставить оболочки для других языков программирования. Такие обертки в настоящее время существуют для
GSL можно использовать в классах C++ , но без указателей на функции-члены, поскольку тип указателя на функцию-член отличается от типа указателя на функцию . [23] Вместо этого необходимо использовать указатели на статические функции. Другой распространенный обходной путь — использование функтора .
Доступны оболочки C++ для GSL. [7] [8] [9] [10] Не все из них обслуживаются регулярно. Они предлагают доступ к матричным и векторным классам без необходимости использования интерфейса GSL для функций malloc и free . Некоторые также предлагают поддержку создания рабочих пространств, которые ведут себя как классы интеллектуальных указателей . Наконец, существует (ограниченная, по состоянию на апрель 2020 г.) поддержка, позволяющая пользователю создавать классы для представления параметризованной функции в виде функтора .
Хотя это и не строго оболочки, существуют некоторые классы C++ [24] [25] , которые позволяют пользователям C++ использовать научную библиотеку Gnu с функциями оболочки.