Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Но, если открыть навскидку десяток-другой книг по C++, написанных за последние тридцать лет, в них самые первые примеры почти всегда будут с iostreams, контейнерами, исключениями, шаблонной магией и прочими вещами, которые у типичного сишника прочно ассоциируются с классическими ЯВУ, неприменимыми в тех областях, где он успешно применяет C. Разумеется, он сразу же делает вывод "это не для меня", закрывает книгу, и продолжает использовать голый C, регулярно наступая с ним на все те грабли, для изжития которых C++ и создавался.
Вот ты мне скажи — когда у тебя в ядре Windows драйвер на C++, у него есть cin и cout? Если нет, то почему?
Авторы всех до единой книг по C++, которые я видел, рассчитывают на hosted + userland. Наверно, тебе надо написать свою, чтобы поломать эту тенденцию.
Здравствуйте, netch80, Вы писали:
N>когда у тебя в ядре Windows драйвер на C++, у него есть cin и cout?
Есть. Они как-то определяются в WDK, а деталей не смотрел. Возможно, cout заведен на ядреный отладочный вывод, а cin всегда возвращает конец потока.
А new/delete у меня свои.
N>Если нет, то почему?
Если б их не было, я б ответил — "не определили". Это ж просто обычные плюсовые классы с наборами методов, их можно определить для чего угодно, хоть для самого мелкого МК, и работать через них с каким-нибудь RS232. Только надо ответить на вопрос "зачем?".
Вот плюсовые исключения в ядре не реализованы — только родные структурные, которые разматывают стек вызовов, но ничего не знают про деструкторы. В принципе, нет никаких технических проблем сделать поддержку плюсовых исключений и в ядре, но они ж так по-дурацки определены, что не могут работать без RTTI, который в ядро уж точно никто не потащит. Если б исключения в C++ были определены попроще — возможно, и сделали бы поддержку в ядре. Структурные исключения само ядро вполне себе использует.
И реализаций STL для виндового ядра, насколько я знаю, никто не делал, хотя разумное подмножество сделать нетрудно.
Проблема ведь даже не в реализации, а прежде всего в том, что отсутствием всех этих плюшек обеспечивается хоть какой-то порог вхождения. Стоит их реализовать, как сразу набегут стильные, модные, молодежные, и убьют все хорошее, что сохранилось.
N>Авторы всех до единой книг по C++, которые я видел, рассчитывают на hosted + userland.
Такая же фигня, пока не попалось "Введение в C++" Столярова. Но его книги неокрепшим умам читать опасно — может развиться линуксоидность головного мозга.
N>Наверно, тебе надо написать свою, чтобы поломать эту тенденцию.
Полноформатную книгу я вряд ли осилю, а вот что-нибудь вроде статьи об использовании C++ в ядре ОС и на голом железе, может, и рожу когда-нибудь.
Щас хохмы ради накидал простейший пример наследования с виртуальными функциями, собрал под ATTiny13 (самый мелкий МК от AVR) — прошивка получилась аж на двести байт.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Вот плюсовые исключения в ядре не реализованы — только родные структурные, которые разматывают стек вызовов, но ничего не знают про деструкторы. В принципе, нет никаких технических проблем сделать поддержку плюсовых исключений и в ядре, но они ж так по-дурацки определены, что не могут работать без RTTI, который в ядро уж точно никто не потащит. Если б исключения в C++ были определены попроще — возможно, и сделали бы поддержку в ядре. Структурные исключения само ядро вполне себе использует.
RTTI как раз тривиально включить, в чём проблема? Ещё один указатель в каждой VMT, и константная структурка.
А вот исключения которые аллоцируют объект на каждую генерацию — могут быть проблемой. Было предложение на исключение которое не объект, а просто указатель на тип (в стиле Ada) — пока не прошло.
N>>Авторы всех до единой книг по C++, которые я видел, рассчитывают на hosted + userland. ЕМ>Такая же фигня, пока не попалось "Введение в C++" Столярова. Но его книги неокрепшим умам читать опасно — может развиться линуксоидность головного мозга.
N>>Наверно, тебе надо написать свою, чтобы поломать эту тенденцию.
ЕМ>Полноформатную книгу я вряд ли осилю, а вот что-нибудь вроде статьи об использовании C++ в ядре ОС и на голом железе, может, и рожу когда-нибудь.
Здравствуйте, netch80, Вы писали:
N>RTTI как раз тривиально включить, в чём проблема?
В том, что все это на фиг не нужно для обработки исключений, как таковых.
N>Ещё один указатель в каждой VMT, и константная структурка.
Плюс дополнительный код в catch, который выясняет, какой тип был выброшен.
N>А вот исключения которые аллоцируют объект на каждую генерацию — могут быть проблемой.
Не только "аллоцируют", но и копируют его в обработчик catch.
N>Было предложение на исключение которое не объект, а просто указатель на тип
Да, это было бы удобно. Но вряд ли прокатит — кого из комитетчиков это парит? Ну гоняются там несчастные сотни байтиков по стеку, какое это может иметь значение на фоне мировой революции нынешнего представления о том, что софт, требующий под сотню метров памяти считается "весьма компактным"?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Да, это было бы удобно. Но вряд ли прокатит — кого из комитетчиков это парит? Ну гоняются там несчастные сотни байтиков по стеку, какое это может иметь значение на фоне мировой революции нынешнего представления о том, что софт, требующий под сотню метров памяти считается "весьма компактным"?
Хех. У меня в одном недавнем проекте был бинарник с объёмом кода 250MB ;\
Здравствуйте, Евгений Музыченко, Вы писали: ЕМ>Я бы предпочел получить более конкретное объяснение связи вышеописанного с обсуждаемой тематикой. Пока не вижу ни малейшей связи — чистое фантазирование.
Я сравнил использование кодов возврата из функций чистого Си в сравнении с исключениями Си++. Ты же сам написал что именно программистов на Си не устраивает в Си++, я тебе и разъяснил почему люди так считают.
Тут "плюсисты" обычно высказываются о том, что никто не заставляет использовать исключения, где они не нужны. Это похоже на то, что выдать рабочим по тарелке супа за обедом, поставить тарелку винограда на стол и наказать, чтобы никто не ел виноград. Наверное, это удовольствие бить по рукам людей, тянущихся за виноградом, следя за ними из-за занавески? Природу животного мира в людях никто пока что никто не смог искоренить и красть еду исподтишка — всего лишь один из способов выживания особи в дикой природе. Отец Сергий отрезал себе палец, когда к нему в землянку зашла женщина среди ночи и метели. А теперь представь, что эта же самая женщина зашла бы к пьяным рабочим-вахтовикам в их вагончик — бабу не просто грубо облапали бы, а чего и похуже бы сделали с вероятностью 99 процентов.
Единственный выход — ограничить внесение лажи в проект через написание ПО на чистом Си вместо Си++, чтобы с плёткой не стоять у людей над душой.
Здравствуйте, Pitirimov, Вы писали:
P>Я сравнил использование кодов возврата из функций чистого Си в сравнении с исключениями Си++.
С какой целью Вы это делали? Ну, кроме как натянуть сову на глобус?
P>Ты же сам написал что именно программистов на Си не устраивает в Си++, я тебе и разъяснил почему люди так считают.
Теперь мне требуется разъяснение, почему именно программистов на C не устраивает в C++ сам факт наличия исключений, которое им, в случае перехода, не будет стоить ничего. Или сишники все, как один, такие донельзя убогие, как Вы описали ниже? Я вот уже лет тридцать делаю софт только на плюсах, и не использую не только исключений, но и STL. Святой, наверное.
P>Тут "плюсисты" обычно высказываются о том, что никто не заставляет использовать исключения, где они не нужны.
Да, именно так. Ну, по крайней мере, у тех, кто дружит с головой.
P>Это похоже на то, что выдать рабочим по тарелке супа за обедом, поставить тарелку винограда на стол и наказать, чтобы никто не ел виноград.
Нет, это похоже на то, что кто-то отчаянно хочет найти убедительные причины, но не может, и вынужден сочинять корявые фантазии, не утруждаясь при этом обеспечить хотя бы минимальную похожесть.
P>Природу животного мира в людях никто пока что никто не смог искоренить и красть еду исподтишка — всего лишь один из способов выживания особи в дикой природе. Отец Сергий отрезал себе палец, когда к нему в землянку зашла женщина среди ночи и метели. А теперь представь, что эта же самая женщина зашла бы к пьяным рабочим-вахтовикам в их вагончик — бабу не просто грубо облапали бы, а чего и похуже бы сделали с вероятностью 99 процентов.
Почему у меня это сразу ассоциируется с сишными операциями "неограниченного" приведения типов, "тихими" сужающими преобразованиями, практикой передачи через void *, полностью ручным управлением память. Странно, вроде бы никакой связи. Наверное, музыкой навеяло...
P>Единственный выход — ограничить внесение лажи в проект через написание ПО на чистом Си вместо Си++, чтобы с плёткой не стоять у людей над душой.
При таком подходе, самый правильный выход — сразу застрелиться насовсем, дабы не мучить себя искушениями бесовскими.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, netch80, Вы писали:
N>>У меня в одном недавнем проекте был бинарник с объёмом кода 250MB ;\
ЕМ>Было бы очень любопытно узнать распределение сущностей по объему — код, двоичные данные для кода, тексты, изображения, видео и т.п.
В основном огромное число толстых библиотек, из бо́льшей части которых используется минимум всякого, но подключали по принципу leftpadʼа.