8.6 정적 분석기(Static Analyzer)

8.6 정적 분석기(Static Analyzer)

Haxe 3.3.0 이후

Haxe 3.3.0은 코드 최적화를 위한 새 정적 분석기를 도입합니다. 이는 -D analyzer-optimize 컴파일러 플래그로 활성화되며, 컴파일러 플래그로 전역적으로 그리고 컴파일러 메타데이터로 타입·필드 수준에서 구성할 수 있는 여러 모듈로 구성됩니다.

전역 구성(Global configuration)

분석기 모듈을 전역으로 활성화하려면 -D analyzer-module을, 전역으로 비활성화하려면 -D analyzer-no-module을 사용합니다. 두 경우 모두 "module"은 비활성화/활성화할 모듈의 이름을 나타냅니다:

# Global enable from command line
haxe -D analyzer-module
# Global disable from command line
haxe -D analyzer-no-module

로컬 구성(Local configuration)

주어진 타입이나 필드에 대해 분석기 모듈을 활성화하려면 @:analyzer(module)을, 비활성화하려면 @:analyzer(no_module)을 사용합니다:

@:analyzer(module) // Type-level enable
class C {
    @:analyzer(module) function f() { } // Field-level enable
    @:analyzer(no_module) function f() { } // Field-level disable
}
@:analyzer(no_module) // Type-level disable
class D { }

모듈(Modules)

정적 분석기는 현재 다음 모듈과 함께 제공됩니다. 별도로 명시되지 않으면 -D analyzer-optimize를 사용할 때 활성화됩니다.

  • const_propagation: 컴파일 타임에 알려진 값을 사용 위치로 승격하는 희소 조건부 상수 전파(sparse conditional constant propagation)를 구현한다. 죽은 분기도 감지한다.
  • copy_propagation: 다른 지역 변수를 별칭하는 지역 변수를 감지해 그에 따라 대체한다.
  • local_dce: 사용되지 않는 지역 변수를 감지하고 제거한다.
  • fusion: 단일 발생의 경우 변수 표현식을 사용 위치로 이동한다. 기본적으로 컴파일러 생성 변수만 처리한다. 이는 -D analyzer-user-var-fusion 또는 @:analyzer(user_var_fusion)으로 변경할 수 있다.
  • purity_inference: 필드가 "순수(pure)", 즉 부수 효과가 없는지 추론한다. 이는 fusion 모듈의 효과를 개선할 수 있다.

출처: Static Analyzer

본문

활성화와 구성

-D analyzer-optimize로 활성화하고, -D analyzer-모듈/-D analyzer-no-모듈로 전역, @:analyzer(module)/@:analyzer(no_module)로 로컬 구성합니다.

모듈

const_propagation(상수 전파·죽은 분기 감지), copy_propagation(별칭 대체), local_dce(미사용 지역 변수 제거), fusion(단일 발생 변수 이동), purity_inference(부수 효과 추론) 모듈이 있습니다.

더 알아보기