리비피
libffi| 개발자 | 앤서니 그린 |
|---|---|
| 초기 릴리즈 | 1996년 10월 7일 전) |
| 안정적 해제 | 3.4.2 / 2021년 6월 28일; 전 |
| 리포지토리 | |
| 기록 위치 | C, 어셈블리 언어 |
| 운영 체제 | Unix 유사, Microsoft Windows, OS X, iOS, 베어 메탈 |
| 유형 | 런타임 라이브러리 |
| 면허증 | MIT 라이선스[1] |
| 웹사이트 | sourceware |
libffi는 외부 기능 인터페이스 라이브러리다.컴파일 시간 대신 런타임에 대상 함수에 대한 정보가 주어지는 네이티브 컴파일 함수를 호출할 수 있는 C 프로그래밍 언어 인터페이스를 제공한다.그것은 또한 반대되는 기능성을 구현한다: libffi는 런타임에 정의된 인수의 어떤 조합을 수용하고 해독할 수 있는 함수에 대한 포인터를 생성할 수 있다.
libffi는 컴파일된 언어 구현과 해석된 언어 구현 사이의 브리징 기술로 가장 자주 사용된다.libffi는 또한 플러그인의 함수 서명이 호스트 응용 프로그램을 만들 때 알려지지 않은 플러그 인 구현에 사용될 수 있다.
Notable users include Python, Haskell, Dalvik, F-Script, PyPy, PyObjC, RubyCocoa, JRuby, Rubinius, MacRuby, gcj, GNU Smalltalk, IcedTea, Cycript, Pawn, Squeak, Java Native Access, Common Lisp (via CFFI), Racket,[2] Embeddable Common Lisp and Mozilla.[3]
Mac OS X에서 libffi는 프레임워크 인터페이스의 프로그래밍 언어 중립적 설명을 제공하는 BridgeSupport와 Lisp에서 직접 Objective-C 액세스를 바인딩하는 Nu와 함께 일반적으로 사용된다.
libffi는 널리 포트로 되어있으며 MIT 면허에 따라 출시된다.
배경
비록 C 프로그래밍 언어는 플랫폼들 사이에 어디에나 존재하지만, 기능 호출을 기계 코드로 구현하는 방법, 즉 호출 규약은 다양하다.런타임에 서브루틴을 동적으로 로딩하고자 할 때는 이러한 규약에 대한 지식이 필요하다.
libffi는 많은 플랫폼에서 통화 규약에 대한 지식을 가지고 있다.OS 조합).플랫폼에 관계없이 모든 빌드의 libffi에서 공유되는 C API는 플랫폼마다 코드를 로딩하는 복잡성을 추상화한다.정규 기능 외에 C형 변량 기능도 지원한다.
C 호출 규약은 C 언어에 의해서만 사용되는 것이 아니다: C로 쓰여진 기존 코드의 양 때문에, 대부분의 새로운 컴파일된 언어들은 또한 그러한 규약에서 쓰기 및 호출 기능을 허용한다.결과적으로, libffi는 이러한 언어로 쓰여진 몇몇 기능과 상호작용할 수 있다.
역사
이 섹션에는 gencall 연도에 대한 정보가 누락되어 있다.(2021년 1월) |
원래 앤서니 그린에 의해 개발된 libffi는 실리콘 그래픽스의 Gencall 라이브러리에서 영감을 받았다.겐콜은 당시 SGI에 고용된 지아니 마리안리가 주소별 기능 호출을 허용하고 특정 통화 컨벤션(MIPS O32)을 위한 통화 프레임을 만들기 위해 개발했다.앤서니 그린은 아이디어를 다듬어 다른 건축물과 콜링 컨벤션과 오픈 소싱 리비피로 확장했다.
입양
libffi 라이브러리는 해석된 코드와 원래 컴파일된 코드 사이에 다리를 놓는 데 유용하다.주목할 만한 사용자는 다음과 같다.
D
F-스크립트
- F-스크립트
- F-스크립트로 작성된 코코아 클래스를 동적으로 생성
기일
- GNU 길레
- libffi는 Guile 1.9.8 이상에서 사용된다.
하스켈
- GHC
- libffi는 2009년 말부터 GHC에 의해 수행된 FFI의 대부분을 위해 사용되어 왔다.
자바
- 오픈JDK
- 자바 플랫폼 표준 에디션의 오픈소스 구현은 제로 어셈블리 포트의 인터프리터와 네이티브 코드를 연결하기 위해 libffi를 사용한다.
- JNA(Java Native Access)
- JNI가 없는 Java에서 네이티브 코드를 호출하는 방법.
- gcj
- Java Programming Language용 GNU 컴파일러의 런타임 라이브러리는 libffi를 사용하여 해석된 코드와 기본적으로 컴파일된 코드 사이의 호출을 처리한다.gcj는 GCC, GNU 컴파일러 컬렉션의 일부다.
자바스크립트
- JSCocoa
- (libffi-iphone 포트를 통해) Mac OS X 및 iPhone의 javascript에서 Objective-C 코드를 호출하십시오.
리스프
- 씨피립피
- Common Lisp CFFI를 위한 표준 외부 기능 인터페이스 라이브러리에는 cffi-libffi 시스템이 포함되어 있어 가치별 구조 인수 전달 및 반환에 대한 지원을 포함한다.
펄
- FFI:원시
- libffi 주위에 얇은 포장지.
- FFI: 플라티푸스
- 리피에 더 새롭고 더 편리한 포장지.
파이톤
- CPython
- Python 프로그래밍 언어의 기본적이고 광범위하게 사용되는 구현은 표준 ctypes 라이브러리에서 libffi를 사용한다.
- 표브이시
- Mac OS X의 Python에서 Objective-C 코드를 호출하십시오.
라켓
- 라켓
- 이 인기 있는 Scheme 구현의 C 코드를 호출하십시오(폴 그레이엄의 새로운 Lisp, Arc의 구현 플랫폼으로도 사용됨).
루비
- 피들
- 루비 표준 라이브러리의 libffi 포장지
- 루비-FFI
- Ruby를 위한 외부 기능 인터페이스 확장.
- 루비코아
- Mac OS X의 Ruby에서 Objective-C 코드를 호출하십시오.
참조
- ^ https://github.com/atgreen/libffi/blob/master/LICENSE
- ^ "Archived copy" (PDF). Archived from the original (PDF) on 2009-09-02. Retrieved 2009-08-02.
{{cite web}}: CS1 maint: 타이틀로 보관된 사본(링크) - ^ https://hg.mozilla.org/mozilla-central/file/2dc00d4b379a/js/ctypes/libffi
- ^ https://developer.mozilla.org/en/js-ctypes, js-ctypes 참조