
Constantine
24.08.2017
17:39:51

Alexander
24.08.2017
17:40:02

Constantine
24.08.2017
17:40:02
у меня кроме одной функции еще иерархия

Ioann V
24.08.2017
17:40:03

Google

Ioann V
24.08.2017
17:40:17
Но могу и соврать. У hdd тоже кеш есть.

Alexander
24.08.2017
17:40:23

Constantine
24.08.2017
17:40:45

Ioann V
24.08.2017
17:41:15

Constantine
24.08.2017
17:41:20
Для потоковых операций отдельные сущности

Alexander
24.08.2017
17:41:23
пусть она там решает. у ТС не было задачи по ускорению. Вот когда упрётся, тогда будет думать, что и как ему там ускорить

Berkus
24.08.2017
17:42:31

Alexander
24.08.2017
17:42:40
а пока что у него совсем другая задача

Constantine
24.08.2017
17:42:52
На самом деле, stream-режим это полностью отдельная тема

Google

Constantine
24.08.2017
17:42:52
Эта штука возникает когда надо просто прочитать файл, и 146% его можно последовательно в память уложить

Berkus
24.08.2017
17:43:47
но зачем там бросать исключение если можно вернуть result? который 100% надо будет обработать
если ты уж так беспокоишься что его не обработают
Result<T,E> кодится за 15 минут с нуля если лень брать готовое

Nik
24.08.2017
17:45:28
Я мимокрокодил, но есть же std::variant, он не подойдет?

Berkus
24.08.2017
17:45:40
неа

Constantine
24.08.2017
17:46:33
пользователю этой функции совершенно точно не нужен стрим-режим
хм... интересно, насколько упоротой будет иерархия коллбеков с подстановками поведения по умолчанию
например, потом этот файл прочитают как utf-8 и пихнут в xml parser, который сообщит что инпут не xml

Berkus
24.08.2017
17:47:44
прости, я не понимаю что ты пишешь. слова по отдельности вроде бы понятные - а все вместе полная фигня
что значит исключение не обработают потому что файл пустой?
если файл пустой не будет исключения? или что?

Constantine
24.08.2017
17:48:37

Berkus
24.08.2017
17:48:43
тогда расскажи в каких именно случаях ты бросаешь исключения а в каких - нет
чтение пустого файла, очевидно, не ошибка

Constantine
24.08.2017
17:49:21
"как правило" означает, что не всегда

Berkus
24.08.2017
17:49:23
но с result это поведение легко сделать ошибкой
смотри

Google

Berkus
24.08.2017
17:49:54
auto content = readFile("file_may_be_empty.txt").fail_on_empty("This file is empty");

Constantine
24.08.2017
17:52:34
я бы хотел, чтобы было
auto content = readFile("file.bin");
static_assert(std::is_same<decltype(content), std::vector<uint8_t>>::value, "");

Azoyan
24.08.2017
17:53:30
В компайл тайме файл прочитать?

Alexander
24.08.2017
17:53:39
ЯННП

Berkus
24.08.2017
17:53:40

Alexander
24.08.2017
17:54:03

Azoyan
24.08.2017
17:54:04

Constantine
24.08.2017
17:54:07
нет, это пример, что не нужно заменять возвращаемое значение readFile

Alexander
24.08.2017
17:54:19

Berkus
24.08.2017
17:54:22
не вижу причины НЕ заменять возвращаемое значение readFile если так будет удобнее

Antony
24.08.2017
17:54:48
ну а почему нет
Есть такой proposal http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0373r0.pdf
The content of datafile.txt:
The quick brown fox jumps over the lazy dog.
The content of main.cc:
#include <iostream>
int main() {
std::cout << tF”datafile.txt”;
}
The program outputs:
The quick brown fox jumps over the lazy dog.

Azoyan
24.08.2017
17:54:51

Berkus
24.08.2017
17:55:15

Azoyan
24.08.2017
17:55:27
Во во

Constantine
24.08.2017
17:55:38
xy-problem?
Смотри. 90% пользователей считают, что пустой файл является ошибкой и обработают её в любом случае. И им совершенно не сдалось выяснять, что же на самом деле пошло не так у функции readFile

Azoyan
24.08.2017
17:56:00
У вас вместо программы эти же действия будет делать компилятор, но зачем?

Berkus
24.08.2017
17:56:01
100% пользователей получат от readFile Result<T,E> и несколько функций как его обрабатывать:
- похуй пляшем .unwrap()
- дефолтно .expect("Failed to read")
- непустое .fail_on_empty("File is empty - string may be optional")
Все эти функции либо возвращают T либо падают или бросают эксепшены разной степени тяжести

Google

Azoyan
24.08.2017
17:58:36
А нельзя проще
readFile("name", error_code)

Constantine
24.08.2017
17:59:03

Berkus
24.08.2017
17:59:08
не напишут - конпелятор напомнит

Azoyan
24.08.2017
18:00:07
readFile(const string& name, ErrorCode& errcode)

Constantine
24.08.2017
18:00:23

Berkus
24.08.2017
18:00:52

Constantine
24.08.2017
18:01:17

Berkus
24.08.2017
18:01:24
назови правильно .ignore() или как-то так и сразу будет видно кто и где игнорирует

Admin
ERROR: S client not available

Berkus
24.08.2017
18:01:29

Constantine
24.08.2017
18:01:35
ну окай, .ignore

Berkus
24.08.2017
18:01:38
с дизайном у тебя явно проблемы

Constantine
24.08.2017
18:01:44
?

Alexander
24.08.2017
18:01:54
ну так если пользователь спецаильно игнорит, то ССЗБ

Constantine
24.08.2017
18:02:19
зачем мне специализировать ошибку чтения файла, если я все равно не смогу вытащить ее наверх пользователю программы

Azoyan
24.08.2017
18:02:24
Я не очень понял, а что код ошибки нельзя пробросить?

Ioann V
24.08.2017
18:03:36

Alexander
24.08.2017
18:04:44

Google

Alexander
24.08.2017
18:04:57
а всякие странные фичи пусть пилят где-нибудь в другом месте

Azoyan
24.08.2017
18:05:21
int a[] = { #include array.txt.h }

Ioann V
24.08.2017
18:05:26
Ну это сарказм был. Просто я когда то давно думал, а почему CT нельзя узнать количество потоков на машине...

Constantine
24.08.2017
18:05:36

Alexander
24.08.2017
18:06:07

Constantine
24.08.2017
18:06:53

Alexander
24.08.2017
18:07:06
просто сложлно будет что-то дальше обсуждать без понимания этой штуки.
Так точно

Constantine
24.08.2017
18:07:46
смотри, например, дальше будет вызов loadStringDecode() и поедет сигнатура loadString

Alexander
24.08.2017
18:07:53
он говорит тебе переделать сигнатуру функции под это дело. Но ты, как я понял, делать этого не хочешь, потому что не понимаешь, нах надо

Constantine
24.08.2017
18:08:19
Я не понимаю, нах мне переделывать сигнатуру функции под обязательную обработку ошибки
Если я как раз хочу этого избежать :)

Alexander
24.08.2017
18:09:23

Constantine
24.08.2017
18:09:51
Я хочу кастомизировать поведение функции при ошибке (это нужно в 10% случаев)

Azoyan
24.08.2017
18:10:50

Constantine
24.08.2017
18:10:58

Azoyan
24.08.2017
18:11:17
Ээ

Berkus
24.08.2017
18:11:20
не парьтесь, он сам разберется
сделает хуевый велосипед и успокоится
зато все 100мб клиентов будут довольны

Constantine
24.08.2017
18:11:58
ну ладно, со 100 я перегнул, вроде) там что-то вроде 500к строк