Здравствуйте, so5team, Вы писали:
S>Суть была в том, что AlexGin показывал, что его опыт нельзя назвать устаревшим. Но делал это несколько странно, на что ему и было указано. Но тут появляетесь вы, пытаетесь доказать, что главное -- это не знание каких-то там деталей, а приобретенный годами опыт. При этом демонстрируя замечательную невежественность в вопросах, которые мы с AlexGin обсуждали.
Ну не знаю я С++11, это и есть "замечательная невежественность"?
S>Ваше мнение по поводу стандарта C++ и уровня его поддержки в современных компиляторах очень ценно.
Таки полностью не поддерживается:
https://msdn.microsoft.com/ru-ru/library/hh567368.aspx
S>Могу попросить объяснить, что не понравилось в этих двух фрагментах?
S>В первом фрагменте прошу учесть, что demands -- это переменная типа unsigned int. Надеюсь, ваш уровень знаний C++ позволяет понять, чем грозит переход через 0 при декрементах unsigned значений?
mgu>>mgu>>if( demands < 3 )
mgu>> demands = 1;
mgu>>else
mgu>> demands -= 2;
mgu>>
Я просто имел в виду тернарную операцию (входит даже в пещерные стандарты С++).
S>Ну а к этому в чем претензия? Особенно с учетом того, что это часть описания класса?
mgu>>mgu>> unsigned int m_current_position = 0;
mgu>> bool m_current_tick_processed = false;
mgu>>
Виноват, я был слишком высокого мнения о создателях С++11: думал, что раз они содрали инициализацию динамических членов класса, то догадаются их инициализировать по умолчанию. Ан нет.
S>Почему при этом вы попытались заострить внимание на вызовах unlock и lock -- это загадка. Если поясните, будет интересно.
mgu>>mgu>> lock.unlock();
mgu>> while( head )
mgu>> {
mgu>> try
mgu>> {
mgu>> ...
mgu>> }
mgu>> ...
mgu>> catch( ... )
mgu>> {
mgu>> ...
mgu>> std::abort();
mgu>> }
mgu>> head = head->m_next;
mgu>> }
mgu>> lock.lock();
mgu>>
Во-первых, крайне необычно сначала разблокировать, а затем блокировать, напрашивается обратный порядок, возможно, на то были причины. А std::abort() выкидывает без всяких очисток, это потенциальная мина, возможно, понадобится закрывать ресурсы или выбрасывать новое исключение в глобальный обработчик, а перед этим восстанавливать загадочный lock(). В общем, надо что-то делать либо с финализацией, либо при ошибке выставлять локальный флаг и выходить из while.
mgu>>Иначе в файле all.hpp (3000+ строк) вы бы не попадали по ползунку полосы прокрутки
S>В vim-е нет полосы прокрутки.
А в других редакторах есть.
S>Кроме того, вы наверняка не видели sqlite.c и не слышали про такую технику, как amalgamation.
Не слышал, ознакомился, понял, что иногда сталкивался с подобной необходимостью, но термина не знаю. Зато с многотысячестрочными простынями (точнее, сари) имел дело. Предпочитаю вместо иллюзорного выигрыша в производительности делать разбиение на логические единицы.