Получается, если хочешь создать либу, которую надо линковать с сишным кодом — ты ограничен только ночными сборками.
Если речь именно о "без 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 можно собрать на стабильной ржавчине уже давно, исполняемый файл — нет.
Стабилизация последнего не особо приоритетна, как я понимаю, потому что не так-то проста и на практике обычно не так уж и важна (по сравнению со сборкой библиотек).
И вот новый встроенный cargo check чертовски полезен, потому что ZoC разбит на несколько пакетов и прошлые итерации cargo check помогали только при работе над пакетом самого верхнего уровня.
Это, конечно, не полноценное решение долгих времен сборки, но на практике все же помогает сильно — ожидание уменьшается с пары десятков до просто пары секунд.
Насколько я понимаю, у макросов нет пространства имен потому что они работают до их разрешения и сами могут генерировать новые модули в процессе работы.
Понятно что тонкостей много. Но я очень надеюсь что "совесть будет чиста" после качественного выполнения такой работы только у очень небольшого процента людей.
вроде, примерно то же что и я написал.
Если речь именно о "без std" то выходит так, да.
Звучит как слишком мощная экстраполяция, так-то весь нестабильный функционал описывается в доках отдельно или с пометками. Просто конкретно этот момент с nostd такой хитрожопый вышел.
Зачем nostd тогда вообще стабилизировали я теперь не очень понимаю.
Черт, и правда.
rlibсобрать можно, но толку от rlib без std никакого нет, потому что кроме как с ржавчиной такую библиотеку не используешь.А вот
staticlibилиcdylib, которые как раз притворились бы сишными библиотеками, хотятpanic_fmtиeh_personality:-( .Верно. Это я пропустил момент когда обсуждение перешло с этой ссылки на эту.
В общем, библиотеку без std можно собрать на стабильной ржавчине уже давно, исполняемый файл — нет.
Стабилизация последнего не особо приоритетна, как я понимаю, потому что не так-то проста и на практике обычно не так уж и важна (по сравнению со сборкой библиотек).
Глава из секции "Nightly Rust", вполне логично что нужен ночной канал для использования того что там описано.
Да, на стабильном канале этого сделать нельзя, возможность пока только для ночников. Когда-нибудь стабилизируют.
Это может быть, хотя "продакшен" "продакшену" рознь — https://www.rust-lang.org/en-US/friends.html — многие из этих компаний пользуются именно ночными сборками.
С rustup вполне удобно зафиксировать какой-то ночник по дате и только когда сам захочешь — обновиться на более свежий ночник.
Да, нужен компилятор из ночного канала, эта глава же в секции "Nightly Rust" :-) Такая у ржавчины философия с feature'ами и каналами распространения
http://xkcd.ru/927
Там же по ссылке написано что надо предоставить свои реализации этих функций, раз выкинули станартную библиотеку.
да, в 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://github.com/martinhath/content-aware-resize/issues/new — это лучше у автора кода спросить
На ранних стадиях развития языка с явной семантикой перемещения экспериментировали, но в итоге пришли к текущей схеме
https://www.reddit.com/r/rust/comments/2x0wq0/did_rust_ever_experiment_with_making_moves
но это вообще несколько другое.
А чем Option не вписывается в приземленную императивщину? Лучше передает намерение писавшего код, все такое.
Может https://docs.rs/text_io или https://docs.rs/scan_fmt (или еще что похожее) взять?
Насколько я понимаю, у макросов нет пространства имен потому что они работают до их разрешения и сами могут генерировать новые модули в процессе работы.
Про "нужно" не особо однозначно, а реддите хорошое обуждение у статьи было:
https://www.reddit.com/r/rust/comments/5m4w95/the_rust_module_system_is_too_confusing/
В журнале пару раз упоминалось что это кастомный эмулятор терминала поверх SDL 1.2
Я добавлю еще ripgrep:
http://blog.burntsushi.net/ripgrep
https://github.com/BurntSushi/ripgrep
Хотя меня, конечно, как растофанатика в первую очередь интересует просто то что он написан на Rust)
Мой коммент был конкретно про то высказывание. Вообще да, сама война изначально носит аморальный характер в глазах многих людей.
Понятно что тонкостей много. Но я очень надеюсь что "совесть будет чиста" после качественного выполнения такой работы только у очень небольшого процента людей.