Đó là một câu hỏi hay! Nó hỏi những gì chúng ta mong đợi từ các loại trong một ngôn ngữ gõ.
Đầu tiên lưu ý rằng chúng ta có thể gõ bất kỳ ngôn ngữ lập trình nào với unitype : chỉ cần chọn một chữ cái, nói U
và nói rằng mọi chương trình đều có loại U
. Điều này không phải là rất hữu ích, nhưng nó làm cho một điểm.
eAeAAint
Không có kết thúc về cách biểu cảm của bạn có thể được. Về nguyên tắc, chúng có thể là bất kỳ loại câu lệnh logic nào, chúng có thể sử dụng lý thuyết thể loại và chú thích, v.v. Ví dụ, các loại phụ thuộc sẽ cho phép bạn thể hiện những thứ như "hàm này ánh xạ liệt kê danh sách sao cho đầu ra là đầu vào được sắp xếp". Bạn có thể đi xa hơn, tại thời điểm tôi đang nghe một bài nói chuyện về "logic phân tách đồng thời" cho phép bạn nói về cách các chương trình đồng thời hoạt động với trạng thái chia sẻ. Công cụ ưa thích.
Nghệ thuật của các loại trong thiết kế ngôn ngữ lập trình là một trong những sự cân bằng giữa tính biểu cảm và sự đơn giản :
- nhiều kiểu biểu cảm hơn cho phép chúng tôi giải thích chi tiết hơn (cho chính chúng tôi và cho trình biên dịch) những gì được cho là đang diễn ra
- các loại đơn giản dễ hiểu hơn và có thể được tự động hóa dễ dàng hơn trong trình biên dịch. (Mọi người đến với các loại về cơ bản yêu cầu trợ lý bằng chứng và đầu vào của người dùng để kiểm tra loại.)
Đơn giản là không được đánh giá thấp, vì không phải mọi lập trình viên đều có bằng tiến sĩ về lý thuyết ngôn ngữ lập trình.
Vì vậy, hãy để chúng tôi trở lại câu hỏi của bạn: làm thế nào để bạn biết rằng hệ thống loại của bạn là tốt ? Vâng, chứng minh các định lý cho thấy các loại của bạn được cân bằng. Sẽ có hai loại định lý:
Các định lý nói rằng các loại của bạn là hữu ích . Biết rằng một chương trình có một loại nên ngụ ý một số đảm bảo, ví dụ như chương trình sẽ không bị kẹt (đó sẽ là một định lý An toàn ). Một nhóm định lý khác sẽ kết nối các loại với các mô hình ngữ nghĩa để chúng ta có thể bắt đầu sử dụng toán học thực tế để chứng minh mọi thứ về các chương trình của chúng ta (chúng sẽ là các định lý đầy đủ và nhiều định lý khác). Unitype ở trên là xấu vì nó không có định lý hữu ích như vậy.
Các định lý nói rằng các loại của bạn là đơn giản . Một điều cơ bản sẽ là có thể quyết định liệu một biểu thức đã cho có một kiểu đã cho hay không. Một tính năng đơn giản khác là đưa ra một thuật toán để suy ra một loại. Các định lý khác về tính đơn giản sẽ là: một biểu thức có nhiều nhất một loại hoặc một biểu thức có loại chính (nghĩa là loại "tốt nhất" trong số tất cả các loại mà nó có).
Thật khó để cụ thể hơn vì các loại là một cơ chế rất chung chung. Nhưng tôi hy vọng bạn thấy những gì bạn nên chụp cho. Giống như hầu hết các khía cạnh của thiết kế ngôn ngữ lập trình, không có thước đo thành công tuyệt đối. Thay vào đó, có một không gian của thiết kế tích cực, và điều quan trọng là phải hiểu bạn đang ở đâu hoặc muốn ở đâu.