Sai cảm giác an toàn . Thật vô nghĩa.
Vài loại cơ bản . OCaml hiện có các byte và mảng byte nhưng không có chuỗi unicode tích hợp, số nguyên 16 bit, số nguyên không dấu, số float 32 bit, vectơ hoặc ma trận. Thư viện của bên thứ ba cung cấp một số trong số này.
Im lặng tràn số nguyên . Không thay đổi nhưng nó không bao giờ là một vấn đề.
Mô đun bất biến . Khuyến nghị của ông rằng các chức năng và mô-đun nên có thể thay đổi là một nhược điểm nghiệt ngã đối với Lisp và một ý tưởng thực sự tồi tệ. Bạn có thể thay thế các mô-đun bằng cách sử dụng include
nếu bạn muốn nhưng tất nhiên bạn không thể thay đổi chúng.
Đa hình gây ra lỗi loại thời gian chạy . Đây là một vấn đề lớn với OCaml và nó chưa được khắc phục. Khi các loại của bạn phát triển bình đẳng đa hình, việc so sánh và băm sẽ bắt đầu thất bại khi chúng gặp các loại như hàm và gỡ lỗi vấn đề là rất khó. F # có một giải pháp tuyệt vời cho vấn đề này.
Không có macro . Trớ trêu thay, khi ông viết OCaml này thực sự đã hỗ trợ đầy đủ cho các macro nhưng giờ họ đã quyết định rút tính năng này ra.
Giấy gói . Đây là một vấn đề thực sự và nó đã không được sửa chữa. Vẫn không có try ... finally
cấu trúc trong ngôn ngữ OCaml và không có trình bao bọc nào thực hiện nó trong stdlib.
Địa điểm . Không thay đổi nhưng không vấn đề.
Ghi lại trường đặt tên địa ngục . Cấu trúc mã của bạn đúng cách sử dụng các mô-đun.
Cú pháp . Không thay đổi nhưng không vấn đề.
Không đa hình . Điều này chủ yếu là vô nghĩa khi ông viết nó và không có gì thay đổi.
Bộ hàm không nhất quán . OCaml vẫn không có cons
chức năng. Tốt rồi. Tôi không muốn công cụ Lisp trong ngôn ngữ của tôi, cảm ơn bạn.
Không có biến động . Là một điều tốt về OCaml. Vẫn là một điều tốt về OCaml.
Tùy chọn ~ đối số hút . Tùy chọn đá đối số. Tôi đã làm phiền Microsoft để khiến họ thêm các đối số tùy chọn vào F #.
Ứng dụng một phần không thống nhất ứng dụng . Hở?
Khả năng đọc số học . Điều này đã thay đổi kể từ khi tôi ngừng sử dụng OCaml ~ 8 năm trước. Rõ ràng bây giờ bạn có thể làm Int64.((q * n - s * s) / (n - 1L))
.
Im lặng giải quyết xung đột tên . Anh ấy đã cố gắng phát triển phần mềm toàn diện trong REPL như bạn làm ở Lisp. Đừng làm điều đó trong OCaml. Sử dụng các tệp và biên dịch hàng loạt chỉ dùng đến REPL để thử nghiệm, chạy mã dùng một lần và tính toán kỹ thuật tương tác.
Trình tự đánh giá . Điều này là sai khi ông viết nó. Thứ tự đánh giá là không xác định trong OCaml.
Không có đối tượng đầu vào / đầu ra . Ông đã trích dẫn một thư viện bên thứ ba đã giải quyết "vấn đề" này.
Trình biên dịch dừng sau lỗi đầu tiên . Hở?
Không có dấu vết ngăn xếp cho các thực thi được biên dịch nguyên bản . Đã sửa.
Con nợ hút . Tôi không bao giờ sử dụng trình gỡ lỗi. Kiểm tra kiểu tĩnh bắt hầu hết các lỗi của tôi.
GC hút . Tôi thấy GC của OCaml là tuyệt vời ngoại trừ một vấn đề lớn: khóa toàn cầu ngăn chặn lập trình song song.
Không khai báo ngầm . Đệ quy lẫn nhau được thiết kế rõ ràng trong tất cả các ML. Điều khó khăn duy nhất là các type
định nghĩa được đệ quy theo mặc định trong khi let
các ràng buộc không được đệ quy theo mặc định.
Vòng chức năng vắng mặt . OCaml vẫn có một stdlib xương trần nhưng các thư viện bên thứ ba như Jane St's Core cung cấp round
và bạn bè.
Danh sách . List.map
vẫn không đuôi đệ quy. Tôi đã gửi các bản vá để sửa các lỗi nghiêm trọng như thế này và phải đợi nhiều năm trước khi chúng xuất hiện trong các bản phát hành. Danh sách vẫn là bất biến, tất nhiên. Và vì vậy họ nên được.
Tốc độ . Tôi tin rằng thời gian biên dịch cho các biến thể đa hình lớn đã được sửa.
Mẫu phù hợp . Một chiến thắng của hy vọng trên thực tế. Cộng đồng Lisp đã thất bại trong việc này. Do đó, quy tắc thứ 10 của tôi: bất kỳ chương trình Lisp nào đủ phức tạp đều chứa một triển khai đặc biệt, được chỉ định không chính thức và có lỗi với một nửa trình biên dịch khớp mẫu của OCaml.
nhưng bạn có thể gọi máy in đẹp từ cấp cao nhất dưới dạng cuộc gọi thư viện, cung cấp cho nó thông tin loại cần thiết. Và có một macro mà bạn có thể sử dụng để chú thích cấu trúc dữ liệu để có các máy in đẹp được tự động tạo.