2010-07-13 2 views
4

XML 구성 파일이 많아지면서 Java가 주석 기반 구성으로 이동하는 것을 보았습니다.주석은 Java에서 DSL의 일종입니까?

여기에 DSL의 역할을하는 주석이 있습니까?

Java의 정적 특성 때문입니까? Ruby에서 (afaik) 그런 것들이 없다고 생각하고 있습니다. Ruby는 좋은 메타 프로그래밍 기능을 가지고 있기 때문에 그렇습니까?

는 기본적으로

답변

2

주석 (나는 .XML 파일들을 사용하는 것보다 다른 의미)이 대안이다 당신이 컴파일시 소스 파일을 처리하고 발견 주석에 해당하는 조치를 할 수있는 도구 파일 (가능한 새로운 소스를 파생).

코드를 어수선하게 만들거나 일부 메서드의 동작을 풍부하게하면서 제약 조건을 설명하는 등의 많은 목적에 매우 유용합니다.

루비의 DSL과 매우 유사하다고 할 수는 없지만,이 경우 특정 구문으로 코드에 주석을 달았습니다. 루비에서는 흠집으로부터 자신의 DSL을 디자인하고 원하는대로 사용할 수 있습니다.

자바 선박은 도구라는 apt 실행시 주석과 함께 작업도 할 수있다 그러나 그들은 보통 당신의 소스를 컴파일시 정보를 정기적으로 제공하는 데 사용됩니다 (당신이 의심되는 것과 같은). 그렇다고해서 특정 상황에서 DSL로 얻을 수있는 것과 동일한 작업을 수행하기 위해 주석 메커니즘을 쉽게 적용 할 수는 없지만 같은 목적으로는 존재하지 않는다는 것을 의미하지는 않습니다.

+1

주석이 일반적으로 컴파일 타임 처리에 사용된다는 것은 정확하지 않다고 생각합니다. 주석의 주요 사용은 최근 흥미롭고 유용한 것들을 런타임에 수행 할 수있게 해주는 메타 데이터라고 생각합니다. – ColinD

+0

나는 그들이 태어난 것에 대해 이야기하고 있습니다. 이제 개념은 자바 언어의 부족을 극복하기 위해 광범위하게 확장되었습니다. :) 그러나 DSL의 목적을 다루고 있다고 말할 수는 없겠지요. 그렇습니까? – Jack

+0

대안은 무엇입니까 (일반적으로 컴파일 된 프로그래밍 언어에서)? – OscarRyz

0

이미 말했듯이 주석은 어떤 종류의 메타 프로그래밍 기능을 추가하기 때문에 DSL을 매우 효율적으로 생성하는 데 사용할 수 있습니다. 그러나 그 목적을 위해 바이트 코드 인젝터 또는 다른 Java 언어 기능을 사용할 수 있습니다. 그러나 주석의 주요 목적은 소스 코드 요소에 메타 데이터를 주석으로 추가하는 것입니다. 내부 DSL을 Java로 생성하는 대안을 묻는다면 Fowler's DSL book WIP을보고 내부 DSL을 구현하는 데 사용할 수있는 다양한 개념을 선택하십시오. 그 중 많은 부분이 Java로 제공됩니다. 메타 프로그래밍을위한 대안을 요구하는 경우, 다른 바이트 코드 인젝터, AspectJ 또는 Spring 또는 코드 생성을 사용한 Aspect 지향 프로그래밍도 많이 있습니다.

관련 문제