ozkriff🇺🇦
Ну там вроде фреймворк поверх глиума был с уями, название запамятовал. На awesome rust можно подглянуть
так глиум там просто контекст создает, это просто часть реализации. ты про piston?
でゲソ
Щас бы ещё safety space в чате строить
Лол. Прост как-то неадекватно агр выглядит.
でゲソ
Пистон же целый фреймворк с кучей всего а не только гуи
でゲソ
Кондрод наверное
ozkriff🇺🇦
ой, да, конрод
でゲソ
Это кусок servo ?
ozkriff🇺🇦
Это кусок servo ?
скорей надстройка
Ilya
не, поверх servo
Евгений
webrender это кусок servo, а это какие-то наркоманы решили поверх него сделать UI
でゲソ
Чуваки которые Shar писали как-то так и делали тексты над игроками
Ilya
у Shar для gui биндинги к awesomium
でゲソ
https://github.com/Thinkofname/stylish
Я его со stylo маненько напутал. Тот что ксс обрабатывает
でゲソ
А под винды оно работает?
ozkriff🇺🇦
у Shar для gui биндинги к awesomium
и https://github.com/Gekkio/imgui-rs для отладочной информации
でゲソ
Имгуи порадовал, да.
でゲソ
Хотя и выглядит несколько уродливо в некоторых случаях
でゲソ
Но опять же байндинг
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🇺🇦
Я подозреваю проблема в том, что {} - выражение, возвращающее ()
это часть литерального синтаксиса. он там просто поле ожидает
Маjко
добавь в литерал _marker: PhantomData
this Заведи метод new() -> Self, чтобы удобнее было создавать
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
this Заведи метод new() -> Self, чтобы удобнее было создавать
А он по дефолту не может сконструировать _marker?
Cuno
это часть литерального синтаксиса. он там просто поле ожидает
Он же говорит структура пустая -> полей нет. Вообще в таких случаях линк на play.rust-lang.org желательно иметь.
Cuno
А он по дефолту не может сконструировать _marker?
Дефолт в расте явный, нужно явно вызывать Default::default()
Matwey
Как-то некрасиво получается
Cuno
Можешь #[derive(Default)] сделать и использовать CmdC::default()
Matwey
Ну это получается почти тоже самое, что если бы new() написать
Matwey
Я просто не очень понимаю, зачем писать new() если есть хороший способ инициализации через фигурные скобки
Matwey
ИЛи принято писать new() везде?
Cuno
Вообще принято, да. Обычно часть полей неочевидным образом инициализируется
Matwey
Какие такие прайват поля?
Маjко
Какие такие прайват поля?
Все, которые не pub
Matwey
А, точно
Matwey
Ну, короче, если я просто напишу struct MyStruct;
Matwey
То с ним удобно работать
Matwey
let x = MyStruct{}
Маjко
А если там есть поля, то их внезапно надо инициализировать
Маjко
Можно Default задерайвить
Matwey
Чем можно инициализировать PhantomData?
Matwey
Его чем не инициализируй, все-равно получится одно и тоже
Matwey
PhantomData
Ну да. Один единственный вариант всегда
Matwey
Зачем заставлять каждый раз явно его указывать?
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>;