2014-12-12 3 views
0

일부 프로그래밍 언어에서는 다른 프로그래밍 언어의 메서드를 호출하는 기능을 접했습니다. 그 이름은 Foreign Function Interface입니다. 예를 들어 파이썬 프로그램 내에서 C 언어 함수를 호출 할 수 있습니다. 아니면 Python 언어로 일부 C 라이브러리의 래퍼를 작성하여 다른 Python 사용자가이를 사용할 수 있도록 할 수 있습니다.프로그래밍 언어 C API 래퍼

한 간단한 예는 Python의 ctypes입니다. 그래서 이것을 사용하여 libc의 time 함수에 접근 할 수 있습니다. 나는이 수준으로 이해한다. 그러나, 나는이 ctypes가 어떻게 구현되고 다른 것들은 장면 뒤에 있는지에 대한 명확한 그림을 얻을 수 없었다! 여기에 나를 위해 발생

질문은 다음과 같습니다이 언어를위한 컴파일러를 할 기능의 어떤 종류의

  1. 가 외국인 함수 인터페이스를 사용해야합니다. 왜냐하면 외국어도 컴파일해야하기 때문입니다.
  2. 호스트 언어가 객체 지향이고 외국어가 아닌 경우 객체와 매핑하는 것이 필요합니다. 어떻게 처리됩니까?
  3. 호스트 언어가 가상 컴퓨터에서 실행되는 경우 어떻게됩니까? 이 경우 명령어 세트는 다를 수 있습니다. 맞습니까?
+0

이것은 매우 합리적인 질문입니다. – Marcin

+0

이 질문은 매우 일반적이기 때문에 대답하기가 어렵습니다. 파이썬과 C에 관해 구체적으로 말하면 간단한 대답은 '파이썬은 스택에 매개 변수를 배치하고 컴파일 된 C 함수를 나타내는 메모리로 점프하는 법을 알고있다'입니다. 하지만 shar가 찾고자하는 답변은 구현에 따라 다릅니다. –

+0

이 주제에 대한 좋은 자료를 가리켜봤을 때 많은 것을 이해하는데 도움이 될 것입니다. – shar

답변

3

또한 외국어도 컴파일해야하기 때문에.

등의 ctypes 등은 오브젝트 코드에 링크 할 수 있으면됩니다. 이것은 C가 수행하는 목적 코드 내에서 이름을 맹 글링하는 데 적절한 규칙을 갖는 대상 외국어에 의존합니다.

호스트 언어가 객체 지향이고 외국어가 아닌 경우 객체와 매핑하는 것이 필요합니다. 어떻게 처리됩니까?

C 코드는 호스트 언어에 적절한 인터페이스를 노출해야합니다. 또는 동등하게, 일부 C 언어 라이브러리를 사용하십시오. CPython은 C로 작성되었으므로,이 경우에는 광범위하게 말하기 쉽습니다.

호스트 언어가 가상 컴퓨터에서 실행되는 경우 어떻게됩니까? 이 경우 명령어 세트는 다를 수 있습니다. 맞습니까?

VM에는 컴파일 된 개체 코드를로드하는 데 적절한 기능이 있어야합니다.