Comments 15
На первый взгляд выглядит довольно просто. Открывая статью, ожидал, что будет много плясок с бубном. Пробовали подключать что-нибудь более сложное, чем add(a+b) и были ли проблемы с этим?
до выхода 1.5 писал такие shared library на Rust (правда для python), всё работало, всё классно, но Rust лично мне показался несколько сложным
сейчас же с выходом 1.5 удовольствием перешёл на Go и справляется со своими задачами на отлично
например, недавно переписывал долго работающие тесты на Go c использование горутин — проблем с использованием такой shared library в Python не возникло
сейчас же с выходом 1.5 удовольствием перешёл на Go и справляется со своими задачами на отлично
например, недавно переписывал долго работающие тесты на Go c использование горутин — проблем с использованием такой shared library в Python не возникло
как с памятью? Что у вас были за задачи? Мы сейчас думаем раст в эрланг воткнуть.
Задачи в основном:
1) мониторинг запущенных процессов
2) задачи с параллельными вычилениями
3) какие-то ресурсоемкие вычисления
Rust хорошо с этим все справлялся, но
1) он сложнее, чем Go (но более гибкий и мощный)
2) более нестабилен и неясно «выстрелит» или нет
3) намного меньше библиотек
А поскольку Rust в основном ради shared library использовал, то с Go 1.5 мой выбор стал очевиден
Единственное в Rust очень удобная штука Cargo
По памяти ни в Rust ни в Go проблем не было, но Rust конечно лучше в плане управления памятью
Если для Вас это важно, выбирайте Rust
1) мониторинг запущенных процессов
2) задачи с параллельными вычилениями
3) какие-то ресурсоемкие вычисления
Rust хорошо с этим все справлялся, но
1) он сложнее, чем Go (но более гибкий и мощный)
2) более нестабилен и неясно «выстрелит» или нет
3) намного меньше библиотек
А поскольку Rust в основном ради shared library использовал, то с Go 1.5 мой выбор стал очевиден
Единственное в Rust очень удобная штука Cargo
По памяти ни в Rust ни в Go проблем не было, но Rust конечно лучше в плане управления памятью
Если для Вас это важно, выбирайте Rust
Интересно, что-то вспомнились ассемблерные вставки в Delphi, похоже пора учить go…
А без FFI? где .a файл?
А сборка мусора при этом тоже работает? Интересно, как это работает…
P.S.
Шедевральный перевод.
P.S.
Это должно содержать main.
Шедевральный перевод.
это самое интересное. В rust «сборка мусора» на этапе компиляции происходит. А тут то как?
как это сборка мусора на этапе компиляции?
у rust не GC вообще
doc.rust-lang.org/complement-design-faq.html
а вот как он работает с памятью
doc.rust-lang.org/book/the-stack-and-the-heap.html
у rust не GC вообще
doc.rust-lang.org/complement-design-faq.html
а вот как он работает с памятью
doc.rust-lang.org/book/the-stack-and-the-heap.html
из данного документа Go Execution Modes
That is, we must disable linker garbage collection of variables when -buildmode=c-archive, shared, c-shared, or plugin. We must also disable linker garbage collection of variables when the plugin package is imported
Со строками пришлось чуток вывернуться, они не совсем очевидно передаются (хорошо есть заголовочный файл):
Пока только не получилось прокинуть callback во внутрь, seg fault постоянно, надо подробней почитать документацию будет.
typedef struct { char *p; GoInt n; } GoString;
extern void echo(GoString p0);
module Go
class String < FFI::Struct
layout :p, :pointer,
:n, :int
end
attach_function :echo, [Go::String.by_value], :void
# ... и потом где-то
def self.do_echo(text)
btext = text.force_encoding 'binary'
str = Go::String.new
str[:p] = FFI::MemoryPointer.from_string(btext)
str[:n] = btext.size
self.echo str
end
end
Пока только не получилось прокинуть callback во внутрь, seg fault постоянно, надо подробней почитать документацию будет.
Sign up to leave a comment.
Подключения Go shared library к Ruby