7 điểm bởi GN⁺ 2025-12-17 | 2 bình luận | Chia sẻ qua WhatsApp
  • 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, PyrightPylance, 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 Ruffuv 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

  • tytrì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, PyrightPylance
    • Đã đượ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)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 CodeCursor
    • 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ĩainlay 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)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, Elixircộ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 Pythoncác mẫu sử dụng trong hệ sinh thái

2 bình luận

 
iolothebard 2025-12-19

Astral là fan Python hay fan Rust đây…
Đúng là Astral mà~

 
GN⁺ 2025-12-17
Ý 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

    • Việc tuân thủ đặc tả là quan trọng, nhưng tôi không khuyến nghị chọn type checker chỉ dựa trên điều đó
      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)
    • Chúng tôi cũng sẽ sớm thêm nó vào bảng đó. Có lẽ sẽ mất chút thời gian để bắt kịp mức conformance của Pyright, nhưng đó là mục tiêu trước khi phát hành chính thức
    • Pyright cũng rất tốt, nhưng BasedPyright là phiên bản được cải tiến hơn dựa trên nó
      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
    • PR này vẫn đang ở trạng thái WIP, nhưng nó đã tạo động lực để tôi bắt đầu lại việc đóng góp OSS
    • Pyright tốt nhưng tốc độ chậm. Độ phản hồi của LSP ảnh hưởng lớn đến UX, nên tôi rất mong chờ xem Ty đã cải thiện được đến đâu
  • 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ỡ

    • Sản phẩm thương mại đầu tiên của Astral là pyx. Mong rằng nó thành công để họ có thể tiếp tục làm ra những công cụ mã nguồn mở tuyệt vời
    • Tôi nghĩ công việc họ làm đến nay ở mức như một dịch vụ công cho cộng đồng Python
    • Cảm giác định hướng của họ khá giống bun
    • Tuy vậy, hơi đáng tiếc là họ tuyên bố thay thế hoàn toàn các công cụ hiện có nhưng trên thực tế lại chưa triển khai đủ mọi tính năng
      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

    • Tôi cũng là người dùng mypy từ sớm, và khi Pyright được thêm vào VS Code thì tôi đã thử so sánh
      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ói lại lần nữa, bộ kiểm thử tuân thủ đặc tả không phản ánh trải nghiệm thực tế của người dùng
      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

    • Nếu có thêm thông báo lỗi nào, vui lòng tạo issue nhé. Tôi đã dùng extension Ty trong Cursor ổn suốt vài tuần nên khó tái hiện được
    • (Tôi là maintainer của Pyrefly) Nếu được thì bạn cũng hãy để lại issue về vụ crash đó trong kho Pyrefly
  • 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 à?

    • Python là ngôn ngữ duck typing + chú thích kiểu tùy chọn, nên gần như không thể tránh khỏi việc xuất hiện nhiều cách triển khai khác nhau
    • Một phần khác biệt đến từ phạm vi suy luận của caller hay chính sách yêu cầu kiểu tường minh
      Ở 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
    • Trên thực tế, phần lớn vẫn kiểm thử theo chuẩn mypy. Pyright thì đang ngày càng mở rộng ảnh hưởng nhờ extension mặc định của VS Code
      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ý

    • Ty hiện vẫn chưa hỗ trợ Django và cũng không có hệ thống plugin
      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

    • Có một công cụ quản lý Ruby mới là Rv. Có thể đó sẽ là lựa chọn thay thế phù hợp