ozkriff🇺🇦
でゲソ
Пистон же целый фреймворк с кучей всего а не только гуи
でゲソ
Кондрод наверное
ozkriff🇺🇦
ой, да, конрод
Евгений
でゲソ
Это кусок servo ?
Ilya
не, поверх servo
Евгений
webrender это кусок servo, а это какие-то наркоманы решили поверх него сделать UI
でゲソ
Чуваки которые Shar писали как-то так и делали тексты над игроками
Ilya
у Shar для gui биндинги к awesomium
でゲソ
А под винды оно работает?
でゲソ
Имгуи порадовал, да.
でゲソ
Хотя и выглядит несколько уродливо в некоторых случаях
でゲソ
Но опять же байндинг
Golodnyi
let users: Vec<User> = pool.prep_exec("SELECT id, email, password from users", ())
.map(|result| {
result
.map(|x| x.unwrap())
.map(|row| {
let (id, email, password) = my::from_row(row);
User {
id: id,
email: email,
password: password,
}
})
.collect()
})
.unwrap();
тут получается строка
.map(|x| x.unwrap())
распаковывает данные и только в след. мапе доступны? А че так не красиво?
Golodnyi
не нравится еще что все переменные надо обромлять | |, в том же typescript никаких обрамлений нет
ozkriff🇺🇦
|| это аргументы замыкания, а не просто переменные
Vlad
(x) => x.unwrap() разве не так в типоскипте?
Golodnyi
круглые нужны только если ты тип указываешь
Golodnyi
ну тоесть по дефолту можно
x => x.unwrap
Golodnyi
либо (x: number) => x.unwrap
Golodnyi
если я правильно все помню
Golodnyi
ну палки хрен с ними, но то что доступ к данных через пару вызово бесполезного кода, эт прям для хищников
Golodnyi
3 мапы чтоб юзеров достать
Vlad
Пиши result а потом мапай, если так больше нравиться
Vlad
format на play.rust-lang.org у меня одного не пашет?
ozkriff🇺🇦
Matwey
Господа, а я недопонял, как PhantomData правильно использовать?
struct CmdC<T> {
_marker: std::marker::PhantomData<T>,
}
Так норм?
ozkriff🇺🇦
как вариант. хотя смотря что именно ты сделать хочешь.
Matwey
Я хочу сделать пустую структуру с шаблонным параметром.
Matwey
53 | let z = CmdC<u64> {};
| ^^ expected bool, found ()
Matwey
Чо-т ругается
ozkriff🇺🇦
добавь в литерал _marker: PhantomData
Cuno
Я подозреваю проблема в том, что {} - выражение, возвращающее ()
ozkriff🇺🇦
ozkriff🇺🇦
https://doc.rust-lang.org/std/marker/struct.PhantomData.html#examples :
rust
Slice {
start: ptr,
end: unsafe { ptr.offset(vec.len() as isize) },
phantom: PhantomData,
}
Matwey
Matwey
Как-то некрасиво получается
Cuno
Можешь #[derive(Default)] сделать и использовать CmdC::default()
Matwey
Ну это получается почти тоже самое, что если бы new() написать
Matwey
Я просто не очень понимаю, зачем писать new() если есть хороший способ инициализации через фигурные скобки
Matwey
ИЛи принято писать new() везде?
Cuno
Cuno
Вообще принято, да. Обычно часть полей неочевидным образом инициализируется
պլհկ
Matwey
Какие такие прайват поля?
Маjко
Matwey
А, точно
Matwey
Ну, короче, если я просто напишу
struct MyStruct;
Matwey
То с ним удобно работать
Matwey
let x = MyStruct{}
Маjко
А если там есть поля, то их внезапно надо инициализировать
Маjко
Можно Default задерайвить
պլհկ
Matwey
Чем можно инициализировать PhantomData?
Matwey
Его чем не инициализируй, все-равно получится одно и тоже
Маjко
Маjко
Matwey
PhantomData
Ну да. Один единственный вариант всегда
Matwey
Зачем заставлять каждый раз явно его указывать?
Loo
Маjко
ozkriff🇺🇦
Разве писать let x = MyStruct::default(); намного сложнее?
Matwey
Что-то я все-равно не до конца понимаю
Matwey
Писать
let z = std::marker::PhantomData::<u64>;Мне не запрещают
Matwey
Как тогда внутри устроен вообще PhantomData
Matwey
?
Matwey
Очевидно, что у него нет полей, но есть шаблонный параметр
ozkriff🇺🇦
https://doc.rust-lang.org/beta/nomicon/exotic-sizes.html
ozkriff🇺🇦
https://doc.rust-lang.org/nomicon/vec-zsts.html - еще тут интересные нюансы про ZST есть
ozkriff🇺🇦
TLDR: оно существует только для системы типов во время сборки программы, оптимизатор его начисто выкидывает из реального кода.
Или в каком смысле "как устроено"?
Matwey
PhantomData средставми языка реализован или через костыль в компиляторе?
պլհկ
#[lang = "phantom_data"]
#[stable(feature = "rust1", since = "1.0.0")]
pub struct PhantomData<T:?Sized>;