Pull to refresh

Comments 15

На первый взгляд выглядит довольно просто. Открывая статью, ожидал, что будет много плясок с бубном. Пробовали подключать что-нибудь более сложное, чем add(a+b) и были ли проблемы с этим?

пробывал пускать кучу горутин и каждая шла в сеть. работало на тестах. есть стандартная библиотека так что можно много что делать.
до выхода 1.5 писал такие shared library на Rust (правда для python), всё работало, всё классно, но Rust лично мне показался несколько сложным
сейчас же с выходом 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
Интересно, что-то вспомнились ассемблерные вставки в Delphi, похоже пора учить go…
в Go много buildmode, так что можно и .a ;)

Я думаю можно и gem написать на Go, потому что модуль для Python на Go пишется достаточно легко
А сборка мусора при этом тоже работает? Интересно, как это работает…

P.S.
Это должно содержать main.

Шедевральный перевод.
это самое интересное. В rust «сборка мусора» на этапе компиляции происходит. А тут то как?
а так. У раста нет операций по явному удалению данных, значит есть сборка мусора. Просто она очень похожа на RAII
из данного документа 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
Если я правильно понел это когда подключать надо несколько packages "Multiples copies of a Go package"
Со строками пришлось чуток вывернуться, они не совсем очевидно передаются (хорошо есть заголовочный файл):

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 постоянно, надо подробней почитать документацию будет.
Only those users with full accounts are able to leave comments. Log in, please.