%foreign-inline: 핵심 컴파일러 폼에 대한 안전하지 않은 접근
#%foreign-inline: 핵심 컴파일러 폼에 대한 안전하지 않은 접근
사용자 정의 컴파일러 폼을 그대로 인라인하고 싶을 때 쓰는 저수준 특수 폼이에요. Racket이 실행되는 핵심 컴파일러와 런타임 시스템이 지원하는 표현식을 안전하지 않은 방식으로 인라인한다고 이해하시면 돼요.
출처: Racket Reference
본문
3.27 핵심 컴파일러 폼에 대한 안전하지 않은 접근
(#%foreign-inline datum maybe-mode)maybe-mode | = | (공백) | | #:effect | | #:pure | | #:pure* | | #:copy | | #:copy*
#%foreign-inline 폼은 Racket이 실행되는 핵심 컴파일러와 런타임 시스템이 지원하는 표현식 폼을 안전하지 않게 인라인합니다. Racket CS의 경우 그 핵심은 Chez Scheme이에요. maybe-mode를 생략하면 #:effect를 지정한 것과 같습니다.
datum이 지원되는지, 그리고 (maybe-mode와 일관되게) 적절한 동작을 갖는지 확인하는 것은 이 폼을 사용하는 사용자의 몫이에요:
-
datum은 둘러싼 스코프에서 바인딩된 어떤 변수도 참조하면 안 됩니다. -
datum을 평가할 때 예외를 일으키거나 현재 continuation을 검사해서는 안 되고, 단일 값을 반환해야 합니다. -
#:pure나#:copy를 지정했다면,datum을 평가할 때 부수 효과가 없거나 앞선 효과에 의존하지 않아야 합니다. -
#:pure*나#:copy*를 지정했다면,datum을 평가할 때 부수 효과가 없거나 앞선 효과에 의존하지 않아야 할 뿐 아니라, 그 표현식을 인자에 적용할 때도 적용 자체에 부수 효과가 없거나 앞선 효과에 의존하지 않아야 합니다. -
#:copy나#:copy*를 지정했다면, 컴파일이 전체(#%foreign-inline datum maybe-mode)표현식을 한 번 이상 복제해 그 값이 쓰이는 여러 곳에서 구현을 인라인할 수 있습니다.
버전 9.1.0.8의 package base에서 추가됐어요.