Комментарии 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 постоянно, надо подробней почитать документацию будет.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Подключения Go shared library к Ruby