Loại hệ thống ngăn ngừa lỗi
Loại hệ thống loại bỏ các chương trình bất hợp pháp. Hãy xem xét mã Python sau đây.
a = 'foo'
b = True
c = a / b
Trong Python, chương trình này thất bại; nó ném một ngoại lệ Trong một ngôn ngữ như Java, C #, Haskell , bất cứ điều gì, đây thậm chí không phải là một chương trình hợp pháp. Bạn hoàn toàn tránh được các lỗi này vì đơn giản là chúng không thể có trong bộ chương trình đầu vào.
Tương tự, một loại hệ thống tốt hơn quy định nhiều lỗi hơn. Nếu chúng ta nhảy lên các hệ thống loại siêu tiên tiến, chúng ta có thể nói những điều như thế này:
Definition divide x (y : {x : integer | x /= 0}) = x / y
Bây giờ hệ thống loại đảm bảo rằng không có bất kỳ lỗi chia 0 nào.
Những loại lỗi
Dưới đây là danh sách ngắn gọn về những lỗi hệ thống có thể ngăn chặn
- Lỗi ngoài phạm vi
- Tiêm SQL
- Tổng quát hóa 2, nhiều vấn đề an toàn ( kiểm tra không rõ ràng trong Perl )
- Lỗi ngoài chuỗi (quên gọi init)
- Buộc một tập hợp con các giá trị được sử dụng (ví dụ: chỉ các số nguyên lớn hơn 0)
Mèo con bất chính (Vâng, đó là một trò đùa)
- Lỗi mất độ chính xác
- Lỗi bộ nhớ giao dịch phần mềm (STM) (điều này cần độ tinh khiết, cũng yêu cầu các loại)
- Tổng quát hóa 8, kiểm soát tác dụng phụ
- Bất biến trên cấu trúc dữ liệu (cây nhị phân có cân bằng không?)
- Quên một ngoại lệ hoặc ném sai
Và hãy nhớ rằng, đây cũng là lúc biên dịch . Không cần phải viết các bài kiểm tra với độ bao phủ mã 100% để chỉ cần kiểm tra lỗi loại, trình biên dịch chỉ làm điều đó cho bạn :)
Nghiên cứu điển hình: Đánh máy tính toán lambda
Được rồi, chúng ta hãy kiểm tra đơn giản nhất trong tất cả các hệ thống loại, chỉ cần gõ tính toán lambda .
Về cơ bản có hai loại,
Type = Unit | Type -> Type
Và tất cả các thuật ngữ là biến, lambdas hoặc ứng dụng. Dựa trên điều này, chúng tôi có thể chứng minh rằng bất kỳ chương trình đánh máy tốt nào cũng chấm dứt. Không bao giờ có tình huống chương trình sẽ bị kẹt hoặc lặp mãi mãi. Điều này không thể chứng minh được trong phép tính lambda bình thường bởi vì, điều đó không đúng.
Hãy suy nghĩ về điều này, chúng ta có thể sử dụng các hệ thống loại để đảm bảo rằng chương trình của chúng ta không lặp lại mãi mãi, khá tuyệt phải không?
Đường vòng thành các loại động
Các hệ thống kiểu động có thể cung cấp các đảm bảo giống hệt như các hệ thống kiểu tĩnh, nhưng trong thời gian chạy thay vì thời gian biên dịch. Trên thực tế, vì nó là thời gian chạy, bạn thực sự có thể cung cấp thêm thông tin. Tuy nhiên, bạn mất một số đảm bảo, đặc biệt là về các thuộc tính tĩnh như chấm dứt.
Vì vậy, các loại động không loại trừ các chương trình nhất định, mà thay vào đó định tuyến các chương trình không đúng định dạng đến các hành động được xác định rõ, như ném ngoại lệ.
TLD
Vì vậy, dài và ngắn của nó, là loại hệ thống loại trừ các chương trình nhất định. Nhiều chương trình bị hỏng theo một cách nào đó, do đó, với các hệ thống loại, chúng tôi tránh các chương trình bị hỏng này.