Size: a a a

Rust — русскоговорящее сообщество

2021 June 19

goldstein опять in Rust — русскоговорящее сообщество
int x = 0;
void* y = x; // это не NULL, потому что x не константное выражение
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообщество
Все еще не значит что требуется нулл отслеживать в рантайме.
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообщество
То есть да, это определенно разрешено.
источник

goldstein опять in Rust — русскоговорящее сообщество
void* zero = mmap(y, 1, PROT_READ | PROT_WRITE, MAP_ANON | MAP_FIXED, -1, 0);

это тоже не NULL, в чём самая мякотка
источник

goldstein опять in Rust — русскоговорящее сообщество
это — валидный указатель, который можно разыменовать
источник

goldstein опять in Rust — русскоговорящее сообщество
согласно стандарту он must compare unequal к настоящему NULL
источник

goldstein опять in Rust — русскоговорящее сообщество
как любой указатель, кроме NULL
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообщество
А, в этом смысле. Туше.
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообщество
Тем не менее ты только что привел доказательство моему высказыванию. С далек от ассемблера.
источник

goldstein опять in Rust — русскоговорящее сообщество
правильным решением, не требующим рантаймового трекинга, было бы сделать NULL битово равным -1
источник

goldstein опять in Rust — русскоговорящее сообщество
стандарт это не запрещает, и получить память, мапнутую в -1 ты на юниксах не можешь
источник

goldstein опять in Rust — русскоговорящее сообщество
но это сломало бы совместимость вообще со всем
источник

IA

Intemoc Aru'Nesh in Rust — русскоговорящее сообщество
Вопрос по поводу const_generic.
Есть структурка:
struct Make_index<Dummy_type, const index : u8> {
 _dummy : PhantomData<Dummy_type>
}

и несколько имплементаций одного трейта для неё (#![feature(specialization, const_generics, const_evaluatable_checked)]). Компилятор почему-то выдаёт следующее: `error[E0275]: overflow evaluating the requirement `Make_index<_, {_: u8}>: Make_index_trait``
Даже если я поставлю лимит рекурсий в несколько тысяч, хотя, в u8 нет столько значений.
источник

Э

Эрик in Rust — русскоговорящее сообщество
Проблема где-то в типе и авторефе, а не в константе.
источник

Э

Эрик in Rust — русскоговорящее сообщество
Ну или он просто не сравнивает уже полученные имплы по константе с оверфлоу имплами.
источник

IA

Intemoc Aru'Nesh in Rust — русскоговорящее сообщество
Автореф - это зависимость от самого себя?
источник

Э

Эрик in Rust — русскоговорящее сообщество
fn bar(mut i: impl Iterator) { match i.next() { Some(_) => bar(&mut i), None => () } }
источник

Э

Эрик in Rust — русскоговорящее сообщество
Хм, странно, оно компилируется.
источник

Э

Эрик in Rust — русскоговорящее сообщество
А вот так вот не компилируется:

fn main() {
   println!("Hello, world!");
   bar([()].iter());
}

fn bar(mut i: impl Iterator) {
   match i.next() {
       Some(_) => bar(&mut i),
       None => (),
   }
}
источник

AL

Arseniy Lebedev in Rust — русскоговорящее сообщество
источник