Statically typed language
Một ngôn ngữ được gọi là Statically Typed nếu kiểu của biến được biết tại thời điểm biên dịch. Đối với một số ngôn ngữ, người lập trình phải chỉ định kiểu biến là gì (ví dụ: Java, C, C ++); các ngôn ngữ khác cung cấp một số dạng suy luận kiểu, khả năng của hệ thống kiểu suy ra kiểu của một biến (ví dụ: OCaml, Haskell, Scala, Kotlin)
Ưu điểm chính ở đây là tất cả các Statically Typed có thể được thực hiện bởi trình biên dịch, và do đó, rất nhiều lỗi nhỏ được phát hiện sớm.
Ví dụ: C, C#, C++, Java, Rust, Go, Scala
Dynamically typed language
Một ngôn ngữ xem là Dynamically Typed nếu kiểu của các biến được liên kết với các giá trị vào thời gian chạy không cần được xác định trước. Một lập trình viên có thể viết nhanh hơn một chút vì bạn không phải chỉ định kiểu mọi lúc.
Ví dụ: Perl, Ruby, Python, PHP, JavaScript
Hầu hết các ngôn ngữ kịch bản (scripting language) đều có tính năng này vì không có trình biên dịch nào để thực hiện kiểm tra kiểu tĩnh, nhưng bạn có thể thấy mình đang tìm kiếm một lỗi do trình thông dịch hiểu sai kiểu của một biến. May mắn thay, các tập lệnh có xu hướng nhỏ nên khả năng lỗi xảy ra không quá nhiều.
Hầu hết các ngôn ngữ được nhập động đều cho phép bạn cung cấp thông tin kiểu, nhưng không bắt buộc. Một ngôn ngữ hiện đang được phát triển, là Rascal, có cách tiếp cận kết hợp cho phép nhập động trong các hàm nhưng bắt buộc phải khai kiểu tĩnh cho chữ ký hàm.