“Rust là tương lai của lập trình hệ thống, C là trình biên dịch mới” - bài phát biểu của một trong những kỹ sư hàng đầu của Intel

Tại Hội nghị thượng đỉnh về công nghệ nguồn mở (OSTS) gần đây Josh Triplett, một kỹ sư cấp cao tại Intel, cho biết công ty của ông quan tâm đến việc Rust đạt được “ngang bằng” với ngôn ngữ C vẫn thống trị các hệ thống và phát triển cấp thấp trong tương lai gần. Trong bài phát biểu của mình Với tựa đề "Intel và Rust: Tương lai của lập trình hệ thống", ông cũng nói về lịch sử lập trình hệ thống, làm thế nào C trở thành ngôn ngữ lập trình hệ thống mặc định, những tính năng nào của Rust mang lại lợi thế cho nó so với C và làm thế nào nó có thể hoàn toàn có thể thay thế C trong lĩnh vực lập trình này.

“Rust là tương lai của lập trình hệ thống, C là trình biên dịch mới” - bài phát biểu của một trong những kỹ sư hàng đầu của Intel

Lập trình hệ thống là việc phát triển và quản lý phần mềm đóng vai trò là nền tảng để tạo các ứng dụng ứng dụng, đảm bảo ứng dụng sau này tương tác với bộ xử lý, RAM, thiết bị đầu vào/đầu ra và thiết bị mạng. Phần mềm hệ thống tạo ra sự trừu tượng đặc biệt dưới dạng giao diện giúp tạo ra phần mềm ứng dụng mà không cần đi sâu vào chi tiết về cách thức hoạt động của phần cứng.

Bản thân Triplett định nghĩa lập trình hệ thống là “bất cứ thứ gì không phải là ứng dụng”. Nó bao gồm những thứ như BIOS, chương trình cơ sở, bộ tải khởi động và nhân hệ điều hành, nhiều loại mã nhúng cấp thấp khác nhau và triển khai máy ảo. Điều thú vị là Triplett tin rằng trình duyệt web cũng là phần mềm hệ thống, vì trình duyệt này từ lâu đã không chỉ “chỉ là một chương trình” mà còn trở thành một “nền tảng cho các trang web và ứng dụng web” độc lập.

Trước đây, hầu hết các chương trình hệ thống, bao gồm BIOS, bộ nạp khởi động và chương trình cơ sở, đều được viết bằng hợp ngữ. Vào những năm 1960, các thử nghiệm bắt đầu cung cấp hỗ trợ phần cứng cho các ngôn ngữ cấp cao, dẫn đến việc tạo ra các ngôn ngữ như PL/S, BLISS, BCPL và ALGOL 68.

Sau đó, vào những năm 1970, Dennis Ritchie đã tạo ra ngôn ngữ lập trình C cho hệ điều hành Unix. Được tạo bằng ngôn ngữ lập trình B, thậm chí không có hỗ trợ đánh máy, C chứa đầy các chức năng cấp cao mạnh mẽ, phù hợp nhất để viết hệ điều hành và trình điều khiển. Một số thành phần của UNIX, bao gồm cả nhân của nó, cuối cùng đã được viết lại bằng C. Sau đó, nhiều chương trình hệ thống khác, bao gồm cơ sở dữ liệu Oracle, phần lớn mã nguồn Windows và hệ điều hành Linux, cũng được viết bằng C.

C đã nhận được sự hỗ trợ to lớn theo hướng này. Nhưng chính xác thì điều gì đã khiến các nhà phát triển chuyển sang sử dụng nó? Triplett tin rằng để thúc đẩy các nhà phát triển chuyển từ ngôn ngữ lập trình này sang ngôn ngữ lập trình khác, trước tiên họ phải cung cấp các tính năng mới mà không làm mất đi các tính năng cũ.

Đầu tiên, ngôn ngữ phải đưa ra những tính năng mới “tương đối ấn tượng”. “Anh ấy không thể tốt hơn được nữa. Ông giải thích rằng cần phải tốt hơn nhiều để chứng minh nỗ lực và thời gian kỹ thuật cần thiết để thực hiện quá trình chuyển đổi. So với hợp ngữ, C có rất nhiều thứ để cung cấp. Nó hỗ trợ hành vi hơi an toàn về kiểu, cung cấp tính di động và hiệu suất tốt hơn với các cấu trúc cấp cao và tạo ra mã tổng thể dễ đọc hơn nhiều.

Thứ hai, ngôn ngữ phải cung cấp hỗ trợ cho các tính năng cũ, có nghĩa là trong lịch sử chuyển đổi sang C, các nhà phát triển phải chắc chắn rằng nó có chức năng không kém ngôn ngữ hợp ngữ. Triplett giải thích: “Một ngôn ngữ mới không thể tốt hơn mà nó còn phải tốt như vậy”. Ngoài việc nhanh hơn và hỗ trợ bất kỳ loại dữ liệu nào mà ngôn ngữ hợp ngữ có thể sử dụng, C còn có cái mà Triplett gọi là "cửa thoát" - cụ thể là nó hỗ trợ chèn mã hợp ngữ vào trong chính nó.

“Rust là tương lai của lập trình hệ thống, C là trình biên dịch mới” - bài phát biểu của một trong những kỹ sư hàng đầu của Intel

Triplett tin rằng C hiện đang trở thành ngôn ngữ hợp ngữ như nhiều năm trước. “C là nhà lắp ráp mới,” anh ấy tuyên bố. Giờ đây, các nhà phát triển đang tìm kiếm một ngôn ngữ cấp cao mới không chỉ giải quyết các vấn đề tích lũy trong C không thể khắc phục được nữa mà còn cung cấp các tính năng mới thú vị. Ngôn ngữ như vậy phải đủ hấp dẫn để khiến các nhà phát triển chuyển sang sử dụng nó, phải an toàn, cung cấp khả năng quản lý bộ nhớ tự động và hơn thế nữa.

“Bất kỳ ngôn ngữ nào muốn tốt hơn C đều phải cung cấp nhiều tính năng hơn là chỉ bảo vệ chống tràn bộ đệm nếu nó thực sự muốn trở thành một giải pháp thay thế hấp dẫn. Các nhà phát triển quan tâm đến khả năng sử dụng và hiệu suất, viết mã dễ hiểu và thực hiện được nhiều công việc hơn với ít dòng hơn. Vấn đề an ninh cũng cần được giải quyết. Dễ sử dụng và hiệu suất đi đôi với nhau. Bạn càng phải viết ít mã để đạt được điều gì đó thì bạn càng có ít cơ hội mắc bất kỳ sai lầm nào, dù có liên quan đến bảo mật hay không,” Triplett giải thích.

So sánh Rust và C

Trở lại năm 2006, Graydon Hoare, một nhân viên của Mozilla, bắt đầu viết Rust như một dự án cá nhân. Và vào năm 2009, Mozilla bắt đầu tài trợ cho việc phát triển Rust cho nhu cầu riêng của mình, đồng thời mở rộng nhóm để phát triển ngôn ngữ này hơn nữa.

Một trong những lý do khiến Mozilla quan tâm đến ngôn ngữ mới là Firefox được viết bằng hơn 4 triệu dòng mã C++ và có khá nhiều lỗ hổng nghiêm trọng. Rust được xây dựng với mục tiêu bảo mật và đồng thời, khiến nó trở thành lựa chọn lý tưởng để viết lại nhiều thành phần của Firefox như một phần của dự án Quantum nhằm thiết kế lại hoàn toàn kiến ​​trúc của trình duyệt. Mozilla cũng đang sử dụng Rust để phát triển servo, một công cụ kết xuất HTML mà cuối cùng sẽ thay thế công cụ kết xuất Firefox hiện tại. Nhiều công ty khác đã bắt đầu sử dụng Rust cho các dự án của họ, bao gồm Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu và nhiều công ty khác.

Rust giải quyết một trong những vấn đề quan trọng nhất của ngôn ngữ C. Nó cung cấp khả năng quản lý bộ nhớ tự động để các nhà phát triển không phải phân bổ thủ công và sau đó giải phóng nó cho mọi đối tượng trong ứng dụng. Điều làm cho Rust khác biệt với các ngôn ngữ hiện đại khác là nó không có trình thu gom rác tự động loại bỏ các đối tượng không sử dụng khỏi bộ nhớ, cũng như không có môi trường thời gian chạy cần thiết để nó hoạt động, như Java Runtime Environment cho Java. Thay vào đó, Rust có các khái niệm về quyền sở hữu, sự vay mượn, tài liệu tham khảo và thời gian tồn tại. “Rust có một hệ thống khai báo các lệnh gọi đến một đối tượng để cho biết chủ sở hữu đang sử dụng nó hay chỉ mượn nó. Nếu bạn chỉ mượn một đối tượng, trình biên dịch sẽ theo dõi điều này và đảm bảo rằng đối tượng gốc vẫn còn nguyên miễn là bạn tham chiếu nó. Rust cũng sẽ đảm bảo rằng đối tượng sẽ bị xóa khỏi bộ nhớ ngay khi quá trình sử dụng hoàn tất, chèn lệnh gọi tương ứng vào mã tại thời điểm biên dịch mà không cần thêm thời gian,” Triplett nói.

Việc thiếu thời gian chạy riêng cũng có thể được coi là một tính năng tích cực của Rust. Triplett tin rằng các ngôn ngữ mà nó chạy rất khó sử dụng làm công cụ lập trình hệ thống. Như anh ấy giải thích: "Bạn phải khởi tạo thời gian chạy này trước khi có thể gọi bất kỳ mã nào, bạn phải sử dụng thời gian chạy này để gọi các hàm và bản thân thời gian chạy này có thể chạy mã bổ sung sau lưng bạn vào những thời điểm không mong muốn."

Rust cũng cố gắng cung cấp chương trình song song an toàn. Các tính năng tương tự giúp bộ nhớ an toàn theo dõi những thứ như luồng nào sở hữu đối tượng nào và đối tượng nào có thể được truyền giữa các luồng và đối tượng nào cần khóa.

Tất cả những tính năng này khiến Rust đủ hấp dẫn để các nhà phát triển chọn nó làm công cụ mới để lập trình hệ thống. Tuy nhiên, về mặt tính toán song song, Rust vẫn kém C một chút.

Triplett dự định thành lập một nhóm làm việc đặc biệt sẽ tập trung giới thiệu những tính năng cần thiết vào Rust để nó hoàn toàn có thể ngang bằng, vượt qua và thay thế C trong lĩnh vực lập trình hệ thống. TRONG chủ đề trên Reddit, dành riêng cho bài phát biểu của mình, anh ấy nói rằng “nhóm FFI/C Parity đang trong quá trình thành lập và chưa bắt đầu làm việc”, hiện tại anh ấy sẵn sàng trả lời bất kỳ câu hỏi nào và trong tương lai anh ấy chắc chắn sẽ công bố kế hoạch trước mắt cho sự phát triển của Rust như một phần sáng kiến ​​của ông dành cho tất cả các bên quan tâm.

Có thể giả định rằng nhóm Parity FFI/C trước hết sẽ tập trung vào việc cải thiện khả năng hỗ trợ đa luồng trong Rust, giới thiệu hỗ trợ cho BFLOAT16, một định dạng dấu phẩy động đã xuất hiện trong bộ xử lý Intel Xeon Scalable mới, cũng như ổn định việc lắp ráp chèn mã.



Nguồn: 3dnews.ru

Thêm một lời nhận xét