Paul Graham đã viết rằng "The unusual thing about Lisp-- in fact, the defining quality of Lisp-- is that it can be written in itself." Nhưng điều đó dường như không có chút bất thường hoặc dứt khoát với tôi. ISTM là ngôn ngữ lập trình được xác định bởi hai thứ: Trình biên dịch hoặc thông dịch viên, định nghĩa cú pháp và ngữ nghĩa cho ngôn ngữ của fiat và thư viện chuẩn của nó, xác định mức độ lớn các thành ngữ và kỹ thuật có kỹ năng người dùng sẽ sử dụng khi viết mã bằng ngôn ngữ.Điều gì có nghĩa là "Lisp có thể được viết trong chính nó?"
Với một vài ngoại lệ cụ thể, (các thành viên không phải là C# của gia đình .NET), các thư viện chuẩn của hầu hết các ngôn ngữ được viết bằng ngôn ngữ đó vì hai lý do rất tốt: vì nó sẽ chia sẻ cùng một tập hợp các định nghĩa cú pháp, các quy ước gọi điện, và "nhìn và cảm nhận" chung của ngôn ngữ, và bởi vì những người có khả năng viết một thư viện chuẩn cho một ngôn ngữ lập trình là người dùng của nó, và đặc biệt là các nhà thiết kế của nó. Vì vậy, không có gì độc đáo ở đó; đó là tiêu chuẩn khá.
Và một lần nữa, không có gì độc đáo hoặc bất thường về trình biên dịch của ngôn ngữ được viết trong chính nó. C trình biên dịch được viết bằng C. Pascal trình biên dịch được viết bằng Pascal. Trình biên dịch C# của Mono được viết bằng C#. Heck, thậm chí some scripting languages có triển khai "tự viết".
Vì vậy, điều gì có nghĩa là Lisp không bình thường khi được viết vào chính nó?
Như bạn nói, một trình biên dịch tự lưu trữ hoặc thông dịch viên không có tin tức gì cả. Một ngôn ngữ có cây cú pháp trừu tượng * là * mã, mà bản thân nó hoàn toàn có thể thao tác như dữ liệu, ngược lại, là một con vật khác. Quét giấy McCarthy mà Paul Graham đã bình luận, không có câu hỏi hợp lý nào về tính đối xứng này. –
http://stackoverflow.com/questions/1481053/what-is-the-exact-definition-of-a-metacircular-interpreter –