Ngôn ngữ lập trình Nature gây tranh cãi về tuyên bố lập trình hệ thống dù sử dụng Garbage Collection

BigGo Editorial Team
Ngôn ngữ lập trình Nature gây tranh cãi về tuyên bố lập trình hệ thống dù sử dụng Garbage Collection

Một ngôn ngữ lập trình mới có tên Nature đã xuất hiện, định vị mình như một giải pháp thay thế lấy cảm hứng từ Go nhằm giải quyết một số hạn chế của Go trong khi vẫn duy trì những điểm mạnh của nó. Ngôn ngữ này đã đạt đến phiên bản sử dụng được ở giai đoạn đầu với các API cú pháp ổn định, nhưng những tuyên bố marketing của nó đã gây ra cuộc thảo luận sôi nổi trong cộng đồng về việc thực sự thế nào mới được coi là một ngôn ngữ lập trình hệ thống.

Nature được tạo ra bởi một developer sử dụng Go hàng ngày nhưng cảm thấy thất vọng với cú pháp quá đơn giản, hệ thống kiểu dữ liệu không đủ mạnh và cách xử lý lỗi cồng kềnh của nó. Ngôn ngữ này kết hợp nhiều tính năng thành công của Go bao gồm goroutines, garbage collection, channels và khả năng cross-compilation, đồng thời bổ sung các cải tiến như union types, generics, pattern matching và xử lý lỗi try/catch.

Cải tiến ngôn ngữ so với Go:

  • Union types và hệ thống kiểu dữ liệu toàn diện
  • Hỗ trợ Generics ngay từ đầu
  • Xử lý lỗi Try/catch thay vì kiểm tra lỗi tường minh
  • Pattern matching với từ khóa match
  • An toàn với giá trị null thông qua nullable types (string?)
  • Khả năng tương tác tốt hơn với C

Tranh cãi về ngôn ngữ lập trình hệ thống

Cuộc thảo luận gay gắt nhất xoay quanh việc phân loại Nature như một ngôn ngữ lập trình hệ thống mặc dù sử dụng garbage collection. Các thành viên cộng đồng đã bày tỏ lo ngại rằng thuật ngữ này đang được sử dụng quá lỏng lẻo, có thể làm xói mòn ý nghĩa của thuật ngữ đó. Những người chỉ trích cho rằng bất kỳ ngôn ngữ nào có garbage collection đều không thể thực sự được coi là phù hợp cho lập trình hệ thống, đặc biệt là cho kernel hệ điều hành nơi mà việc tạm dừng stop-the-world có thể gây ra vấn đề.

Ai sẽ sử dụng một hệ điều hành mà đột nhiên dừng toàn bộ thế giới chỉ vì runtime của một ngôn ngữ ngẫu nhiên nào đó muốn thu gom rác bộ nhớ của nó?

Tác giả của Nature đã thừa nhận những lo ngại này và đồng ý điều chỉnh tài liệu marketing của ngôn ngữ. Tuy nhiên, họ bảo vệ việc sử dụng thực tế các ngôn ngữ có garbage collection trong một số bối cảnh hệ thống nhất định, dẫn chứng kinh nghiệm của chính họ khi sử dụng Go cho các thiết bị IoT như router và TV box chạy trên nhiều kiến trúc khác nhau bao gồm RISC-V, MIPS và các biến thể ARM.

Kiến trúc kỹ thuật và tuyên bố về hiệu suất

Nature tạo sự khác biệt bằng cách tránh phụ thuộc vào LLVM, thay vào đó biên dịch trực tiếp thành mã máy của nền tảng đích. Lựa chọn thiết kế này hứa hẹn tốc độ biên dịch nhanh hơn và xử lý lỗi tùy chỉnh hơn, theo con đường tương tự như Zig. Ngôn ngữ hiện tại hỗ trợ Linux và macOS trên cả kiến trúc AMD64 và ARM64, với kế hoạch bổ sung hỗ trợ WebAssembly và RISC-V.

Runtime tích hợp một số tính năng tập trung vào hiệu suất được mượn từ kiến trúc đã được chứng minh của Go, bao gồm garbage collector hiệu suất cao với thời gian stop-the-world ngắn, memory allocator tương tự như tcmalloc của Google, và hỗ trợ hàng triệu lần chuyển đổi coroutine mỗi giây. Ngôn ngữ cũng bao gồm libuv tích hợp sẵn để xử lý IO event loops và tuân theo các quy ước system ABI để tích hợp trực tiếp với thư viện C.

Các Tính Năng Kỹ Thuật Chính:

  • Không phụ thuộc vào LLVM - biên dịch trực tiếp thành mã máy
  • Bộ thu gom rác hiệu suất cao với thời gian STW ngắn
  • Bộ cấp phát bộ nhớ tương tự như tcmalloc của Google
  • Tích hợp sẵn libuv cho vòng lặp sự kiện IO
  • Hỗ trợ hàng triệu lần chuyển đổi coroutine mỗi giây
  • Hỗ trợ biên dịch chéo và liên kết tĩnh

Thiết kế ngôn ngữ và phát triển tương lai

Cú pháp của Nature khác với Go trong khi vẫn duy trì các khái niệm quen thuộc. Ngôn ngữ hỗ trợ nullable types với cú pháp dấu hỏi, tuple types, và nhằm mục đích cung cấp khả năng tương tác C tốt hơn so với Go. Đáng chú ý, ngôn ngữ hiện tại sử dụng mã hóa ASCII cho strings thay vì UTF-8, điều này đã thu hút sự chỉ trích từ các developer coi hỗ trợ Unicode là thiết yếu cho các ngôn ngữ lập trình hiện đại.

Tác giả thừa nhận tương đối thiếu kinh nghiệm trong thiết kế ngôn ngữ lập trình và đã tiếp nhận phản hồi từ cộng đồng. Các kế hoạch bao gồm bổ sung hỗ trợ enum, cải thiện xử lý Unicode, và có thể thay đổi tên ngôn ngữ do lo ngại về tối ưu hóa công cụ tìm kiếm. Dự án cũng đối mặt với những thách thức thực tế, chẳng hạn như triển khai macOS cross-platform linker để cho phép hỗ trợ cross-compilation đầy đủ.

Mặc dù Nature cho thấy tiềm năng như một giải pháp thay thế Go với các tính năng nâng cao, giai đoạn đầu của nó và các cuộc tranh luận đang diễn ra về định vị cho thấy nó sẽ cần thời gian để trưởng thành trước khi có được sự chấp nhận rộng rãi hơn. Cuộc thảo luận cộng đồng làm nổi bật sự phát triển liên tục của các danh mục ngôn ngữ lập trình và những thách thức mà các ngôn ngữ mới phải đối mặt khi cố gắng tạo ra vị thế riêng trong một lĩnh vực ngày càng đông đúc.

Tham khảo: Nature Programming Language