@ProCxx

Страница 1759 из 2477
Constantine
15.02.2018
15:53:05
при этом /EHsc является основной практической настройкой

в данном примере такое ощущение, будто компилятор опасается выброшенного исключения при {} - инициализации структуры с size_t

Aidar
15.02.2018
15:54:02
а математически можно заставить компиль распозновать удлинение времени жизни в сложных случаях?

Antony
15.02.2018
15:54:55
а математически можно заставить компиль распозновать удлинение времени жизни в сложных случаях?
Да, там Саттер прорабатывает более общее решение, но оно весьма противоречивое

Google
Aidar
15.02.2018
15:55:18
на объекты бы повесить те же штуки что и на функции

Constantine
15.02.2018
15:55:40
в общем, категорически рекомендую добавлять /EHsc при проверке тех или иных решений для msvc

потому что может приводить к полному сбою всей оптимизации

Aidar
15.02.2018
15:55:55
хотяб для инициализации
а хотя не уг какоето

слишком жирно

Antony
15.02.2018
15:57:21
на объекты бы повесить те же штуки что и на функции
Тогда можно получить javascript с вечной проблемой утекающей в непонятном месте памяти

Anatoly
15.02.2018
15:58:55
тогда сломается void foo(string_view sw); foo(string{"Hello word!"}); // OK, right now
а почему надо держаться за этот кейс?

Berkus
15.02.2018
15:59:19
да ну его
го писать на го - тупо же звучит, поэтому и не пишет :D

Alex Фэils?︙
15.02.2018
15:59:42
ага, да и к тому же я ж уже так шутил)

Antony
15.02.2018
15:59:44
а почему надо держаться за этот кейс?
это популярный и нормальный кейс В Boost его попробовали убрать, и поломался весь пользовательский код

Anatoly
15.02.2018
16:01:06
интересно, какой смысл вкладывался. даже если предположить, что сигнатура была до появления std::string_view просто std::string.

Antony
15.02.2018
16:01:09
а почему надо держаться за этот кейс?
В более вменяемом виде он выглядит как void foo(string_view sw); string bar(); foo(bar()); // OK, right now

Google
Anatoly
15.02.2018
16:01:32
ok

Constantine
15.02.2018
16:03:29
нужно просто нормально написать для всяких std::vector::operator [] ref-quailifier

Aidar
15.02.2018
16:04:07
ну вон там стрингвью

Anatoly
15.02.2018
16:04:12
@antoshkka так, а прострел ноги в том, что ...? ну, передали в std::string_view временный объект, который будет жить до конца полного выражения. ну передали в функцию. функция же не дура сохранить где-то std::string_view и использовать после.

Constantine
15.02.2018
16:05:10
в string_view нужно запретить вообще временные объекты передавать)

Aidar
15.02.2018
16:05:25
просто какбы у stringview семантика ссылки неявная

и вроде хранить можно изза этого

Constantine
15.02.2018
16:06:02
я бы сказал, что в C++ есть чудесная проблема преобразования && в const&

Constantine
15.02.2018
16:06:46
а почему просто не написать: operator string_view() const noexcept & ;
потому что && можно в const& преобразовать

const& сигнатура аналогична const

operator string_view() noexcept & должно быть

string_view это принципиально & тип, насколько я понимаю, он не может захватить владение

Antony
15.02.2018
16:09:36
operator string_view() noexcept & должно быть
Это всё равно не 100% гарантия string_view sw; { string s{"hello word. hello word. hello word. hello word. hello word. "}; sw = s; } std::cout << sw; // Oops!

Constantine
15.02.2018
16:10:57
Это всё равно не 100% гарантия string_view sw; { string s{"hello word. hello word. hello word. hello word. hello word. "}; sw = s; } std::cout << sw; // Oops!
По моему текущего мнению все хорошо, если считать 1. Объект & живет минимум scope выше чем оператор, и только с него можно снимать view 2. Объект && живет оператор

Т.е. если я создаю или присваиваю view-объект с нарушением правил жизни, я сам буратино

Хотя я предпочел бы иметь view-объекты немутабельными

Как &

Google
Berkus
15.02.2018
16:12:24
Enter Rust

Constantine
15.02.2018
16:13:09
По моему текущего мнению все хорошо, если считать 1. Объект & живет минимум scope выше чем оператор, и только с него можно снимать view 2. Объект && живет оператор
Вроде как в этих правилах все хорошо, если view объект создается из объекта &, потому что переданный объект гарантированно живет в scope, в котором объявлен view-объект

Aidar
15.02.2018
16:13:34
ну там не нужна гарантия

давайте оставим как есть

Constantine
15.02.2018
16:14:31
Ну кроме того, что && конвертируемо языком в const& и это все ломает

я поэтому и сказал что это костыль
ну указатель без владения ты никогда не пофиксишь, а это пример с семантикой указателя без владения

Aidar
15.02.2018
16:19:04
ну раст +- говорят чекает хотя я не проверял

на явных штуках наверное

Constantine
15.02.2018
16:19:39
да раст небось заставит тебя доказывать что объект не сдохнет

Berkus
15.02.2018
16:22:25
Berkus
15.02.2018
16:22:50
удобно вот так хейтить то сразу, да?

Constantine
15.02.2018
16:23:20
удобно вот так хейтить то сразу, да?
речь же про пример когда это утверждение неверно)

я предполагаю ошибку вроде "I'm not sure this reference is not dead, gimme the prove"

Berkus
15.02.2018
16:24:54
я предполагаю ошибку вроде "I'm not sure this reference is not dead, gimme the prove"
где ты ее предполагаешь, и почему ты считаешь что бороу чекер не справится? ты изучал как он работает или хотя бы прочитал немного матсакиса?

Berkus
15.02.2018
16:29:20
ну в расте если функция консьюмит этот стринг вью, то bar(foo()) валиден - bar заберет ownership себе и спокойно внутри себя похоронит

если не консьюмит то тоже должно быть нормально, не могу сказать точно почему я так думаю сейчас правда

Google
Berkus
15.02.2018
16:30:29
а, ну собсно borrow будет на время вызова, а потом дропнется

Constantine
15.02.2018
16:30:59
ну в расте если функция консьюмит этот стринг вью, то bar(foo()) валиден - bar заберет ownership себе и спокойно внутри себя похоронит
а как это реализовано? тут же с точки зрения плюсов шаблонная функция bar() должна быть, либо она должна значение получать

Berkus
15.02.2018
16:31:36
если ты передаешь значение то оно консьюмится

let a = "foo"; g(&a); // g сжирает &a f(a); // f сжирает а h(a); // хуюшки

примерно так

Constantine
15.02.2018
16:33:06
let a = "foo"; g(&a); // g сжирает &a f(a); // f сжирает а h(a); // хуюшки
ну это по сути плюсовая модель с точность до проверки, что после std::move() нельзя объект использовать

т.е. g() по сигнатуре получает & и обязана не делать side effect f(), h() по сигнатуре получает значение и его перемещают правильно?

Admin
ERROR: S client not available

Berkus
15.02.2018
16:34:44
близко, но не совсем, в с++ нету lifetime annotations

Alex Фэils?︙
15.02.2018
16:34:56
{}

Constantine
15.02.2018
16:36:21
(под side effect подразумеваю что функция не имеет права присваивать ссылку кому-либо, кроме локальных переменных и возвращаемого view-значения)

близко, но не совсем, в с++ нету lifetime annotations
у меня сейчас конвенция на это есть)))

Berkus
15.02.2018
16:39:05
в конвенции нет бороу чекера, так что это баловство в целом

Constantine
15.02.2018
16:39:26
компиль-тайм чекера нет, да

рантайм чекает в дебажке

Berkus
15.02.2018
16:40:44
ну хоть так

Constantine
15.02.2018
16:40:56
ну там в случае передачи ссылки с сохранением враппер передается

т.е. типа 0. По умолчанию ты не имеешь права считать, что ссылка живет дольше вызываемой функции (вызывающий гарантирует последнее) 1. Если 0 нарушается возвратом view-объекта, ты сам делаешь враппер и обзываешь функцию _view 2. Если 1 нарушается, то принимается сразу враппер

Berkus
15.02.2018
16:45:49
1 как нарушается?

Constantine
15.02.2018
16:50:46
Например, мне нужно передать std::function с биндом

Google
Constantine
15.02.2018
16:52:16
Лямбда должна враппер сразу захватывать

Или есть кнопки, которые хотят, чтобы был инициализирован глобальный TooltipController

Kitsu
15.02.2018
17:19:48
void f(const T t) { g(std::move(t)); } Это же UB?

Constantine
15.02.2018
17:48:17
void f(const T t) { g(std::move(t)); } Это же UB?
плохо понимаю, почему

Kitsu
15.02.2018
17:48:54
плохо понимаю, почему
в общем-то потому что нет

Constantine
15.02.2018
17:49:33
в общем-то потому что нет
ну move вернет const&&

Matwey
15.02.2018
19:52:39
Господа

А clang и gcc обучены ли PLD использовать на ARM-ах?

https://lwn.net/Articles/444336/ Вот вам. Тут любят такое.

> An additional complication comes from the fact that virtual memory systems can have more than one mapping for a given range of memory, and caching is a feature of the mapping, not the memory itself. So one might well wonder what happens if different mappings have different caching attributes. On recent ARM processor designs, what happens is officially undefined; in practice, it can mean problems like corrupted memory, machine checks, or simple hangs.

Arina
15.02.2018
20:16:11
Ребят, всем привет) кто свободен и может помочь мне?

Arina
15.02.2018
20:17:15
ахахх

нет

комп практикум в универ не могу сделать

массив у меня хватило ума сгенерировать

а сортировку не знаю как

Scarf
15.02.2018
20:18:20
@supapro

Arina
15.02.2018
20:19:46
?

Страница 1759 из 2477