1 điểm bởi GN⁺ 2023-10-17 | 1 bình luận | Chia sẻ qua WhatsApp
  • Bài viết lập luận rằng, trái với niềm tin phổ biến, C không phải là một ngôn ngữ cấp thấp
  • Tác giả David Chisnall cho rằng các lỗ hổng Meltdown và Spectre xuất phát từ khả năng của bộ xử lý trong việc thực thi lệnh vượt qua kiểm tra truy cập, và tính năng này được thêm vào để khiến các lập trình viên C tin rằng họ đang lập trình bằng một ngôn ngữ cấp thấp.
  • Chisnall lập luận rằng việc một ngôn ngữ "gần với kim loại" có nghĩa là nó phải cung cấp một máy trừu tượng có thể dễ dàng ánh xạ tới các trừu tượng do nền tảng đích phơi bày, và ông cho rằng điều này không đúng với C.
  • Tác giả cho rằng nguyên nhân gốc rễ của các lỗ hổng Spectre và Meltdown là do các kiến trúc sư bộ xử lý cố tạo ra những bộ xử lý nhanh phơi bày các máy trừu tượng như PDP-11, từ đó khiến các lập trình viên C tiếp tục tin rằng ngôn ngữ của họ gần với phần cứng nền tảng.
  • Chisnall cho rằng để chạy mã C nhanh cần đến các phép biến đổi biên dịch phức tạp và hàng nghìn năm-người để tạo ra những trình biên dịch đủ thông minh.
  • Tác giả đề xuất rằng thuộc tính cốt lõi của một ngôn ngữ cấp thấp là lập trình viên phải có thể dễ dàng hiểu cách máy trừu tượng của ngôn ngữ được ánh xạ tới cỗ máy vật lý bên dưới, và ông cho rằng điều này không đúng với C.
  • Chisnall kết luận rằng có lẽ đã đến lúc ngừng cố làm cho mã C chạy nhanh hơn và thay vào đó suy nghĩ về việc mô hình lập trình nên trông như thế nào trên các bộ xử lý nhanh. Ông gợi ý rằng các bộ xử lý được thiết kế thuần túy vì tốc độ có thể sẽ hỗ trợ số lượng lớn luồng, có các đơn vị vector rộng và một mô hình bộ nhớ đơn giản hơn nhiều.

1 bình luận

 
GN⁺ 2023-10-17
Ý kiến Hacker News
  • Bài viết cho rằng C không phải là ngôn ngữ cấp thấp vì có quản lý bộ nhớ thủ công và các lời gọi tường minh tới allocator.
  • Một số người bình luận cho rằng với những ai hiểu rõ và sử dụng thành thạo, C thực sự là một ngôn ngữ cấp thấp.
  • Có ý kiến phản đối lập luận của tác giả rằng tập lệnh CPU nên bộc lộ nhiều hơn cách triển khai của CPU, viện dẫn những nỗ lực thất bại trong quá khứ.
  • Khái niệm từ cấp thấp đến cấp cao có vẻ là một phổ liên tục, và C nằm ở phía thấp hơn trong số các ngôn ngữ phơi bày các nguyên thủy của máy như quản lý bộ nhớ và luồng.
  • Khẳng định của bài viết rằng lập trình song song không khó bị một số người bình luận xem là gây hiểu lầm.
  • Tiền đề của bài viết rằng máy tính không giống kiến trúc PDP-11 có vẻ đúng hơn bao giờ hết, nhưng kết luận về việc hình dung ra các bộ xử lý phi-C dường như không thật sự thuyết phục.
  • Một số người bình luận cho rằng nhận định của bài viết rằng máy tính không phải là PDP-11 nhanh hơn là đúng, nhưng việc điều đó có liên quan đến C thì lại là sai.
  • Lập luận của bài viết rằng C không phải là ngôn ngữ cấp thấp, dựa trên các đặc điểm như padding trong struct và việc signed overflow là hành vi không được định nghĩa, có vẻ mang tính xây dựng.
  • Lập luận rằng do sự thống trị của C, các nhà thiết kế CPU đương nhiên phải tạo ra thứ có thể chạy C một cách tự nhiên nghe có lý, nhưng chưa rõ điều này liên hệ thế nào với lập luận đầu tiên và tiêu đề bài viết.
  • Nếu kỹ thuật tinh vi của CPU hiện đại khiến C không còn là ngôn ngữ "cấp thấp", thì điều đó cũng áp dụng tương tự cho cả ngôn ngữ assembly.
  • Bài viết khiến một số người bình luận liên tưởng đến VLIW, nơi một lệnh VLIW có thể chứa nhiều lệnh độc lập có thể được thực thi song song.