-
V lang: FFI 사용하기컴퓨터/V language 2021. 7. 6. 11:04728x90반응형
FFI
FFI 란?
외부 함수 인터페이스, 쉽게 이 글로 예를 들면
vlang으로 작성한 피보나치 함수를 dll/so로 export 하고 dart나 다른 언어에서 쓸 수 있도록 해주는 것이다.
v 소스파일 -> dll/so
윈도우는 dll, 리눅스 계열은 so로 export 된다.
ffi.v
간단한 피보나치 계산 함수이다. export에 어떠한 함수명으로 쓸지 결정할 수 있다.
// ffi.v module ffi [export: 'fib'] pub fn fib(n int) int { if n <= 2 { return 1 } else { return fib(n - 1) + fib(n - 2) } }
.v -> dll/so
gcc -shared로 하는 것과 같이 하면 된다. (v도 c로 compile 될 수 있다.)
ffi.dll (ffi.so) 파일이 생성된다. (v 명령어 하나로 할 수 있는게 편하다)
v -shared -prod ffi.v
예제
python
from ctypes import CDLL, c_int def main(): lib = CDLL("./ffi.dll") lib.fib.restype = c_int lib.fib.argtypes = [c_int] print(f"fib(10): {lib.fib(10)}") if __name__ == "__main__": main() """ 결과 fib(10): 55 """
dart
import 'dart:ffi'; // fib function from V typedef FibFunc = Int32 Function(Int32 a); typedef Fib = int Function(int a); void main() async { final dylib = DynamicLibrary.open('./ffi.dll'); final fibPointer = dylib.lookup<NativeFunction<FibFunc>>('fib'); final fib = fibPointer.asFunction<Fib>(); print('fib(10) = ${fib(10)}'); } /* 결과 fib(10): 55 */
728x90'컴퓨터 > V language' 카테고리의 다른 글
V language : Sleep Sort (0) 2020.08.22 V language : Binary Search Tree (BST) (0) 2020.08.21 V language : Introspective Sort (0) 2020.08.20