1 điểm bởi GN⁺ 2024-09-27 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2024-09-27
Ý 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:

    • Có thể dùng dấu gạch dưới trong literal
    • Có thể chỉ định phạm vi case
    • Có thể dùng đối số có tên
    • Có thể dùng hàm lồng nhau
    • Có thể dùng hàm lồng nhau tĩnh
    • Cung cấp tính năng tương tự generator
  • Trì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àm

  • Trì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 danh

  • Ngườ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 printf và 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