Как-то в дискуссии на РСДН-е проскользнула мысль о том, что одной из ключевых сфер применения Rust может оказаться разработка не User-mode приложений, а драйверов. Вот и результат небольшого эксперимента:
Несмотря на то, что на данный момент возникает куча вопросов связанных с отсутствием стандартных библиотек времени исполнения, все получается очень просто и изящно, может быть за исключением системы сборки, т.к. сборки приходится проводить в два этапа, но об этом чуть ниже.
#[no_std]; (1)
#[no_core]; (2)
extern "rust-intrinsic" {
pub fn transmute<T,U>(val: T) -> U;
}
extern {
#[fast_ffi]
pub fn printf(fmt: *u8); (3)
}
#[fixed_stack_segment]
unsafe fn print(s: &str) {
let (ptr, _): (*u8, uint) = transmute(s);
printf(ptr);
}
#[no_mangle] (4)
pub unsafe fn rust_main() {
print("hello from rust\n");
}
Во-первых, у Rust есть стандартный режим сборки запрещающий компилятору использование стандартных библиотек std
В качестве первого этапа сборки, необходимо скомпилировать все Rust файлы (в данном случае один), они будут использоваться в виде объектных файлов на этапе линковки.
Точка входа в драйвер приобретает следующий вид:
char __morestack[1024]; (1)
kern_return_t RustyKext_start(kmod_info_t * ki, void *d)
{
rust_main(); (2)
return KERN_SUCCESS;
}
Скорей всего в реальном проекте в процессе инициализации потребуется больше действий нежели перейти в основной код, написанный на Rust
Сразу хочу обратить внимание на переменную
cmp rsp, qword [gs:0x330] ; XREF=0xe40
jnbe 0xed5
; Basic Block Input Regs: rsp - Killed Regs: r10 r11
mov r10, 0x18
mov r11, 0x0
call ___morestack
ret
При наличии желания проект можно собрать самостоятельно и “поиграться” с ним; а если у меня дойдут до этого руки, сделаю из этой заметки полноценную статью, т.к. потенциальная возможность очень интересная, но открытых вопросов крайне много
Привет. Что думаешь насчёт написания модулей на Rust для Node.js?
Насколько такое реально сейчас?
А какой в этом смысл? Если у Node.js есть какой-либо интерфейс взаимодействия с Си, то это однозначно можно реализовать. Но, повторюсь, а зачем?
Это как минимум лучше с точки зрения утечек памяти и прочих неприятностей от которых защищает Раст.
Да и просто just for fun
Какая-то ахинея :))
rust-у надо хотябы стабильный рантайм заиметь, для драйверов рановато
Привет из будущего! Вы тоже роетесь в истории этого языка?
Да, для каждого файла с тестами. Не для индивидуального теста, само собой, так как один файл может содержать кучу тестов.
Нет, давно интересовался. При современно уровне развития C++ смысла в Rust фактически нет.