Ngôn ngữ lập trình là ký hiệu được thiết kế để truyền hướng dẫn đến máy. Theo định nghĩa đó, cả C ++ và HTML đều là ngôn ngữ lập trình, như ký hiệu Joseph Marie Jacquard được sử dụng vào năm 1801 để lập trình máy dệt của mình .
Tuy nhiên, với sự phổ biến của các ngôn ngữ được sử dụng để cấu trúc và / hoặc mô tả dữ liệu, định nghĩa của ngôn ngữ lập trình đã thay đổi để chỉ bao gồm các ngôn ngữ có khả năng diễn đạt thuật toán. Đây là định nghĩa phổ biến hơn hiện nay và nó loại trừ các ngôn ngữ như HTML hoặc XML.
Trọng tâm của định nghĩa hiện tại là khái niệm về sự hoàn thiện của Turing . Hầu hết các ngôn ngữ lập trình đều hoàn chỉnh Turing và tính hoàn chỉnh của Turing thường được trích dẫn là một đặc điểm quan trọng tách biệt ngôn ngữ lập trình với bất kỳ ngôn ngữ máy tính nào khác. Điều này là đủ tốt như một quy tắc chung, nhưng không hoàn toàn chính xác:
- Một số ngôn ngữ hoàn chỉnh không Turing được coi là ngôn ngữ lập trình, ví dụ: Từ thiện .
- Một số ngôn ngữ thường không được coi là ngôn ngữ lập trình là Turing hoàn chỉnh, ví dụ XSLT .
- Turing hoàn thiện một mình không nói nhiều về tính hữu ích của ngôn ngữ .
Tùy thuộc vào ngữ cảnh, bạn có thể chọn bất kỳ định nghĩa nào bạn muốn.
Chỉnh sửa:
Nói cho rõ hơn, việc triển khai một ngôn ngữ không tạo ra các đặc điểm cho chính ngôn ngữ đó, ví dụ: Thông số kỹ thuật của ngôn ngữ có thể định nghĩa một ngôn ngữ hoàn chỉnh, ai đó có thể thực hiện ngôn ngữ đó một cách ngớ ngẩn. Tuy nhiên, việc triển khai này không hoàn thành không có nghĩa là ngôn ngữ không hoàn chỉnh (thay vào đó có nghĩa là việc triển khai không tuân thủ). Các chi tiết của một ngôn ngữ và các chi tiết của việc thực hiện một ngôn ngữ cụ thể sẽ được công nhận là những điều riêng biệt, đây là lý do tại sao việc gọi một ngôn ngữ được giải thích hoặc biên dịch, v.v.