10 điểm bởi xguru 2023-11-18 | 3 bình luận | Chia sẻ qua WhatsApp
  • Giúp dễ dàng xây dựng phần mềm đồng thời, cho phép phát triển mà không phải lo về hiệu năng khó đoán, lỗi runtime, tranh chấp dữ liệu hay lỗi kiểu
  • Có các đặc điểm như quản lý bộ nhớ tự động, move semantics, static typing, đồng thời an toàn kiểu và xử lý lỗi hiệu quả

Quản lý bộ nhớ tự động mang tính quyết định

  • Inko không phụ thuộc vào garbage collection mà sử dụng cơ chế quản lý bộ nhớ dựa trên quyền sở hữu duy nhất và move semantics
  • Giá trị được sở hữu sẽ bị xóa khi ra khỏi phạm vi, và có thể được mượn ở dạng bất biến hoặc khả biến
  • Việc sử dụng quyền sở hữu duy nhất mang lại hành vi và hiệu năng có thể dự đoán, đồng thời không lãng phí thời gian vào việc tinh chỉnh garbage collection

Inko an toàn

  • Khi dùng Inko, không cần lo về các lỗi thường gặp ở ngôn ngữ khác như con trỏ NULL, lỗi use-after-free, lỗi runtime hay tranh chấp dữ liệu
  • Cung cấp kiểu Option cho dữ liệu tùy chọn, đồng thời hỗ trợ tham chiếu bất biến và khả biến để có thể giới hạn việc thay đổi khi cần

Giúp đồng thời trở nên dễ dàng

  • Inko triển khai tính đồng thời bằng các process nhẹ và sử dụng mô hình đồng thời lấy cảm hứng từ Erlang và Pony
  • Các process được cô lập với nhau và giao tiếp qua message, còn trình biên dịch đảm bảo tính chính xác thông qua kiểm tra kiểu
  • Khi truyền dữ liệu giữa các process, tính duy nhất của dữ liệu được đảm bảo, khiến tranh chấp dữ liệu trở nên bất khả thi

Xử lý lỗi đúng cách

  • Inko sử dụng cách tiếp cận xử lý lỗi lấy cảm hứng từ bài viết "The Error Model" của Joe Duffy
  • Lỗi được biểu diễn bằng kiểu đại số "Result", đồng thời cung cấp sự đơn giản về cú pháp thông qua trythrow
  • Với các lỗi nghiêm trọng không thể hoặc không nên xử lý, ngôn ngữ hỗ trợ "panics" để dừng chương trình

Hiệu quả

  • Inko không nhằm cạnh tranh với các ngôn ngữ cấp thấp như C hay Rust, mà muốn trở thành lựa chọn thay thế hấp dẫn cho các ngôn ngữ như Ruby, Erlang và Go
  • Sử dụng trình biên dịch native code dùng LLVM làm backend, mang lại sự cân bằng giữa thời gian biên dịch nhanh và hiệu năng runtime tốt
  • Native code được liên kết tĩnh với một thư viện runtime nhỏ viết bằng Rust, xử lý việc lập lịch process, non-blocking IO và hơn thế nữa

Pattern matching

  • Inko hỗ trợ pattern matching cho nhiều kiểu dữ liệu khác nhau như tuple và kiểu dữ liệu đại số
  • Pattern matching được biên dịch thành cây quyết định, và trình biên dịch cố gắng giữ kích thước nhỏ nhất có thể
  • Trình biên dịch đảm bảo mọi pattern đều được bao phủ

3 bình luận

 
ahwjdekf 2023-11-18

dùng Rust để tạo ra thứ gì đó giống Rust à ??

 
regentag 2023-11-18

Việc quản lý gói phụ thuộc vào GitHub thì hơi bất tiện thật. Mong là cũng sẽ cân nhắc thêm những môi trường không thể kết nối Internet…

 
xguru 2023-11-18
Ý kiến trên Hacker News
  • Mô hình đồng thời của Inko được lấy cảm hứng từ Erlang và Pony, sử dụng các tiến trình nhẹ.

    • Các tiến trình được cô lập với nhau và giao tiếp thông qua thông điệp.
    • Tiến trình và thông điệp được định nghĩa bằng class và method, trình biên dịch đảm bảo tính chính xác thông qua kiểm tra kiểu.
    • Dữ liệu được chuyển giao theo dạng duy nhất giữa các tiến trình nên không thể xảy ra data race, đồng thời loại bỏ nhu cầu sao chép sâu.
    • Hỗ trợ kênh nhiều bên sản xuất và nhiều bên tiêu thụ, cho phép giao tiếp giữa các tiến trình mà không cần tham chiếu tường minh.
  • Để thêm một gói Inko, cần tạo một kho lưu trữ GitHub.

    • Trình quản lý gói của Inko cũng hỗ trợ các kho Git khác như GitLab, nhưng danh mục được cấu thành bằng kho GitHub.
    • Bày tỏ lo ngại về xu hướng cộng đồng muốn phụ thuộc vào sản phẩm của Microsoft và Git.
  • Cung cấp các liên kết thảo luận liên quan đến Inko:

    • "Show HN: Inko 0.10.0 – build concurrent software with confidence" (tháng 9 năm 2022, 3 bình luận)
    • "Inko 0.5.0 released, featuring the first steps towards a self-hosting compiler" (tháng 9 năm 2019, 7 bình luận)
    • "Inko (a gradually-typed object-oriented programming language) 0.4.0 released" (tháng 5 năm 2019, 1 bình luận)
    • "Show HN: Inko – A safe and concurrent object-oriented programming language" (tháng 8 năm 2018, 45 bình luận)
  • Đặt câu hỏi về sự tương đồng với Rust:

    • Inko có đủ giống Rust để đặt ra câu hỏi vì sao nên chọn Inko thay vì Rust.
    • Cần ví dụ về những chương trình khó hoặc phiền phức trong Rust nhưng có thể viết dễ dàng trong Inko.
  • Thể hiện sự quan tâm đến Inko và mong nó trở thành Golang:

    • Inko có vẻ bắt đầu từ GitLab, kèm theo mong muốn nó trở thành Golang và nhắc đến sự cần thiết của GC.
    • Đặt câu hỏi về điểm khác biệt với Gleam và bày tỏ sự quan tâm đến cách tận dụng hệ sinh thái JVM.
  • Chia sẻ một thông tin thú vị rằng tên Inko trong tiếng Telugu có nghĩa là "thêm một cái nữa".

  • Thảo luận về khác biệt cú pháp với Rust:

    • So sánh chi tiết các khác biệt về cú pháp giữa Rust và Inko.
    • Nhắc đến những khác biệt nhỏ như khai báo hàm, cách biểu diễn generic, v.v.
  • Đánh giá tích cực về các quyết định thiết kế của Inko:

    • Cú pháp tương tự các ngôn ngữ họ C/Java mang lại cảm giác quen thuộc cho nhiều người.
    • Đặt câu hỏi về quyết định đặt tên cho phần xử lý lỗi.
  • Đề cập đến nhu cầu có sẵn binary dựng trước:

    • Nhắc đến việc khó biên dịch do vấn đề LLVM và vì thế khiến mức độ quan tâm đến Inko thấp đi.
  • Bổ sung thêm các liên kết thảo luận liên quan.