Sự khác biệt không phải là về tuyên bố loại trên các biến. Đó là một chút tinh tế hơn (và tốc độ Eric Lippert, tôi nghĩ rằng thuật ngữ được xác định hợp lý). Sự khác biệt là trong một ngôn ngữ được đánh máy mạnh, mỗi biểu thức có một loại có thể được xác định tại thời gian biên dịch và chỉ hoạt động phù hợp với loại đó được phép.
Trong một ngôn ngữ không được nhập (không được nhập sai "cho người phê bình", được nhập động "cho người hâm mộ), điều đó không đúng. Ngôn ngữ cho phép bất kỳ thao tác nào được thực hiện trên bất kỳ loại nào, với điều kiện khá đáng kể rằng thao tác có thể thất bại. Tức là, trong khi ngôn ngữ có thể cho phép hoạt động, thời gian chạy có thể không hoạt động.
Lưu ý rằng có thể có ngôn ngữ được đánh máy mạnh mà không yêu cầu khai báo kiểu ở mọi nơi. Thật vậy, không có ngôn ngữ gõ mạnh nào. Hãy xem xét bit này của Java:
String s = "hellO";
int l = s.getBytes().length;
Trình biên dịch quyết định rằng .length
là hợp pháp ở đó? Nó hợp pháp vì nó đang được sử dụng trên byte[]
. Nhưng không có tuyên bố về bất cứ điều gì như là một byte[]
ở đây.Thay vào đó, trình biên dịch biết rằng s
là String
và khi bạn gọi getBytes()
trên số String
, bạn sẽ nhận được byte[]
. Nó bắt nguồn từ những sự kiện đó là loại s.getBytes()
là một số byte[]
và do đó việc yêu cầu length
của pháp luật là hợp pháp.
Một số ngôn ngữ có hệ thống kiểu phức tạp hơn Java cho phép trình biên dịch phỏng đoán nhiều hơn điều này. Ví dụ, trong Scala, bạn có thể nói:
val s = "hello"
val l = s.getBytes().length
Và trình biên dịch sẽ suy ra các loại s
và l
, cũng như của các biểu thức trung gian.
Ngôn ngữ có cách nhập mạnh mẽ nhưng giới hạn nhân tạo về kiểu suy luận yêu cầu khai báo kiểu thừa (như Java) được mô tả là có nhập tệp kê khai, vì loại phải được hiển thị. vào sự tồn tại, đó là một cách ưa thích để viết ra.
Nguồn
2013-06-12 18:13:26
Tôi tự hỏi, nếu câu hỏi này có thể là một phù hợp tốt hơn cho nơi nào đó như [máy tính lý thuyết Khoa học] (http://cstheory.stackexchange.com/) hoặc [Lập trình viên] (http://programmers.stackexchange.com/) ...? – summea
Yea, tôi không biết phải đặt nó ở đâu. Tôi sẽ thêm nó. – Josh
Trong C, hoàn toàn hợp pháp để thêm 'int' vào' float'. –