Những gì bạn muốn tồn tại và là một lĩnh vực nghiên cứu khổng lồ: đó là toàn bộ lý thuyết về ngôn ngữ lập trình.
Nói một cách lỏng lẻo, bạn có thể xem tính toán theo hai cách. Bạn có thể nghĩ về máy móc , hoặc bạn có thể nghĩ về ngôn ngữ .
Một máy về cơ bản là một số loại điều khiển hữu hạn được tăng cường với một số bộ nhớ (có thể không bị ràng buộc). Đây là lý do tại sao các lớp TOC giới thiệu đi từ automata hữu hạn đến automata đẩy xuống máy Turing --- mỗi lớp có một điều khiển hữu hạn và thêm một số bộ nhớ cho nó. (Ngày nay, điều khiển hữu hạn thường bị hạn chế nhiều hơn, như trong các mô hình mạch.) Điều cốt yếu là điều khiển hữu hạn được đưa ra phía trước, và tất cả cùng một lúc.
Một ngôn ngữ là một cách để xác định một gia đình toàn bộ điều khiển, theo một cách sáng tác. Bạn có các hình thức nguyên thủy cho các điều khiển cơ bản và các toán tử để xây dựng các điều khiển lớn hơn từ các điều khiển nhỏ hơn. Ngôn ngữ nguyên thủy, tính toán lambda, trên thực tế chỉ định không có gì ngoài kiểm soát - điều duy nhất bạn có thể xác định là trừu tượng hóa hàm, ứng dụng và tham chiếu biến.
Bạn có thể chuyển qua lại giữa hai chế độ xem này: -theorem về cơ bản là bằng chứng cho thấy máy Turing có thể thực hiện trừu tượng hóa chức năng và ứng dụng, và mã hóa Church chứng minh rằng phép tính lambda có thể mã hóa dữ liệu. Nhưng có cả nội dung không cần thiết trong cả hai định lý này, và vì vậy bạn không nên phạm sai lầm khi nghĩ rằng hai cách hiểu tính toán là như nhau.snm
Các nhà nghiên cứu về độ phức tạp và thuật toán thường lấy máy móc làm cơ bản, bởi vì họ quan tâm đến chi phí và kết quả khả thi . Để phóng đại một chút, câu hỏi nghiên cứu cơ bản mà họ có là:
Là gì mạnh mẽ nhất máy có thể giải quyết một loại vấn đề?
Các nhà nghiên cứu ngôn ngữ lấy ngôn ngữ làm nền tảng, bởi vì chúng tôi quan tâm đến kết quả biểu cảm và không thể thực hiện được . Với một cường điệu tương tự, câu hỏi nghiên cứu cơ bản của chúng tôi là:
Là gì diễn cảm nhất ngôn ngữ mà quy ra một loại hành vi xấu?
Bên cạnh, lưu ý làm thế nào hai hàng hóa mỗi loại giá trị lý thuyết trực tiếp xung đột! Làm việc tốt trong các thuật toán và độ phức tạp cho phép bạn giải quyết một vấn đề khó hơn, sử dụng ít tài nguyên hơn. Làm việc tốt trong các ngôn ngữ cho phép lập trình viên làm nhiều việc hơn, trong khi cấm nhiều hành vi xấu hơn. (Xung đột này về cơ bản là tại sao nghiên cứu khó khăn.)
Bây giờ, bạn có thể hỏi tại sao nhiều loại Lý thuyết A không sử dụng ngôn ngữ hoặc tại sao nhiều nhà nghiên cứu Lý thuyết B không sử dụng máy móc. Lý do phát sinh từ hình dạng của câu hỏi nghiên cứu cơ bản.
Lưu ý rằng câu hỏi nghiên cứu cơ bản được cách điệu trong thuật toán / độ phức tạp là câu hỏi ràng buộc thấp hơn - bạn muốn biết rằng bạn có giải pháp tốt nhất và không có cách nào có thể làm tốt hơn, cho dù bạn có thông minh đến đâu. Một định nghĩa ngôn ngữ sửa chữa các phương tiện của thành phần chương trình , và vì vậy nếu bạn chứng minh rằng ràng buộc thấp hơn với một mô hình ngôn ngữ, thì bạn có thể bị bỏ lại câu hỏi liệu có thể làm gì đó tốt hơn nếu bạn mở rộng ngôn ngữ của mình với một số ngôn ngữ tính năng mới. Một mô hình máy cung cấp cho bạn toàn bộ điều khiển trong một lần và vì vậy bạn biết mọi thứ máy có thể làm ngay từ đầu.
Nhưng thông số kỹ thuật của máy chính xác là điều sai lầm khi nói những điều thú vị về việc ngăn chặn hành vi xấu. Một cỗ máy cung cấp cho bạn toàn bộ điều khiển từ trước, nhưng biết rằng một chương trình cụ thể là tốt hay xấu không giúp ích gì cho bạn khi bạn muốn mở rộng nó hoặc sử dụng nó như một chương trình con - như epigram của Perlis nói, "Mỗi chương trình là một một phần của một số chương trình khác và hiếm khi phù hợp. " Vì các nhà nghiên cứu ngôn ngữ quan tâm đến việc nói những điều về toàn bộ các lớp chương trình, ngôn ngữ phù hợp hơn nhiều cho mục đích.