성능 힌트: begin-encourage-inline
성능 힌트: begin-encourage-inline
racket/performance-hint 라이브러리는 컴파일러가 코드를 인라인(inline)하도록 돕는 힌트를 제공해요. 함수 정의에 인라인을 권장하는 속성을 붙이거나, 정의 자체를 강제로 인라인하게 만들 수 있죠. 성능이 중요한 코드에서 인라인을 활용하고 싶을 때 이 라이브러리의 폼들을 사용하면 돼요.
출처: Racket Reference
본문
(require racket/performance-hint)
package: base
이 절에서 다루는 바인딩들은 racket/base나 racket이 아니라 racket/performance-hint 라이브러리에서 제공돼요.
syntax
(begin-encourage-inline form ...)
각 form에 'compiler-hint:cross-module-inline 문법 속성을 붙여줘요. 이 속성은 form이 함수 정의일 때 특히 유용해요. define-values를 참고하세요.
begin-encourage-inline 폼은 (submod racket/performance-hint begin-encourage-inline) 모듈에서도 제공되는데, 이 서브모듈은 racket/performance-hint보다 의존성이 적어요.
base 패키지의 6.2 버전에서 (submod racket/performance-hint begin-encourage-inline) 서브모듈을 추가했어요.
syntax
(define-inline id expr)
(define-inline (head args) body ...+)
head = id | (head args)
args = arg ... | arg ... . rest-id
arg = arg-id | [arg-id default-expr] | keyword arg-id | keyword [arg-id default-expr]
define와 비슷하지만, 그 정의가 호출 지점에서 인라인되도록 보장해요. 재귀 호출은 무한 인라인을 막기 위해 인라인되지 않아요. 고차 함수로 사용되는 경우도 지원하지만 인라인되지는 않아요. 인자 개수를 잘못 주거나 잘못된 키워드 인자를 주는 잘못된 적용(misapplication)도 인라인되지 않고 실행 시 오류로 남아요.
define-inline 폼은 Racket 컴파일러 자체의 인라인 휴리스틱과 충돌할 수 있어서, 다른 인라인 시도(예: begin-encourage-inline)가 실패한 경우에만 사용해야 해요.
base 패키지의 8.1.0.5 버전에서 잘못된 적용을 실행 시 오류로 처리하도록 변경됐어요.
더 알아보기
- define-values — 여러 값을 한 번에 정의하는 폼.