문제

누구 든지이 일에 대한 경험이 있습니까? 나는 지금 C ++에서 Java 디 컴파일러를 작업하고 있지만 내부 나무의 실제 변형을 수행하기 위해 더 높은 수준의 언어를 원합니다. 언어 사이의 마샬링 데이터의 오버 헤드가 내가 달성하려는 것을 더 잘 표현하기 위해 더 표현력이 있고 언어의 이점이 있는지 궁금합니다 (Haskell과 같은). 이것은 실제로 "실제 세계"에서 이루어 졌습니까, 아니면 프로젝트 시작시 언어를 선택하고 고수합니까? 그것을 시도한 사람들의 팁이 있습니까?

도움이 되었습니까?

해결책

저는 항상 각 도전에 맞는 올바른 프로그래밍 언어를 선택하는 것을 옹호합니다. 다른 까다로운 작업을 쉽게 처리하는 다른 언어가 있다면, 나는 그것을 위해 갈 것입니다.

현실 세계에서 일어나나요? 예. 현재 PHP 및 Objective-C 코드로 구성된 프로젝트를 진행하고 있습니다.

트릭은 지적했듯이 두 언어 간의 의사 소통입니다. 가능하다면 각 언어가 자체 도메인을 고수하고 두 섹션이 가능한 가장 간단한 방법으로 의사 소통하도록하십시오. 제 경우에는 HTTP를 통해 전송 된 XML 문서였습니다. 귀하의 경우, 어떤 종류의 형식의 텍스트 파일이 답일 수 있습니다.

다른 팁

마샬링 비용은 함께 일하는 언어와 건축에 따라 다릅니다. 예를 들어, CLR 또는 JVM을 사용하는 경우 사용 가능한 저렴한 인터 로프 솔루션이 있습니다. 아마도 관리되지 않은 C ++와 함께 일하고 있다는 것을 알고 있습니다.

또 다른 길은 내장 도메인 별 언어입니다. 트리 변환은 종종 패턴 일치 및 비교적 적은 수의 기능을 적용하여 표현할 수 있습니다. 간단한 트리 패턴 매칭 (예 : LISP S -EXPRS처럼 보이지만 자리 표시자를 사용하여 변수를 캡처하는 것을 고려할 수 있습니다. 일치하는 하위 트리를 변환하는 기능).

John Ousterhout, 발명자 TCL/TK 다중 언어 프로그래밍의 옹호자였으며 그것에 대해 매우 광범위하게 썼습니다. 이를 위해서는 사용하는 언어간에 깨끗한 인터페이스 메커니즘이 필요합니다. 이것에 대한 몇 가지 메커니즘이 있습니다. 이를 수행하기위한 다른 메커니즘의 예는 다음과 같습니다.

  • SWIG (단순화 된 래퍼 및 인터페이스 생성기 AC 또는 C ++ (또는 기타 여러 언어) 헤더 파일을 가져갈 수 있으며 API에 액세스 할 수있는 Perl 또는 Python과 같은 높은 수준의 언어에 대한 인터페이스를 생성 할 수 있습니다. 이 접근법을 사용하는 다른 시스템이 있습니다.

  • Java는 지원합니다 JNI, 및 Python 's와 같은 다양한 시스템ctypes, VisualWorks DLL/C 연결 하위 레벨 하위 시스템으로의 호출을 명시 적으로 구성 할 수있는 기본 메커니즘입니다.

  • TCL/TK는 명시 적으로 포함되도록 설계되었으며 네이티브 APIC 라이브러리가 언어에 고리를 추가 할 수 있습니다. 이에 대한 구성은 C의 argv [] 구조와 유사하며, 명령 줄 기반 C 프로그램을 TCL로 인터페이스하는 것이 비교적 쉽게 만들기 위해 설계되었습니다. 이것은 위의 예와 유사하지만 반대 방향에서 나옵니다. Python, Lua 및 TCL과 같은 많은 스크립팅 언어는 이러한 유형의 메커니즘을 지원합니다.

  • 다음과 같은 명백한 접착제 메커니즘파이렉스, 래퍼 생성기와 유사하지만 인터페이스를 정의하기위한 자체 언어가 있습니다. Pyrex는 실제로 완전한 프로그래밍 언어입니다. 다음과 같은 미들웨어 com 또는코바 일반 인터페이스 정의를인터페이스 정의 언어 그리고 공통 인터페이스 메커니즘을 사용하기 위해 관련된 언어에 대한 언어 바인딩.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top