FFI = Foreign function interface
https://en.wikipedia.org/wiki/Foreign_function_interface
한 언어로 작성된 프로그램이 다른 언어로 쓰인 함수나 서비스를 사용할 수 있게 하는 것
주된 기능
- 한 언어(host language = FFI를 정의한 쪽)의 semantic, calling convention을 다른 언어(guest language)의 semantic, convention과 일치시키는 것
- runtime 환경 and/or applicaiton binary interface를 고려해야한다
방법
- Wrapper library 사용
- 적절한 glue code랑 함께 자동으로 guest lang 함수를 wrap해주는 툴을 사용
- Cross lang으로 사용될 수 있는 host lang의 기능을 제한
- Guest lang 함수를 특정 방식으로 구현하거나 제한함
고려 사항
- 한 언어는 GC를 지원하고 다른 언어는 아닌 경우, GC를 하는 언어가 다른 언어의 개체 메모리를 막 해제하지 않도록 주의
- Complicated or non-trivial objects or datatypes may be difficult to map from one environment to another.
- It may not be possible for both languages to maintain references to the same instance of a mutable object, due to the mapping issue above.
- One or both languages may be running on a virtual machine (VM); moreover, if both are, these will probably be different VMs.
- Cross-language inheritance and other differences, such as between type systems or between object-composition models, may be especially difficult.