파이썬의 두 신규 Rust 기반 타입 체커 Pyrefly와 Ty 비교

1 day ago 8

  • 최근 Meta의 PyreflyAstral의 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만이 교차 타입(&) 및 부정 타입(~) 을 지원해 아래와 같은 복잡한 타입 연산을 처리함

    • 예: WithX | Other 타입에서 'x' 속성이 있을 때, Ty는 WithX로 자동 분기
    • 예: 특정 서브클래스가 아닌 경우, MyClass & ~MySubclass로 타입 해석
  • 이러한 교차 및 부정 타입은 유형 이론에서 매우 진보적인 기능임

기타 고급 예시

  • Ty는 타입 시스템으로 디오판틴 방정식 등 복합 연산에도 활용 가능
  • 테스트가 마크다운 문서로 작성됨(참조: Astral ruff의 mdtest 리소스)

결론 및 전망

  • 파이썬 생태계에 압도적으로 빠르고, 새로운 타입 체커가 등장한 상황임
  • Ty는 점진적 타입 안정성을, Pyrefly는 능동적 타입 추론을 각각 주된 전략으로 삼음
  • 두 도구 모두 초창기라 향후 기능이 수렴하거나 진화할 여지가 많음
  • 공식 사이트에서 체험해볼 수 있으며, VSCode·Cursor 등 주요 에디터 플러그인도 제공함
  • 향후 Google 역시 Go 기반 타입 체커를 오픈 소싱할 예정이다는 소문이 있어, 파이썬 타입 분석 분야가 더욱 풍부해질 전망임

활용/참고

  • Pyrefly: pyrefly.org/sandbox
  • Ty: play.ty.dev
  • Astral의 Ty는 마크다운 기반 테스트 활용(자세한 경로는 ruff repo mdtest 참고)
  • 공식 문서, 에디터 플러그인, 패키지 설치 명령도 모두 제공됨

문의 및 피드백: blog@edward-li.com

Read Entire Article