Eclipse의 Java 컴파일러는 javac
프로그램이 래핑 되는 것과 동일한 코어를 감싸는 래퍼 입니까? 아니면 별도의 컴파일러입니까? 후자라면 왜 바퀴를 재발 명했을까요?
답변
Eclipse는 ECJ ( Eclipse Compiler for Java) 라는 자체 컴파일러를 구현했습니다 .
Sun JDK와 함께 제공되는 컴파일러 인 javac와 다릅니다. 주목할만한 차이점 중 하나는 Eclipse 컴파일러를 사용하면 실제로 제대로 컴파일되지 않은 코드를 실행할 수 있다는 것입니다. 오류가있는 코드 블록이 실행되지 않으면 프로그램이 정상적으로 실행됩니다. 그렇지 않으면 컴파일되지 않은 코드를 실행하려고했음을 나타내는 예외가 발생합니다.
또 다른 차이점은 Eclipse 컴파일러가 Eclipse IDE 내에서 증분 빌드를 허용한다는 것입니다. 즉, 입력을 마치면 모든 코드가 컴파일됩니다.
Eclipse에 자체 컴파일러가 있다는 사실도 Java SDK를 설치하지 않고도 Eclipse에서 Java 코드를 작성, 컴파일 및 실행할 수 있기 때문에 분명합니다.
ECJ가 javac보다 선호되는 몇 가지 예는 다음과 같습니다.
- Apache Tomcat 은 ECJ를 사용하여 JSP를 컴파일합니다.
- IntelliJ IDEA 는 GCJ ( GNU Compiler for Java ) 4.3부터 ECJ를 지원합니다 .
- GCJ는 ECJ와 통합
- Liferay는 ECJ로 구축됩니다.
답변
모두가 이미 다르다고 이미 설명했습니다. 다음은 두 컴파일러에서 발견 한 동작의 차이점입니다. 그것들은 모두 (적어도) 구현 중 하나에서 버그로 귀결됩니다.
컴파일 타임 최적화 관련
제네릭 형식 유추 관련
답변
Eclipse의 내장 컴파일러는 IBM의 Jikes Java 컴파일러를 기반으로 합니다. (Eclipse도 IBM에서 시작되었습니다). JDK에서 Sun의 Java 컴파일러와는 완전히 독립적입니다. Sun 주위의 래퍼가 아닙니다 javac
.
Jikes는 오랫동안 존재 해 왔으며, 표준 JDK Java 컴파일러보다 훨씬 빠르지 만 (여전히 사실인지는 모르겠습니다). IBM이 자체 Java 컴파일러를 작성하려는 이유는 라이센스 이유 때문일 수도 있습니다 (자체 Java 구현도 있음).