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-lib import의 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 exprinline 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 클래스에 SuppressWarnings annotation을 추가한다.
  • @: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) — 경고 옵션을 수정하며, -w CLI 인자와 동등하다.
  • @:void(cpp) — Cpp 네이티브 void 반환 타입을 사용한다.
  • @:nativeArrayAccess(cpp) — haxe.ArrayAccess를 구현하는 extern 클래스에 사용하면 네이티브 배열 접근 구문이 생성된다.

출처: Built-in Compiler Metadata

본문

내장 메타데이터

haxe --help-metas로 전체 목록을 볼 수 있어요. 각 메타데이터는 인자와 적용 플랫폼이 다릅니다. 위 목록은 각 항목의 동작을 요약합니다.

주요 메타데이터

접근 제어(@:access/@:allow), DCE 유지(@:keep 계열), null 안전성, 추상/외부 연관(@:from/@:to/@:native 등), 대상별 코드 주입, 플랫폼별 메타데이터 등을 포함합니다.

더 알아보기