Как стать автором
Обновить

Комментарии 24

Спасибо. Куда полезнее, чем очередной перевод сомнительного срача.
У тебя есть какие-то проблемы с моими срачами переводами?
Читаю ваши последние комментарии — ох, знатно же у вас подгорает на почве Rust! Не пробовали обратиться к психологу?
Психологи с таким не помогают, хотя в этой стране, за деньги, — как всегда найдут «универсальную пилюлю» от всех проблем.
Спасибо за статью!

На самом деле, в коммьюнити Rust и Go очень доброжелательные отношения как внутри, так и друг с другом. Фриков, которые обсирают «противоположный» язык, не любят ни там, ни там. Такие статьи, как эта — это очень здорово.

По коду.
#[no_mangle]
pub extern "C" fn hello_from_rust(name: *const libc::c_char) {
    let buf_name = unsafe { CStr::from_ptr(name).to_bytes() };
    let str_name = String::from_utf8(buf_name.to_vec()).unwrap();
    println!("go\t: {}", str_name);
}

Здесь много лишних действий. Вот так (для данного конкретного случая) будет проще:
use std::str;

pub extern "C" fn hello_from_rust(name: *const libc::c_char) {
    let c_name = unsafe { CStr::from_ptr(name) };
    let str_name = str::from_utf8(c_name.to_bytes()).unwrap();
    println!("go\t: {}", str_name);
}

В данном случае лишних аллокаций делать совершенно не нужно, и код получается чуть проще.
На самом деле, в коммьюнити Rust и Go очень доброжелательные отношения как внутри, так и друг с другом.
Поддержу! Вот например свежая цитата недели из еженедельника This Week in Rust:
I think if someone placed the Rust and Go community in a room and asked them to fight, we'd probably just all order pizza and geek out over languages. — Manish Goregaokar
Расскажи мне про любовь гоферов и растофриков, расскажи. Вчера в русскоязычной го-слаке растофрика просто растоптали, а на прошлой неделе, уже в англоязычной, обсирали cargo.

Повторюсь, Go и Rust это вечные враги и никакая дружба-печеньки это не поменяют.
Похоже, что с вами не так уж и согласны.
Есть такие вещи, о которых обычно не говорят. Я не стесняюсь о них говорить, потому что я молодой, задорный и мне все по балде. Мне глубоко насрать, согласен ты со мной или нет, я оперирую фактами. А факты таковы, что сообщество, а в частности, русскоязычная и англоязычная го-слака, относится к Rust враждебно.

То как ты эти факты воспринимаешь — это твое дело.
Вы может и молодой-задорный, но, что в данном контексте куда важнее, еще и глупый.

С удовольствием пишу на Go и всерьез поглядываю в сторону Rust, так как он впитал в себя немало из языков ML-семейства, а мне уж очень мил в свое время был OCaml. Ну и у всего моего окружения, кто пишет на Go, отношение к Rust от безразличного до откровенного интереса, и уж точно нет никакого негатива. Языки разные, идеологии разные, ниши у них едва пересекаются. А даже если они и конкуренты, что мешает просто посмотреть оба инструмента, выбрать лучший, а вторым просто не пользоваться, оставив его в покое? Нет, я не буду говорить, что больше нет «упорышей» вроде вас, но большинству нормальных людей недосуг враждовать с не нравящимися им технологиями.
Похоже вам никак не переубедить токарей, что их металлообрабатывающий станок им не нужен, а нужен вами так любимый перфоратор.
> Вчера в русскоязычной го-слаке растофрика просто растоптали,

Я за этим наблюдал. Парень привел весьма славные аргументы, а с вашей (твоей в частности) были только слюни, пена и переходы на личности. Мерзость, а не сообщество у вас там.
Ключевая фраза в русскоязычной.
Как показывает практика, люди компенсируются как могут, а за бугром, обычно, это не свойственно — меньше проблем, меньше протестов, и соответственно внутреннего напряжения которое нужно как-то высвободить. Эт я вообще о психологии, если кто не понял…
rm -f "./main"


Shooting in your right foot :D The makefile style
Так а что тут не так? И как правильно будет?
Да я просто представил, если кто-то случайно напишет вместо make — sh на файл из другой папки :/ и удалится main где-то не там.

А если кто-то случайно напишет сразу `rm main`?
Поскольку go может создавать только исполняемые файлы, коду на rust придётся побыть статической библиотекой.

Это неверно. Go собирается исполняемые файлы только для main-пакетов, для остальных пакетов на выходе получается статическая библиотека. С версии 1.5, Go уже умеет собирать «C archives», тоесть вполно себе можно делать вендорные пакеты.
c archive это что вроде с расширением .a?
С расширением .so тоже умеет, если вопрос в этом.
Вот теперь жить можно, спасибо. А статьи на эту тему нет?
А вот чтобы прямо статья — нету. Есть некий вот такой документ, есть безумный туториал. Но это всё только в 1.5 будет (в 1.5 beta 2 работает).
На эту тему есть issue
Go пока не умеет создавать стабильные статические и динамические библиотеки для линковки с кодом других компиляторов.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории