Здравствуйте, мыщъх, Вы писали:
М>вы совершенно правы. я был приятно удивлен, обнаружив, что в штатах можно знать си и совсем не париться по поводу плюсов. ладно бы я один не парился, так ведь и люди вокруг меня программируют на си и плюсы им совсем ни к чему. от рядовых разработчиков до архитекторов. си, линух. плюс питон | руби | что-то еще. и незначние плюсов (по крайней мере там, где я работал) это скорее плюс, чем минус, т.к. сишный код понятен большему числу людей и его читают все остальные сотрудники, даже те, кто больше по джава.
В РФ просто подавляющее большинство программистов, есть не что иное как прораммистский планктон,
который не умеет ничего серьёзного кроме как обслуживать что разработали на западе, и понты резать.
Для последнего С++ подходит идеально. Когда в США и прочих европах пишут большое множество ОС, БД,
(посмотрите в код mysql-там, не что иное как С с классами и не более), компиляторов (посмотрите в код gcc,
LLVM-там, не что ино как С с классами и не более), в РФ смеются всем отделом над теми, кто вместо BOOST_FOREACH пишет for...
и думают, что Торавльдс тупее их, и не смог изучить С++ ( бред-то какой )
Кстати, мыщъх, а что там с Lisp-ом? Встречается где или нет?
Re[10]: Достаточно ли знать С без знания С++ для устройства
CC>>>Мне надо автоматический вызов конструкторов и деструкторов. Без макроёбства. E>>Зачем тебе конструкторы, если ничего полезного в них ты сделать не сможеш по причиние невозможности вернуть ошибку ? CC>Это почему ещё? CC>Исключения работают, RTTI кстати тоже можно прикрутить, впрочем он очень редко нужен.
Как я понял из соседнего разговора — ты все смешал в кучу и не понимаеш, что SEH и плюсовые исключения — это совершенно разные вещи, хотя, конкретно в виндах у микрософтовского компилятора С++ исключения реализуются на базе SEH. Причем, чтобы это работало, внутри ядра должн быть закреплен фильтр SEH из userspace runtime который знает про формат сгенерированных твой любимой студией стековых фреймов. А надо сказать, этот формат для разных студий отличается. Ты хоть понимаеш каким диким говнокодом тебе придется осуществлять поддержку ++ ?
Что касается gcc то там С++ исключения реализованы по другому. Поэтому ты не сможеш просто-так собрать модуль ядра с поддержкой исключений. Более того, если ты вдруг собереш свой приплюсный виндово-ядровый код другим компилятором, или даже другой версией студии у тебя будет масса интересных сюрпризов. Ты вообще соображаеш какую говнояму ты таким образом выкапываеш для дальнейшей поддержки твоего кода ?
CC>>>Overloading нужна по параметрам: http://www.cplusplus.com/doc/tutorial/functions2/ E>>Ты можеш реализовать это с использованием gcc шного typeof и свитча внутри function-like макроса. CC>Спасибо, макросы кушайте сами.
Ты даже не понял о чем я говорю.
CC>>>Вы когда нибудь отлаживали макросы? В вложенные макросы? Я — отлаживал, больше не хочу. E>>Отлаживал и в огромных кол-вах. Надо просто уметь писать обобщенный код в макросах так, чтобы его было удобно отлаживать. E>>Для этого надо писать не "в лоб", а немного подумать. CC>Я в тот проект пришёл когда там линуксоиды со стажем все свои макросы уже написали. И занимались увлекательным делом — пытались с этим всем взлететь.
И, пока ты там не появился, весь в белом и на коне, ничего взлететь не могло. Ага, унылый сказочник.
E>>Думать можно начать с Степановского сишного прототипа STL. CC>Ссылка была бы просто замечательна.
Спроси у гугла, ну или зайди на страницу Степанова — там есть ссылка.
CC>>>Вот только не надо мне рассказывать про макросы. Я их давным давно наелся. E>>Ты просто не умееш с ними работать. CC> CC>Можно я буду так отвечать всем, кто кричит что С++ плохой?
А кто-то кричит что С++ плохой ? С++ — хороший, но внутри своей ниши, и не стоит пытаться тащить его во все без исключения места.
E>>>>2. Автоматический контроль за временем жизни переменных, RAII E>>>>- Поскольку исключений нет, то и вернуть ошибку из конструктора невозможно. CC>>>Исключения есть, лично писал kernel код с их использованием. E>>Вот тут было интересно узнать подробности. CC>Речь естественно про винду, в которой озаботились чтобы люди могли просто ловить исключения в ядре. Причём ловятся все, включая access violation.
Ты опять мешаеш всё в кучу, толи по глупости, толи из-за не понимания. Аксес виолайшен — это SEH исключение, оно из более низкого уровня абстракции. В языке С++ нет никаких access violation.
CC>Throw, сгенеренный компилятором, вызывает _CxxThrowException, которая всегда бросает стандартный виндовый SEH. Ядрёная реализация это делает через RtlRaiseException. CC>Ловим __try / __except c EXCEPTION_EXECUTE_HANDLER. Бросаться стандартными классами исключений становится несколько сложнее. CC>Из-за этой разницы стандартные юзермодные библиотеки без обработки напильником в кернеле использовать не получается.
Я знаком с этой кухней, поскольку лет 7-8 назад назад изучал возможность замены стандартного рантайма от студии на собственный.
_CxxThrowException — это функция из рантайма С++ предназначена для выполнения в user space mode.
RtlRaiseException — это опять же функция рантайма (но уже системного) и она предназначена для выполнения в user space mode.
При этом у С++ исключений есть специальный идентификатор, по которому его внутри фильтра можно отличить и разобрать фрейм сгенерированой студией. Но — формат этого фрейма а) немного разный для разных версий студии, б) недокументирован. А в твоем фильтре обработчике тебе надо разобрать этот формат, сделать unmangling типа RTTI и вызвать соответсвующие деструкторы.
CC>Можно прикрутить RTTI, можно сделать свои классы с блекджеком и всем что к нему прилагается.
Тебе это придется делать в любом случае — что бы понять что за исключение ты поймал и надо ли продолжать раскрутку стека.
Ты хоть понимаеш сколько малокоректного говнокда из полухаков это стоит ? Такое достойно только зеленого юнца воображающего себя кулхацкером. На самом деле — это даже не смех, а сплошные слезы глядя на этого горе-кулхакера.
E>>Особбенно совмещение неопределенных точек возврата с сишным кодом ядра. CC>Не понял про что ты?
У сишного кода есть четко обозначеные точки возврата "наверх". Использование исключений дает неопределенныые точки возврата — раскрутка стека может произойти в любом месте. Сишный код такого эээ несколько не ожидает.
E>>Еще раз — ты просто не научился нормально работать с макросами. CC>Судя по тому, как линуксоиды со стажем мудохаются со своими же макросами — с ними никто не умеет работать. CC>Так что я не вижу смысла инвестировать свое время в напрасный труд.
Для начала тебе надо самому понять почему так, как ты описал выше, делать нельзя. К сожалению, ты неквалифицирован.
E>>>>Собственно очень хорошо видно, что оставшаяся огрызок от С++ никаких особых ++ по сравнению Си не дает, зато добавляет кучу всякого системного гемороя по поддержке ++ языка. CC>>>Весь "системный геморрой" заключается в написании С++ stdlib для кернела с поддержкой SEH/Signal исключений. Очень сложно, да! E>>То что ты сказал — на мой взгляд, сделать в линуксе невозможно. Но ты можеш поделить ссылкой на пример, если таковой конечно существует. CC>Почему в винде это возможно (по факту) а в линухе вдруг нет?
Потому что в винде — это хак, в основе которого лежит использование того факта, что один единственый компилятор поддерживает механизм С++ исключений на основе системного механизма SEH.
E>>Даже для юзер спэйса, где нет кучи ограничений, написание поддержки С++ является проблемой. Через сколько там лет после первого релиза в андроиде появилася порт libstdc++ — можеш напомнить ? CC>Спроси у авторов андроида почему у них руки из задницы.
Это у тебя руки из задницы.
E>>>>Вам такой С++ вообще нужен ? CC>>>Мало того что нужен, мы его в винде давно уже используем. E>>Не потому ли виндой сейчас уже невозможно пользоваться? CC>Кому?
Нормальным разработчикам.
CC>>>Только линуксоиды упираются и цепляются за духовные скрепы С. E>>Винда потихоньку помрет и туда ей дорога. CC>Дада, она уже чёрти сколько лет вот вот помрёт. Осталось подождать ещё совсем немного.
А помрет она из-за таких вот горе-программистов.
E>>>>>>С чего ты взял что constexpr обязательно выполнится на этапе компиляции, а не после ушлого компилятора на этапе инициализации программы ? CC>>>>>Потому что стандарт. E>>>>И що ? Стандарт — стандартом, компиляторы его особо не придерживаются, особенно MS. CC>>>Ну конечно же! Операция + может на самом деле делить, ведь "Стандарт — стандартом, компиляторы его особо не придерживаются". E>>В С++ — вполне может. CC>Полностью в соответствии со стандартом между прочим. CC>Так что ты определись, придерживаются они стандарта или нет.
Компиляторостроители ? — Нет не придерживаются, об этом есть многочисленые факты.
Здравствуйте, CreatorCray, Вы писали:
N>> И вообще, разве невнимательность программиста — это проблема языка? CC>Если бы люди были всегда внимательными то и память никогда бы не текла, ни по NULL поинтеру никто бы не ходил, все ошибочные ситуации правильно обрабатывались и проч. и проч.
Ну ошибки при компиляции не будет. Но это опять же не в языке дело.
Re[26]: Достаточно ли знать С без знания С++ для устройства
Здравствуйте, eskimo82, Вы писали:
ХГД>>И на выяснение этого факта надо много часов с отладчиком и дизассемблером? E>В том случае, про который я рассказываю, компилятор сгенерировал инициализирующий конструктор для таблицы замен знаменитого госта (что такое таблица замен и гост я расказывать не буду — ты все равно не поймеш), сгенерировал он его потому что мудрила, набивший эти таблицы сделал это с нарушением сишного синтаксиса, а сам код — это был как раз тот случай когда модуль к ядру был написан на С++ и собирался как С++ код. Как ты догадываешся, все внешние юнит-тесты прекрасно проходили. Но связь с другой стороной пропала — пакеты вроде ходят, но расшифроваться не могут. E>А теперь, умник, обозначь свои действия в этой ситуации.
Обиделся и начал хамить, сомневаться в квалификации и обсуждать личность собеседников? Ай-ай-ай, стыд и позор.
ХГД>>Ужас-ужас, а дустом не пробовали? В смысле, constexpr constructor тоже почему-то не годиццо? E>С чего ты взял что constexpr обязательно выполнится на этапе компиляции, а не после ушлого компилятора на этапе инициализации программы ?
А с чего ты взял, что составными литералами твои структурки проинициализирутся не после ушлого компилятора на этапе инициализации программы ?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[26]: Достаточно ли знать С без знания С++ для устройства
ХГД>>>И на выяснение этого факта надо много часов с отладчиком и дизассемблером? E>>В том случае, про который я рассказываю, компилятор сгенерировал инициализирующий конструктор для таблицы замен знаменитого госта (что такое таблица замен и гост я расказывать не буду — ты все равно не поймеш), сгенерировал он его потому что мудрила, набивший эти таблицы сделал это с нарушением сишного синтаксиса, а сам код — это был как раз тот случай когда модуль к ядру был написан на С++ и собирался как С++ код. Как ты догадываешся, все внешние юнит-тесты прекрасно проходили. Но связь с другой стороной пропала — пакеты вроде ходят, но расшифроваться не могут. E>>А теперь, умник, обозначь свои действия в этой ситуации.
ХГД>Обиделся и начал хамить, сомневаться в квалификации и обсуждать личность собеседников? Ай-ай-ай, стыд и позор.
Будь добр, ответь на поставленый вопрос. Об остальном мы поговорим позже.
Re[27]: Достаточно ли знать С без знания С++ для устройства
Здравствуйте, eskimo82, Вы писали:
ХГД>>>>И на выяснение этого факта надо много часов с отладчиком и дизассемблером? E>>>В том случае, про который я рассказываю, компилятор сгенерировал инициализирующий конструктор для таблицы замен знаменитого госта (что такое таблица замен и гост я расказывать не буду — ты все равно не поймеш), сгенерировал он его потому что мудрила, набивший эти таблицы сделал это с нарушением сишного синтаксиса, а сам код — это был как раз тот случай когда модуль к ядру был написан на С++ и собирался как С++ код. Как ты догадываешся, все внешние юнит-тесты прекрасно проходили. Но связь с другой стороной пропала — пакеты вроде ходят, но расшифроваться не могут. E>>>А теперь, умник, обозначь свои действия в этой ситуации.
ХГД>>Обиделся и начал хамить, сомневаться в квалификации и обсуждать личность собеседников? Ай-ай-ай, стыд и позор. E>Будь добр, ответь на поставленый вопрос.
Код в студию сначала. Равно как и версии всего софта, что использовался. Не охота гадать по каким-то мутным сказкам.
E>Об остальном мы поговорим позже.
Да о чем с тобой, хамлом, разговаривать
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[12]: Достаточно ли знать С без знания С++ для устройства н
Здравствуйте, CreatorCray, Вы писали:
AWW>>Ну вот и чтобы все же что его писать (безопасный код) на СИ, требуется большая квалификация. )) CC>Это всё в теории. В реальной жизни получается чем сложнее инструмент тем выше нужна квалификация чтобы этим инструментом сделать то, что надо, не навредив самому себе. CC>С++ мощный язык, но и в то же время опасный в неопытных руках. Он может всё, что может С + ещё много чего сверху.
AWW>>>>То есть СИ более низкоуровневый язык, а чем ниже уровень, тем ближе к "железу", тем выше нужна квалификация. CC>>>Чем сложнее инструмент тем выше нужна квалификация. AWW>>Ну а почему инструмент сложен? Самый простой это ассемблер — всего-то команды и адреса. Но писать на нем сложно. CC>Писать на нём не сложно, писать на нём громоздко. Повышается вероятность тупой ошибки в стиле "просмотрел" или "забыл".
Ну дык елы палы )) — вероятность ошибки и есть то что требует высокой квалиф. что ее не делать. ИМХА, это банальность и по-моему ты пытаешся сказать то что не получается. )) То-есть не надо искать черную кошку в черной комнате...
CC>С от ассемблера недалеко ушёл, впрочем он таким и задумывался. CC>В С++ добавились вещи, которые уже надо понимать как они устроены и работают, чтобы понимать их неявные эффекты. CC>В других языках уменьшили вероятность банальных ошибок, но появились возможности создания себе комплексных проблем при непонимании как работает его автоматика.
Рискну просто спросить — С++ нравится? Недавно выучил? Класный язкык. Согласен. Но фанатизм не рационален.
AWW>> А "сложность" языка, это рамки которые тебе дают. Но не сложность освоения. CC>В С++ главное в изучении языка — опыт его использования и понимание как его автоматика работает "под капотом".
Ага. Пошел я лучше в политику опять. ))
Извини.
CC>Скорее чистоплотность (посрал — смой выделил — освободи) и усидчивость (чтобы клепать boilerplates и не сойти с ума).
ага.
CC>С++ позволяет делать всё то же что и С. Какие там ограничения?
ну и тут согласен!
==
Не без обид, просто мы как дураки одно и тоже говорим... А зачем... ? Хз.
Не все кто уехал, предал Россию.
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
Здравствуйте, CreatorCray, Вы писали:
CC>В С++ добавились вещи, которые уже надо понимать как они устроены и работают, чтобы понимать их неявные эффекты. CC>В других языках уменьшили вероятность банальных ошибок, но появились возможности создания себе комплексных проблем при непонимании как работает его автоматика.
Смею доложить, что Вы не правильно поняли стандарт С++. Его суть. По своей сути весь стандарт-повествование
о том как съесть фугу, и не откинуть при этом ласты. Да, там много схем, неявно реализуемых конструкциями синтаксиса,
которые описываются несколькими страницами занудного повествования. Но, если вникнуть в их суть, то выясняется, что они все не есть
схемы, которые обеспечивают скомпиленному приложению какие-то особые качества скомпиленного кода, связанные
с повышением безопасности, или производительности кода, а есть костыли и подпорки, которыми снимают откровенные проколы в языке,
корень которых лежит в самом дизайне языка, и подобных проблем нет в других языках. Чтоб в это убедится в том что все якобы крутые,
предоставляющие большие возможности схемы, реализуемые неявно явными синтаксическими конструкциями, просто болтовня теоретиков,
внимательно поизучайте, скомпиленный с упомянутых конструкций, код. Сравните с тем, что получается с Сишного и любого другого, хоть с Lisp-a.
У меня после таких исследований появилось впечтление что С++ — это какой-то очередной мыльный пузырь, раздутый N-ым количество академиков.
Ничего, кроме некоторых удобств и упрощений для разработчика, как уже говорил Andrew.W Worobow, С++ на самом деле не предоставляет
в своей реальной имплементации существующими компиляторами.
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
Здравствуйте, smeeld, Вы писали:
S>Кстати, мыщъх, а что там с Lisp-ом? Встречается где или нет?
Встречаеться в CAD, у меня недавно был проект портировать 15k строк с lisp на C
относительно топика востребованности С
в 3 компаниях куда меня нанимали как С++ программиста код оказался на С или на С с классами
помему используют С тк он проше чем С++ для обучения инженеров
на код без слез невзглянеш, когда тут кто то жаловаллся что в проекте в одном файле 10k строк то могу точно сказать не видели они настояшей американской жесте по размеру функий и файлов в строках
раз здесь собрались матерые Сишники
подскажите пожалуйста как лучше решить такую задачу на С
нужен динамический список (лучше array но можно list)
который динамически меняет размер от 0 до 0.5G +- каждые несколько секунд
софтина серверная 24x7, просто зарезервировать полгига (может не хватить) на все время работы программы незлья пользователь не поймет этого
Re[13]: Достаточно ли знать С без знания С++ для устройства н
Здравствуйте, Andrew.W Worobow, Вы писали:
CC>>Писать на нём не сложно, писать на нём громоздко. Повышается вероятность тупой ошибки в стиле "просмотрел" или "забыл". AWW>Ну дык елы палы )) — вероятность ошибки и есть то что требует высокой квалиф.
Да не квалификация это, просто внимательности и усидчивости. А это такие свойства что даже у квалифицированного спеца могут заканчиваться время от времени.
AWW>Рискну просто спросить — С++ нравится?
Всё относительно.
AWW> Недавно выучил?
Лет 15 уже как пишу на С++ и С за деньги.
AWW> Не без обид, просто мы как дураки одно и тоже говорим... А зачем... ? Хз.
Ну не обижайся, просто у нас видимо разное понимание термина "квалификация".
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
Здравствуйте, Andrew.W Worobow, Вы писали:
CC>>Не знаком, но вдоволь наобщался с до боли похожими персонажами. AWW>Все, ... абсолютно все,... люди индивидуальны, и никогда не следует обобщать.
В каких то вещах — да, но в основе разница невелика.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[11]: Достаточно ли знать С без знания С++ для устройства
Здравствуйте, eskimo82, Вы писали:
E>Как я понял из соседнего разговора — ты все смешал в кучу и не понимаеш, что SEH и плюсовые исключения — это совершенно разные вещи E>хотя, конкретно в виндах у микрософтовского компилятора С++ исключения реализуются на базе SEH.
Напомню: мы вели разговор о практической примененимости С++ в ядре, что требует тесной интеграции с предоставляемым ОС функционалом. В винде такой функционал позволяет использовать С++ исключения в ядре, т.к. исключения виндовые компиляторы традиционно раелизуют через SEH.
Рассматривать реализацию в отрыве от ОС просто не имеет смысла.
E> Причем, чтобы это работало, внутри ядра должн быть закреплен фильтр SEH из userspace runtime который знает про формат сгенерированных твой любимой студией стековых фреймов.
Userspace тут вообще ни при делах, в DDK свой рантайм и свой компилятор. Драйвера собираются им.
E> А надо сказать, этот формат для разных студий отличается.
Да всё равно, unwind производится кодом этого же модуля, исключения наружу выпускать нельзя — будет совершенно законный BSOD.
E> Ты хоть понимаеш каким диким говнокодом тебе придется осуществлять поддержку ++ ?
Ещё раз, у нас это вообще то уже лет пять назад работало в production.
E>Что касается gcc то там С++ исключения реализованы по другому. Поэтому ты не сможеш просто-так собрать модуль ядра с поддержкой исключений.
Кстати, а чем же так отличается GCC реализация что в линуксовом кернеле её нельзя использовать для бросания исключений внутри модуля?
E> Более того, если ты вдруг собереш свой приплюсный виндово-ядровый код другим компилятором, или даже другой версией студии у тебя будет масса интересных сюрпризов.
В винде драйвера собираются с помощью DDK, там вообще свой компилятор идёт в комплекте.
E> Ты вообще соображаеш какую говнояму ты таким образом выкапываеш для дальнейшей поддержки твоего кода ?
Я прекрасно понимаю как оно внутри работает. 4 года поддерживали, никаких проблем.
E>Ты даже не понял о чем я говорю.
Про макросы.
CC>>Я в тот проект пришёл когда там линуксоиды со стажем все свои макросы уже написали. И занимались увлекательным делом — пытались с этим всем взлететь. E>И, пока ты там не появился, весь в белом и на коне, ничего взлететь не могло. Ага, унылый сказочник.
Нет, я занимался другими вещами, попутно наблюдая за их танцами с саблями.
E>>>Ты просто не умееш с ними работать. CC>>Можно я буду так отвечать всем, кто кричит что С++ плохой? E>А кто-то кричит что С++ плохой?
Ну вот например недалеко товарищ пишет:
Имеенно тогда увидел его уродливость С++. С++-кривое, уродливое безобразие.
E>Ты опять мешаеш всё в кучу, толи по глупости, толи из-за не понимания. Аксес виолайшен — это SEH исключение, оно из более низкого уровня абстракции. В языке С++ нет никаких access violation.
Ты ж сам только что писал что в винде вся исплементация рантайма для исключений сделана через SEH, забыл? Поэтому что SEH что С++ исключение в ядре суть одно и то же, только с разными параметрами.
E>_CxxThrowException — это функция из рантайма С++ предназначена для выполнения в user space mode.
Если пишешь в кернеле — там свой рантайм.
E>RtlRaiseException — это опять же функция рантайма (но уже системного) и она предназначена для выполнения в user space mode.
ZwRaiseException. Писал по памяти.
E>При этом у С++ исключений есть специальный идентификатор, по которому его внутри фильтра можно отличить и разобрать фрейм сгенерированой студией.
В случае когда пишешь драйвер используется компилятор и его либы из DDK. Сама студия уже особой роли не играет.
CC>>Можно прикрутить RTTI, можно сделать свои классы с блекджеком и всем что к нему прилагается. E>Тебе это придется делать в любом случае — что бы понять что за исключение ты поймал и надо ли продолжать раскрутку стека.
__except позволяет решать этот вопрос без RTTI.
E>Ты хоть понимаеш сколько малокоректного говнокда из полухаков это стоит ? Такое достойно только зеленого юнца воображающего себя кулхацкером. На самом деле — это даже не смех, а сплошные слезы глядя на этого горе-кулхакера.
На сколько поинтов выросло твоё ЧСВ при написании этой фразы?
E>>>Особбенно совмещение неопределенных точек возврата с сишным кодом ядра. CC>>Не понял про что ты? E>У сишного кода есть четко обозначеные точки возврата "наверх". Использование исключений дает неопределенныые точки возврата — раскрутка стека может произойти в любом месте. Сишный код такого эээ несколько не ожидает.
Ещё раз, исключение не должно покинуть модуль.
E>Для начала тебе надо самому понять почему так, как ты описал выше, делать нельзя. К сожалению, ты неквалифицирован.
+10 к ЧСВ?
E>Потому что в винде — это хак
Т.е. решение использовать готовый и прекрасно работающий системный механизм исключений для реализации поддержки языковых исключений в рантайме это хак?
Ах ну да, надо было написать свой, ни с чем не совместимый.
E>в основе которого лежит использование того факта, что один единственый компилятор поддерживает механизм С++ исключений на основе системного механизма SEH.
В линуксе же таких возможностей и вовсе нету.
E>Это у тебя руки из задницы.
+10 к ЧСВ?
E>Нормальным разработчикам.
Под нормальным разработчиком ты явно понимаешь себя.
+100 к ЧСВ?
CC>>Дада, она уже чёрти сколько лет вот вот помрёт. Осталось подождать ещё совсем немного. E>А помрет она из-за таких вот горе-программистов.
Что то всё никак не помирает, что мы делаем не так?
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
Здравствуйте, sergey2b, Вы писали:
S>нужен динамический список (лучше array но можно list) S>который динамически меняет размер от 0 до 0.5G +- каждые несколько секунд S>софтина серверная 24x7, просто зарезервировать полгига (может не хватить) на все время работы программы незлья пользователь не поймет этого
Можно массив с эффектом непрерывного array только запись/чтение, управление через функции.
E>>Как я понял из соседнего разговора — ты все смешал в кучу и не понимаеш, что SEH и плюсовые исключения — это совершенно разные вещи E>>хотя, конкретно в виндах у микрософтовского компилятора С++ исключения реализуются на базе SEH. CC>Напомню: мы вели разговор о практической примененимости С++ в ядре, что требует тесной интеграции с предоставляемым ОС функционалом. В винде такой функционал позволяет использовать С++ исключения в ядре, т.к. исключения виндовые компиляторы традиционно раелизуют через SEH. CC>Рассматривать реализацию в отрыве от ОС просто не имеет смысла.
C++ традиционно не привязан к какой либо ОС.
E>> Причем, чтобы это работало, внутри ядра должн быть закреплен фильтр SEH из userspace runtime который знает про формат сгенерированных твой любимой студией стековых фреймов. CC>Userspace тут вообще ни при делах, в DDK свой рантайм и свой компилятор. Драйвера собираются им.
E>> А надо сказать, этот формат для разных студий отличается. CC>Да всё равно, unwind производится кодом этого же модуля, исключения наружу выпускать нельзя — будет совершенно законный BSOD.
Проблема в том что собственный unwind (а я так понял что у вас он собственный) невозможно сделать лучше чем сделал производитель компилятора (который более хорошо знаком с его особенностями). Тем более для виндусовых компиляторов практически всё остается недокументированым.
E>> Ты хоть понимаеш каким диким говнокодом тебе придется осуществлять поддержку ++ ? CC>Ещё раз, у нас это вообще то уже лет пять назад работало в production.
То что это как-то работало в момент написания — нет сомнений. Более интересный вопрос — а сейчас то работает ? Если пересобрать другой версией компилятора — будет работать ?
E>>Что касается gcc то там С++ исключения реализованы по другому. Поэтому ты не сможеш просто-так собрать модуль ядра с поддержкой исключений. CC>Кстати, а чем же так отличается GCC реализация что в линуксовом кернеле её нельзя использовать для бросания исключений внутри модуля?
Надо писать собственную реализацию раскрутки стека. Учитывая то, что ABI С++ постоянно нестабилен (как в винде, так и в линуксах), то поддержка этого кода для разных версий gcc становится проблемой. В тех же виндах стековый фрейм с информацией о catch меняется от версии к версии — каике-то поля добавляются, какие-то исчезают.
Вторая проблема, как я уже говорил, состоит в сопряжении уже существующего сишного кода с исключениями. Сишные код не предполагает что точка возврата может произойти в любом месте, и поэтому в нем изначально нет никакой exception-safety.
E>> Более того, если ты вдруг собереш свой приплюсный виндово-ядровый код другим компилятором, или даже другой версией студии у тебя будет масса интересных сюрпризов. CC>В винде драйвера собираются с помощью DDK, там вообще свой компилятор идёт в комплекте.
Это компилятор С++ ? Он развивается ? У него одна единственая версия ?
E>> Ты вообще соображаеш какую говнояму ты таким образом выкапываеш для дальнейшей поддержки твоего кода ? CC>Я прекрасно понимаю как оно внутри работает. 4 года поддерживали, никаких проблем.
А 10 лет сможете поддерживать ?
E>>Ты даже не понял о чем я говорю. CC>Про макросы.
Про макросы, но про немного другие макросы, чем ты себе представляеш.
CC>>>Я в тот проект пришёл когда там линуксоиды со стажем все свои макросы уже написали. И занимались увлекательным делом — пытались с этим всем взлететь. E>>И, пока ты там не появился, весь в белом и на коне, ничего взлететь не могло. Ага, унылый сказочник. CC>Нет, я занимался другими вещами, попутно наблюдая за их танцами с саблями.
Т.е. ты не знаком с деталями танцев, а делаеш вывод глядя со стороны ?
E>>>>Ты просто не умееш с ними работать. CC>>>Можно я буду так отвечать всем, кто кричит что С++ плохой? E>>А кто-то кричит что С++ плохой? CC>Ну вот например недалеко товарищ пишет: CC>
Имеенно тогда увидел его уродливость С++. С++-кривое, уродливое безобразие.
Он пишет про уродливость (в каком-то его понимании), а не про то, что язык плохой.
E>>Ты опять мешаеш всё в кучу, толи по глупости, толи из-за не понимания. Аксес виолайшен — это SEH исключение, оно из более низкого уровня абстракции. В языке С++ нет никаких access violation. CC>Ты ж сам только что писал что в винде вся исплементация рантайма для исключений сделана через SEH, забыл? Поэтому что SEH что С++ исключение в ядре суть одно и то же, только с разными параметрами.
Нет. Ты допускаеш грубую ошибку — путая уровни абстракции — либо ты пишеш на С++ и не знаеш ни о каких access violation, либо ты пишеш на каком-то другом, своем собственном, языке.
Это тоже самое, например, что в коде на С++ исилено использовать низкоуровневые функции Си, с соответсвующими следствиями.
E>>_CxxThrowException — это функция из рантайма С++ предназначена для выполнения в user space mode. CC>Если пишешь в кернеле — там свой рантайм.
Может быть. По памяти — студия вообще может дергать несколько вариантов, что-то вроде _CxxThrowException, _CxxThrowExcept3, etc..
E>>RtlRaiseException — это опять же функция рантайма (но уже системного) и она предназначена для выполнения в user space mode. CC>ZwRaiseException. Писал по памяти.
E>>При этом у С++ исключений есть специальный идентификатор, по которому его внутри фильтра можно отличить и разобрать фрейм сгенерированой студией. CC>В случае когда пишешь драйвер используется компилятор и его либы из DDK. Сама студия уже особой роли не играет.
Это не зависит от используемого компилятора, т.к. этот идентификатор стандартизирован внутри микрософта. А вот сгенерированые фреймы имеют кучу различных версий свой структуры.
CC>>>Можно прикрутить RTTI, можно сделать свои классы с блекджеком и всем что к нему прилагается. E>>Тебе это придется делать в любом случае — что бы понять что за исключение ты поймал и надо ли продолжать раскрутку стека. CC>__except позволяет решать этот вопрос без RTTI.
Этот вариант даже еще хуже чем собственый unwind. В первом случае — у тебя хотя бы весь бойлерплайтный код вынесен в одно место. В этом же случае — он размазан тонким слоем по всему телу драйвера. Причем получаемый вариант — это совсем даже не С++, а непонятный набор костыликов и веревочек, играть с которыми нужно по нестандартным правилам, известным лишь только автору. Отладка макросов, даже криво написанных, по сравнению с отладкой такого спагети может оказаться милым цветочком.
E>>Ты хоть понимаеш сколько малокоректного говнокда из полухаков это стоит ? Такое достойно только зеленого юнца воображающего себя кулхацкером. На самом деле — это даже не смех, а сплошные слезы глядя на этого горе-кулхакера. CC>На сколько поинтов выросло твоё ЧСВ при написании этой фразы?
Ни на сколько, просто констатирую факт.
E>>>>Особбенно совмещение неопределенных точек возврата с сишным кодом ядра. CC>>>Не понял про что ты? E>>У сишного кода есть четко обозначеные точки возврата "наверх". Использование исключений дает неопределенныые точки возврата — раскрутка стека может произойти в любом месте. Сишный код такого эээ несколько не ожидает. CC>Ещё раз, исключение не должно покинуть модуль.
E>>Для начала тебе надо самому понять почему так, как ты описал выше, делать нельзя. К сожалению, ты неквалифицирован. CC>+10 к ЧСВ?
Архитектура, которую ты описал, состоит из костылей и палочек. И это совсем даже не С++.
E>>Потому что в винде — это хак CC>Т.е. решение использовать готовый и прекрасно работающий системный механизм исключений для реализации поддержки языковых исключений в рантайме это хак?
Хаком является пришитые белыми нитками С++ исключения внутри ядра. Причем в твоем варианте пришиты очень безобразно.
CC>Ах ну да, надо было написать свой, ни с чем не совместимый.
Трудолюбивый дурак порой даже хуже диверсанта.
E>>в основе которого лежит использование того факта, что один единственый компилятор поддерживает механизм С++ исключений на основе системного механизма SEH. CC>В линуксе же таких возможностей и вовсе нету.
См. выше.
E>>Это у тебя руки из задницы. CC>+10 к ЧСВ?
Просто констатирую факт.
E>>Нормальным разработчикам. CC>Под нормальным разработчиком ты явно понимаешь себя. CC>+100 к ЧСВ?
CC>>>Дада, она уже чёрти сколько лет вот вот помрёт. Осталось подождать ещё совсем немного. E>>А помрет она из-за таких вот горе-программистов. CC>Что то всё никак не помирает, что мы делаем не так?
Вы всё делаете так, просто надо удвоить усилия.
Re[28]: Достаточно ли знать С без знания С++ для устройства
ХГД>>>Обиделся и начал хамить, сомневаться в квалификации и обсуждать личность собеседников? Ай-ай-ай, стыд и позор. E>>Будь добр, ответь на поставленый вопрос.
ХГД>Код в студию сначала. Равно как и версии всего софта, что использовался. Не охота гадать по каким-то мутным сказкам.
В этом коде несколько миллионов строк, над ним одновременно работают больше сотни человек. Ты столько прочесть не сможеж.
Вот тебе воодная:
На устройстве — несколько дырок ефернета, немного юсб и разьем питания.
Собрали сборку — ничего не работает. Зайти по ssh невозможно.
Будь добр, озвучь свои дальнейшие действия.
E>>Об остальном мы поговорим позже. ХГД>Да о чем с тобой, хамлом, разговаривать
Досвидание, засранец.
Re[4]: Достаточно ли знать С без знания С++ для устройства н
S>раз здесь собрались матерые Сишники S>подскажите пожалуйста как лучше решить такую задачу на С S>нужен динамический список (лучше array но можно list) S>который динамически меняет размер от 0 до 0.5G +- каждые несколько секунд
Можно подробнее — что за список ?
S>софтина серверная 24x7, просто зарезервировать полгига (может не хватить) на все время работы программы незлья пользователь не поймет этого
Что за система ? Можно зарезервировать часть виртуального адресного пространства, но не коммитить физические страницы.
Линукс, кстати, так и делает — пока в страницу ничего не запишеш, её и как бы и нет. Так что там можеш спокойно аллок сделать и на полгига, но если физической памяти (вместе со свопом) хватать не будет то могут и прибить.
Если просто нужен большой массив — можно приметить патерн "разреженный массив". Т.е. весь массив разбивается на страницы (или на более глубокую иерархию) и аллоцирууются только нужные страницы. Кстати, одну из реализаций можно подсмотреть в ядре — там есть специальный обьект.
Если массив "дышит" с какой-то переиодичностью, то хвостовые страницы можно отдавать системе с некотрым таймаутом, большим чем эта периодичность.