- 최근 Meta의 Pyrefly와 Astral의 Ty 두 Rust 기반 파이썬 타입 체커가 공개되며, 기존 mypy와 pyright 대비 압도적 성능과 새로운 타이핑 패러다임을 보여줌
- Pyrefly는 적극적 타입 추론 및 오픈소스를 지향하고, Ty는 “** gradual guarantee**” 원칙을 도입해 타입 에러 발생 최소화에 중점을 둠
- 두 도구 모두 초기 알파 버전이지만, 다양한 프로젝트에서의 벤치마크 결과 Ty가 평균적으로 더 빠른 수행 속도를 기록함
-
증분 분석에서 Pyrefly는 모듈 단위, Ty는 함수 타겟의 세밀한 증분화를 제공해 사용성과 구조가 상이함
- Ty는 교차 타입 및 부정 타입 등 혁신적 타입 시스템을 선보이고, 더 직관적이고 명확한 오류 메시지를 제공함
Pyrefly와 Ty 소개
- 2024년 6월 기준 Pyrefly와 Ty는 Rust로 개발된 파이썬 타입 체커임
- Pyrefly는 Meta(구 Facebook)에서 개발했으며, 기존의 OCaml 기반 Pyre를 대체함
- Ty는 Astral이 개발했으며, Astral은 uv, ruff 등 파이썬 도구로 유명함
- 두 프로젝트 모두 오픈 소스로 공개 중이지만 아직 공식 릴리즈 전 알파 단계임
- 두 팀 모두 파이콘 2025 타이핑 서밋에서 각각의 비전, 목표, 접근법을 소개함
공통점
- 모두 Rust로 개발되어 있으며, 증분 분석(Incremental Checking)을 지원함
- 파이썬 코드의 AST 파싱에 ruff를 활용함
- 커맨드라인 타입 검사와 LSP/IDE 통합 지원 등 개발 환경과의 연결성도 뛰어남
차이점 1: 속도
PyTorch 벤치마크
- Ty가 Pyrefly보다 약 2~3배 더 빠르며, 둘 다 기존 mypy, pyright보다 10~20배 빠름
- Pyrefly는 Pyre 대비 35배, mypy/pyright 대비 14배의 성능 향상을 목표로 함
- Ty는 현 세대 타입 체커보다 한두 자릿수 빠른 성능을 목표로 설계됨
Django 벤치마크
- Ty가 가장 빠르며, Pyrefly가 그 뒤를 이음
- Pyright는 확연히 느린 결과를 보임
mypy 저장소 벤치마크
- 비슷한 결과로 Ty가 가장 빠르고, Pyrefly가 근소한 차이로 뒤따름
- mypy와 pyright는 현저히 느린 수행시간을 기록함
차이점 2: 타이핑 목표
Pyrefly
- 코드에 별도 명시적 타입이 없어도 최대한 타입을 추론해 오류를 포착하는 전략 추구
- 더욱 적극적인 타입 유추로 코드 안정성 극대화 지향
Ty
-
Gradual guarantee(점진적 보장) 원칙 적용
- 작동하는 코드에서 명시적 타입 제거 시 타입 에러가 발생하지 않도록 설계됨
- 타입 어노테이션 없이도 에러를 유발하지 않으며, 필요한 경우에만 추가 어노테이션 요구
- 예: 명시적 타입이 없는 필드에 값을 할당해도 타입 에러를 일으키지 않고, 'Unknown | None' 등으로 처리
차이점 3: 증분 분석 방식
- Pyrefly: 변경된 파일(모듈) 및 해당 종속 모듈만 재분석 (모듈 단위 증분화)
- Ty: Rust의 Salsa 프레임워크를 활용해 함수 단위까지 세밀한 증분화
- 모듈 단위는 속도가 충분하다는 판단, 함수 단위는 코드베이스가 복잡해질 수 있음(각 도구의 전략 차이)
차이점 4: 기능(타입 시스템 및 지원)
Pyrefly의 장점
-
암묵적 타입 추론이 매우 강력함
- 명시적 타입 없이도 함수 반환값, 딕셔너리, 리스트 등 복잡한 타입을 분석해 오류를 잡아냄
- 제네릭 및 오버로드, 와일드카드 import 등 복잡한 타이핑 문제를 중점적으로 설계함
- 제네릭 타입 추론 정확도가 Ty보다 더 높음
Ty의 특이점
- “gradual guarantee”로 인해 명시적 타입 미부재 시에도 자유롭게 타입 변화 허용
-
교차 타입(Intersection Types) 및 부정 타입(Negation Types) 등 혁신적 타입 시스템 지원
-
오류 메시지가 매우 명확하고 직관적으로 설계됨
- 리스트 등에 다양한 타입 할당을 자유롭게 허용하며, 타입의 'Unknown' 값을 시스템적으로 도입
한계점/알파 상태
- 두 제품 모두 알파 단계로, 타입 추론 또는 기능 일부가 미완성 상태임
- 예를 들어 Ty의 리스트 타입 추론 등 일부 결과는 완성도가 부족함
상세 기능 비교
암묵적 타입 추론
- Pyrefly는 반환 타입, 컬렉션 객체 타입을 능동적으로 추론해 revealed type과 오류를 명확히 제시함
- Ty는 inference가 부족하면 Unknown 또는 @Todo로 반환함
제네릭
- Pyrefly와 Ty 모두 일반적인 제네릭 타입 문제를 잘 해결함
- Pyrefly는 타입 파라미터 없이 생성된 인스턴스의 타입 해석에서 우위를 가짐
- 두 체커 모두 공변/반공변성(covariance/contravariance) 문제에서는 mypy, pyright 대비 약점을 보임
오류 메시지
- Ty는 concise하고 읽기 쉬운 에러 메시지에 중점을 둠
- Pyrefly, mypy, pyright 대비 한눈에 이해하기 쉬운 메시지 제공
교차/부정 타입
기타 고급 예시
- Ty는 타입 시스템으로 디오판틴 방정식 등 복합 연산에도 활용 가능
- 테스트가 마크다운 문서로 작성됨(참조: Astral ruff의 mdtest 리소스)
결론 및 전망
- 파이썬 생태계에 압도적으로 빠르고, 새로운 타입 체커가 등장한 상황임
- Ty는 점진적 타입 안정성을, Pyrefly는 능동적 타입 추론을 각각 주된 전략으로 삼음
- 두 도구 모두 초창기라 향후 기능이 수렴하거나 진화할 여지가 많음
- 공식 사이트에서 체험해볼 수 있으며, VSCode·Cursor 등 주요 에디터 플러그인도 제공함
- 향후 Google 역시 Go 기반 타입 체커를 오픈 소싱할 예정이다는 소문이 있어, 파이썬 타입 분석 분야가 더욱 풍부해질 전망임
활용/참고
문의 및 피드백: blog@edward-li.com