8 điểm bởi GN⁺ 2024-03-07 | 1 bình luận | Chia sẻ qua WhatsApp
  • Dada là một thử nghiệm tư duy nhằm tạo ra một ngôn ngữ giống Rust, nhưng mang lại cảm giác như Java hoặc JavaScript và ít phức tạp hơn C++
  • Nếu hình dung một ngôn ngữ không nhắm đến việc sử dụng trong kernel hay các thiết bị nhúng nhỏ, mà chỉ yêu cầu runtime tối thiểu, thì nó sẽ trông như thế nào?
  • Dada là ngôn ngữ dựa trên ownership và có một số điểm tương đồng với Rust:
    • Giống Rust, Dada không cần garbage collector.
    • Giống Rust, Dada đảm bảo an toàn bộ nhớ và không có data race.
    • Giống Rust, các cấu trúc dữ liệu của Dada được cấp phát trên stack và sử dụng bố cục bộ nhớ phẳng.
  • Tuy nhiên, Dada cũng có nhiều điểm khác biệt:
    • Giống TypeScript, Dada là một ngôn ngữ được gán kiểu dần dần:
      • Có thể dùng Dada trong trình thông dịch mà không cần chú thích kiểu để tìm hiểu cách ngôn ngữ hoạt động.
      • Khi đã quen, bạn có thể thêm chú thích kiểu và sử dụng trình biên dịch cho hiệu năng tương tự Rust.
    • Dada chủ yếu nhắm đến WebAssembly:
      • Có thể build Dada cho các target native, nhưng hệ thống FFI dựa trên WebAssembly Interface Types.
    • Dada mang tính hướng đối tượng nhưng không theo cách thuần túy:
      • Dada kết hợp OO với các tính năng hữu ích như pattern matching, lấy cảm hứng từ những ngôn ngữ như Scala.
  • So với Rust, Dada có một số hạn chế:
    • Dada có runtime bắt buộc và không nhắm đến các "hệ thống bare metal" hay kernel.
    • Dada không hỗ trợ inline assembly hay mã unsafe tùy ý.

Trạng thái hiện tại của Dada là gì?

  • Hiện tại Dada chưa thực sự tồn tại, nhưng đã có một vài nguyên mẫu thử nghiệm:
    • Có thể tìm thấy ngữ nghĩa vận hành thử nghiệm được triển khai bằng PLT Redex tại dada-lang/dada-model.
    • Trình thông dịch viết bằng Rust có thể tìm thấy trong kho dada-lang/dada, và có thể thử bản build dựa trên WebAssembly trong Dada Playground.

Ý kiến của GN⁺

  • Dada phản ánh xu hướng của các ngôn ngữ lập trình hiện đại khi vẫn giữ các tính năng cốt lõi của Rust như an toàn bộ nhớ và ngăn chặn data race, đồng thời hướng đến một ngôn ngữ thân thiện hơn với lập trình viên thông qua gán kiểu dần dần và cách tiếp cận hướng đối tượng.
  • Việc chọn WebAssembly làm target chính cho thấy tiềm năng của Dada trong phát triển ứng dụng web, phù hợp với xu hướng phát triển web hiện đại đề cao khả năng tương thích trình duyệt và tính độc lập nền tảng.
  • Nếu Dada thực sự được phát triển và sử dụng rộng rãi, nó có thể mang đến mức độ trừu tượng cao hơn và sự tiện lợi cho các lập trình viên Rust hiện tại, đồng thời giúp các lập trình viên Java hoặc JavaScript dễ dàng chuyển sang ngôn ngữ lập trình hệ thống hơn.
  • Tuy nhiên, vì Dada vẫn đang ở giai đoạn đầu và hiệu năng cũng như độ ổn định trong môi trường production thực tế chưa được kiểm chứng, các doanh nghiệp hay lập trình viên cần tiếp cận một cách thận trọng trước khi áp dụng.
  • Những ngôn ngữ khác có mục tiêu tương tự Dada gồm Kotlin hoặc Swift, và vì chúng đã được sử dụng rộng rãi, chúng có thể là những lựa chọn thay thế tốt cho lập trình viên.

1 bình luận

 
GN⁺ 2024-03-07
Ý kiến Hacker News
  • Yêu thích ý tưởng về một "ngôn ngữ thí nghiệm tư duy"

    • Việc thực sự tạo ra một ngôn ngữ là gánh nặng lớn, còn việc nghĩ xem một ngôn ngữ lý tưởng sẽ trông như thế nào thì rất thú vị.
    • Có nhiều hình dung khác nhau về một "Rust ở cấp độ cao hơn"; cá nhân thì thích runtime động và kiểu đơn giản, nhưng người khác lại có những yêu cầu khác.
    • Các tính năng bổ sung như hệ thống kiểu dần dần phù hợp với một số ngôn ngữ, nhưng vẫn thích sự đảm bảo của một codebase hoàn toàn kiểu tĩnh ngay từ đầu.
  • Thắc mắc về ví dụ "Hello, Dada!"

    • Với tư cách là người dùng Python, thấy khó hiểu vì sao lại phải quan tâm đến await khi mục tiêu chỉ là in ra console.
    • Có vẻ như độ phức tạp và gánh nặng nhận thức đã bắt đầu xuất hiện.
  • Mong muốn về một ngôn ngữ theo hướng ngược lại

    • Muốn một ngôn ngữ có hệ thống kiểu giàu khả năng biểu đạt và cú pháp của Rust, nhưng đưa vào garbage collector và runtime.
    • Không muốn phải trả giá về hiệu năng, và thích một ngôn ngữ kiểu như Go nhưng có hệ thống kiểu của Rust.
  • Ý kiến phản đối async/await

    • Cho rằng ở ngôn ngữ cấp cao, green thread kiểu của Go sẽ phù hợp hơn.
    • Kiểu dần dần thì thú vị nhưng không bắt buộc. Kiểu tĩnh không phải là gánh nặng và có thể khiến việc suy luận về hiệu năng trở nên khó hơn.
    • Nghĩ rằng suy luận kiểu sẽ tốt hơn kiểu dần dần.
  • Ý kiến về cảm giác giống Java và JavaScript

    • Chỉ ra rằng Java và JavaScript mang lại cảm giác rất khác nhau.
  • Việc không có GC khiến Rust trở thành trải nghiệm thú vị trên hệ thống nhúng

    • Có thể kết nối với các chương trình khác một cách dễ dàng, và tốc độ khởi động nhanh của chương trình là một trong những ưu điểm lớn của Rust.
    • Một phiên bản Rust có thêm garbage collection có thể sẽ phải từ bỏ ưu điểm này.
  • Cảm xúc lẫn lộn về trải nghiệm dùng Rust

    • Thích các mẫu an toàn bộ nhớ, nhưng cảm thấy cú pháp khó hơn so với C++.
    • Cảm thấy khó đọc mã trong đầu.
    • Nếu ít phép thuật decorator và cú pháp dựa trên ký hiệu hơn thì người mới sẽ dễ hiểu hơn.
  • Quan tâm đến nhận định rằng thêm chú thích kiểu có thể đạt hiệu năng tương tự Rust

    • Có thể viết dễ như JavaScript, và khi đủ lý do để biện minh cho phần việc bổ sung thì có thể trở thành ngôn ngữ nhanh ngang Rust.
  • Bối rối về phương thức print_point trong tutorial

    • Cần giải thích chi tiết hơn về ý nghĩa của asyncawait.
    • Đặt câu hỏi liệu async/await có đóng vai trò giống như giá trị được tính toán lười hay không, và liệu các cách kết hợp khác nhau có gây ra lỗi kiểu hay không.
  • Không hài lòng khi phải đi tìm ví dụ cú pháp của ngôn ngữ lập trình mới

    • Khi tạo một ngôn ngữ lập trình mới, hãy đưa ngay ví dụ cú pháp "Hello World" trên landing page.