Мої 2 копійки.
Я думаю, що про це взагалі простіше писати, ніж просто про C / C ++. По-перше, бібліотеки на таких мовах, як Python, не обов'язково використовуються для отримання швидкої вигоди, навіть якщо це є наслідком. Я думаю
@David досить добре висвітлював причини.
Беручи це зверху, мовна реалізація певною мірою диктує, до яких бібліотек ви маєте доступ. Найчастіше використовувані мови в обчислювальній науці включають C, C ++, Python, Perl, Java, Fortran та R. Менш поширеними прикладами можуть бути Ocaml та Common Lisp. Тепер, оскільки більшість цих мов написані на C, вони мають природний інтерфейс зовнішньої функції до C. Однак, не так просто викликати, скажімо, бібліотеку Perl з Python чи навпаки. Тож на практиці люди прагнуть до будь-якого
Використовуйте бібліотеку, написану мовою їхньої реалізації, звичайно те, що є частиною стандартних бібліотек або іншим чином широко доступним, або
Виклик бібліотеки C / C ++ через мови FFI. Це передбачає, що обгортку вже не існує, оскільки, якщо вона є, її не легко відрізнити від (1).
(2), як правило, важче, тому що вам доведеться самостійно обгортати функцію C / C ++. Також вам доведеться або зв'язати бібліотеку, або додати додаткову залежність. З цієї причини люди швидше використовують вбудовані бібліотеки мов, а не використовують GSL, наприклад, на C.
Скажімо, для дуже загальних процедур, скажімо, генерування випадкових зразків з розподілів або основних числових процедур, таких як квадратура інтегралів, легко і звичайно повторно використовувати деяку бібліотеку. Оскільки функціонал, який намагається реалізувати, стає складнішим, він стає експоненціально більш маловірогідним, що хтось буде шукати точну функцію, яку хочеться в іншій бібліотеці, і навіть, як це зробити, можна було б витратити багато часу на пошук і, нарешті, адаптувати функцію як Необхідно (наприклад, стиль / дизайн коду може бути проблемою). Як вже було сказано вище, кожен має доступ лише до підмножини бібліотек. З іншого боку, реалізація алгоритму, якщо він складний і не є основним напрямком, може бути непростим, і, звичайно, доводиться стикатися з цими неприємними питаннями швидкості.
Отже, це стає проблемою оптимізації в аналізі витрат / вигод. Мій досвід полягає в тому, що навіть для порівняно стандартних методик, таких як MCMC, я зазвичай закінчую написання власного коду, оскільки він краще відповідає тому, як я розробляю загальне програмне забезпечення.
Звичайно, навіть якщо ви в кінцевому підсумку не використовуєте код, можна дізнатися з коду інших людей. Я не знаю, як часто вчені намагаються це робити. Моє враження, що читати код інших людей, щоб дізнатися - це більше справа інженера-програміста.