Pull to refresh
76
0
Андрей Лесников @ozkriff

Rust сектант и хобби-игродел

Send message
Ответили в итоге тут:

вроде, примерно то же что и я написал.


Получается, если хочешь создать либу, которую надо линковать с сишным кодом — ты ограничен только ночными сборками.

Если речь именно о "без std" то выходит так, да.


Так же, документация документирует ночные сборки, и дифференциации по фичам не делает.

Звучит как слишком мощная экстраполяция, так-то весь нестабильный функционал описывается в доках отдельно или с пометками. Просто конкретно этот момент с nostd такой хитрожопый вышел.


Зачем nostd тогда вообще стабилизировали я теперь не очень понимаю.

$ cat src/lib.rs 
#![no_std]
pub fn plus_one(x: i32) -> i32 { x + 1 }
$ cat Cargo.toml 
[package]
name = "nostr"
version = "0.1.0"

[lib]
# Если заменить rlib на staticlib или еще что - все печально :(
crate-type = ["rlib"]
$ c b
   Compiling nostr v0.1.0 (file:///home/ozkriff/zoc/nostr)
    Finished dev [unoptimized + debuginfo] target(s) in 0.10 secs
$ ls -lh target/debug/libnostr.rlib 
-rw-rw-r-- 2 ozkriff ozkriff 6,5K мар 29 19:45 target/debug/libnostr.rlib

Черт, и правда. rlib собрать можно, но толку от rlib без std никакого нет, потому что кроме как с ржавчиной такую библиотеку не используешь.


А вот staticlib или cdylib, которые как раз притворились бы сишными библиотеками, хотят panic_fmt и eh_personality :-( .

Или я что-то неверно понял.

Верно. Это я пропустил момент когда обсуждение перешло с этой ссылки на эту.


В общем, библиотеку без std можно собрать на стабильной ржавчине уже давно, исполняемый файл — нет.


Стабилизация последнего не особо приоритетна, как я понимаю, потому что не так-то проста и на практике обычно не так уж и важна (по сравнению со сборкой библиотек).

Пример из мануала предполагает, что если его закопипастить и попытаться собрать — должно собраться. В данном случае это не так.

Глава из секции "Nightly Rust", вполне логично что нужен ночной канал для использования того что там описано.


Сейчас я «застрял» на попытке собрать с #[no_std] в стабильном варианте.

Да, на стабильном канале этого сделать нельзя, возможность пока только для ночников. Когда-нибудь стабилизируют.


Если оно не может так делать в стабильном варианте — для продакшена не подходит.

Это может быть, хотя "продакшен" "продакшену" рознь — https://www.rust-lang.org/en-US/friends.html — многие из этих компаний пользуются именно ночными сборками.


С rustup вполне удобно зафиксировать какой-то ночник по дате и только когда сам захочешь — обновиться на более свежий ночник.

Да, нужен компилятор из ночного канала, эта глава же в секции "Nightly Rust" :-) Такая у ржавчины философия с feature'ами и каналами распространения

Там же по ссылке написано что надо предоставить свои реализации этих функций, раз выкинули станартную библиотеку.

да, в https://github.com/kud1ing/awesome-rust/#gui пока в основном привязки к сишным и плюсовым библиотекам :(


Если вдруг еще не натыкался и немедленный режим не пугает, то можно Conrod попробовать:


Раз никто не рвется комментировать, скажу что мой проект пошаговой игры на ржавчине еще не помер, хоть времени на него не получается много выделять:


https://users.rust-lang.org/t/this-month-in-zone-of-control/6993/2


И вот новый встроенный cargo check чертовски полезен, потому что ZoC разбит на несколько пакетов и прошлые итерации cargo check помогали только при работе над пакетом самого верхнего уровня.


Это, конечно, не полноценное решение долгих времен сборки, но на практике все же помогает сильно — ожидание уменьшается с пары десятков до просто пары секунд.

На ранних стадиях развития языка с явной семантикой перемещения экспериментировали, но в итоге пришли к текущей схеме


https://www.reddit.com/r/rust/comments/2x0wq0/did_rust_ever_experiment_with_making_moves

сделай ссылку на нулевой указатель

let a: *const i32 = std::ptr::null();
let b: &*const i32 = &a;

но это вообще несколько другое.

А чем Option не вписывается в приземленную императивщину? Лучше передает намерение писавшего код, все такое.

Насколько я понимаю, у макросов нет пространства имен потому что они работают до их разрешения и сами могут генерировать новые модули в процессе работы.

можно и нужно проще

Про "нужно" не особо однозначно, а реддите хорошое обуждение у статьи было:


https://www.reddit.com/r/rust/comments/5m4w95/the_rust_module_system_is_too_confusing/

В журнале пару раз упоминалось что это кастомный эмулятор терминала поверх SDL 1.2

Я добавлю еще ripgrep:


ripgrep combines the usability of The Silver Searcher with the raw speed of grep.

http://blog.burntsushi.net/ripgrep


https://github.com/BurntSushi/ripgrep


Хотя меня, конечно, как растофанатика в первую очередь интересует просто то что он написан на Rust)

Мой коммент был конкретно про то высказывание. Вообще да, сама война изначально носит аморальный характер в глазах многих людей.

Понятно что тонкостей много. Но я очень надеюсь что "совесть будет чиста" после качественного выполнения такой работы только у очень небольшого процента людей.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity