Các phần mở rộng ngôn ngữ bị thất lạc của High C của MetaWare
Trình biên dịch C trong thập niên 1980
- Vào thập niên 1980, nhiều công ty nhỏ cạnh tranh với nhau và cung cấp nhiều phần mở rộng ngôn ngữ khác nhau
- Phar Lap đã phát triển bộ mở rộng DOS có thể tận dụng bộ xử lý 80386 32-bit, và MetaWare đã port trình biên dịch High C để phục vụ mục đích này
- Fujitsu đã tích hợp bộ mở rộng DOS của Phar Lap vào nền tảng FM TOWNS, và High C trở thành trình biên dịch C mặc định của nền tảng này
Những phần mở rộng ngôn ngữ độc đáo của High C
- High C không chỉ bao gồm các phần mở rộng dành riêng cho DOS mà còn có nhiều phần mở rộng ngôn ngữ đa dạng hướng đến người dùng
- Một số tính năng chỉ được đưa vào tiêu chuẩn chính thức sau nhiều thập kỷ, và một số khác vẫn chưa tồn tại trong C hoặc C++
Dùng dấu gạch dưới trong số literal
- Có thể dùng dấu gạch dưới để phân tách các số literal dài cho dễ đọc
- C++ đã đưa tính năng này vào từ C++14, còn C thì đưa vào từ C23
Đối số có nhãn
- Có thể gắn nhãn cho đối số khi gọi các hàm có nhiều tham số
- Tương tự tính năng phổ biến của Python, và nếu có nhãn đối số thì có thể chỉ định tham số không phụ thuộc vào thứ tự
- C tiêu chuẩn và C++ tiêu chuẩn hiện vẫn chưa có tính năng này
case theo phạm vi
- Cung cấp tính năng khớp một phạm vi giá trị giống như Pascal
- C tiêu chuẩn và C++ tiêu chuẩn không có tính năng này
Hàm lồng nhau
- Có thể khai báo lồng một hàm khác bên trong một hàm
- Hàm lồng nhau có thể được khai báo với kiểu "giá trị hàm đầy đủ", hoạt động như một closure không thoát ra ngoài
- Cung cấp cách hiện thực hoàn chỉnh hơn phần mở rộng hàm lồng nhau của GCC
- C tiêu chuẩn hiện vẫn chưa có tính năng hàm lồng nhau chính thức
Generator
- Hỗ trợ coroutine generator theo phong cách Python
- Hàm generator có thể sinh ra nhiều giá trị, và có thể xử lý tuần tự từng giá trị bằng cú pháp vòng lặp
for mới
- Cho phép các tương tác phức tạp với tính năng hàm lồng nhau
- Khả năng C tiêu chuẩn tích hợp tính năng này là rất thấp
Tóm tắt của GN⁺
- Trình biên dịch High C của MetaWare đã cung cấp nhiều phần mở rộng ngôn ngữ đa dạng trong thập niên 1980, giúp tăng mạnh khả năng biểu đạt của ngôn ngữ C
- Một số tính năng chỉ được đưa vào tiêu chuẩn chính thức sau nhiều thập kỷ, và một số khác vẫn chưa tồn tại trong C hoặc C++
- Những tính năng nâng cao như generator và hàm lồng nhau rất khó bắt gặp ngay cả trong nhiều ngôn ngữ lập trình ngày nay
- Bài viết này giúp hiểu rõ hơn về lịch sử và quá trình phát triển của ngôn ngữ C, đồng thời mang lại những góc nhìn thú vị về thiết kế ngôn ngữ lập trình
1 bình luận
Ý kiến trên Hacker News
Năm 2011 đã viết
forđiều khiển bằng iterator. Khi đó đã tưởng tượng trường hợp nó được đưa vào tiêu chuẩn C++Có sở hữu High C/C++ Language Reference
Các tính năng được ngôn ngữ D (hoặc Das BetterC) cung cấp:
caseTrình biên dịch C
lcc-winđã bổ sung nạp chồng toán tử, đối số hàm mặc định và nạp chồng hàmTrình biên dịch Plan 9 C đã đưa vào nhiều phần mở rộng ngôn ngữ, và một số trong đó đã được thêm vào tiêu chuẩn C
Hiện tại GCC hỗ trợ cờ
-fplan9-extensions, cung cấp các tính năng như tự động chuyển đổi con trỏ struct thành trường ẩn danhNgười đưa các tính năng này vào thực sự đã đi trước thời đại. Tuy nhiên, thật tiếc là chúng không ảnh hưởng được đến tiêu chuẩn
Nội dung liên quan trước đây đã từng được bàn trên Hacker News
Có người thắc mắc liệu có bản sao PDF hay không
Chuỗi literal trong mã ví dụ kết thúc bằng ¥n thay vì \n là do code page Shift-JIS
Generator gợi nhớ đến câu hỏi về vòng lặp nội bộ/bên ngoài của Rust và
try_fold()Cảm giác typography của cuốn sách vừa đẹp vừa kinh khủng cùng lúc
Không rõ lắm về quy tắc ký pháp tiếng Nhật hay kerning, nhưng có vẻ như họ đã ép một phông chữ biến độ rộng vào các ô đơn cách
Thật tốt vì ví dụ mã không dùng phông 8pt
Có người thắc mắc cuốn sách được viết bằng tiếng Nhật hay được viết bằng tiếng Anh rồi dịch sang tiếng Nhật
Nếu là của Fujitsu thì khả năng cao là được viết bằng tiếng Nhật. Chất lượng tiếng Anh trong câu
printfvà chú thích mã của một người không phải bản ngữ khá ấn tượngĐặc biệt, các tính năng liên quan đến generator vào thời điểm đó là cực kỳ đi trước thời đại
Cũng có thể điều đó khả thi vì Fujitsu không phải đi qua quy trình tiêu chuẩn hóa. Nhưng đó cũng là lý do những phần mở rộng này được tái khám phá và tái phát minh trong C/C++ hiện đại