Bây giờ, cách tiếp cận KISS đối với các ngôn ngữ lập trình là một khái niệm buồn cười, ít nhất là nếu bạn coi ngôn ngữ lập trình là một lớp trừu tượng cho tập lệnh của CPU, v.v. Nếu bạn không định nghĩa "KISS" chặt chẽ hơn. Tôi chỉ nói ở đây, rằng một chiếc xe bò được KISS áp dụng cho chiếc xe một cách đầy đủ nhất.
Bây giờ một cách giải thích khác về KISS có thể là một cái gì đó như "được thực hiện một cách thông minh mà không cần đồ trang trí và không quá phức tạp". Đặc biệt người ta có thể lập luận rằng, không nên có quá nhiều trường hợp cụ thể cho những điều tương tự, v.v. Thông thường toán học khá tốt trong việc làm sôi sục mọi thứ theo bản chất của nó, và - tự hỏi - các nhà toán học cũng đã dành thời gian suy nghĩ về lập trình và máy tính. .
Đối với lập trình, tồn tại 2 mô hình trừu tượng khá nổi tiếng:
- Một là máy turing xác định một máy và một mô hình hướng dẫn đơn giản có thể tính toán mọi thứ mà máy tính có thể làm.
- Một cái khác là Lambda-Tính của Church et. al. đó là sức mạnh tương đương
Điều thú vị là: Mặc dù máy turing khá đơn giản trong cách bố trí, nhưng nó không phải là một hệ thống dễ xử lý và tôi không nghĩ rằng nó đủ điều kiện cho "KISS thông minh". Nhưng Lambda Tính có liên quan nhiều hơn đến các ngôn ngữ lập trình mà chúng ta biết - và với các tính năng tiên phong của Lisp và Scheme của phép tính lambda, nó đã đi vào rất nhiều ngôn ngữ.
Lisp và Scheme thực sự đơn giản, ít nhất là cú pháp khôn ngoan. Cú pháp là một vấn đề lớn với các ngôn ngữ lập trình (có lẽ là lý do tại sao chúng được phát minh lại mọi lúc). Trong trường hợp của C ++, bộ não con người gần như không thể dự đoán được cách một số dòng nguồn được trình biên dịch diễn giải.)
Lisps đang giảm độ phức tạp cú pháp hoàn toàn bằng cách giới thiệu một hình thức phổ biến cho các lệnh:
(command param1 param2 ...)
Đây có thể là một cuộc gọi phương thức, chẳng hạn như
(max 1 2 3 4)
cũng như một nhánh if, vòng lặp, v.v.
(if (< 1 2)
(write 4)
(write 5))
(tất cả mã ở đây là giả thuyết Lisp / Phương ngữ bất khả tri)
Hình thức
(command param1 param2 ...)
cũng có thể được hiểu là một danh sách
(item1 item2 item3)
Và đó là cơ sở cho sự đơn giản và vẻ đẹp của Lisps. Bởi vì các danh sách lồng nhau (như trong if
ví dụ tuyên bố) tạo thành cây và những cái đó có thể dễ dàng hiểu được cả bằng máy và bởi con người trước máy.
Một tính năng khác của Lisps là các macro tôi sẽ không đi sâu vào chi tiết bẩn ở đây, nhưng vì không có sự khác biệt về cú pháp giữa các lệnh gọi hàm thông thường và "Cú pháp (trứng cho các vòng lặp, khai báo biến, v.v.", mọi thứ mà trình phân tích cú pháp phải xử lý khác ngôn ngữ lập trình) bạn có thể tạo cú pháp của riêng mình. Macros về bản chất là Thao tác của cây cấu thành chương trình của bạn.
Tôi nghĩ Lisp có một KISS để lập trình. Việc bạn có thể thao tác cú pháp bằng cách sử dụng macro đã dẫn đến một hiện tượng mà Lisp đã phát triển khá linh hoạt. Cần một tính năng Ngôn ngữ mới như - giả sử hướng đối tượng - chỉ cần viết hệ thống OOP bằng macro!
Trong khi C được mở rộng vòng 2 lần với các tính năng OOP (C ++, Obj. C) Lisp đã được mở rộng nhiều lần, cuối cùng đã có người chiến thắng.
Đó là một cách giải thích khác về Lisp, nó phát triển (xem Clojure và Clojurescript để biết về Đột biến mới thú vị).
Đối với các thuộc tính KISS của nó, Lisps được ưa chuộng như một số ngôn ngữ giảng dạy. Giống như Fogus phác thảo trong bản thiết kế ngôn ngữ giáo dục của mình ( http://blog.fogus.me/2013/01/21/enfield-a-programming-lingu-design-for-pedagogy/ )
Để bắt đầu, tôi tin tưởng mạnh mẽ rằng khi học mới, và đôi khi các chủ đề phức tạp sẽ gây bất lợi cho học sinh khi quá tải các quy tắc cú pháp phù phiếm. Do đó, Enfield được thiết kế với các quy tắc cú pháp tối thiểu và tối thiểu hơn cú pháp giống Lisp.