Khác biệt giữa bản sửa đổi của “Kiểu mạnh và kiểu yếu”

Nội dung được xóa Nội dung được thêm vào
Rescuing 0 sources and tagging 1 as dead.) #IABot (v2.0.7
Đã cứu 1 nguồn và đánh dấu 1 nguồn là hỏng.) #IABot (v2.0.8
Dòng 16:
Ví dụ: Aahz Maruch viết rằng "''việc ép kiểu xảy ra khi bạn có một ngôn ngữ kiểu tĩnh và bạn dùng các tính năng có từ cú pháp để buộc nó sử dụng đối tượng kiểu này như kiểu khác (như việc sử dụng con trỏ void* khá phổ biến trong C). Việc ép kiểu thường được coi là dấu hiệu của kiểu yếu. Trong khi đó, việc chuyển đổi kiểu tạo ra một đối tượng hoàn toàn mới ở kiểu thích hợp''"<ref name="artima">[http://www.artima.com/weblogs/viewpost.jsp?thread=7590 Typing: Strong vs. Weak, Static vs. Dynamic]{{verify credibility|date=October 2012}}</ref>
 
Một ví dụ khác: GCC miêu tả việc này là ''chơi kiểu'' (type-punning) và cảnh báo rằng nó sẽ ''bẻ vỡ tính chặt chẽ trong việc [[ánh xạ]] dữ liệu''. [[Thiago Macieira]] nêu ra nhiều vấn đề có thể xảy ra khi việc chơi kiểu khiến [[trình biên dịch]] sai lầm trong việc tối ưu hoá chương trình xuất.<ref>[{{Chú thích web |url=http://blog.qt.digia.com/blog/2011/06/10/type-punning-and-strict-aliasing/ |ngày truy cập=2013-11-05 |tựa đề=Type-punning and strict-aliasing, Thiago Macieira] |archive-date=2014-10-27 |archive-url=https://web.archive.org/web/20141027043832/http://blog.qt.digia.com/blog/2011/06/10/type-punning-and-strict-aliasing/ }}</ref>
 
Tuy việc tập trung vào cú pháp dễ hơn, nhưng lý luận của Macieira thực sự là về ngữ nghĩa chương trình. Có nhiều ngôn ngữ cho phép việc chuyển kiểu ngầm, nhưng khác là theo một cách đảm bảo tính an toàn về kiểu. Ví dụ: cả C++ và C# cho phép chương trình định nghĩa các toán tử để chuyển đổi giá trị từ kiểu này sang kiểu khác theo một cách có ý nghĩa (như từ số thực sang số nguyên: ta tiến hành làm tròn, kiểm tra phạm vi giá trị, tạo ra biến nguyên mới và gán giá trị đã xử lý). Khi một trình dịch gặp thao tác chuyển như vậy, nó coi thao tác này như một phép gọi hàm thông thường. Trái lại, việc chuyển một giá trị sang kiểu ''void*'' của C là một thao tác không an toàn nhưng trình biên dịch lại không phát hiện được.
Dòng 36:
=== Kiểm tra kiểu tĩnh ===
 
Trong bài viết [[typeful programming|Typeful Programming]] của [[Luca Cardelli]] <ref>ftp://gatekeeper.research.compaq.com/pub/DEC/SRC/research-reports/SRC-045.pdf{{Liên kết hỏng|date=2021-03-15 |bot=InternetArchiveBot }} trang 3</ref>, một "hệ thống kiểu mạnh" được mô tả là một hệ thống trong đó lỗi về kiểu trong quá trình chạy không thể xảy ra. Nói cách khác, sự tồn tại của lỗi chạy chưa được phát hiện được coi là tính ''an toàn'' hay ''an toàn về kiểu''; những bài viết đầu tiên của [[C. A. R. Hoare|Tony Hoare]] gọi đặc tính này là ''tính bảo mật''.
 
=== Tính dự đoán được ===