2 xu của tôi.
Tôi nghĩ nói chung là dễ dàng hơn để viết về điều này, thay vì chỉ về C / C ++. Đầu tiên, các thư viện trong các ngôn ngữ như Python không nhất thiết phải được sử dụng để có được lợi ích về tốc độ, ngay cả khi đó là hậu quả. Tôi nghĩ rằng
@David bao gồm các lý do khá tốt.
Lấy nó từ đầu, việc thực hiện ngôn ngữ ở một mức độ nào đó chỉ ra những thư viện mà bạn có quyền truy cập. Các ngôn ngữ thường được sử dụng trong khoa học tính toán bao gồm C, C ++, Python, Perl, Java, Fortran và R. Các ví dụ ít phổ biến hơn có thể là Ocaml và Common Lisp. Bây giờ, vì hầu hết các ngôn ngữ này được viết bằng C, chúng có giao diện chức năng Foreign tự nhiên cho C. Tuy nhiên, không dễ để gọi, giả sử, một thư viện Perl từ Python hoặc ngược lại. Vì vậy, trong thực tế mọi người có xu hướng hoặc
Sử dụng một thư viện được viết bằng ngôn ngữ thực hiện của họ, thông thường một cái gì đó là một phần của các thư viện tiêu chuẩn, hoặc có sẵn rộng rãi, hoặc
Gọi thư viện C / C ++ thông qua các ngôn ngữ FFI. Điều này giả định rằng một trình bao bọc chưa tồn tại, vì nếu có, nó không dễ phân biệt với (1).
(2) thường khó hơn, vì bạn phải tự bọc chức năng C / C ++. Ngoài ra, bạn phải đóng gói thư viện hoặc thêm phụ thuộc. Vì lý do đó, mọi người có nhiều khả năng sử dụng các thư viện ngôn ngữ dựng sẵn hơn là sử dụng GSL chẳng hạn, có trong C.
Đối với các thói quen rất chung chung, giả sử tạo các mẫu ngẫu nhiên từ các bản phân phối hoặc các thói quen số cơ bản như phương trình tích phân, việc sử dụng lại một số thư viện là điều dễ dàng và phổ biến. Khi chức năng mà người ta đang cố gắng thực hiện trở nên phức tạp hơn, thì người ta sẽ không thể tìm thấy chức năng chính xác mà người ta muốn trong thư viện khác, và thậm chí người ta có thể dành nhiều thời gian để tìm kiếm và cuối cùng là điều chỉnh chức năng như cần thiết (kiểu mã / thiết kế có thể là một vấn đề chẳng hạn). Và như đã thảo luận ở trên, người ta chỉ có quyền truy cập vào một tập hợp con của các thư viện ngoài kia. Mặt khác, việc tự thực hiện một thuật toán nếu nó phức tạp và không phải là trọng tâm chính có thể gây khó khăn, và tất nhiên người ta phải đối phó với các vấn đề tốc độ đáng tiếc đó.
Vì vậy, điều này trở thành một vấn đề tối ưu hóa trong phân tích chi phí / lợi ích. Kinh nghiệm của tôi là ngay cả đối với các kỹ thuật tương đối chuẩn như MCMC, tôi vẫn thường viết mã cho riêng mình, vì nó phù hợp hơn với cách tôi thiết kế phần mềm tổng thể.
Tất nhiên, ngay cả khi bạn không sử dụng mã, bạn vẫn có thể học từ mã của người khác. Mặc dù vậy, tôi không biết các nhà khoa học thực sự bận tâm làm điều này như thế nào. Ấn tượng của tôi là đọc mã của người khác để học là một kỹ sư phần mềm.