Rafael 🌵
мне тут посоветовали glog юзать из-за ок доков
Rafael 🌵
пиплы, если я пишу либу, то как мне glog прикрутить?
Крылатый
А не лущ для либы внешний логгер?
Rafael 🌵
Крылатый
Ну вот захочу я заюзать твою либу, а у меня другой логгер. Чо делать?
Rafael 🌵
Rafael 🌵
юзать исключения это верный подход или есть другие варианты?
🦥Alex Fails
Реткоды
🦥Alex Fails
ака "коды возврата"
Artem
Реткоды это хорошо
Artem
И -fno-exceptions
Rafael 🌵
и что лучше реткоды или исключения? что и почему
Artem
Можно и так и так, но не нужно смешивать в рамках одной библиотеки
Artem
Эксепшены точно не нужно использовать для стандартных ситуаций
Rafael 🌵
Artem
Потому что они работают долго
Светомеч
А с этого момента можно поподробнее?
Artem
Они должны использоваться только для ошибок, а не для обычных ситуаций
Rafael 🌵
Artem
Rafael 🌵
вот например у меня есть парсер, где я передаю числа
допустим я использую для хранения переменню int64t
что мне делать если пришло число более чем max_uint64t?
🦥Alex Fails
строка на входе?
Artem
Наверное, это не самая частая ситуация? Тогда можно эксепшн
Rafael 🌵
Светомеч
throw дороже if
Это-то ясно. Но не едиными же условиями всё обрабатывать
Rafael 🌵
вот пример:
http://redis.io/topics/protocol
Artem
То есть, это ведь именно ошибка, а не стандартная ситуация
Artem
Artem
Кроме того, код с исключениями хуже поддаётся анализу
🦥Alex Fails
Artem
Что может быть критично для особенно важных подсистем
Alexey
Embedded тоже разные бывает.
Rafael 🌵
даже коменты не особото и нужны в таком случае (кончено это зависит от ситуации)
Vladislav
Artem
Я пишу анализ
Artem
Исключения - это сложно :)
Artem
У тебя граф потока управления разрастается очень сильно, если обработка ошибок построена на исключениях
Artem
Потому что они могут где-то ловиться, где-то пробрасываться, они бывают разных типов и приезжают из разных мест
Rafael 🌵
и как тогда реткоды спасают в этом случае?
Artem
Точно смоделировать такое очень дорого по ресурсам и почти всегда не необходимо
Artem
Поэтому точность теряется
Artem
Реткоды обрабатываются сразу
Artem
И явно
Artem
Они не ездят из функции в функцию и не ловятся скопом
Kirill
throw дороже if
Зато пока нет throw, никаких накладных расходов. А при использовании кодов после каждой функции ветвление.
Kirill
Вот и считайте
Rafael 🌵
и, насколько я знаю, на некоторых платформах if дорогое удовольствие, типо армов например
Artem
Rafael 🌵
люблю конструктивные разговоры👍🏻 спасибо господа
Richard
Richard
Rafael 🌵
но вроде на армах
Richard
Окей, но если попадешь - скинь, пожалуйста)
Richard
Интересно почитать
Kirill
Я видел компилятор для процессора, в котором все целые два байта, даже char.
[object Object]
Народ, сколько времени у вас выволняется следующая программка по вычислению числа ПИ?
Есть большая разница, если компилировать на GNU GCC и на Visual C++ с результатами 9 и 20 секунд соответственно
#include <iostream>
#include <ctime>
using namespace std;
int main() {
const clock_t begin_time = clock();
double pi = 0.0;
bool boolean = false;
double i;
for(i = 1.0; i < 10000000000.0; i = i+2.0)
{
if(boolean){
pi = pi - 1.0/i;
boolean = false;
}
else {
pi = pi + 1.0/i;
boolean = true;
}
}
cout.precision(9);
cout << pi*4 << endl;
cout.precision(4);
cout << float( clock () - begin_time ) / CLOCKS_PER_SEC;
return 0;
}
Richard
За исключения - исключительные ситуации, тогда ничего такого. Заодно можно удобно инфу собрать. В остальном возвращаемого значения хватит, только стоит сделать так, чтобы не было кэш-промахов
🦥Alex Fails
Vladislav
~ $ g++-6 -O3 -o pi pi.cpp && time ./pi
3.14159265
19.97./pi 19.88s user 0.09s system 97% cpu 20.399 total
~ $ clang++ -O3 -o pi pi.cpp && time ./pi
3.14159265
20.12./pi 20.03s user 0.09s system 99% cpu 20.325 total
ovf
крутые нынче пошли процессоры -- при том, что gcc не убирает if при -O3, разницы между вариантом выше и без if почти нет -- и то и другое 7.5-8s
[object Object]
Интересно.
Rafael 🌵
Rafael 🌵
А с флагом -Ofast провали?
Rafael 🌵
И ктсати вы векторизацию не юзаете
Kirill
🦥Alex Fails
Kirill
Кстате при работе в ембеддеде некоторые люди тоже далеки от отрасли)) почему то большинство вещей держится на суевериях а не фактах
🦥Alex Fails
Надо бороться с этим
Rafael 🌵
Kirill
Типо не используй динамическую память в микроконтроллерах, козленочком станешь, фрагмениация бла бла бла. Но если юзать raii и выделять память на этапе инициализации периферии то ничего страшного не будет
🦥Alex Fails
От реализации дин памяти тож зависит
🦥Alex Fails
Kirill
Просвещай нас
Так оно не нужно если зарабатывать этим не будешь. А чисто плюсами заработать проще чем плюсами в микроконтроллерах
🦥Alex Fails
Дык все равно ж интересно
Vladislav