Tôi có hàm Rust trả về array
và tôi muốn sử dụng mảng này trong Python
, có thể là list
hoặc numpy.array
nó không thực sự quan trọng.Sử dụng mảng Rust được trả về bằng Python sử dụng ctypes
chức năng Rust của tôi trông như thế này:
#[no_mangle]
pub extern fn make_array() -> [i32; 4] {
let my_array: [i32; 4] = [1,2,3,4];
return my_array;
}
Và tôi đang cố gắng để gọi nó bằng Python như thế này:
In [20]: import ctypes
In [21]: from ctypes import cdll
In [22]: lib = cdll.LoadLibrary("/home/user/RustStuff/embed/target/release/libembed.so")
In [23]: lib.make_array.restype = ctypes.ARRAY(ctypes.c_int32, 4)
In [24]: temp = lib.make_array()
In [25]: [i for i in temp]
Out[25]: [1, 2, -760202930, 32611]
Tôi đang làm gì sai? Tại sao đầu ra của tôi không phải là [1,2,3,4]
? Tại sao hai yếu tố đầu tiên của tôi đúng và hai yếu tố khác lại có rác thải?
Tôi không thể tìm thấy bất kỳ tài liệu nào tốt trên ctypes.ARRAY
, vì vậy tôi chỉ cần đi với những gì nhìn đúng, do đó có thể là vấn đề.
Nit kiểu nhỏ, nhưng hàm Rust của bạn có thể là 'pub extern fn make_array() -> [i32 ; 4] {[1,2,3,4]} '. – Shepmaster
@Shepmaster, tôi thấy cảm ơn bạn. Tôi cần phải quen dần với phong cách 'rỉ sét'. – Akavall
Tôi không biết ABI của Rust xử lý các mảng có kích thước cố định như thế nào nhưng AFAIK C không thể làm điều đó vì vậy tôi không mong đợi ctypes, hoặc bất kỳ người tiêu dùng C ABI nào, có thể làm việc với điều đó. – delnan