UFO ET IT

하나의 프로젝트에서 여러 언어가 어떻게 상호 작용합니까?

ufoet 2020. 12. 27. 11:49
반응형

하나의 프로젝트에서 여러 언어가 어떻게 상호 작용합니까?


어떤 사람들은 하나의 프로젝트에서 여러 언어로 프로그램하는 것을 들었습니다. 언어가 서로 어떻게 상호 작용하는지 상상할 수 없습니다.

같은 Java 메서드가 없음을 의미합니다.

myProgram.callCfunction(parameters);

결코 일어나지 않거나 내가 틀렸습니까?


하나의 프로젝트에 여러 언어를 사용하는 것은 실제로 매우 일반적이지만 기본 원칙이 항상 단순하지는 않습니다.

간단한 경우에는 다른 언어가 동일한 코드로 컴파일됩니다. 예를 들어, C 및 C ++ 코드는 일반적으로 기계 어셈블러 또는 C #으로 컴파일되고 VB.Net은 IL (.NET 런타임에서 인식하는 언어)로 컴파일됩니다.

언어 / 컴파일러가 다른 유형 시스템을 사용하면 더 어려워집니다. 여러 가지 방법이있을 수 있으며 정수, 부동 소수점 및 double과 같은 기본 데이터 유형은 내부적으로 표현되며 문자열을 표현하는 더 많은 방법이 있습니다. 서로 다른 언어간에 유형을 전달할 때 양측이 유형을 동일하게 해석하거나 그렇지 않은 경우 유형이 올바르게 매핑되었는지 확인해야합니다. 이러한 유형의 매핑을 마샬링 이라고도합니다 .

서로 다른 프로그램 언어 간의 상호 운용성의 전형적인 예는 다음과 같습니다 (대부분 Windows 세계에서).

  • .NET 플랫폼에 사용할 수있는 다양한 언어. 여기에는 C #, VB.Net, J #, IronRuby, F #, XSLT 및 기타 덜 인기있는 언어가 포함됩니다.
  • C ++ 또는 VB로 작성된 기본 COM 구성 요소는 VBScript, VB, 모든 .NET 언어, Java 등 다양한 언어로 사용할 수 있습니다.
  • Win32 API 함수는 .NET 또는 VB에서 호출 할 수 있습니다.
  • IPC (프로세스 간 통신)
  • Corba , 아마도 가장 포괄적이고 가장 복잡한 접근 방식
  • 웹 서비스 및 기타 서비스 지향 아키텍처, 아마도 가장 현대적인 접근 방식

일반적으로 적절한 크기의 웹 프로젝트는 HTML, CSS, Javascript, 일종의 서버 측 "작업 수행"언어 (ASP, JSP, Perl, PHP 등을 사용하는 CGI 스크립트) 및 일부 변형의 약 5 개 언어를 사용합니다. 데이터베이스 연결을위한 SQL의.

(물론 이것은 HTML과 CSS가 프로그래밍 언어로 간주되는지 여부에 대한 논쟁을 떨쳐 버리는 것입니다. 저는 "그들은 있지만 Turing-complete 언어는 아닙니다"캠프이지만 그것은 완전히 다른 스레드입니다. )

이 모든 것이 어떻게 함께 작동하는지에 대한 몇 가지 예 :

베스트 프랙티스 루트로 가고 있다면, 웹 페이지의 구조는 HTML이고 그것을 표시하는 방법에 대한 지침은 같은 파일에있을 수 있지만 반드시 그럴 필요는없는 CSS에 있습니다. CSS에는 HTML이 참조하는 여러 클래스가 포함되어 있으며 함께 클릭하는 방법을 알아내는 것은 브라우저에 달려 있습니다.

한 단계 더 나아가 해당 페이지의 모든 자바 스크립트 스크립트는 존재하는 모든 HTML / CSS를 변경할 수 있습니다 (HTML 엔터티의 콘텐츠 변경, 한 CSS 클래스를 다른 클래스로 교체, CSS 동작 변경 등). ) 문서 객체 모델 (Document Object Model)이라는 것을 통해이 작업을 수행합니다. 이는 본질적으로 객체와 유사한 방식으로 HTML 페이지를 조작하는 언어 및 플랫폼 독립적 API입니다 (이 시점에서 천천히 뒤로 물러나 관련 링크를 제공 할 것입니다. 위키 기사 .)

그렇다면 모든 HTML / CSS / Javascript는 어디에서 왔습니까? 이것이 서버 측 언어가하는 일입니다. 가장 간단한 형태로, serer-side 언어는 HTML 페이지를 출력으로 포함하는 거대한 문자열을 반환하는 프로그램입니다. 이것은 분명히 훨씬 더 복잡해질 수 있습니다. HTML 양식과 쿼리 문자열 매개 변수를 서버 측 프로그램의 입력으로 사용할 수 있으며, 그러면 자바 스크립트가 데이터를 서버 언어로 직접 전송하는 전체 AJAX 작업도 있습니다. 또한 서버 언어가 HTML, CSS 및 자바 스크립트를 사용자 정의 할 수있는 곳에서 멋지게 보일 수 있습니다. 기본적으로 한 언어로 된 프로그램이 다른 언어로 프로그램을 작성하는 것입니다.

SQL 연결에 대한 서버 측 언어는 거의 동일하게 작동합니다. 더 복잡하고 안전하게 만드는 방법에는 여러 가지가 있지만 가장 간단한 방법은 서버 언어가 SQL 명령이 포함 된 문자열을 동적으로 빌드하고 일종의 커넥터를 통해 데이터베이스에 전달한 다음 다시 가져 오는 것입니다. 결과 세트. (이것은 실제로 someValue = database.executeThisSQLCommand (SQLString)로 요약되는 함수가있는 경우입니다.)

결론적으로,이 경우 다른 언어는 실제로 서로 프로그램을 작성하여 통신하거나 모든 사람이 이해할 수있는 매우 간단하고 파싱하기 쉬운 형식으로 데이터를 전달합니다. (주로 문자열.)


사용중인 여러 언어를 "상호 운용성"또는 줄여서 "interop"이라고합니다.

귀하의 예가 잘못되었습니다. Java는 C 함수를 호출 할 수 있습니다.

이 언어는 상호 운용성을위한 메커니즘을 제공합니다.

.NET의 경우 언어는 CLI의 일부로 IL로 컴파일됩니다. 따라서 모든 .NET 언어는 다른 .NET 언어로 정의 된 모듈을 interop (에 의해 정의 된 메서드 호출) 할 수 있습니다.

예로서:

C #에서 메서드를 정의 할 수 있습니다.

static void Hello(){ Console.WriteLine("Hello World");}

파이썬 (IronPython)에서 호출 할 수 있습니다.

 Hello()

그리고 예상되는 출력을 얻으십시오.

일반적으로 말해서, 특히 언어 작성자가 특별히 interop을 언어의 기능으로 만든 경우 일부 언어는 다른 언어보다 상호 운용성이 좋습니다.


여러 언어가 다음과 상호 작용할 수 있습니다.

  1. 파이프 된 입력 / 출력 (입력 및 출력은 장난감이 아닌 모든 언어로 필요에 따라 구현되어야하기 때문에 모든 언어가이를 수행 할 수 있음)
  2. 한 언어로 된 코드는 네이티브 라이브러리로 컴파일되고 다른 언어는 네이티브 코드 호출을 지원합니다.
  3. 루프백 네트워크 연결을 통해 통신합니다. 이런 식으로 방화벽 간섭으로 어려움을 겪을 수 있습니다.
  4. 데이터베이스. 이는 "범용"데이터 저장 형식으로 생각할 수 있으므로 데이터베이스 확장을 사용하여 대부분의 언어에서 액세스 할 수 있습니다. 일반적으로 다음 프로그램이 데이터베이스에 액세스하기 전에 한 프로그램이 작업을 완료해야합니다. 또한 모든 '통신'은 일반적으로 디스크에 기록됩니다.
  5. 관련된 언어가 동일한 런타임 (예 : .NET, JVM)에서 실행되는 경우 일반적으로 거의 방해없이 한 언어에서 다른 언어로 개체 데이터를 직접 전달할 수 있습니다.

거의 모든 경우에 모든 통신을 교환하기 전에 공통 형식으로 변환해야합니다 (예외는 동일한 런타임의 언어입니다). 이것이 하나의 프로젝트에서 여러 언어가 거의 사용되지 않는 이유입니다.


나는 (마지막 계산에서) 약 8 개 언어로 구성된 대기업 프로젝트를 진행하고 있습니다. 통신의 대부분은 여러 언어에 대한 바인딩이 포함 된 엔터프라이즈 수준 메시지 버스를 통해 데이터를주고받습니다. tibco 라고 합니다.


대부분의 작업이 Java로 수행되는 앱이있을 수 있지만 데이터 파서 나 무언가가 Python으로 작성되거나 무엇을 가지고 있는지 등 일부가있을 수 있습니다. 거의 두 개의 개별 앱은 실제로 파서가 파일에 대해 일부 작업을 수행 한 다음 Java의 기본 앱이이를 사용하고 있습니다. 누군가가이 프로젝트에서 내가 무엇을 사용했는지 물어 보면 "Java and Python"이라고 말할 것입니다.


하나의 프로젝트에서 다른 언어를 사용할 수있는 다양한 방법이 있습니다. 떠오르는 두 가지 주요 범주가 있습니다.

  1. Using Different languages together to build one application. For example using Java to build the GUI and using JNI to access C API (so answering your question you can call C functions from Java ;))
  2. Using Different Languages together in the one project but they are not part of the same application. For example. I am currently working on an iphone app that has uses a large amount of text. I am currently using three languages Python (to work with the origanal sources of the text), SQL (to put the results of the python app in a format easily accesible from the iphone sqlite3 api) and Objectiv C to build the actual app. Even though the final product will only be Objective C I've used two other languages to get to the final product

There are various ways that multiple languages can be used in one project. Some examples:

  • You can write a DLL in, say, C, and then use that library from, say, a VB program.
  • You could write a server program in, say C++, and have lots of different language implementations of the client.
  • A web project often uses lots of languages; for example a server program, written in, say, Java (a programming language), which fetches data from a database using SQL (a query language), sends the result to the browser in HTML (a markup language), which the user can interact with using Javascript (a scripting language)...

It depends on the type of project. If you want to experiment, you can set up a web project, in .NET, and change the language on a page by page basis. It does not work as you show in your pseudocode, but it is multiple languages. Of course, the actual code directory must be a single language.


There are a couple of ways in which code in languages can interact directly. As long as the data being passed between the code is in the right format, at the bits and bytes level, then there is no reason why different languages can't interop. This approach is used in traditional windows DLL development. Even on different platforms, if you can get the format correct (look at big/little endian if interested) it will work as long as your linker (not compiler) knows how to join code together.

Beyond that there are numerous other ways in which languages can talk to each other. In the .Net world code is compiled down to IL code, which is the same for every language, in this way C#, VB.Net are all the same under the hood and can call/work with each other seamlessly.


Badly. If there is no urgent need, stick to a single language. You're increasing dependencies and complexity. But when you have existing code providing interesting functionality, it can be easier to glue it together than to recreate it.


Just to add to the list of examples, it's fairly common to optimize Python code in C or C++ or write a C library to bind another library to Python.

ReferenceURL : https://stackoverflow.com/questions/636841/how-do-multiple-languages-interact-in-one-project

반응형