두루미 리프트
Cranelift| 개발자 | 바이트코드 얼라이언스 |
|---|---|
| 초기 출시 | 전 ( |
| 안정적 방출 | 0.97.1 |
| 작성 위치 | 러스트 |
| 운영 체제 | 크로스 플랫폼 |
| 유형 | 컴파일러 |
| 면허증. | LLVM 예외가[1] 있는 Apache 라이센스 |
| 웹사이트 | https://captellift.dev/ |
Cranelift(이전의 Cretonne)는 대상에 독립적인 중간 표현을 실행 가능한 기계 코드로 변환하는 최적화 컴파일러 백엔드입니다.그것은 러스트로 쓰여 있습니다.이 프로젝트는 2016년에 시작되었고 현재 바이트코드 [2][3]얼라이언스에 의해 개발되었습니다.LLVM과 같은 컴파일러 백엔드가 사전 컴파일에 더 중점을 두는 것과 달리, Cranlift는 [4]프로젝트의 명시적인 목표가 짧은 컴파일 시간으로 적시 컴파일에 중점을 둡니다.
2023년 현재 Cranellift는 x86-64, AArch64, RISC-V 및 IBM z/Architecture와 같은 명령어 집합 아키텍처를 지원합니다.
역사
2020년 백엔드 프레임워크를 다시 쓰기 전에 이 프로젝트는 기계 코드 방출 이전의 모든 컴파일 단계에서 하나의 중간 표현(IR), 즉 CLIF(Cranelift IR Format)만을 사용했습니다.오래된 설계는 명령어 합법화를 사용했으며, 여기에는 각 CLIF 명령어가 실행 가능한 코드가 방출될 수 있는 대상 기계의 명령어에 해당할 때까지 지속적으로 높은 수준의 IR을 변환하는 작업이 포함되었습니다.
2020년에 백엔드는 나중의 컴파일 단계를 위해 VCode라는 별도의 기계별 IR을 대신 사용하도록 다시 작성되었습니다.이렇게 다시 쓴 후에는 높은 수준의 입력 CLIF가 VCode로 하향 조정되기 전에 중간 계층에 의해 최적화되며, [4]이는 백엔드에 남아 있는 패스로 추가로 변환됩니다.도메인 특정 언어(DSL)에서 피프홀 옵티마이저를 생성하는 데 사용되는 도구인 피프매틱도 [5]추가되었지만 나중에 [6]제거되었습니다.
2022년, 이온몽키의 레지스터 할당자를 개조한 새로운 레지스터 할당자가 추가되었습니다.또한 백엔드에서 [7]명령어 선택 단계의 개발을 용이하게 하기 위해 프로젝트의 또 다른 DSL인 ISL(Instruction Selection/Lowering Expressions DSL)을 활용하기 위해 백엔드 프레임워크를 재작업하였습니다.
미드엔드에서는 [8]2022년에 e-그래프를 활용하는 최적화 패스가 추가되었습니다.최적화 패스는 2023년부터 기본적으로 활성화됩니다.
적용들
현재 Cranellift는 Wasmtime 및 Wasmer와 같은 여러 Web Assembly 런타임에 의해 활용되고 있으며 LLVM 기반 런타임과 [9]비슷한 성능을 제공합니다.
크랜리프트로 구동되는 러스트 컴파일러용 코드 생성기도 존재합니다.[10]
참고 항목
레퍼런스
- ^ "LICENSE.md". GitHub.
- ^ "GitHub - bytecodealliance/cranelift at 399be07fcf00d0974d2a83d1af55f0bee9861d54". GitHub. Retrieved 26 January 2023.
- ^ "wasmtime/cranelift at main · bytecodealliance/wasmtime". GitHub. Retrieved 26 January 2023.
- ^ a b Fallin, Chris. "A New Backend for Cranelift, Part 1: Instruction Selection". cfallin.org. Retrieved 26 January 2023.
- ^ "Introduce peepmatic: a peephole optimizations DSL and peephole optimizer compiler by fitzgen · Pull Request #1647 · bytecodealliance/wasmtime". GitHub.
- ^ "Remove Peepmatic!!! by fitzgen · Pull Request #3543 · bytecodealliance/wasmtime". GitHub. Retrieved 2023-02-03.
- ^ Fallin, Chris. "Cranelift's Instruction Selector DSL, ISLE: Term-Rewriting Made Practical". cfallin.org. Retrieved 26 January 2023.
- ^ "egraph-based midend: draw the rest of the owl (productionized). by cfallin · Pull Request #4953 · bytecodealliance/wasmtime". GitHub. Retrieved 26 January 2023.
- ^ Denis, Frank. "Performance of WebAssembly runtimes in 2023 Frank DENIS random thoughts". 00f.net. Retrieved 26 January 2023.
- ^ "Cranelift codegen backend for rust". GitHub. 26 January 2023. Retrieved 26 January 2023.