Tôi hiện đang sử dụng C và một số FORTRAN để giải các hệ phương trình vi phân số.
Tôi hơi chán với cả hai ngôn ngữ này nhưng tôi cần có một số mã (khá) hiệu quả ... Tôi đang nghĩ đến việc chuyển sang OCaml.
Nó có đáng không?
Tôi hiện đang sử dụng C và một số FORTRAN để giải các hệ phương trình vi phân số.
Tôi hơi chán với cả hai ngôn ngữ này nhưng tôi cần có một số mã (khá) hiệu quả ... Tôi đang nghĩ đến việc chuyển sang OCaml.
Nó có đáng không?
Câu trả lời:
Những người ở Jane Street Capital chắc chắn nghĩ như vậy. Họ đã nói chuyện tại CMU vào năm 2009 về việc sử dụng OCaml.
Hạn chế duy nhất tôi có thể nghĩ đến là ma trận không phải là công dân hạng nhất.
Trước hết, tôi muốn đưa ra tuyên bố khác thường rằng đối với các tính toán số, các ngôn ngữ cấp cao sẽ hữu ích hơn nhiều về lâu dài so với các ngôn ngữ cấp thấp. Hãy để tôi trích dẫn một cách lỏng lẻo một nhà nghiên cứu từ Viện Fraunhofer làm việc trong các mô phỏng số được sử dụng trong dự báo thời tiết.
Trong thập kỷ qua, CPU trở nên nhanh hơn 1000 lần trong khi các thuật toán trở nên nhanh hơn 1000 * 1000. Điều này có nghĩa là, các thuật toán ngày nay chạy trên CPU của ngày hôm qua sẽ đánh bại các thuật toán của ngày hôm qua chạy trên các CPU ngày nay với hệ số 1000.
Rõ ràng, có nhiều tham số hơn để xem xét như tốc độ và thuật toán CPU, như đĩa hoặc RAM, nhưng tuyên bố đó giúp chúng tôi hủy bỏ rằng, nếu bạn chọn ngôn ngữ cấp thấp, bạn tập trung vào yếu tố sai (1000 thay vì 1000 * 1000).
Tất nhiên, đưa ra bất kỳ bằng số cụ thể thuật toán người ta có thể mong đợi C hoặc Fortran để đánh bại OCaml hoặc Common Lisp bởi một (trên thực tế không phải là) yếu tố lớn. Nhưng nếu bạn thực sự quan tâm đến các vấn đề về số và sẵn sàng cải tiến thuật toán, thì bạn nên chọn một ngôn ngữ cấp cao cho phép bạn thể hiện ý tưởng của mình ở mức cao và dễ dàng cải thiện thuật toán.
Là một lưu ý phụ, nếu bạn xem xét việc viết mã số bằng OCaml, bạn chắc chắn nên biết về cách OCaml truyền tham số cho các hàm, hàm nội tuyến và thả nổi unbox. Tất cả điều này được chi tiết trong ghi chú của Xavier Leroy .
Tôi thích OCaml, ít nhất là cho đến khi tôi nhìn vào lập trình đa luồng.