Vlad
Указатель на "что-нибудь", короче
Сережа
тогда это не аналог ((void*)...) а аналог ((T*)...), хотя в си нет разницы
Сережа
тогда это не аналог ((void*)...) а аналог ((T*)...), хотя в си нет разницы
На всякий случай, в си неявно можно привести указатель любого типа на указатель любого другого. Поля типа, если он составной, будут доступны только если указатель правильного типа, если указатель другого типа - то неопределенное поведение. Я это имел ввиду.
Сережа
https://ideone.com/9iODlN
Сережа
я это имел ввиду
Сережа
навсидку я помню что язык си - язык со слабой статической типизацией
Сережа
по стандарту не запрещено присваивать любой указатель одного типа любому указателю другого типа
Сережа
gcc дает варнинг
Сережа
в плюсах такое запрещено
分解物質
分解物質
պլհկ
պլհկ
Удобно
Anonymous
для чего ?
分解物質
для чего ?
для nil-pointer проверок
պլհկ
>compatible types
分解物質
պլհկ
ну т.е. тайп пуннинг запрещен стандартом
պլհկ
А как bind делать тогда?
Сережа
ты не прав
точно, спасибо за ссылку на пункт стандарта, по крайней мере для С99 я не прав
պլհկ
тайп пуннинг?
https://en.wikipedia.org/wiki/Type_punning#Sockets_example
պլհկ
Ну т.е. это решается добавлением (void*) справа
պլհկ
Потом кастуй как хочешь
Сережа
я правильно понимаю, что struct T1* и struct T2* всегда совместимы
պլհկ
Нет
պլհկ
tl;dr совместимы если совместимы поля, поля совместимы если одинаковые имена и дальше рекурсивно
分解物質
плюс это
分解物質
тоесть пунинг в bind(2) это ub (ib)
分解物質
но технически confirming
Anonymous
https://gist.github.com/voidlizard/c736e3d7fcd382c6f9904f8b653102b5#file-special-olympics-md
Anonymous
уже было тут?
Anonymous
ага
Сережа
C89 7.17
Все-таки без ключиков -Werror -Wpedantic оно компилируется и скорее всего из-за обратной совместимости. Делать так конечно же не надо. С89 это первый стандарт, так что то что было до этого это наверное диалекты. Про этот ваш тайп пунинг я не понял, как то, что можно присваивать любой указатель к _Bool может помешать скастовать sockaddr_in* к sockaddr*.
Маjко
уже было тут?
Оно тут родилось
Anonymous
шта
Anonymous
сижу в легендарном чатике
Anonymous
кто это сделал
Anonymous
Оно тут родилось
это он сделал
Anonymous
https://github.com/mersinvald/rust-vs-haskell-special-olimpiade
Маjко
это он сделал
Он — это я
分解物質
https://github.com/mersinvald/rust-vs-haskell-special-olimpiade
а я сделал пока самое быстрое решение из предложенных
Anonymous
скинь
Anonymous
когда это было вообще куда листать
Маjко
а я сделал пока самое быстрое решение из предложенных
Я позволю сишке выбиться вперед в этой спецолимпиаде :)
Vladimir
^ цыфры устарели
на моем ваши решения примерно схожи ./target/release/test_stdout < source.txt > /dev/null 1.48s user 0.02s system 96% cpu 1.556 total ➜ test_stdout git:(master) ✗ time ./a.out <source.txt >/dev/null ./a.out < source.txt > /dev/null 1.50s user 0.03s system 96% cpu 1.592 total
Vladimir
c этим хаком "унлайкли" даже чучуть быстрее в среднем у @mersinvald
Loo
Поцаны
Loo
Вы уже два дня
Loo
Эту хуйню
Loo
Бенчите
Сережа
циклы разверните)))))))))
Сережа
раст не может вернуть обобщенный тип из обобщенной функции?
Loo
На этом предложение
Loo
Надо было закончить
Сережа
да, спасибо, я уже попробовал
分解物質
cargo build —release unlikely удалил чтобы собрать с rustc который в репе есть
Сережа
https://rustbyexample.com/fn/closures/output_parameters.html However, returning closure types are problematic because Rust currently only supports returning concrete (non-generic) types.
Маjко
Поставь через растап
Alexander
о какие тут результаты сегодня?
Маjко
о какие тут результаты сегодня?
ПОявилась более быстрая сишка, но мы пока не выяснили быстрее ли она варианта с unlikely: на разном железе разные результаты
Alexander
кстати мою утреннюю сишку обогнали?
Alexander
где switch () ...
Маjко
Хз, я только проснулся)
Alexander
или это она