언어 상호운용성
Language interoperability언어 상호운용성은 두 개의 다른 프로그래밍 언어가 기본적으로 동일한 시스템의 일부로서 상호 작용하고 동일한 종류의 데이터 구조에서 작동할 수 있는 기능이다.[1]
프로그래밍 언어가 서로 상호운용 가능한 많은 방법이 있다. HTML, CSS, JavaScript는 웹페이지에서 동시에 사용되기 때문에 상호운용성이 있다. 일부 객체 지향 언어는 공유 호스팅 가상 머신(예: .) 덕분에 상호 운용할 수 있다.공용 언어 런타임의 NET CLI 호환 언어와 자바 가상 시스템의 JVM 호환 언어).[2]
상호운용성 방법
객체 모델
오브젝트 모델은 동일한 오브젝트가 프로그램 전체와 언어에 걸쳐 사용될 수 있도록 언어에 구애받지 않는 방식으로 오브젝트를 나타낼 수 있도록 하는 표준화된 모델이다. CORBA와 COM은 가장 인기 있는 오브젝트 모델이다.
가상 시스템
가상 머신(VM)은 여러 개의 다른 언어를 컴파일할 수 있는 전문 중간 언어다. 동일한 가상 머신을 사용하는 언어는 메모리 모델과 컴파일러를 공유하므로 동일한 VM에서 다른 언어의 라이브러리를 다시 사용할 수 있으므로 상호 운용할 수 있다. VM는 유형 시스템을 통합하여 참여 언어의 정확성을 보장하고 해당 유형 정보에 대한 공통 기반을 제공할 수 있다. 컴파일 또는 해석 중에 중간 언어를 사용하면 최적화의 더 많은 기회를 제공할 수 있다.[1]
과제들
객체 모델 차이
객체 지향 언어는 데이터 컨테이너를 코드와 결합하려고 시도하지만, 각 언어가 그 방법을 선택하는 방법은 약간 다를 수 있다. 그러한 설계 결정들이 항상 쉽게 다른 언어에 매핑되는 것은 아니다. 예를 들어, 다중 상속을 허용하는 언어에서 다중 상속을 사용하는 클래스는 다중 상속을 허용하지 않는 언어로 잘 번역되지 않을 것이다. 이 문제에 대한 일반적인 접근방식은 다른 언어의 특징과 호환되는 언어의 하위 집합을 정의하는 것이다.[3] 이 접근방식은 서브셋 외부의 기능을 사용하는 코드가 상호운용되기 위해서는 서브셋으로 이해할 수 있는 클래스로 그것의 인터페이스의 일부를 포장해야 한다는 것을 의미한다.
메모리 모델
프로그래밍 언어가 메모리의 할당 해제를 처리하는 방법의 차이는 상호운용성을 만들 때 또 다른 문제다. 자동배분을 해제한 언어는 수동배분을 해제한 언어와 잘 상호운용되지 않으며, 결정론적 파괴를 가진 언어는 비결정적 파괴를 가진 언어와 양립할 수 없다. 언어의 제약을 바탕으로 다양한 행동들을 연결시키기 위한 많은 다른 전략들이 있다. 예를 들면 다음과 같다. 일반적으로 수동 할당 해제를 사용하는 C++ 프로그램은 객체 삭제를 위해 할당 해제 동작을 변경하여 자바 스타일의 가비지 수집기와 상호 운용할 수 있지만 메모리를 회수하지는 않는다. 이를 위해서는 가비지 수집기가 메모리를 안전하게 해제하기 위해서는 각 물체가 수동으로 할당 해제되어야 한다.
변이성
순기능 언어와 절차 언어 간의 상호운용성을 만들려고 할 때 돌연변이가 문제가 된다. 하스켈과 같은 언어는 변이 가능한 유형이 없는 반면, C++는 그렇게 엄격한 보증을 제공하지 않는다. 객체 지향 언어에 브리지를 했을 때 많은 기능적 유형은 기본 객체가 수정되지 않는다고 보장할 수 없다.
참고 항목
참조
- ^ Jump up to: a b Malone, Todd (2014). "Interoperability in Programming Languages". CiteSeerX 10.1.1.684.337. Cite 저널은 필요로 한다.
journal=(도움말) - ^ "Cross-Language Interoperability". Microsoft Developer Network (msdn.microsoft.com).
- ^ Chisnall, David (2013-10-01). "The Challenge of Cross-language Interoperability". Queue. 11 (10): 20–28. doi:10.1145/2542661.2543971. ISSN 1542-7730.