@ProCxx

Страница 2378 из 2477
Constantine
25.09.2018
21:11:06
У меня есть принципиально три пути

Roman
25.09.2018
21:11:18
ну как альтернатива optional

но в optional не написано почему не получилось

Constantine
25.09.2018
21:11:58
Я могу её вернуть, могу передать параметр обработки и могу бросить исключение, если файла нет

Google
Constantine
25.09.2018
21:12:46
Путь (2) замечательный, если по жизни пустой файл уже ошибка

Вопрос в том, что путь 3 ужасен

Если задуматься, то нет никакой валидации, что я проверяю, что функция вообще умеет бросать это исключение

Roman
25.09.2018
21:14:52
Да, а теперь представьте ситуацию когда у вас очень сложная система и исключение происходит глубоко по call стеку от потребителя

Constantine
25.09.2018
21:15:15
И что?

Roman
25.09.2018
21:15:30
Тогда чтобы меньше колотить удобно использовать исключения

Хотя это и порождает проблемы с энфорсом try

Constantine
25.09.2018
21:15:57
Но это же все равно, что вернуть std::any из функции

Roman
25.09.2018
21:17:31
Но это же все равно, что вернуть std::any из функции
Почему any? получаете ту же пару значение/эксепшн, только не явно

Constantine
25.09.2018
21:17:49
Ну т.е. функция все еще может возвращать объект любого типа!

У вас нет информации о её возврате

Alexander
25.09.2018
21:18:26
ты хочешь такую проверку встроенную в язык?

Roman
25.09.2018
21:18:27
да, в этом месте хотелось бы сделать какой-нибудь checked exception

Google
Alexander
25.09.2018
21:18:52
да, в этом месте хотелось бы сделать какой-нибудь checked exception
их специльно не вводили в язык. вчера оюсуждалось со страуструпом это

Roman
25.09.2018
21:19:12
да, недостатки известны и везде уже отказались от них

Constantine
25.09.2018
21:19:33
т.е. все проблемы что я не могу синтаксически записать конструкцию, которая вернет некоторое значение из функции

Constantine
25.09.2018
21:21:50
Так а в чем проблема с expected вы не написали
Я не знаю как дела в 20м, но в 17м приходится писать неприятные буквы в части a + b

Т.е. нельзя auto a = try try_get_a(); а надо auto try_a = try_get_a(); if (is_fail(try_a)) return bypass_fail(std::move(try_a)); auto a = /**/(std::move(try_a));

J
25.09.2018
21:23:27
как проще всего unicode строку перевести в cp1251?

Roman
25.09.2018
21:23:55
Constantine
25.09.2018
21:24:07
J
25.09.2018
21:24:13
нагуглил варианты, но как-то странно работают, то переводят, то нет

Constantine
25.09.2018
21:24:17
return должен произойти, как в случае выброшенного исключения

Roman
25.09.2018
21:24:37
А, ну вот expected именно оно и есть

Constantine
25.09.2018
21:24:52
Так это функциональный возврат и есть

Roman
25.09.2018
21:24:58
Вот так (вроде ) будете писать: auto a = * try_get_a();

Constantine
25.09.2018
21:25:07
Там же не исключение бросить, а вернуть

Alex Фэils?︙
25.09.2018
21:25:53
Roman
25.09.2018
21:25:57
как вы хотите описать то что должно произойти

Google
Constantine
25.09.2018
21:25:59
не понял
operator try примененный к expected должен проверить, что случай ОК, в противном случае вернуть (return) ошибку из функции

да как угодно

J
25.09.2018
21:26:32
если что, под windows

Roman
25.09.2018
21:27:38
operator try примененный к expected должен проверить, что случай ОК, в противном случае вернуть (return) ошибку из функции
хм, мне казалось такое там тоже есть (указать что вернуть если unexpected ) в общем я только презентацию александреску видел пару месяцев назад, надо почитать

Constantine
25.09.2018
21:28:07
но это ОБС (или ОАС?)

а дальше там идет реализация "почти variant" типа expected<OkType, type_base_set<PossibleExceptions>>

и все идеальнейше работает

J
25.09.2018
21:29:46
WideCharToMultibyteChar / ICU
можно пример, пожалуйста?

Constantine
25.09.2018
21:30:44
хм, мне казалось такое там тоже есть (указать что вернуть если unexpected ) в общем я только презентацию александреску видел пару месяцев назад, надо почитать
Вообще в качестве примера на подумать load_string вполне может принять параметром инпута vector<byte> и тогда FileNotFound обрабатывать немножко смешно

Dmitry
25.09.2018
21:34:05
и вероятность в итоге так высока, а контеншен за контрольный блок так велик, что это идет на равне с сисколлом?
Без move есть вероятность что не только владение но и lifetime закончится в вызывающем потоке. А это уже скажется на работе с аллокатором. Который может всякими tls пользоваться. Move более детерминирован.

Constantine
25.09.2018
21:36:32
Не понял
load_string имеет конвенцию (<источник>, <теги>) -> string где источник это поток byte-ов

возможные ошибки это ошибки источника и ошибки перекодировщика

Roman
25.09.2018
21:39:51
ладно, я не понимаю проблематики, такое api мне кажется искуственным.

Constantine
25.09.2018
21:40:20
ладно, я не понимаю проблематики, такое api мне кажется искуственным.
по-моему замечательный пример, что в обобщенном коде исключения просто непредсказуемы

Roman
25.09.2018
21:41:16
не сталкивался с острой практической необходимостью делать такие обобщения

Constantine
25.09.2018
21:42:15
не сталкивался с острой практической необходимостью делать такие обобщения
а почему синтаксически должна отличаться загрузка строки из файла и из массива?

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

load_string(file) или load_string(vector) это буквально русский язык

Google
Roman
25.09.2018
21:43:53
да, но в том месте где я получаю эту строку я скорей всего уже не захочу знать что именно сломалось

если же захочу, то думаю какой-нибудь optional с enum кода ошибки вместо bool меня бы устроил

Constantine
25.09.2018
21:44:45
да, но в том месте где я получаю эту строку я скорей всего уже не захочу знать что именно сломалось
если загрузчик ресурсов на старте не находит файл в упакованном хранилище, то он должен выдать глобальный провал

да, но в том месте где я получаю эту строку я скорей всего уже не захочу знать что именно сломалось
если получив utf8-xml-ку с сервера вы не можете её декодировать, вы шлете /report серверу WTF он отправил если разорвалось соединение, вы повторяете запрос

Roman
25.09.2018
21:47:03
ну вот получается что load_file и load_vector сильно различаются семантически

Constantine
25.09.2018
21:47:19
не вижу

load_string это метод буквально следующего вида auto data = try load_data(источник) return decode(data, теги)

Alexander
25.09.2018
21:51:41
не нужен

Roman
25.09.2018
21:52:05
Почти не использую

Alexander
25.09.2018
21:52:09
и преподу скажи, что никому метод show не нужен

PRoSToC0der
25.09.2018
22:53:05
Ну гугл кодстайл убил эксепшоны в C++, за это спасибо
я всё жду когда нормальные эксепшоны сделают

Alex Фэils?︙
25.09.2018
22:53:58
Чем вам текущие не нравятся

PRoSToC0der
25.09.2018
22:54:58
Чем вам текущие не нравятся
нужны exception как аналоги эррор кодов, с таким же "легковесным" выбрасыванием

ибо эррор коды не удобно использовать

Alex Фэils?︙
25.09.2018
22:55:32
exception func() { return exception("wat"); }

PRoSToC0der
25.09.2018
22:55:32
получается какой-то rust

Alex Фэils?︙
25.09.2018
22:55:41
Или C/Go

А чем вам expected тогда не по нраву? Это ж как раз оно и есть

PRoSToC0der
25.09.2018
22:57:25
А чем вам expected тогда не по нраву? Это ж как раз оно и есть
каждый раз проверять надо или костылить цепочку вызовов

а с исключениями засунул в try всё и в catch ловишь

Google
PRoSToC0der
25.09.2018
23:00:34
хотя там ещё у Александреску было интересное выступление по поводу SCOPE_*, но оно по сути тоже на исключениях, просто без try-catch https://www.youtube.com/watch?v=WjTrfoiB0MQ

Ioann V
25.09.2018
23:06:37
да все ок с эксепшенами в цхх. Все вроде логично, кроме некоторых редких вещей.

PRoSToC0der
25.09.2018
23:08:26
Alexander
25.09.2018
23:08:43
@supapro

Жди

Constantine
25.09.2018
23:18:12
Igor
25.09.2018
23:19:39
PRoSToC0der
25.09.2018
23:20:09
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0709r0.pdf
я как раз это читаю, только r1

но это ОБС (или ОАС?)
как нагуглить эти аббревиатуры?

Constantine
25.09.2018
23:31:15
как нагуглить эти аббревиатуры?
ОБС одна бабка сказала

переизобретение исключений какое-то получается
разница в том, что это - тип возвращаемого значения

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