Комментарии 11
Спойлер: Через FFI.
0
По-моему самое сложное в этом вопросе это то, что надо разобраться как работает cgo( который по-факту и не С и не Go), тоже самое наверняка и со стороны раста.
+1
Это хороший вопрос, который бы хорошо адресовать разработчикам компиляторов :)) В данном случае вызов происходит через FFI, что достаточно неплохо документировано.
0
самая большая проблема примеров с ffi в том, что они либо слишком сложные, либо, как ваш, не несут никакой практической пользы вообще.
а теперь попробуйте взять этот результат и применить его в своём скрипте на го. то то же.
покажите как вернуть значение в вызывающий код, расскажите как сделать так чтоб раст не удалил это значение при выходе из контекста, как потом почистить за собой память, есть ли возможность вернуть null и т.д.
а пример скопипастить на хабр это не интересно.
+1
Эта статья и не рассматривалась как сложная — на что я и указал в начале.
Будет интерес к статья — я расскажу и об этом.
Пример кода на Rust взят с книги, и я показал, как его можно использовать из Go. В книге о Go ничего не говорится, что на самом деле является недостатком.
покажите как вернуть значение в вызывающий код, расскажите как сделать так чтоб раст не удалил это значение при выходе из контекста, как потом почистить за собой память, есть ли возможность вернуть null и т.д.
Будет интерес к статья — я расскажу и об этом.
а пример скопипастить на хабр это не интересно.
Пример кода на Rust взят с книги, и я показал, как его можно использовать из Go. В книге о Go ничего не говорится, что на самом деле является недостатком.
0
А почему бы не скомпилировать rust библиотеку в static-lib? Насколько помню go прекрасно умеет с ними работать через тот же cgo. Только работать это будет быстрее и соберется все в единый бинарник.
Ну и так на заметку читающим, libembed.dylib — это мак специфично, на линуксе будет libembed.so, а на винде — libembed.dll
Ну и так на заметку читающим, libembed.dylib — это мак специфично, на линуксе будет libembed.so, а на винде — libembed.dll
+1
А почему бы не скомпилировать rust библиотеку в static-lib? Насколько помню go прекрасно умеет с ними работать через тот же cgo. Только работать это будет быстрее и соберется все в единый бинарник.
В данному случае все также соберется в единый бинарный файл. Будет ли это быстрее, чем static-lib это хороший вопрос и нужно смотреть на уровне ассемблера, как происходит вызов. Ну и опять же — все может зависеть от версии компилятора cgo.
Ну и так на заметку читающим, libembed.dylib — это мак специфично, на линуксе будет libembed.so, а на винде — libembed.dll
Спасибо. Хорошее замечания я добавлю в статью.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Вызов Rust функции из Go