- ty, một trình kiểm tra kiểu Python và máy chủ ngôn ngữ siêu tốc được viết bằng Rust, đã được công bố ở phiên bản beta
- Được thiết kế như một lựa chọn thay thế cho mypy, Pyright và Pylance, với hiệu năng nhanh hơn 10–60 lần
- Thông qua kiến trúc gia tăng, công cụ chỉ tính toán lại những phần cần thiết khi mã được chỉnh sửa để tối đa hóa tốc độ phản hồi theo thời gian thực
- Chú trọng độ chính xác và tính dễ dùng, hỗ trợ các tính năng hệ thống kiểu hiện đại như kiểu giao cắt, thu hẹp kiểu nâng cao và phân tích khả năng truy cập
- Astral có kế hoạch phát triển ty cùng với Ruff và uv thành các công cụ phát triển cốt lõi của hệ sinh thái Python
Tổng quan về ty
- ty là trình kiểm tra kiểu Python và máy chủ ngôn ngữ do Astral phát triển, được triển khai bằng Rust
- Được thiết kế như một lựa chọn thay thế nhanh hơn rất nhiều so với mypy, Pyright và Pylance
- Đã được sử dụng trên nhiều dự án nội bộ của Astral và hiện được khuyến nghị cho cả người dùng bên ngoài trong giai đoạn beta
- Astral là nhóm xây dựng các công cụ phát triển hiệu năng cao cho hệ sinh thái Python, nổi tiếng với uv (trình quản lý gói) và Ruff (trình lint và formatter)
Hiệu năng và kiến trúc
- ty được thiết kế với cấu trúc lấy máy chủ ngôn ngữ làm trung tâm, áp dụng cách xử lý gia tăng chỉ chạy lại các phép tính cần thiết khi tệp được chỉnh sửa
- Nhờ đó, tốc độ cập nhật theo thời gian thực trong trình soạn thảo rất nhanh
- Ngay cả khi chạy không có bộ nhớ đệm, công cụ vẫn nhanh hơn mypy và Pyright từ 10 đến 60 lần
- Ví dụ: khi sửa các tệp chính trong kho PyTorch, tốc độ tính lại chẩn đoán là 4.7ms, nhanh hơn Pyright (386ms) 80 lần và nhanh hơn Pyrefly (2.38 giây) 500 lần
- Ngay cả trong các dự án quy mô lớn, khoảng cách hiệu năng khi cập nhật gia tăng vẫn ở mức hàng chục lần trở lên
Hệ thống kiểu và độ chính xác
- ty hỗ trợ kiểu giao cắt (intersection types), thu hẹp kiểu nâng cao (advanced type narrowing) và phân tích khả năng truy cập dựa trên kiểu (reachability analysis)
- Nhờ các tính năng này, công cụ cung cấp phản hồi kiểu chính xác và giảm các cảnh báo sai không cần thiết (false positive)
- Mục tiêu không chỉ là tăng tốc độ đơn thuần mà là xây dựng một trình kiểm tra kiểu cải thiện cả độ chính xác lẫn trải nghiệm người dùng
Hệ thống chẩn đoán
- ty bao gồm hệ thống chẩn đoán nâng cao lấy cảm hứng từ hệ thống thông báo lỗi của trình biên dịch Rust
- Trong một thông báo chẩn đoán duy nhất, công cụ có thể trình bày ngữ cảnh từ nhiều tệp để cho thấy rõ nguyên nhân vấn đề và hướng khắc phục
- Ví dụ: khi gán sai khóa từ điển, công cụ sẽ hiển thị đồng thời vị trí không khớp kiểu và vị trí khai báo
- Đầu ra chẩn đoán là giao diện cốt lõi của ty, được thiết kế với cấu trúc dễ hiểu cho cả con người lẫn AI
Tính năng máy chủ ngôn ngữ
- ty có thể được sử dụng trong mọi trình soạn thảo hỗ trợ LSP (Language Server Protocol) như VS Code và Cursor
- Hỗ trợ đầy đủ các tính năng máy chủ ngôn ngữ hiện đại như đi tới định nghĩa, đổi tên ký hiệu, tự động hoàn thành, tự động import, tô sáng cú pháp ngữ nghĩa và inlay hints
- Có thể cài đặt thông qua tiện ích mở rộng VS Code, và cũng có thể cài CLI bằng lệnh
uv tool install ty@latest
Kế hoạch sắp tới
- Mục tiêu ngắn hạn sau beta là tăng cường độ ổn định và sửa lỗi, hoàn thiện đặc tả kiểu Python, và hỗ trợ Pydantic cùng Django
- Về dài hạn, ty sẽ được mở rộng thành engine tính năng ngữ nghĩa trong chuỗi công cụ của Astral
- Dự kiến có các tính năng như loại bỏ mã chết, phát hiện dependency không sử dụng, phân tích khả năng tiếp cận lỗ hổng bảo mật (CVE) và lint nhận biết kiểu
- Astral đặt mục tiêu liên tục cải thiện ty để biến Python thành hệ sinh thái lập trình năng suất nhất
Lời cảm ơn
- Hàng chục người đóng góp mã nguồn mở đã tham gia phát triển ty, và công cụ được phát hành theo giấy phép MIT
- Nhiều cá nhân và nhóm từ Salsa, Elixir và cộng đồng Python typing đã cung cấp sự hợp tác kỹ thuật và nguồn cảm hứng
- Đội ngũ cốt lõi của Astral đã phát triển ty dựa trên sự hiểu biết sâu sắc về lý thuyết kiểu, ngữ nghĩa runtime của Python và các mẫu sử dụng trong hệ sinh thái
2 bình luận
Astral là fan Python hay fan Rust đây…
Đúng là Astral mà~
Ý kiến trên Hacker News
Sẽ rất tốt nếu Ty được thêm vào bảng so sánh này
Nhìn vào bảng kết quả Python typing conformance, tôi nghĩ không nên đánh giá thấp năng lực của Pyright
Tôi đã thử dùng Ty (LSP) một lúc trong Emacs và nó hoạt động khá tốt. Tuy vậy, khi chữ ký phương thức được hiển thị thì phần chú thích kiểu của một số tham số trông hơi quá dài dòng, điều này hơi gây khó chịu
Dù vậy, về lâu dài tôi vẫn có khả năng sẽ dùng Ty. Chúc mừng bản beta đầu tiên
Nó khá xa với những gì người dùng thực sự coi trọng. (Tôi đã cùng xây dựng đặc tả và bộ kiểm thử trong Python Typing Council)
Dù vậy, tôi đang là người dùng uv rất hài lòng nên sẽ cân nhắc chuyển sang Ty khi nó đủ ổn định
Astral đang tạo ra những công cụ tuyệt vời, nên hy vọng họ sẽ phát triển tốt mà không cần thương mại hóa theo hướng phá vỡ
Cuối cùng vẫn có lúc phải quay lại công cụ cũ. Với tôi, kiểm tra kiểu chính xác quan trọng hơn tốc độ
Cảm ơn đội ngũ Astral. Chúng tôi dùng Pydantic rất nhiều, nên thật đáng mong đợi khi nghe rằng bản phát hành chính thức của Ty sẽ có hỗ trợ hạng nhất cho nó
Hiện tại chúng tôi đang chạy cả Pyright lẫn Mypy, và chúng bắt ra các lỗi khác nhau nên có cảm giác bị chồng chéo
Theo bảng này, Pyright là superset, nhưng trải nghiệm thực tế của tôi lại khác
Đó là phân tích từ 2 năm trước nên bây giờ có thể đã khác. Tôi tò mò không biết có trường hợp nào đã hợp nhất về chỉ dùng Pyright trên codebase lớn hay chưa
Có khá nhiều trường hợp mypy suy luận linh hoạt và chính xác hơn, còn Pyright thì có nhiều false positive đến mức tôi từng phải tắt nó
Dạo gần đây Pyright có lẽ đã tiến bộ nhiều, nhưng BasedPyright thì ngược lại còn phản tác dụng
Trong cộng đồng có xu hướng hạ thấp mypy và ca ngợi Pyright khá mạnh, nhưng trải nghiệm của tôi thì hơi khác
Nó chủ yếu tập trung vào ngữ nghĩa của chú thích, nên không phù hợp để làm tiêu chí chọn type checker
(Tôi cũng đã cùng xây dựng đặc tả và bộ kiểm thử này trong Python Typing Council)
Có lẽ tiêu đề nên là “Thông báo phát hành beta của Ty” thì phù hợp hơn
Tôi thích Pyrefly hơn Pyright, nhưng gần đây do lỗi nên phải ghim ở phiên bản cũ, khá bất tiện
Khi tôi thử cài Ty thì gặp lỗi tương thích phiên bản Cursor
Tôi vẫn không hiểu tại sao một ngôn ngữ lại có nhiều type checker đến vậy
Người làm thư viện phải kiểm thử với mọi checker sao? Còn lập trình viên thì chỉ nên dùng những thư viện hỗ trợ checker cụ thể thôi à?
Ở ranh giới package thì cần kiểu tường minh, nhưng trong mã nội bộ lại có nhiều vùng mơ hồ
Astral đặc biệt xem hiệu năng xử lý tăng dần là mục tiêu thiết kế quan trọng
Nếu cần, bạn cũng có thể tự cung cấp type stub để đảm bảo tính tương thích
Tôi thích việc Ty theo đuổi quan điểm “không cần thêm chú thích chỉ để làm hài lòng type checker”
Các checker trước đây thường làm phiền vì những cảnh báo vụn vặt, còn Ty thì bắt được các lỗi logic thực sự tốt hơn
Hôm nay tôi mới biết Ty còn đóng vai trò language server (LSP)
Tức là trong Neovim hay VSCode, nó có thể thay thế cả mypy lẫn Pyright
Tôi tò mò về mức độ hỗ trợ Django. Django có rất nhiều magic code, nên type checker khá khó xử lý
Nếu bạn dùng Django thì trước mắt vẫn nên giữ mypy hoặc Pyright
Dù Ty không nhanh thì chỉ riêng việc hỗ trợ intersection type (A & B) cũng đã đủ đáng để dùng rồi
Đây là tính năng thiếu vắng trong hệ thống kiểu chuẩn của Python nên rất đáng mừng
Không biết bên Ruby có thứ gì giống uv không. Trong Python hay TypeScript thì tôi dùng uv hoặc bun, còn Ruby thì có cảm giác đang bị tụt lại