비교 목록으로 돌아가기
TypeScript 런타임

Perry vs Deno

Deno는 V8 기반의 현대적인 JavaScript·TypeScript 런타임으로, 일급 TypeScript 지원, 권한 기반 보안 모델, 그리고 V8을 애플리케이션과 함께 단일 실행 파일로 번들링하는 `deno compile` 명령어를 제공합니다. Perry는 TypeScript를 곧바로 네이티브 머신 코드로 컴파일합니다 — 출력에 V8이 없고, 런타임 계층도 없으며, 작은 네이티브 바이너리만 남습니다.

Deno란 무엇인가?

Deno는 Rust로 작성되었으며 V8과 Tokio를 기반으로 하는 TypeScript·JavaScript 런타임입니다. `.ts` 소스를 직접 실행하고, 포매터·린터·테스트 러너·언어 서버 같은 도구를 내장하고 있으며, 네트워크·파일·환경 변수 접근에 명시적인 권한 부여를 요구하는 권한 모델을 사용합니다. `deno compile`은 V8을 포함한 Deno 런타임을 사용자의 코드와 함께 묶어 자체 실행 파일을 생성합니다. Deno는 x64 및 arm64 환경의 Linux, macOS, Windows를 타겟으로 합니다.

Perry란 무엇인가?

Perry는 Rust로 작성된 네이티브 TypeScript 컴파일러입니다. LLVM을 통해 TypeScript를 곧바로 네이티브 머신 코드로 컴파일합니다 — V8도, JIT도, 런타임도 없습니다. 출력은 단일 바이너리로, 네이티브 코드는 보통 수백 KB에서 수 MB이며, JS 엔진이 필요한 npm 패키지를 위해 임베디드 V8 런타임을 선택적으로 포함시키면 더 커질 수 있습니다.

나란히 비교

기능PerryDeno
출력 형태네이티브 머신 코드 (LLVM)사용자 코드 + Deno 런타임 (V8) 번들링
바이너리 내 JavaScript 엔진기본값 없음, 선택적 V8V8, 항상 포함
Hello-world 바이너리 크기약 330 KB약 80–100 MB (V8 포함)
JIT없음 (AOT 컴파일)있음 (V8 TurboFan)
모바일 타겟iOS, iPadOS, Android지원하지 않음
워치·TV·WASM·웹watchOS, tvOS, Wear OS, WASM, Web/JS지원하지 않음
네이티브 UI네이티브 플랫폼 API 기반 25개 이상의 위젯없음
권한 모델표준 OS 프로세스 권한런타임 단위의 세분화된 권한 (--allow-net, --allow-read 등)
안정성1.0 이전안정 (1.x / 2.x)
구현 언어RustRust (V8 위에서 동작)

Perry가 앞서는 점

  • +현저히 작은 바이너리. Perry의 hello world는 약 330 KB입니다. `deno compile` 결과물은 V8을 포함해 80–100 MB 수준입니다.
  • +바이너리 안에 JavaScript 엔진이 없습니다. TypeScript는 런타임에 V8이 해석하는 것이 아니라 네이티브 머신 코드로 컴파일됩니다.
  • +모바일, 워치, TV, WASM, 웹 타겟 지원. Deno는 서버·데스크톱 전용입니다.
  • +AppKit, UIKit, GTK4, Win32, JNI에 매핑되는 네이티브 UI 위젯 — Deno에는 대응 기능이 없습니다.
  • +더 빠른 콜드 스타트. AOT 컴파일된 네이티브 바이너리는 V8 시작 비용을 지불하지 않습니다.
  • +M1 Max에서 동일 조건으로 측정한 연산 마이크로벤치마크에서 우위 — Perry의 `reassoc contract` fast-math 기본값 덕분에 LLVM이 자동 벡터화하고 자명하게 폴딩 가능한 누산기를 접을 수 있습니다 (예: loop_overhead 12 ms, math_intensive 14 ms; perry/benchmarks 참고).

Deno이 앞서는 점

  • +긴 운영 실적과 활발한 2.x 라인을 가진 성숙하고 안정적인 런타임.
  • +세분화된 권한 모델. Deno는 명시적인 `--allow-net`, `--allow-read` 등을 요구합니다 — 샌드박스 스크립트와 신뢰할 수 없는 코드에 유용합니다.
  • +내장 도구: 포매터, 린터, 테스트 러너, 문서 생성기, LSP 등이 모두 런타임에 포함되어 있습니다.
  • +런타임 차원의 완전한 V8 생태계 — V8에서 돌아가는 모든 것이 Deno에서 동작하며, 장기 실행 핫패스에서의 JIT 최적화도 함께 누립니다.
  • +개발 중 별도의 컴파일러 단계 없이 일급 TypeScript 지원과 완전 관리되는 타입 검사 파이프라인.
  • +런타임에 네이티브로 구현된 표준 웹 플랫폼 API (fetch, Web Streams, Web Crypto).

Perry을 선택해야 할 때

작고 빠르게 시작하는 네이티브 바이너리가 필요할 때, 모바일이나 비서버 타겟으로 배포할 때, 네이티브 UI가 필요할 때, 또는 JS 엔진이 들어가지 않은 바이너리로 TypeScript를 컴파일하고 싶을 때 Perry를 선택하세요.

Deno을 선택해야 할 때

안정적이고 도구가 모두 갖춰진 TypeScript 런타임을 원할 때, 권한 샌드박스를 중요하게 여길 때, 서버 사이드나 스크립팅 워크로드를 만들 때, 또는 런타임 단위의 완전한 V8 생태계 호환성이 필요할 때 Deno를 선택하세요.

결론

둘 다 TypeScript 프로그램을 단일 바이너리로 배포할 수 있게 해주지만, 그 바이너리 안에 들어가는 것이 다릅니다. Deno는 V8 + 잘 정돈된 런타임 + 권한 샌드박스를 제공합니다. Perry는 엔진이 없는 네이티브 머신 코드를 제공합니다. 생태계와 권한 모델이 중요한 서버 사이드와 스크립팅 작업에는 Deno가 더 좋은 선택입니다. 작고 빠르게 시작하는 바이너리, 모바일 타겟, 네이티브 UI가 필요하다면 Perry가 더 나은 선택입니다.

Perry 사용해보기

오늘 바로 TypeScript를 네이티브로 컴파일하세요.

시작하기