@ProCxx

Страница 120 из 2477
Roman
23.04.2016
08:03:42
Надо почитать

Andrei
23.04.2016
08:03:53
Да, обычный union + placement new

Roman
23.04.2016
08:04:23
Плейсмент на стеке, соотв?

Плюшка
23.04.2016
08:04:24
круть

Google
Roman
23.04.2016
08:04:50
Ибо если там хип юзают на каждый объект - труба дело

Andrei
23.04.2016
08:05:36
Ну всмысле я же сказал — юнион и выше написал сколько места занимает. При чем тут хип.

Alex Фэils?︙
23.04.2016
08:05:38
Andrei
23.04.2016
08:06:07
Ничем не отличается от обычного вызова функций. Значения куда клались — туда и кладутся. И RVO работает.

Только это RVO еще и для ошибок тоже.

Можно спокойно сделать тип ошибки какой-нибудь uint32_t и тогда вообще throw по стоимости return получается.

Ибо если там хип юзают на каждый объект - труба дело
любой throw использует кучу, и гораздо хуже чем ты думаешь :D

Roman
23.04.2016
08:18:51
любой throw использует кучу, и гораздо хуже чем ты думаешь :D
Try не юзает кучу когда нет эксепшн. Вот я и спрашиваю как с этим дела у эксептед

Andrei
23.04.2016
08:19:18
Никак. Зиро оверхед.

И try-таки кое-что юзает. Это сильно платформ спесифик.

Roman
23.04.2016
08:20:03
Не может быть зиро, на каждый возврат + байт, который надо заинитить

Andrei
23.04.2016
08:20:41
Для больших x86 может и не юзает. Для других платформ хуже.

Я имел в виду по инструкциям.

Google
Andrei
23.04.2016
08:21:09
По памяти да, на один байт на стеке больше.

Roman
23.04.2016
08:22:11
Трай может быть и один глобальный на run loop - зависит от архитектуры приложения . Тогда там один раз формируется эксепшн фрейм

Andrei
23.04.2016
08:23:02
Да, я все это понимаю, и я знаю как правильно писать в один ран луп трай, потому что много уже этим занимался :) но это знаю не все, и есть случаи когда это не работает.

В частности я последнее время пишу код на корутинах.

Roman
23.04.2016
08:23:54
Согласен.А вот интересно, этот байт выровненный? Как у него дела при доступе к памяти на машинах, которые умеют только aligned доступ?

Andrei
23.04.2016
08:24:15
Во-первых в языке есть alignas

Roman
23.04.2016
08:24:32
Т.е. Если я верну просто инт - все хорошо, а эксептед?

Andrei
23.04.2016
08:24:44
А во вторых байт кладется после значения, поэтому он выровнен так же как return type

Andrei
23.04.2016
08:26:20
Ну да-да, я имел в виду после значения ошибки или результат :D

Понятно.

Roman
23.04.2016
08:26:28
В общем, надо на практике посмотреть. А идея хороша

Andrei
23.04.2016
08:26:37
Просто каждый раз это уточнять поленился.

У меня есть моя реализация, которой я вдохновился у одного чувака в блоге

Но у него было странное решение заворачивать экспешны в качестве ошибок

И не было байндера

Но меня вполне бы устроило так, как описано в пропозале.

Andrei
23.04.2016
08:28:47
Бтв, в таком языке как rust "исключительные" ситуации обрабатываются именно так.

https://isocpp.org/files/papers/n4015.pdf

Google
Alex Фэils?︙
23.04.2016
08:30:52
Спс

Вртде ты скидывал, не заметил

Andrei
23.04.2016
08:36:49
Угу. А когда в компиляторы войдет http://en.cppreference.com/w/cpp/experimental/optional/in_place_t вообще будет можно сделать еще и реализацию очень красивую.

Roman
23.04.2016
08:37:25
Вообще, эксептед , фактически, это расширение подхода return codes?

Andrei
23.04.2016
08:38:15
Не сказал бы. Для вызывающего кода это не выглядит так.

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

Roman
23.04.2016
08:39:05
Разве там генерится исключение при ошибке?

Andrei
23.04.2016
08:39:14
Где?

Andrei
23.04.2016
08:39:41
Угу.

Roman
23.04.2016
08:39:45
Надо разворачивать монаду

Andrei
23.04.2016
08:40:00
Просто нельзя взять и использовать ретёрн тайп напрямую.

Andrei
23.04.2016
08:40:44
Но если делать это как в условном хаскелле, через do нотацию или монадический биндер, то это выглядит совершенно прозрачно.

Roman
23.04.2016
08:40:55
Тогда вот контр-аргумент похода https://isocpp.org/wiki/faq/exceptions#exceptions-avoid-spreading-out-error-logic

Andrei
23.04.2016
08:41:37
Я успел раньше написать ответ на это контраргумент :3

Roman
23.04.2016
08:41:56
И пара ответов ниже в том же факе.

Andrei
23.04.2016
08:42:39
Roman
23.04.2016
08:44:30
Да, Я не пытаюсь кого-то переубедить, мне интересно что вы думаете про intermixing обработки ошибок и основной логики. В моем понимании применение excepted ни чем особо не лучше return codes, кроме композиции в 1 объект

Andrei
23.04.2016
08:45:54
Я про это и написал. Там нет этого смешивания т

Наоборот. У тебя есть возможность написать как раздельную обработку ошибок так и обработку на месте.

Google
Roman
23.04.2016
08:48:20
Ок, попробую поиграться с этим

Andrei
23.04.2016
08:49:02
Дело именно в связывании. Ты можешь связать excepted с двумя функциями с функцией продолжения и функцией фейла

И ты попадешь только в одну из них.

Поэтому в функцию успеха тебе прозрачно приходит нормально распакованное значение.

Единственный минус - это в некотором смысле обоатный порядок записи, но это чисто плюсовая проблема.

Admin
ERROR: S client not available

Andrei
23.04.2016
08:50:37
Другой вариант эмулировать do- нотацию

Когда мы пишем типа

Roman
23.04.2016
08:51:18
А где подробнее почитать , с примерами?

Andrei
23.04.2016
08:51:24
a<-getA b<-getB return a+b

Поскольку оператора <- в плюсах нет, можно сделать это хоть макросом.

А где подробнее почитать , с примерами?
Я скидывал выше ссылку на пропозал.

Roman
23.04.2016
08:52:20
А, ок

Alex Фэils?︙
23.04.2016
08:52:25
Andrei
23.04.2016
08:52:44
< бинарный

Alex Фэils?︙
23.04.2016
08:52:50
ага

А минус будет прокси возврвщать

Andrei
23.04.2016
08:53:17
Но там не очень поможет перегрузка

Alex Фэils?︙
23.04.2016
08:53:17
хотя фу,бд

Andrei
23.04.2016
08:53:38
Эта штука должна уметь делать ретёрн из функции выше по стеку :)

Google
Andrei
23.04.2016
08:54:00
Я представляю как это делается но это темная магия.

Stanislav
23.04.2016
08:55:39
https://github.com/ptal/expected вот реализация пропозала

Andrei
23.04.2016
08:55:56
Не.

Одна из сотен возможных :3

К тому же тащит буст за собой :(

Есть более легковесные реализации на основе только стандартной библиотеки.

Stanislav
23.04.2016
09:05:25
Одна из сотен возможных :3
ну туда автор пропозала комитит)

оба автора

Alex Фэils?︙
23.04.2016
09:06:12
Но можно без бустоты сделать

print('hi')
23.04.2016
09:07:29
моё сообщение удалили?

Andrei
23.04.2016
09:08:05
ну туда автор пропозала комитит)
Я понимаю. Просто это коммит в буст, не в tr, не в experimental

Пока что в буст.

Вс равно все по-своему сделают. PJ Plauger сделает так, коммьюнити libstdc++ сяк.

Stanislav
23.04.2016
09:10:07
эт да

блин на первый вглзяд напоминает то как в го ошибки возвращаются )

Andrei
23.04.2016
09:11:12
Не знаю насчет го, но вот в Rust именно так.

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