ΤΕΥΧΟΣ 027  ·  31 ΟΚΤΩΒΡΙΟΥ 2026 RSS
CodeCity
ΑΝΑΠΤΥΞΗ № 0027

ty: ο ελεγκτής τύπων της Astral που προλαβαίνει το λάθος πριν τρέξει

Το ty είναι ελεγκτής τύπων για Python, γραμμένος σε Rust από την Astral, την ομάδα πίσω από τα uv και ruff. Διαβάζει τον κώδικα και βρίσκει λάθη τύπων πριν τον τρέξεις: στη δοκιμή μας έπιασε και τα δύο σκόπιμα λάθη ενός αρχείου, έδειξε και την υπογραφή της συνάρτησης και γύρισε κωδικό εξόδου 1, ενώ σε καθαρό αρχείο απάντησε All checks passed! με κωδικό 0. Είναι ένα εκτελέσιμο 32,5 MB, τρέχει χωρίς κάρτα γραφικών, δεν θέλει λογαριασμό και δεν είναι διακομιστής MCP. Το τίμημα είναι η ηλικία του: η έκδοση είναι 0.0.95, δηλαδή πριν το 1.0, με 994 ανοιχτά ζητήματα.

ty, ο ελεγκτής τύπων της Python

Τι κάνει

Όποιος έχει γράψει Python το ξέρει: το λάθος φαίνεται τη στιγμή που τρέχει το πρόγραμμα, όχι όταν γράφεις τη γραμμή. Το ty αλλάζει τη σειρά και σου το λέει πριν πατήσεις εκτέλεση.

Η λέξη-κλειδί είναι «ελεγκτής τύπων». Στην Python δεν είσαι υποχρεωμένος να δηλώνεις τι λογής τιμή κρατά κάθε μεταβλητή. Αν το κάνεις, γράφεις κάτι σαν def add(a: int, b: int) -> int. Αυτές οι σημειώσεις δεν αλλάζουν τη συμπεριφορά του προγράμματος: είναι συμβόλαιο για εργαλεία σαν το ty, που το διαβάζουν και ψάχνουν πού σπάει.

Το ty το φτιάχνει η Astral, η ομάδα πίσω από το uv και το ruff, και είναι γραμμένο σε Rust (αποθετήριο). Είναι εργαλείο γραμμής εντολών, όχι διακομιστής MCP: δεν δηλώνεται σε αρχείο ρυθμίσεων, δεν φορτώνει σχήμα εργαλείων σε καμία συνεδρία. Δίνεις εντολή, παίρνεις κείμενο και κωδικό εξόδου.

Έστησα μια παγίδα: ένα αρχείο με συνάρτηση δύο ορισμάτων, κλήση της με τρία ορίσματα, και κλήση σε όνομα που δεν ορίστηκε πουθενά. Το ty εντόπισε και τα δύο. Δεν τύπωσε «κάτι πήγε λάθος»· τύπωσε τον κανόνα που παραβιάστηκε, τη γραμμή, τη στήλη, σημείο κάτω από το τρίτο όρισμα, και μια γραμμή «Function signature here» που δείχνει πού είναι το σωστό. Κωδικός εξόδου 1.

Ένας ελεγκτής τύπων δίνει δύο πράγματα: το εύρημα και τον δρόμο προς τη διόρθωση. Η Astral λέει ότι σχεδίασε το σύστημα διαγνωστικών με το νου και σε ανθρώπους και σε πράκτορες (ανακοίνωση).

Τι λένε τα μητρώα. Στο PyPI η τελευταία έκδοση είναι η 0.0.95, δημοσιευμένη στις 29 Οκτωβρίου 2026, 19:21 UTC, με 136 εκδόσεις συνολικά (πακέτο). Το πεδίο requires-python δηλώνει >=3.8. Το πεδίο license είναι κενό, και η άδεια βγαίνει από τον classifier MIT. Οι λήψεις τον τελευταίο μήνα είναι 41.012.419 (στατιστικά). Στο GitHub το αποθετήριο έχει 19.994 αστέρια, 345 forks και 994 ανοιχτά ζητήματα, με άδεια MIT· δημιουργήθηκε στις 2 Μαΐου 2025 και το τελευταίο push είναι σήμερα (αποθετήριο).

Και η επιφύλαξη, από την αρχή, όχι στο τέλος. Η έκδοση είναι 0.0.95 — πριν το 1.0 — και η ίδια η τεκμηρίωση λέει ότι το ty δεν έχει σταθερό API και ότι σπάσιμο αλλαγών, ακόμη και στα διαγνωστικά, μπορεί να συμβεί ανάμεσα σε δύο οποιεσδήποτε εκδόσεις (τεκμηρίωση). Τα 994 ανοιχτά ζητήματα είναι το ίδιο νούμερο ειπωμένο αλλιώς. Δεν είναι λόγος να μην το δοκιμάσεις. Είναι λόγος να ξέρεις τι κρατάς.

Για ποιον είναι

Για όποιον γράφει Python και θέλει να μάθει το λάθος νωρίτερα.

Ο ερασιτέχνης ξεκινά χωρίς τίποτα: χωρίς λογαριασμό, χωρίς κλειδί, χωρίς ρυθμίσεις. Υπάρχει και δοκιμαστήριο στον φυλλομετρητή για να δει κανείς τι κάνει πριν εγκαταστήσει οτιδήποτε (δοκιμαστήριο).

Ο επαγγελματίας κερδίζει δύο πράγματα που μετρούν στην καθημερινή δουλειά: ταχύτητα, ώστε ο έλεγχος να χωρά σε κάθε αποθήκευση αρχείου, και μορφές εξόδου που τις καταλαβαίνουν μηχανές — μία γραμμή ανά διαγνωστικό, μορφή για τις σημειώσεις του GitHub Actions, αναφορά SARIF. Υπάρχει και πειραματική σύνδεση με το uv: η εντολή uv check στήνει το περιβάλλον του project και μετά ελέγχει, με την έκδοση του ty κλειδωμένη στο αρχείο κλειδώματος (ανακοίνωση).

Για ποιον δεν είναι. Αν θέλεις εγγύηση σταθερότητας σε παραγωγή, όχι ακόμα. Αν ο κώδικάς σου στηρίζεται βαριά σε βιβλιοθήκες όπως το Pydantic ή το Django, πλήρης κάλυψη δεν υπάρχει ακόμα· ο κατασκευαστής τη βάζει στο δρομολόγιο προς τη σταθερή έκδοση. Και όσο πιο λίγες σημειώσεις τύπων έχεις γράψει, τόσο λιγότερα έχει να ελέγξει: εργαλείο που δεν βλέπει συμβόλαιο δεν βρίσκει παραβίαση.

Εγκατάσταση

Η επίσημη διαδρομή είναι μέσα από το uv, το εργαλείο διαχείρισης πακέτων της ίδιας ομάδας, από οποιονδήποτε φάκελο:

uv tool install ty@latest

Μετά την εγκατάσταση η εντολή είναι απλή, χωρίς πρόθεμα:

ty check

Χωρίς εγκατάσταση καθόλου

Αν θέλεις να δεις τι κάνει πριν αγγίξεις τον δίσκο σου, το uv το κατεβάζει προσωρινά και το τρέχει. Είναι ο τρόπος που προτείνει πρώτο η τεκμηρίωση (οδηγίες) και η διαδρομή που ακολουθήσαμε στη δοκιμή:

uvx ty check

Μέσα στο project, για όλη την ομάδα

Αν θέλεις όλοι να ελέγχουν με την ίδια έκδοση, το ty μπαίνει ως εξάρτηση ανάπτυξης και κλειδώνεται μαζί με τα υπόλοιπα:

uv add --dev ty

Ο έλεγχος περνά τότε μέσα από το ίδιο το uv, ώστε να στηθεί σωστά το περιβάλλον:

uv run ty check

Ο αυτόνομος εγκαταστάτης

Το ty έχει δικό του σενάριο εγκατάστασης για όποιον δεν θέλει ούτε uv ούτε Python. Σε σύστημα με φλοιό sh:

curl -LsSf https://astral.sh/ty/install.sh | sh

Σε Windows, μέσα από PowerShell:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/ty/install.ps1 | iex"

Ο κατασκευαστής λέει ότι αυτός ο δρόμος δεν χρειάζεται Python καθόλου. Δεν τον εκτελέσαμε, οπότε μένει ισχυρισμός του.

Άλλες διαδρομές

Η τεκμηρίωση δίνει και pipx, pip, mise και εικόνα Docker. Μία εντολή για pipx:

pipx install ty

Χρήση σε κάθε LLM

Εδώ το ty είναι απλό, και αυτό είναι το πλεονέκτημά του: δεν δηλώνεται σε αρχείο ρυθμίσεων, δεν απαιτεί επανεκκίνηση, δεν πιάνει χώρο στο πλαίσιο. Ο βοηθός δίνει εντολή στο κέλυφος και διαβάζει δύο πράγματα: τι τυπώθηκε και με τι κωδικό βγήκε.

Ο κωδικός εξόδου είναι το συμβόλαιο. Καθαρός κώδικας σημαίνει 0, εύρημα σημαίνει 1. Άρα ο κανόνας που δίνεις σε κάθε βοηθό είναι ένας: τρέξε το ty πριν δηλώσεις ότι τελείωσες, και κρίνε από τον κωδικό, όχι από την εντύπωση. Η πρώτη εντολή, ίδια παντού:

uvx ty check

Και όταν θέλεις έξοδο που τη διαβάζει μηχανή, μία γραμμή ανά εύρημα:

uvx ty check --output-format concise

Για τις σημειώσεις σφάλματος μέσα στο GitHub Actions:

uvx ty check --output-format github

Claude Code

Στο αρχείο κανόνων του project, γράφεις τη σύμβαση: η Python ελέγχεται με ty, ο έλεγχος τρέχει πριν από κάθε δήλωση ολοκλήρωσης, και το εύρημα διορθώνεται αντί να παρακάμπτεται. Η εντολή που δίνει ο βοηθός στο κέλυφος:

uvx ty check .

Το . σημαίνει τον τρέχοντα φάκελο, γι’ αυτό το λες ρητά: αν το ty τρέξει από άλλο σημείο, ελέγχει άλλα αρχεία.

Codex CLI

Το ίδιο σχήμα σε αρχείο AGENTS.md, με μία διαφορά που βοηθά: ζήτα του τη σύντομη μορφή εξόδου, γιατί το πολύλογο διαγνωστικό σπαταλά πλαίσιο χωρίς λόγο όταν διορθώνεις σε βρόχο. Η εντολή είναι η ίδια, σε μορφή concise.

Cursor

Μία οδηγία στους κανόνες του project αρκεί. Εδώ αξίζει και το κομμάτι του συντάκτη: το ty έχει γλωσσικό διακομιστή που κάνει μετάβαση σε ορισμό, μετονομασία, συμπλήρωση και αυτόματη εισαγωγή, και ο κατασκευαστής συνιστά την επέκτασή του ρητά σε όσους χρησιμοποιούν VS Code, Cursor ή παρόμοιο συντάκτη (ανακοίνωση). Αν δεν θέλεις επέκταση, ο έλεγχος από το κέλυφος μένει ο ίδιος:

ty check --output-format concise

Σε αλυσίδα αυτοματισμού

Εδώ κερδίζουν οι μορφές εξόδου. Η μορφή για GitHub Actions βάζει κάθε εύρημα ως σημείωση πάνω στη γραμμή του, και η εντολή σταματά με κωδικό 1, που είναι αυτό που θέλει μια αλυσίδα για να κοκκινίσει. Υπάρχει και σημαία που μετατρέπει τις προειδοποιήσεις σε αποτυχία.

Αυτό είναι δική μου σύσταση, όχι οδηγία του κατασκευαστή: σε αλυσίδα, κάρφωσε την έκδοση — μέσα από την εξάρτηση ανάπτυξης ή από το αρχείο κλειδώματος — γιατί το πρόγραμμα αλλάζει γρήγορα.

Πού κερδίζει, πού χάνει

Κερδίζει στον χρόνο: 0,13 δευτερόλεπτα ο έλεγχος ενός αρχείου, ζεστή εκτέλεση. Όταν ο έλεγχος κοστίζει δέκατα του δευτερολέπτου, χωρά παντού.

Κερδίζει στο διαγνωστικό. Δεν λέει μόνο τι είναι λάθος· δείχνει την υπογραφή που θα έπρεπε να ταιριάζει, με ξεχωριστό βέλος, όνομα αρχείου και γραμμή. Είναι η διαφορά ανάμεσα σε «δεν δουλεύει» και σε «εδώ είναι το σωστό».

Κερδίζει στη συνεννόηση με πράκτορες: κωδικός εξόδου καθαρός, τρεις μορφές εξόδου, μηδέν χώρος στο πλαίσιο, μηδέν σχήμα εργαλείων. Και στα βασικά: άδεια MIT, μηδέν χρήματα, μηδέν λογαριασμός, τρέχει χωρίς κάρτα γραφικών.

Τώρα πού χάνει. Πρώτο, η ωριμότητα: έκδοση 0.0.95, 994 ανοιχτά ζητήματα, ρητή δήλωση ότι αλλαγές μπορούν να σπάσουν ανάμεσα σε δύο εκδόσεις. Δεύτερο, η κάλυψη: οι δημοφιλείς βιβλιοθήκες τρίτων δεν έχουν ακόμα πλήρη υποστήριξη. Τρίτο, ο χαρακτήρας του εργαλείου: ελέγχει τύπους, δεν ελέγχει λογική — κώδικας τυποποιημένα σωστός και λογικά λάθος περνά κανονικά. Τέταρτο, οι συγκρίσεις ταχύτητας που θα δεις παντού, δέκα ως εκατό φορές γρηγορότερο από mypy και Pyright: ισχυρισμός κατασκευαστή, από δικά του σενάρια. Δεν τα τρέξαμε δίπλα-δίπλα.

Δοκιμή

Έτρεξα το εργαλείο και μέτρησα. Τα νούμερα αυτής της ενότητας βγήκαν από τις εκτελέσεις, όχι από τεκμηρίωση.

Η έκδοση:

uvx ty --version

ty 0.0.95 (48c5ea1ba 2026-10-29).

Μετά η παγίδα, ένα αρχείο με δύο σκόπιμα λάθη. Το ty έπιασε και τα δύο και βγήκε με κωδικό εξόδου 1. Το πρώτο διαγνωστικό είπε error[too-many-positional-arguments]: Too many positional arguments to function add: expected 2, got 3, στη γραμμή 4, με σημείο κάτω από το τρίτο όρισμα. Το δεύτερο είπε error[unresolved-reference]: Name addd used when not defined, στη γραμμή 5. Και στα δύο ακολούθησε η υπόδειξη «Function signature here», με τη γραμμή και το βέλος της υπογραφής.

Όλη η έξοδος ήταν 18 γραμμές και 443 bytes. Η σύντομη μορφή της ίδιας εξόδου, αυτή που δίνεις σε πράκτορα, βγήκε 213 bytes: δύο γραμμές, ένα εύρημα η καθεμιά, με όνομα αρχείου, θέση, κανόνα και μήνυμα.

Σε καθαρό αρχείο:

uvx ty check clean.py

All checks passed!, κωδικός εξόδου 0.

Ο χρόνος: 0,13 δευτερόλεπτα για τον έλεγχο ενός αρχείου, ζεστή εκτέλεση, με το εργαλείο σε κρυφή μνήμη του συστήματος. Στην ίδια δοκιμή οι επόμενες εκτελέσεις κύλησαν στα δεκαπέντε εκατοστά του δευτερολέπτου, δηλαδή το νούμερο δεν είναι σταθερό στο δεύτερο δεκαδικό.

372 bytes η γενική βοήθεια, 7.358 bytes η βοήθεια του ty check.

Τι δεν μέτρησα: κατανάλωση μνήμης — νούμερο από εκτίμηση θα ήταν επινόηση. Δεν έτρεξα το ty πάνω σε μεγάλο project, δεν το σύγκρινα με mypy ή Pyright, δεν δοκίμασα τον γλωσσικό διακομιστή μέσα σε συντάκτη, δεν ακολούθησα την πειραματική σύνδεση με το uv, και δεν εξέτασα αν το εργαλείο στέλνει κάπου τηλεμετρία. Όποιο νούμερο δεν αναφέρεται εδώ, δεν είναι δικό μας.

Τι κοστίζει

Όσα μέτρησα.

Ο χώρος: 32,5 MB στον δίσκο με εγκατάσταση μέσα από το uv, που αντιστοιχεί σε 33.269 KB. Το πακέτο που κατεβαίνει για Windows είναι 13,4 MB. Είναι ένα εκτελέσιμο, όχι σύνολο βιβλιοθηκών, και δεν προσθέτει εξαρτήσεις στη δική σου εφαρμογή.

Ο χρόνος: 0,13 δευτερόλεπτα ο έλεγχος ενός αρχείου, ζεστή εκτέλεση.

Η έξοδος: 443 bytes και 18 γραμμές για δύο διαγνωστικά· 213 bytes η σύντομη μορφή των ίδιων δύο. Η βοήθεια: 372 bytes η γενική, 7.358 bytes για το ty check.

Το πλαίσιο του βοηθού: μηδέν σύμβολα σχήματος. Το ty δεν είναι διακομιστής, δεν δηλώνεται πουθενά, δεν φορτώνει ορισμούς εργαλείων σε καμία συνεδρία. Το μόνο που μπαίνει στο πλαίσιο είναι η έξοδος που ζήτησες.

Τα χρήματα: μηδέν. Άδεια MIT, χωρίς λογαριασμό, χωρίς κλειδί, χωρίς συνδρομή. Τρέχει χωρίς κάρτα γραφικών.

Απαιτήσεις: Python >=3.8 για εγκατάσταση από το PyPI, σύμφωνα με το πεδίο requires-python.

Όσα λέει ο κατασκευαστής, χωρίς δική μου επαλήθευση.

Ότι είναι δέκα ως εκατό φορές γρηγορότερο από τα mypy και Pyright, και ότι σε αλλαγή αρχείου μέσα σε μεγάλο project ξαναϋπολογίζει τα διαγνωστικά σε 4,7 χιλιοστά του δευτερολέπτου, απέναντι σε 386 για το Pyright και 2,38 δευτερόλεπτα για το Pyrefly. Ότι ο γλωσσικός διακομιστής υποστηρίζει μετάβαση σε ορισμό, μετονομασία, συμπλήρωση, αυτόματη εισαγωγή και υποδείξεις μέσα στη γραμμή. Ότι η σταθερή έκδοση έρχεται μέσα στο επόμενο έτος με σταθερότητα, την υπόλοιπη λεπτομέρεια της προδιαγραφής τύπων της Python, και υποστήριξη για Pydantic και Django. Και ότι η πειραματική σύνδεση με το uv θέλει uv από 0.12.3 και ty από 0.0.76 και μετά.

Τα σενάρια ταχύτητας δεν τα έτρεξα, τηλεμετρία δεν εξέτασα, και το νούμερο των λήψεων — 41.012.419 τον τελευταίο μήνα, 11.991.082 την εβδομάδα, 1.868.755 τη μέρα — δεν ξεχωρίζει αυτόματες δοκιμές από πραγματικούς χρήστες, οπότε το κρατάμε ως οροφή.

Ετυμηγορία

Score: 8.8/10.

Το εργαλείο κάνει αυτό που υπόσχεται, και το έκανε με το παραπάνω: έπιασε δύο λάθη σε ένα αρχείο, στο δεύτερο έδειξε και την υπογραφή που έπρεπε να ταιριάζει, και τελείωσε σε δεκατρία εκατοστά του δευτερολέπτου. Δεν θέλει λογαριασμό, δεν θέλει κάρτα, δεν πιάνει χώρο στο πλαίσιο του βοηθού, δεν κοστίζει τίποτα.

Της λείπει η ωριμότητα, και δεν το κρύβει: 0.0.95, 994 ανοιχτά ζητήματα, ρητή δήλωση ότι το API δεν είναι σταθερό.

Πρακτικά: δοκίμασέ το σήμερα, χωρίς δέσμευση — μία εντολή μέσα από το uv και βλέπεις. Βάλε το σε κάθε δουλειά Python, και βάλε τον βοηθό σου να το τρέχει πριν δηλώσει ολοκλήρωση, κρίνοντας από τον κωδικό εξόδου. Κάρφωσε την έκδοση όπου μετράει το αποτέλεσμα, και άφησε τα στρωμένα παραγωγικά συστήματα στα εργαλεία που ξέρεις, μέχρι να βγει η σταθερή έκδοση.

Πηγές:

https://pypi.org/project/ty/

https://github.com/astral-sh/ty

https://pypistats.org/packages/ty

https://docs.astral.sh/ty/

https://astral.sh/blog

Εγκατάσταση

2 ΒΗΜΑΤΑ
  1. uv tool install ty
  2. ty check .
ty: ο ελεγκτής τύπων της Astral που προλαβαίνει το λάθος πριν τρέξει · ΑΠΟΤΕΛΕΣΜΑ 8,8/10
ΠΗΓΗ
github.com/astral-sh/ty