토파즈의 다음 개선 계획과 내 프로젝트에 달라질 점을 확인하세요. 출시한 변경 내용은 히스토리에서 볼 수 있습니다.
5.21.2 계획
5.21.2는 호환성을 유지하는 성능 개선 패치 하나로 계획합니다. 문법, 기존 프로그램의 허용 여부, 진단, 평가 순서와 실행 결과를 보존하면서 컴파일러의 작업량을 줄입니다.
아래 다섯 가지가 초기 개선 범위입니다. 측정 결과로 효과가 있는 구현을 선택합니다. 출시 일정과 개선 폭은 실제 결과에 따라 정합니다.
타입과 import 조회 재사용
타입 참조나 import가 많은 프로그램은 같은 선언을 반복해서 찾을 수 있습니다. 컴파일러가 해당 모듈과 스코프 안에서 조회 결과를 재사용하도록 개선합니다.
프로젝트가 커질 때 반복 검색 비용을 줄이는 것이 목표입니다. 비공개 선언, 이름 가림, 명목 타입의 정체성과 import 순환 처리는 유지합니다. 모듈이 바뀌면 영향을 받는 조회 결과도 갱신해야 합니다.
구문 참조 캐시
구문 노드에서 선언으로 이어지는 참조를 재사용해 같은 구문 트리를 반복해서 탐색하는 작업을 줄입니다. 한 번의 컴파일에서 이름과 표현식을 여러 차례 분석하는 부분에 적용합니다.
참조는 해당 프로그램과 수정본 안에서만 유효해야 합니다. 아직 처리 중인 순환 import와 실제로 없는 이름을 구분해 오류나 오류 위치가 캐시에 가려지지 않도록 합니다.
컴파일러 임시 배열 줄이기
표현식의 피연산자와 label을 읽을 때 곧 버릴 임시 배열이 만들어질 수 있습니다. 같은 순회 동작을 유지할 수 있는 곳에서는 기존 자료를 직접 읽도록 개선합니다.
컴파일 중 메모리 할당과 복사를 줄이는 것이 목표입니다. 피연산자 순서, 단회 평가, 진단 순서와 조기 종료는 바꾸지 않습니다.
시드의 JSON 변환 줄이기
부트스트랩 시드는 JSON으로 컴파일 요청과 응답을 주고받습니다. 공개 입출력 형식을 유지하면서 내부에서 반복하는 파싱과 직렬화를 줄입니다.
시드에서 컴파일러를 다시 만드는 비용을 개선합니다. UTF-8 처리, 입력 한도, 오류와 생성 프로그램은 유지합니다. 전체 시간과 메모리 사용량을 측정해 채택 여부를 정합니다.
생성 Rust 표현식 단계화
깊게 중첩된 생성 표현식은 Rust가 토파즈 프로그램을 컴파일할 때 작업량을 늘릴 수 있습니다. 적합한 표현식을 명시적인 중간 단계로 나눕니다.
구문 중첩과 컴파일 부담을 줄이는 것이 목표입니다. 평가 순서, 임시 값의 수명, 빌림, 취소와 오류 전파를 보존합니다. 긴 줄의 서식만 바꾸는 작업은 이 개선에 해당하지 않습니다.
측정 후 선택할 개선
다음 네 영역은 실제 병목이 확인되면 패치에 포함할 수 있습니다.
- 컴파일 단계 자체보다 변환 비용이 클 때 단계 사이의 JSON 변환을 줄입니다.
- 첫 오류, 진단 순서, 개수 한도와 조기 종료를 유지하면서 정렬 작업을 줄입니다.
- 인자의 소유 관계, 기본값과 단회 평가를 유지하면서 이름 붙인 인자의 준비 비용을 줄입니다.
- 기한, 취소와 호스트 상호작용을 보존할 수 있는 호출의 비동기 비용을 줄입니다. 효과를 알 수 없는 호출은 동적 처리를 유지합니다.
타입별 레코드, 열거형, 컬렉션과 호출 표현 개선도 검토합니다. 효과와 호환성을 확인한 범위를 같은 패치에 합칩니다.
계획에서 출시 결과까지
이 페이지의 버전과 개선 항목에는 고정 링크가 있습니다. 5.21.2를 출시하면 히스토리의 해당 버전에서 이 계획으로 연결합니다. 여기에 포함된 개선 항목도 실제 출시 결과로 연결합니다.
빠진 항목이나 바뀐 범위는 이유와 함께 이 페이지의 현행 계획에 반영합니다. 측정 결과, 회귀, 호환 요구와 긴급 수정에 따라 범위를 조정할 수 있습니다. 히스토리에는 실제 출시한 변경을 기록합니다.