2011-08-09 3 views
2

미라 홈 페이지Mirah는 어떤 메타 프로그래밍 기능을 제공합니까?

미라가 컴파일시 메타 프로그래밍 및 매크로에 대한 다양한 메커니즘을 지원했다. Mirah에서는 역동적 인 언어에 대한 "오픈 클래스"느낌이 상당합니다.

하지만 구체적인 내용을 찾을 수 없습니다. 더 자세한 정보가있는 사람이 있습니까?

답변

4

Mirah는 컴파일 타임 매크로를 지원합니다. 이들을 사용하여 컴파일 할 때 실행되는 함수를 정의하여 구문 트리를 수정할 수 있습니다. 이를 통해 Java에서 볼 수있는 일반적인 패턴 중 일부를 Ruby와 비슷한 패턴으로 단순화 할 수 있습니다.

예를 들어, times은 매크로로 구현됩니다. 현재 Mirah가 아니라 Ruby로 작성되었습니다.

당신은 숫자 0-4

를 인쇄이

5.times do |i| 
    puts i 
end 

처럼 사용할 수있는 자바에 당신은 물론 당신의 자신을 정의 할 수 있습니다

for(int i=0;i < 5; i++) { 
    System.out.println(i); 
} 

과 같을 것 매크로를 macro def 매크로를 사용하여. 예를 들어, 디버그 문자열을 생성하기 전에 디버그가 사용 가능한지 확인하는 공통 logger4j 패턴을 사용하려고한다고 가정합니다. 매크로로,이 같은 검사 암시하고 뭔가 만들 수 :

macro def debug debug_input 
    quote do 
     if logger.debugEnabled 
     logger.debug `debug_input` 
     end 
    end 
    end 

내가 좋아 부를 수있는이

debug "something low level is going on: " + gimme_all_the_bytes_as_a_string 

제가 구문 트리의 조각을 만드는거야 거기에 무슨 quote do ... end 그리고 "something low level is going on: " + gimme_all_the_bytes_as_a_string 표현식을``Mirah 매크로 따옴표 블록에있는``를 사용하여 그 안에 넣으면 그 안에있는 구문 트리 노드를 따옴표로 묶지 마십시오.

현재 Mirah의 작동 방식에 대한 리소스가 너무 많지는 않지만 Github의 example code을 살펴볼 수 있습니다. 궁금한 점이 있으시면 mailing list으로 전자 메일을 보내주십시오.

+0

위대한 답변, 감사합니다! 원숭이 패치에 대한이 미라의 접근 방식이 맞습니까? –

+0

실제로 확장 메서드를 추가하는 방법이 있습니다.'times'이 좋은 예입니다. 그러나 메서드를 재정의하는 방법은 제가 아는 한 존재하지 않습니다. 그것은 항상 그럴 것입니다. – BaroqueBobcat

관련 문제