Lý lịch
Trang Wikipedia về Syntactic Sugar tuyên bố:
Trong khoa học máy tính, cú pháp đường là cú pháp trong một ngôn ngữ lập trình được thiết kế để làm cho mọi thứ dễ đọc hoặc diễn đạt hơn. Nó làm cho ngôn ngữ "ngọt ngào" hơn cho con người sử dụng: mọi thứ có thể được thể hiện rõ ràng hơn, chính xác hơn hoặc theo một phong cách khác mà một số người có thể thích.
Tôi thực sự không hiểu sự khác biệt giữa Syntactic Sugar và Syntax.
Tôi đánh giá cao điểm mà phiên bản có đường có thể rõ ràng hơn, súc tích hơn, có thể làm sôi một số nồi hơi. Nhưng tôi cảm thấy ở một mức độ nào đó, tất cả các cú pháp về cơ bản đang làm điều đó để hình thành một sự trừu tượng hóa về những gì mã được biên dịch xuống.
Từ cùng một trang Wikipedia:
Các bộ xử lý ngôn ngữ, bao gồm trình biên dịch, máy phân tích tĩnh và tương tự, thường mở rộng các cấu trúc có đường thành các cấu trúc cơ bản hơn trước khi xử lý, một quá trình đôi khi được gọi là "giải mã".
Như một bài tập suy nghĩ, nếu tôi lấy "thường" trong câu lệnh này có nghĩa là "luôn luôn": Nếu sự khác biệt chỉ là liệu trình biên dịch có "giải mã" cú pháp trước khi chuyển sang giai đoạn tiếp theo hay không, làm thế nào một lập trình viên không biết các bộ phận bên trong của trình biên dịch có biết (hoặc quan tâm) Sugar'd Syntax hay không?
Một câu hỏi rất liên quan trên trang web này "Định nghĩa khắt khe về đường cú pháp?" có một câu trả lời bắt đầu:
IMHO Tôi không nghĩ bạn có thể có định nghĩa về đường cú pháp, bởi vì cụm từ này là BS và có khả năng được sử dụng bởi những người nói về "lập trình viên thực" bằng cách sử dụng "công cụ thực" trên "hệ điều hành thực"
Điều này có thể cho tôi thấy rằng có lẽ không có sự khác biệt lớn đối với người viết mã sử dụng ngôn ngữ? Có lẽ sự khác biệt chỉ cảm nhận được đối với người viết trình biên dịch? Mặc dù có thể có những trường hợp hữu ích cho người viết mã sử dụng ngôn ngữ để biết những gì thuộc về Syntactic Sugar? (Nhưng có lẽ trong thực tế, bất kỳ diễn ngôn nào về chủ đề này đều có xu hướng sử dụng thuật ngữ này như mồi lửa?)
Trọng tâm của câu hỏi
Vì vậy, ... phiên bản ngắn của câu hỏi:
- Có sự khác biệt thực sự giữa Syntax và Syntactic Sugar?
- Nó quan trọng với ai?
Thực phẩm bổ sung cho suy nghĩ
Phần thưởng về mâu thuẫn chủ đề:
Trên trang Wikipedia, một ví dụ được đưa ra:
Ví dụ, trong ngôn ngữ C,
a[i]
ký hiệu là đường cú pháp cho*(a + i)
Trong khi đó, một câu trả lời khác cho câu hỏi được liên kết ở trên nói về cùng một ví dụ:
Bây giờ hãy xem xét
a[i] == *(a + i)
. Hãy suy nghĩ về bất kỳ chương trình C nào sử dụng mảng theo bất kỳ cách thực chất nào.
Và tóm tắt rằng:
Các
[]
ký hiệu tạo điều kiện cho sự trừu tượng này. Nó không phải là cú pháp đường.
Kết luận ngược lại cho cùng một ví dụ!