- 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
try và throw
- 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
dùng Rust để tạo ra thứ gì đó giống Rust à ??
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…
Ý 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ẹ.
Để thêm một gói Inko, cần tạo một kho lưu trữ GitHub.
Cung cấp các liên kết thảo luận liên quan đến Inko:
Đặt câu hỏi về sự tương đồng với Rust:
Thể hiện sự quan tâm đến Inko và mong nó trở thành Golang:
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:
Đánh giá tích cực về các quyết định thiết kế của Inko:
Đề cập đến nhu cầu có sẵn binary dựng trước:
Bổ sung thêm các liên kết thảo luận liên quan.