Tôi quan tâm đến thiết kế ngôn ngữ và nói chung tôi có thể dễ dàng suy luận về các tính năng được biết đến rộng rãi (ví dụ: kế thừa, đa hình, đại biểu, lambdas, chụp, thu gom rác, ngoại lệ, tổng quát, phương sai, phản xạ, v.v.), các tương tác của chúng trong một ngôn ngữ cụ thể, những cách họ có thể thực hiện, những hạn chế của họ, v.v.
Trong vài tháng gần đây, tôi bắt đầu đọc về Rust, nơi có hệ thống sở hữu đảm bảo an toàn bộ nhớ và quản lý tài nguyên xác định bằng cách buộc tuổi thọ của đối tượng phải được kiểm chứng tĩnh. Từ quan điểm của một người sử dụng ngôn ngữ đơn giản, tôi có thể nhận hệ thống gần như ngay lập tức.
Tuy nhiên, từ quan điểm của một nhà thiết kế ngôn ngữ, tôi phải mất một thời gian để nhận ra lý do tại sao mọi thứ trong Rust lại chính xác như vậy. Tôi không thể hiểu ngay lý do đằng sau một số hạn chế của hệ thống sở hữu, cho đến khi tôi buộc mình phải đưa ra các trường hợp vi phạm tính toàn vẹn của hệ thống nếu nó không có những khía cạnh đó.
Câu hỏi chính của tôi không liên quan gì đến Rust và quyền sở hữu của nó cụ thể - nhưng hãy thoải mái sử dụng nó làm ví dụ trong nhận xét / câu trả lời của bạn, nếu bạn cần.
Khi các nhà thiết kế ngôn ngữ thiết kế một tính năng mới, họ sử dụng phương pháp hoặc quy trình nào để quyết định rằng tính năng đó hoạt động đúng?
Bởi "mới" Tôi có nghĩa là nó không phải là thứ đã được thử nghiệm trong các ngôn ngữ hiện có (và do đó, phần lớn công việc đã được thực hiện bởi các nhà thiết kế khác). Bằng cách "hoạt động đúng" Tôi có nghĩa là tính năng này giải quyết vấn đề dự định một cách chính xác và nó có khả năng chống đạn hợp lý. Bởi "chống đạn hợp lý" Tôi có nghĩa là không có mã nào có thể được viết bằng ngôn ngữ hoặc một tập hợp con cụ thể của ngôn ngữ (ví dụ: một tập hợp con không có mã "không an toàn") sẽ vi phạm tính toàn vẹn của tính năng.
Đây có phải là một quá trình thử nghiệm và lỗi, theo nghĩa là bạn đưa ra một hình thức đơn giản của tính năng, sau đó cố gắng tìm cách vi phạm nó, sau đó vá nó nếu bạn vi phạm thành công, sau đó lặp lại? Và sau đó, khi bạn không thể nghĩ ra bất kỳ vi phạm nào khác có thể xảy ra, bạn có hy vọng không còn gì và gọi đó là một ngày không?
Hoặc có một cách chính thức để thực sự chứng minh (theo nghĩa toán học của từ này) rằng tính năng của bạn hoạt động và sau đó sử dụng bằng chứng đó để tự tin có được tính năng đúng (hoặc chủ yếu là đúng) ngay từ đầu?
(Tôi nên đề cập rằng tôi có nền tảng kỹ thuật, không phải khoa học máy tính. Vì vậy, nếu tôi thiếu thứ gì đó rõ ràng với người CS, xin vui lòng chỉ ra.)