Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, a7d3, Вы писали:
A>>В плане личностей авторов, то если к «дяде Бобу» ещё есть вопросы, то персона Макконнелла хорошо известна. A>>Дядя Боб интересен не столько свершениями, сколько идеями, которые в момент их публикации смотрели на 10 лет вперёд, по части развития индустрии софтваре. Его повествования с рассуждениями обретают ценность лишь по прошествию некоторого времени, в ретроспективе.
S>Читал обе книжки, первая откровенно громоздка. Вторую большую часть прочитал, возможно действительно перечитаю. Что касается личностей авторов -- то дядя Боб как раз боевой программист, S>а Макконнелл -- писатель. Хотя здравые мысли про лицензирование(а у врачей, в общем) такой деятельности как программирование у него были. Но в целом книга, кмк, не очень. У дяди Боба S>конкретней и меньшего объема.
Ребятам, вроде smeeld, имело бы смысл почитать обе.
Они из разных эпох, у Макконнелла из тех времён, когда были приняты несколько другие типы коммуникаций между людьми в ИТ-секторе.
У дяди Боба книженция более современная в этом плане — словно для миллениалов с их клиповым сознанием (которое соткано из банальных лозунгов с «кричалками» и подобно лоскутному одеялу).
Когда долгое время человек сидит на саппорте больших объёмов легаси кода, то у него лёгкий сдвиг по фазе начинается. Надо всё же иногда писать новые вещи с чистого листа, т.е. не в рамках микро-задач рядом с кучей окаменелых копролитов, а нырять в полностью новые проекты.
просто просмотрел сверху вниз один раз и вижу
— reinterpret_cast<void*>
— неинициализированные переменные
— некорректное использование condition variable "shared_segment_cv", судя по всему используется как event и проверки на spurious wakepu нет (хотя конечно это специальная cv, как же иначе)
Здравствуйте, chaotic-kotik, Вы писали:
CK>просто просмотрел сверху вниз один раз и вижу CK>- reinterpret_cast<void*>
Оно там надо. Без этого никак. Это не хелловорлд от олимпиадников.
CK>- неинициализированные переменные
Открой исходники линукса и посчитай количество функций, в которых переменные объявляются все в начале функции и используются далее в функции разным образом, в том числе и в циклах. Авторитет разрабов линукса для меня гораздо более значим, чем непонятных юзернеймов с rsdn.
CK>- некорректное использование condition variable "shared_segment_cv", судя по всему используется как event и проверки на spurious wakepu нет (хотя конечно это специальная cv, как же иначе)
С чего Вы взяли, что там именно condition_variable? По секрету, там вообще нет ничего из STL или Boost, ни одной сущности. Тот wait-вызов кастомного специализированного сискола ядра.
Здравствуйте, a7d3, Вы писали:
A>Когда долгое время человек сидит на саппорте больших объёмов легаси кода, то у него лёгкий сдвиг по фазе начинается. Надо всё же иногда писать новые вещи с чистого листа, т.е. не в рамках микро-задач рядом с кучей окаменелых копролитов, а нырять в полностью новые проекты.
98% всей мировой индустрии крутится на том самом легаси. Новомодные свистелки или эфемерны, живут пару лет или пару месяцев, или постепенно сращиваются с тем легаси, дополняя его. Всегда занимался не саппортом легаси, а его дополнением новыми вещами.
A>А мне вот доводилось не один и не два раза слышать, что работа в яндексах — это клеймо позора. Такое, что людей с него кадрови даже и не рассматривают, отсеивая на этапе просмотра резюме.
мрак какой
я там не работал, но — совершенно нормальные ребята оттуда приходят, совершенно нормальные ребята туда уходят, исключений не встречал
я бы не пошел, но чисто по профессиональным соображениям
Здравствуйте, smeeld, Вы писали:
S>Оно там надо. Без этого никак. Это не хелловорлд от олимпиадников.
Как бы не так. Это новичковая ошибка, использовать reinterpret_cast там где будет работать static_cast.
S>Открой исходники линукса и посчитай количество функций, в которых переменные объявляются все в начале функции и используются далее в функции разным образом, в том числе и в циклах. Авторитет разрабов линукса для меня гораздо более значим, чем непонятных юзернеймов с rsdn.
Ядро линукса написано на Си, а это код на С++. Предыдущая ошибка и вот эта особенность просто кричат о том, что уровень разработки — ремесленно/кустарный. Что нет прогонов статического анализатора на CI и подозреваю, что CI как такового тоже нет. Обычный промышленный код (как бы я не не любил выражение "промышленный код") такого содержать не будет, потому что это даже обычный cppcheck может найти.
S>С чего Вы взяли, что там именно condition_variable? По секрету, там вообще нет ничего из STL или Boost, ни одной сущности. Тот wait-вызов кастомного специализированного сискола ядра.
штука, повторяющая интерфейс condition variable из стандартной библиотеки C++ один в один и носящая гордое имя shared_segment_cv... действительно, с чего бы! ну тоесть если это не cv, а что-то еще, работающее по другому, то тем более фу
Здравствуйте, chaotic-kotik, Вы писали:
CK>Как бы не так. Это новичковая ошибка, использовать reinterpret_cast там где будет работать static_cast.
static_cast там возвратит ошибку.
CK>Ядро линукса написано на Си, а это код на С++. Предыдущая ошибка и вот эта особенность просто кричат о том, что уровень разработки — ремесленно/кустарный. Что нет прогонов статического анализатора на CI и подозреваю, что CI как такового тоже нет. Обычный промышленный код (как бы я не не любил выражение "промышленный код") такого содержать не будет, потому что это даже обычный cppcheck может найти.
Открой какой-либо массивный проект нс C++, в большинстве из них найдёшь кучу функций, содержащих объявления переменных в начале функции и последующее их использование самым разным образом. Авторитет разрабов тех проектов априори гораздо более значим, чем авторитет непонятных юзернеймов с rsdn.
Это всё вкусовщина, одни пишут так, другие иначе. Конкретно,запрет на обьявление локальных переменных без их инициализации-это из культуры дрессировки джуниоров, которым это вбивают в своё время в голову, чтоб они не портачили. Некоторым вбивают так, что откладывается в подкорке. Профи всегда и везде поступают согласно своим взглядам и вкусам в оформлении кода. Все те, кто тут кричит оголтело по неинициализированные переменные, или джуны, или только и званимаются, что джунов штудируют, это вся их работа.
S>>С чего Вы взяли, что там именно condition_variable? По секрету, там вообще нет ничего из STL или Boost, ни одной сущности. Тот wait-вызов кастомного специализированного сискола ядра.
CK>штука, повторяющая интерфейс condition variable из стандартной библиотеки C++ один в один и носящая гордое имя shared_segment_cv... действительно, с чего бы! ну тоесть если это не cv, а что-то еще, работающее по другому, то тем более фу
И что? Потому-что имеется некоторое сходство с поведением condition_variable (оно есть не только в STL, но и в POSIX), но не более. Вообще-же, назывывать это можно как угодно, это код.
Здравствуйте, smeeld, Вы писали:
CK>>Как бы не так. Это новичковая ошибка, использовать reinterpret_cast там где будет работать static_cast.
S>static_cast там возвратит ошибку.
Там вообще не нужен ни reinterpret_cast, ни static_cast. Если объявляется переменная типа void*, то в качестве значения для нее может использоваться неконстантный указатель на любой другой тип. Каст к void* произойдет автоматически: https://wandbox.org/permlink/NugPaoCgSQHAJE6T
S>Открой какой-либо массивный проект нс C++, в большинстве из них найдёшь кучу функций, содержащих объявления переменных в начале функции и последующее их использование самым разным образом.
Скорее всего вы говорите о древних монстрах родом из начала 1990-х.
S>Это всё вкусовщина, одни пишут так, другие иначе.
Ничего подобного. Как только в C++ появились конструкторы и деструкторы, место объявления переменной и область ее жизни стало резко иметь важное значение.
S>Конкретно,запрет на обьявление локальных переменных без их инициализации-это из культуры дрессировки джуниоров, которым это вбивают в своё время в голову, чтоб они не портачили. Некоторым вбивают так, что откладывается в подкорке. Профи всегда и везде поступают согласно своим взглядам и вкусам в оформлении кода.
Да-да-да. Тормоза придумали трусы. Уставы не написаны кровью. А гайдлайны для C++ пишут просто чтобы джуниоров выстроить.
Вы, блин, ну очень складно поете. Но при всем этом остается один маленький вопросик: чтож вы так говнокодите-то?
Здравствуйте, so5team, Вы писали:
CK>>>Как бы не так. Это новичковая ошибка, использовать reinterpret_cast там где будет работать static_cast.
S>>static_cast там возвратит ошибку.
S>Там вообще не нужен ни reinterpret_cast, ни static_cast. Если объявляется переменная типа void*, то в качестве значения для нее может использоваться неконстантный указатель на любой другой тип. Каст к void* произойдет автоматически: https://wandbox.org/permlink/NugPaoCgSQHAJE6T
это если предположить, что функция descriptor_table возвращает указатель, а не инт или еще какую фигню
что, учитывая интуитивно понятные названия, совсем не исключено.
что ты этим хотел сказать? код по ссылке хорошо читается, обильно прокомментирован, нет вложенных while-ов и замечательных конструкций вроде 'do if (....) while (....) и тд
Здравствуйте, smeeld, Вы писали:
S>>Или упор будет на то, что 1994-й -- это не совсем начало 1990-х?
S>Его после 94-го переписывали не раз. И проинициализировать все локальные переменные точно дело на пару часов, если бы так это нужно было.
Смотрите как получается.
Вы говорите: вот в уважаемых C++ных проектах полно неинициализированных переменных, объявленных в начале функций.
На что вам говорят: так это наверняка древние проекты, начатые в 90-е.
Вы приводите пример как раз такого проекта, начатого в 90-е, как раз со всеми унаследованными из C привычками: переменные в начале функций, многие без инициализации.
Т.е. вы сами подтверждаете выдвинутое вам возражение.
А теперь вы что доказать хотите? Что в C++ можно делать так, как сделано в древнем коде MySQL?
Так в этом никто и не сомневался. Вы, например, яркий пример человека, который сам с удовольствием и в припрыжку побежит скакать по этим граблям.
Вам же про другое толкуют: не следует так на C++ писать. Причем давно не следует. И если вы сейчас так пишите, так в этом ничего хорошего нет. Вы просто говнокодите.
Здравствуйте, koenig, Вы писали:
A>>А мне вот доводилось не один и не два раза слышать, что работа в яндексах — это клеймо позора. Такое, что людей с него кадрови даже и не рассматривают, отсеивая на этапе просмотра резюме.
K>мрак какой K>я там не работал, но — совершенно нормальные ребята оттуда приходят, совершенно нормальные ребята туда уходят, исключений не встречал K>я бы не пошел, но чисто по профессиональным соображениям
А сфера деятельности у тебя какая? В том смысле, что «ты чьих будешь-то?».
Интернет-компания, аутсорцер, интегратор и т.д.?