자바는 플랫폼에 독립적인 객체지향 프로그래밍 언어로서 널리 사용되고 있지만, 플랫폼에 의존적인 기능을 사용해야 하거나 흑은 유산 시스템(legacy system)을 재사용하기 위해서는 JNI를 이용해야 한다. JNI는 자바가 C/C++ 언어와 결합하기 위한 표준화된 규칙과 API를 제공하지만, 개발자가 JNI를 이용해서 프로그램을 개발하는 것은 매우 복잡하고, 번거롭다는 단점이 있다. 이러한 문제를 해결하기 위해서 본 논문에서는 자바 프로그램에 내장된 C 프로그램 코드를 자동적으로 JNI 명세에 맞는 C 언어로 변환할 수 있는 C2JNI라는 변환기를 소개한다. C2JNI를 사용하는 경우에 내장된 C 언어 프로그램은 JNI API를 사용하지 않고서도 C 언어와 자바 프로그램을 결합할 수 있기 때문에 개발자는 자바와 C 언어에 대한 지식만 있으면, 자바와 C 언어를 결합해서 사용할 수 있다.
자바는 플랫폼에 독립적인 객체지향 프로그래밍 언어로서 널리 사용되고 있지만, 플랫폼에 의존적인 기능을 사용해야 하거나 흑은 유산 시스템(legacy system)을 재사용하기 위해서는 JNI를 이용해야 한다. JNI는 자바가 C/C++ 언어와 결합하기 위한 표준화된 규칙과 API를 제공하지만, 개발자가 JNI를 이용해서 프로그램을 개발하는 것은 매우 복잡하고, 번거롭다는 단점이 있다. 이러한 문제를 해결하기 위해서 본 논문에서는 자바 프로그램에 내장된 C 프로그램 코드를 자동적으로 JNI 명세에 맞는 C 언어로 변환할 수 있는 C2JNI라는 변환기를 소개한다. C2JNI를 사용하는 경우에 내장된 C 언어 프로그램은 JNI API를 사용하지 않고서도 C 언어와 자바 프로그램을 결합할 수 있기 때문에 개발자는 자바와 C 언어에 대한 지식만 있으면, 자바와 C 언어를 결합해서 사용할 수 있다.
Java, a platform independent object-oriented programming language, is widely used, however it should be integrated with JNI to use system services or to reuse legacy systems. Though JNI provides the standard APIs which allow Java to be combined with C/$C^{++}$, it is very hard and cumbers...
Java, a platform independent object-oriented programming language, is widely used, however it should be integrated with JNI to use system services or to reuse legacy systems. Though JNI provides the standard APIs which allow Java to be combined with C/$C^{++}$, it is very hard and cumbersome for developers to use JNI APIs. In order to address this problem, we introduce a translator named C2JNI, which converts the embedded C program into a JNI compatible C program. With C2JNI, developers can Integrate Java and C programs without JNI APIs, and it will reduce the complexity caused by JNI APIs.
Java, a platform independent object-oriented programming language, is widely used, however it should be integrated with JNI to use system services or to reuse legacy systems. Though JNI provides the standard APIs which allow Java to be combined with C/$C^{++}$, it is very hard and cumbersome for developers to use JNI APIs. In order to address this problem, we introduce a translator named C2JNI, which converts the embedded C program into a JNI compatible C program. With C2JNI, developers can Integrate Java and C programs without JNI APIs, and it will reduce the complexity caused by JNI APIs.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
본 논문에서는 사용자가 자바와 C를 쉽게 결합해서 사용할 수 있도록 자바 프로그램에 C 언어 코드를 내장시키는 방법을 소개한다. 내장된 C 언어는 EmC라고 불리며, C의 문법[기에 $ 혹은 $$ 접두어를 갖는 식별자를 추가한 것이다.
JNI의 API를 사용할 때 발생하는 문제점을 해결하기 위해서 본 논문에서는 자바 프로그램에 C 언어 코드를 내장시키는 방법과 내장된 C 언어 코드를 JNI 명세에 맞는 코드로 변환할 수 있는 C2JNI라는 변환기를 소개하였다. C2JNI는 내장된 C 언어 프로그램을 파싱한다.
가설 설정
세 번째 어려움은 데이타 타입의 불일치이다. 자바와 C 언어는 데이타 타입이 다르기 때문에 JNI에서는 C 언어와 자바가 결합해서 사용될 수 있는 새로운 형태의 데이타 타입들을 정의하고 있다.
제안 방법
C2JNI는 EmC로 작성된 프로그램을 어휘 분석과 구문 분석을 통해 문법적인 오류를 체크한다. 또한 C2JNI는 Argos 파서로부터 전달받은 클래스의 멤버 필드와 메소드에 관련된 정보가 저장된 심볼 테이블을 이용해서 의미 분석을 수행하고, AST(Ab- stract Syntax Tree)를 순회하면서 구문 지향 변환 방법[9]을 통해서 타겟 코드를 생성한다.
자바와 C를 결합하는 경우에 기존의 래핑 방법과 CNI의 문제점을 해결하기 위해서 본 논문에서는 자바프로그램에 C 언어로 작성된 서브프로그램을 내장시키는 방법을 사용한다. 내장된 C 언어는 EmC라고 하며, 자바 클래스의 메소드를 정의하기 위해서 사용된다.
AST로 표현된 프로그램은 트리 변환 단계에서 의미 분석을 수행한다. 즉, EmC 프로그램에서 접근하는 Argos에서 작성한 심볼 테이블을 이용해서 EmC 프로그램에서 사용하는 자바 클래스의 멤버 필드와 메소드에 대한 타입 체킹을 수행한다. 의미 분석이 올바르게 수행된 경우에 AST를 타겟 코드를 생성하기 쉬운 형태로 변형된다.
JNI는 개발자가 직접 작성한 JNI 프로그램을 의미하고, C2JNI는 EmC로 작성되고 C2JNI를 통해서 생성된 프로그램을 의미한다. 성능 비교를 위해서는 퀵 소트의 데이타 개수를 변경하면서 수행 시간(단위: 1/1000 초)을 측정하였다. 테스트는 800MHz 의 펜티엄 3 CPU, 256MB 의 메모리를 가진 컴퓨터에서 GCC 3.
대상 데이터
성능 비교를 위해서는 퀵 소트의 데이타 개수를 변경하면서 수행 시간(단위: 1/1000 초)을 측정하였다. 테스트는 800MHz 의 펜티엄 3 CPU, 256MB 의 메모리를 가진 컴퓨터에서 GCC 3.2 와 J2SDK L4.1 에서 수행하였다.
이론/모형
표 10은 EmC로 작성한 코드와 JNI를 이용한 코드 사이의 복잡도와 프로그래밍 효율성을 여러 가지 측면에서 비교한 것이다. 표에서 Volume, Difficulty, Effort는 Halstead [13] 방법을 이용해서 측정한 것이다.
Per Bothner and Tom Tromey, 'Java/C++ integration: Writing native Java methods in natural C++', available at http://www.bothner.com/ ${\sim}per$ /papers/UsenixJVM01/CNI01.pdf
Sava Mintchev and Vladimir Getov. 'Automatic Binding of Native Scientific Libraries to Java,' In Scientific Computing in Object-Oriented Parallel Environments, LNCS 1343, Springer-Verlag, pp. 129-136, 1997
Vlasimir Getov, Paul Gray, Sava Mintchev, and Vaidy Sunderam, 'Multi-Language Programming Environments for High Performance Java Computing,' In Scientific Programming, Vol. 7, No.2, pp. 139-146, 1999
Yan Huang, Ian Taylor, David W. Walker, and Robert Davies, 'Wrapping Legacy Codes for Grid-Based Applications,' In Proc. of IPDPS, pp, 139-145, 2003
David M. Beazley, 'SWIG : An Easy to Use Tool for Integrating Scripting Languages with C and C++,' In Proc. of USENIX Tcl/Tk Workshop, 1996, available at http://www.swig.org/
JavaCC Grammar Repository, available at http://www.cobase.cs.ucla.edu/pub/javacc/
※ AI-Helper는 부적절한 답변을 할 수 있습니다.