8.1 내장 컴파일러 메타데이터(Built-in Compiler Metadata)
8.1 내장 컴파일러 메타데이터(Built-in Compiler Metadata)
Haxe 3.0부터 haxe --help-metas를 실행해 정의된 컴파일러 메타데이터 목록을 얻을 수 있어요.
전체 메타데이터 목록(메타데이터 / 인자 / 설명 / 플랫폼):
@:abi(cpp) — 함수 ABI/호출 규약.@:abstract(java, cs) — 기반 클래스 구현을abstract로 설정한다.@:access(<Target path>, all) — 패키지, 타입 또는 필드에 private 접근을 강제한다. lf-access-control 참조.@:allow(<Target path>, all) — 패키지, 타입 또는 필드에서 private 접근을 허용한다. lf-access-control 참조.@:analyzer(all) — 정적 분석기를 구성하는 데 사용된다.@:annotation(java) —--java-libimport의 annotation(@interface) 정의가 이 메타데이터로 주석 처리된다. Haxe가 컴파일한 타입에는 영향이 없다.@:arrayAccess(all) — abstract에 배열 접근을 허용한다. types-abstract-array-access 참조.@:cs.assemblyMeta(cs) — 네이티브 C# 어셈블리 속성을 선언하는 데 사용된다.@:cs.assemblyStrip(cs) — 주석 처리된 타입을 C# 어셈블리에서 제거한다.@:bridgeProperties(cs) — 이 클래스의 모든 Haxe 속성에 대한 네이티브 property bridge를 생성한다.@:build(<Build macro call>, all) — 매크로에서 클래스, enum 또는 abstract를 빌드한다. macro-type-building 참조.@:buildXml(cpp) —Build.xml에 주입할 XML 데이터를 지정한다.@:bypassAccessor(all) — 속성 접근자 메서드를 호출하지 않고 필드에 직접 접근한다. class-field-property 참조.@:callable(all) — abstract가 호출을 기반 타입으로 전달한다.@:classCode(java, cs) — 클래스에 플랫폼 네이티브 코드를 주입하는 데 사용된다.@:commutative(all) — abstract 연산자를 교환(commutative)으로 선언한다. types-abstract-operator-overloading 참조.@:const(all) — 타입 매개변수가 표현식 값을 받을 수 있게 한다.@:coreApi(all) — 이 클래스를 코어 API 클래스로 식별한다(API 검사 강제).@:coreType(all) — abstract를 구현이 필요 없는 코어 타입으로 식별한다. types-abstract-core-type 참조.@:cppFileCode(cpp) — 생성된 cpp 파일에 주입할 코드.@:cppInclude(cpp) — 생성된 cpp 파일에 포함할 파일.@:cppNamespaceCode(cpp) — C++ 네임스페이스 코드.@:cs.using(cs) — 모듈에 using 지시문을 추가한다.@:dce(all) —--dce full이 지정되지 않아도 dead code elimination을 강제한다. cr-dce 참조.@:debug(flash) —--debug없이도 SWF에 디버그 정보가 생성되도록 강제한다.@:decl(cpp) — C++ 선언.@:delegate(cs) —--net-lib에 의해 대리자(delegate)에 자동 추가된다.@:depend(cpp) — 의존성.@:deprecated(all) — 타입이나 필드를 더 이상 사용하지 않는 것으로 표시한다.@:eager(all) — typedef가 일찍 따라가도록 강제한다.@:enum(all) — abstract 정의에 유한 값 집합을 정의한다. types-abstract-enum 참조.@:event(cs) —--net-lib에 의해 이벤트에 자동 추가된다. Haxe가 컴파일한 타입에는 영향이 없다.@:expose(<name>, js, lua) — 클래스나 필드를 Haxe exports에 포함한다(기본 이름은 classpath). target-javascript-expose 참조.@:extern(all) — 필드를 extern으로 표시해 생성되지 않게 한다.@:file(<File path>, flash) — 주어진 바이너리 파일을 대상 SWF에 포함하고 클래스와 연결한다(반드시flash.utils.ByteArray확장). target-flash-resources 참조.@:fileXml(cpp) — 파일의Build.xml항목에 주어진 XML 속성 스니펫을 포함한다.@:final(all) — 클래스/인터페이스가 확장되거나 메서드가 오버라이드되는 것을 방지한다. 키워드final로 대체됨. class-field-final 참조.@:fixed(all) — 익명 객체가 고정 필드를 가지도록 선언한다.@:flash.property(flash) — Flash 속성.@:font(<TTF path>, <Range String>, all) — 주어진 TrueType 글꼴을 클래스에 내장한다(반드시flash.text.Font확장). target-flash-resources 참조.@:forward(<List of field names>, all) — 필드 접근을 기반 타입으로 전달한다. types-abstract-forward 참조.@:forward.new(all) — 생성자 호출을 기반 타입으로 전달한다.@:forwardStatics(<List of field names>, all) — static 필드 접근을 기반 타입으로 전달한다. types-abstract-forward 참조.@:forward.variance(all) — 분산 유니피케이션을 기반 타입으로 전달한다.@:from(all) — abstract의 필드가 함수에서 식별된 타입에서 오는 캐스트 연산임을 지정한다. types-abstract-implicit-casts 참조.@:functionCode(cpp, java, cs) — 함수에 플랫폼 네이티브 코드를 주입하는 데 사용된다.@:functionTailCode(cpp) — 함수 꼬리 코드.@:generic(all) — 클래스나 클래스 필드를 generic으로 표시해 각 타입 매개변수 조합이 자신의 타입/필드를 생성한다. type-system-generic 참조.@:genericBuild(all) — 지정된 매크로를 사용해 타입의 인스턴스를 빌드한다.@:genericClassPerMethod(all) — 제네릭 static 메서드 특수화마다 컴파일러가 별도 클래스를 생성하게 한다.@:getter(<Class field name>, flash) — 주어진 필드에 네이티브 getter 함수를 생성한다.@:hack(all) —@:final로 표시된 클래스 확장을 허용한다. 모든 대상에서 동작이 보장되지는 않는다.@:headerClassCode(cpp) — 생성된 클래스의 헤더에 주입할 코드.@:headerCode(cpp) — 생성된 헤더 파일에 주입할 코드.@:headerInclude(cpp) — 생성된 헤더 파일에 포함할 파일.@:headerNamespaceCode(cpp) — 생성된 헤더의 네임스페이스 코드.@:hlNative(hl) — 네이티브 함수에hdll이름과 함수 접두사를 지정한다.@:hxGen(java, cs) — extern 클래스가 Haxe로 생성되었음을 주석 처리한다.@:ifFeature(<Feature name>, all) — 주어진 기능이 컴파일의 일부이면 필드가 DCE에 의해 유지되게 한다. cr-dce 참조.@:pythonImport(python) — extern 클래스에 대해 python import 문을 생성한다.@:include(cpp) — C++ include.@:inheritDoc(all) — 인자 없이 사용하면 부모 필드/클래스에서,@:inheritDoc(pack.Some.field)처럼 사용하면 지정된 클래스/필드에서 문서를 추가한다.@:inline(all) —inline expr과inline function의 경우 파서가 삽입한다.@:internal(java, cs) — 주석 처리된 필드/클래스를 'internal' 접근으로 생성한다.@:isVar(all) — 그렇지 않으면 물리 필드가 필요하지 않은 속성에 대해 물리 필드를 강제로 생성한다. class-field-property-rules 참조.@:javaCanonical(<Output type package>, <Output type name>, java) — Java 대상이 타입의 정규 경로를 주석 처리하는 데 사용한다.@:java.default(java) — Java 언어의 default 수정자와 동등하다.@:jvm.synthetic(java) — 생성된 클래스/필드/메서드를 synthetic으로 표시한다.@:jsRequire(js) — 주어진 extern에 대해 JavaScript 모듈 require 표현식을 생성한다. target-javascript-require 참조.@:luaRequire(lua) — 주어진 extern에 대해 Lua 모듈 require 표현식을 생성한다.@:luaDotMethod(lua) — 주어진 extern 타입 인스턴스가 콜론 대신 점 스타일로 메서드를 호출해야 함을 나타낸다.@:keep(all) — 필드나 타입이 DCE에 의해 유지되게 한다. cr-dce 참조.@:keepInit(all) — 모든 필드가 제거돼도 클래스가 DCE에 의해 유지되게 한다. cr-dce 참조.@:keepSub(all) —@:keep메타데이터를 모든 구현/확장 클래스로 확장한다. cr-dce 참조.@:markup(all) — 인라인 XML 파싱의 결과로 사용된다.@:macro(all) — (deprecated).@:mergeBlock(all) — 주석 처리된 블록을 현재 스코프로 병합한다.@:multiReturn(lua) — extern 클래스를 multi-return 함수의 결과로 주석 처리한다. target-lua-multireturns 참조.@:multiType(<Relevant type parameters>, all) — abstract가 그@:to함수에서 this-type을 선택함을 지정한다.@:native(<Output path>, all) — 생성 중 타입이나 클래스 필드의 경로를 다시 쓴다. lf-externs 참조.@:java.native(java) — 함수가 JNI를 통해 네이티브 코드에 구현이 있음을 주석 처리한다.@:nativeChildren(java, cs) — 타입의 모든 자식이 extern 정의(플랫폼 네이티브)처럼 취급되어야 함을 주석 처리한다.@:nativeGen(java, cs, python) — 타입이 extern 정의(플랫폼 네이티브)처럼 취급되어야 함을 주석 처리한다.@:nativeProperty(cpp) — dynamic 사용에서도 실행되는 네이티브 속성을 사용한다.@:nativeStaticExtension(cpp) — static 함수 구문을 멤버 호출로 변환한다.@:noCompletion(all) — 컴파일러가 이 필드/타입에 완성을 제안하지 않게 한다. cr-completion 참조.@:noClosure(all) — 클래스의 메서드 또는 모든 메서드가 값으로 사용되는 것을 방지한다.@:noDebug(flash, cpp) —--debug가 설정돼도 디버그 정보를 생성하지 않는다.@:noDoc(all) — 타입이나 필드가 문서 생성에 포함되지 않게 한다.@:noImportGlobal(all) — static 필드가import Class.*로 import되지 않게 한다.@:nonVirtual(cpp) — 함수를 cpp에서 non-virtual로 선언한다.@:noPrivateAccess(all) — 주석 처리된 표현식에 무언가에 대한 private 접근을 허용하지 않는다.@:noStack(cpp) — 스택 없음.@:notNull(all) — abstract 타입이 null 값을 받지 않음을 선언한다. types-nullability 참조.@:noUsing(all) — 필드가 정적 확장에 사용되는 것을 방지한다. lf-static-extension 참조.@:nullSafety(<Off | Loose | Strict | StrictThreaded>, all) — 클래스나 필드에 대해 null 안전성을 활성화한다.Off인자로 주어지면 해제한다. cr-null-safety 참조.@:objc(cpp) — Objective-C 코드와 상호운용하는 데 사용되는 클래스/인터페이스를 선언한다.@:objcProtocol(cpp) — 네이티브 Objective-C 프로토콜에서 인터페이스를 연관시키거나 함수를 기술한다.@:op(<The operation>, all) — abstract 필드를 연산자 오버로드로 선언한다. types-abstract-operator-overloading 참조.@:optional(all) — 구조체의 필드를 선택적(optional)으로 표시한다. types-nullability-optional-arguments 참조.@:overload(<Function specification (no expression)>, all) — 필드가 서로 다른 인자 타입으로 호출될 수 있게 한다. target-javascript-external-libraries 참조.@:persistent(eval) — 매크로 문맥에서 static 변수 값을 컴파일 간 유지한다.@:php.attribute(php) — 주석 처리된 심볼에 PHP attribute를 추가한다. 메타 인자는 문자열 상수로 기대한다. 예:@:php.attribute('\\my\\Attr(123)')는 컴파일된 php 파일에서#[\my\Attr(123)]로 생성된다.@:phpGlobal(php) — extern 클래스의 static 필드가 실제로 전역 PHP 네임스페이스에 있음을 나타낸다.@:phpClassConst(php) — extern 클래스의 static var가 PHP 클래스 상수임을 나타낸다.@:phpMagic(php) — 주석 처리된 필드를 특수 PHP magic 필드로 취급한다 — 이 메타는 컴파일러가 PHP 코드 생성 시 그런 필드 이름을 바꾸지 않게 한다.@:phpNoConstructor(php) — PHP에 네이티브 생성자가 없지만 Haxe extern에서 생성자가 필요한 extern 클래스를 위한 특수 메타.@:pos(<Position>, all) — 재현된 표현식의 위치를 설정한다. macro-reification 참조.@:publicFields(all) — 상속 클래스의 모든 클래스 필드를 public으로 강제한다.@:private(cs) — 클래스 필드를 private으로 표시한다.@:privateAccess(all) — 주석 처리된 표현식에 무언가에 대한 private 접근을 허용한다.@:protected(cs, java, flash) — 클래스 필드를 protected로 표시한다.@:property(cs) — 필드를 네이티브 C# 속성으로 컴파일되도록 표시한다.@:pure(all) — 클래스 필드, 클래스 또는 표현식을 순수(부수 효과 없음)로 표시한다.@:readOnly(cs) —readonly네이티브 키워드로 필드를 생성한다.@:remove(all) — 생성 전에 모든 구현 클래스에서 인터페이스를 제거하게 한다.@:require(<Compiler flag to check>, all) — 지정된 컴파일러 플래그가 설정된 경우에만 필드에 접근을 허용한다. lf-condition-compilation 참조.@:resolve(all) — 이 메타데이터로 표시된 abstract 필드는 알 수 없는 필드를 해석하는 데 사용할 수 있다.@:rtti(all) — 런타임 타입 정보를 추가한다. cr-rtti 참조.@:runtimeValue(all) — abstract를 런타임 값으로 표시한다.@:scalar(cpp) — hxcpp가 사용자 정의 coreType abstract를 표시하는 데 사용한다.@:selfCall(js, lua) — 메서드 호출을 객체를 직접 호출하는 것으로 번역한다. target-javascript-external-libraries 참조.@:semantics(<value | reference | variable>, all) — 타입의 네이티브 의미론.@:setter(<Class field name>, flash) — 주어진 필드에 네이티브 setter 함수를 생성한다.@:sound(<File path>, flash) — 주어진 .wav 또는 .mp3 파일을 대상 SWF에 포함하고 클래스와 연결한다(반드시flash.media.Sound확장). target-flash-resources 참조.@:sourceFile(cpp) — 외부 클래스의 소스 코드 파일 이름.@:stackOnly(cpp) — 이 타입의 인스턴스는 스택에만 나타날 수 있다.@:strict(java, cs) — 네이티브 C# attribute 또는 네이티브 Java 메타데이터를 선언하는 데 사용된다; 타입 검사된다.@:struct(cs, hl) — 클래스 정의를 struct로 표시한다.@:structAccess(cpp) — extern 클래스가 포인터(->)가 아닌 구조체 접근(.)을 사용함을 표시한다.@:structInit(all) — 생성자 매개변수와 일치하는 구조체로 클래스를 초기화할 수 있게 한다.@:suppressWarnings(java) — 생성된 Java 클래스에SuppressWarningsannotation을 추가한다.@:templatedCall(cpp) — static 호출의 첫 매개변수를 템플릿 인자로 취급해야 함을 나타낸다.@:throws(<Type as String>, java) — 생성된 함수에throws선언을 추가한다.@:to(all) — abstract의 필드가 함수에서 식별된 타입으로의 캐스트 연산임을 지정한다. types-abstract-implicit-casts 참조.@:transient(java) — 클래스 필드에transient플래그를 추가한다.@:transitive(all) — abstract로 전이적 캐스트를 허용한다.@:volatile(java, cs) — 휘발성.@:unifyMinDynamic(all) — 타입 집합이Dynamic으로 유니파이되게 한다.@:unreflective(cpp) — 리플렉션 없음.@:unsafe(cs) — C#의unsafe플래그로 클래스나 메서드를 선언한다.@:using(all) — 인자 타입을 주석 처리된 타입의 정적 확장으로 자동 사용한다. lf-static-extension-metadata 참조.@:haxe.warning(all) — 경고 옵션을 수정하며,-wCLI 인자와 동등하다.@:void(cpp) — Cpp 네이티브void반환 타입을 사용한다.@:nativeArrayAccess(cpp) —haxe.ArrayAccess를 구현하는 extern 클래스에 사용하면 네이티브 배열 접근 구문이 생성된다.
본문
내장 메타데이터
haxe --help-metas로 전체 목록을 볼 수 있어요. 각 메타데이터는 인자와 적용 플랫폼이 다릅니다. 위 목록은 각 항목의 동작을 요약합니다.
주요 메타데이터
접근 제어(@:access/@:allow), DCE 유지(@:keep 계열), null 안전성, 추상/외부 연관(@:from/@:to/@:native 등), 대상별 코드 주입, 플랫폼별 메타데이터 등을 포함합니다.