Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Крис Касперски по поводу С++ 
:(
    Опции темы
Kuvaldis
Дата 25.10.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



Ребята, не в целях пропаганды другого ресурса.
Наткнулся на интересную статью по поводу С++ от Криса Касперски. 
Можно и пообсуждать
http://www.xakep.ru//magazine/xs/065/022/1.asp


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
archimed7592
Дата 25.10.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



В принципе, Мыщъх говорит всё правильно... Не соглашусь только с одним:
Цитата
Вот и приходится использовать готовые компоненты, заточенные под конкретный компилятор, и нестандартные языковые расширения, которые привязывают программиста к поставщику. К тому же, хотя и существует множество открытых библиотек, которые написаны на стандартном С++ и позволяют создавать переносимые графические приложения, компилируемые любым компилятором, все-таки... Как же они тормозят! Взять хотя бы «Горящего Лиса» и сравнить его с Opera...

По хорошему приходится использовать непереносимые решения только тогда, когда просто нет другого выбора.
А насчёт тормознутости - ИМХО, важнее именно переносимость, да и тормознутость - понятие субъективное и от продукта к продукту эта характеристика меняется.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 25.10.2007, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(archimed7592 @  25.10.2007,  22:52 Найти цитируемый пост)
Взять хотя бы «Горящего Лиса» и сравнить его с Opera...

проблемы криворукости разработчиков отдельных приложений к языку имеют мало отношения.

Тем более тормоза в большой мере в продуктах Mozilla относятся к XUL, который вообще из другой степи.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 25.10.2007, 23:47 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



JackYF, насколько я понимаю, FF(сделанный переносимым их собственными разработками) ставится в противоположность Opera, написанной на Qt-3.x. Отчасти тормознутостью опера обязана именно третьей версии Qt, отчасти, уже упомянутой кривости рук.
Но... Такие библиотеки как Qt(c таким размахом - охватывает большое кол-во областей программирования и работает почти на любой платформе) со своим "обобщённым" дизайном(каким бы он ни был) просто обязанны проигрывать нативным решениям. Просто очень спорный вопрос - что важнее: пара тиков процессора или свобода от вендора/компилятора/платформы/ОС. ИМХО второе.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
ksili
Дата 26.10.2007, 05:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Свобода от ОС по-моему не настолько актуальна. Не так часто пишется ПО сразу для хотя бы двух осей. А вот свобода от вендора - это конечно очень неплохо.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Lazin
Дата 26.10.2007, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата

Несомненно одно: человек, привыкший к Microsoft Visual C++ (вернее, к ее Microsoft C/C++ Optimizing Compiler, cl.exe - прим. AvaLANche), переходит на «правильные» трансляторы типа GCC с большим трудом, если переходит вообще, хотя, казалось бы, и то, и другое — компиляторы одного и того же языка С++.

Непонятно, чем cl.exe неправильный.
Вообще если нужна кроссплатформенная разработка то лучше C++ вообще не использовать, а использовать к примеру Java или Python. Потому-что используя кроссплатформенные библиотеки для С++ получишь примерно те-же тормоза, имхо. Да и для многих вещей вообще нет таких библиотек, например есть ли в Linux аналог WMI, а кроссплатформенная библиотека для его использования?
Для Pyton-a например есть модуль anydb через который можно общаться с любой СУБД одинаково, была так-же попытка создать модуль anyGUI (для работы с произвольными GUI тулкитами), но она оказалась неудачной.
PM MAIL Skype GTalk   Вверх
zkv
Дата 26.10.2007, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Lazin @  26.10.2007,  08:06 Найти цитируемый пост)
Непонятно, чем cl.exe неправильный.

ага, непонятно, может тем, что один из лучших компиляторов под Винду на сегодняшний день? 
Или потому что в удобную IDE встроен, типа настоящие мачо только из командной строки компилят?
Может просто потому что Made by Microsoft? Это ведь модно - кричать, что все от MS - г.
Кто такой Крис Касперски? 
Закрадывается сомнение в компетентности автора.
PM MAIL   Вверх
archimed7592
Дата 26.10.2007, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(zkv @  26.10.2007,  08:23 Найти цитируемый пост)
ага, непонятно, может тем, что один из лучших компиляторов под Винду на сегодняшний день?

Думаю тем, что он пропускает код, который по стандарту не должен компилироваться. Не знаю такого ключа в настройках, который включал бы strict C++ режим(к примеру пропускает специализации member template in class scope).


Цитата(zkv @  26.10.2007,  08:23 Найти цитируемый пост)
Кто такой Крис Касперски? 
Закрадывается сомнение в компетентности автора. 

В его компетентности можешь не сомневаться smile.
Те кто читает Хакер очень хорошо знают его интересные статьи smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
ksili
Дата 26.10.2007, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Цитата(Lazin @  26.10.2007,  13:06 Найти цитируемый пост)
Непонятно, чем cl.exe неправильный

Да я думаю, что просто имелось в виду, что GCC более точно соответствует стандарту и меньше содержит отсебятины. А cl.exe просто приведён в противовес. По-моему Касперски ничего плохого про MS VC++ и не сказал.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
MAKCim
Дата 26.10.2007, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(zkv @  26.10.2007,  08:23 Найти цитируемый пост)
Кто такой Крис Касперски? 

Касперски


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
zkv
Дата 26.10.2007, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(archimed7592 @  26.10.2007,  08:37 Найти цитируемый пост)
Не знаю такого ключа в настройках, который включал бы strict C++ режим

Цитата(Visual C++ Compiler Options )

/Za flags language constructs not compatible with either ANSI C++ or ANSI C as errors. /Ze enables Microsoft extensions.

Ы?
еще есть раздел: Compatibility and Compliance Issues in Visual C++ 

Цитата(archimed7592 @  26.10.2007,  08:37 Найти цитируемый пост)
к примеру пропускает специализации member template in class scope

про это, правда, там не говорится..
PM MAIL   Вверх
zkv
Дата 26.10.2007, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(ksili @  26.10.2007,  08:38 Найти цитируемый пост)
По-моему Касперски ничего плохого про MS VC++ и не сказал. 

Цитата

«правильные» трансляторы типа GCC

да, можно по разному трактовать, что он имел ввиду говоря в кавычках.
Наверное просто неосознанно не понравился поклеп на инструмент, с которым работаю.  smile 
PM MAIL   Вверх
ksili
Дата 26.10.2007, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Вообще-то Касперски сравнивая в других материалах компиляторы, как раз хвалит компилятор С++ от Майкрософт, отмечая его способности по оптимизации


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Ln78
Дата 26.10.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



Цитата(zkv @  26.10.2007,  09:40 Найти цитируемый пост)
Наверное просто неосознанно не понравился поклеп на инструмент, с которым работаю.   

Я тоже в последнее время работаю только с данным компилятором (из тех двоих, с которыми работал – VS и Borland, первый считаю «самым» удобным smile ). Но мне показалось, что в статье как раз правильность указана в кавычках неслучайно. Более того, критическое отношение к самому стандарту и юношескому максимализму при отстаивании позиций типа: "Стандарт – единственный источник и критерий для оценки компиляторов", ИМХО, в статье выражено сильнее, чем порицание конкретных компиляторов.

Это сообщение отредактировал(а) Ln78 - 26.10.2007, 14:50
PM MAIL   Вверх
Alexeis
Дата 26.10.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



  Ну может виндовый компилятор и приличный, но EVC они сделали просто ужасным. Ужасно глючным + дебагер шаблоны не берет, часто блоки внаглую игнорирует (при дебаге), сам ставит брейки без спроса. После включения оптимизации неожиданно появляются ошибки. Родной STL, что есть, что нет никакой пользы! Имена функций в разных модулях не изолирует (это уже кривой линкер, но все равно стандарт языка не выполняется)! Переменные в цикле for создаются не в блоке, а в функции. 
  По моему в таких элементарных вещах уж нужно придерживаться стандарта.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
zkv
Дата 26.10.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Alexeis @  26.10.2007,  15:10 Найти цитируемый пост)
Переменные в цикле for создаются не в блоке, а в функции. 

в восьмерке нормально все, хотя в прошлых версиях была такая фигня.
Цитата(Alexeis @  26.10.2007,  15:10 Найти цитируемый пост)
После включения оптимизации неожиданно появляются ошибки.

ну это на компилятор не стоит сваливать  smile 
Цитата(Alexeis @  26.10.2007,  15:10 Найти цитируемый пост)
Имена функций в разных модулях не изолирует

это как, можно пример простой?
Цитата(Alexeis @  26.10.2007,  15:10 Найти цитируемый пост)
Родной STL, что есть, что нет никакой пользы!

в смысле?
PM MAIL   Вверх
Alek86
Дата 26.10.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



меня тоже раздражают в VS некоторые моменты. но все они весьма мелочные.
к примеру то, что в классе нельзя создать чисто виртуальный конструктор

но вообще впечатление о связке VS+Visual Assist отличнейшие


--------------------
user posted image    user posted image
PM MAIL   Вверх
Lazin
Дата 26.10.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Alek86 @  26.10.2007,  15:39 Найти цитируемый пост)
чисто виртуальный конструктор

Виртуальных конструкторов не бывает в принципе
PM MAIL Skype GTalk   Вверх
Alexeis
Дата 26.10.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(zkv @  26.10.2007,  15:18 Найти цитируемый пост)
в восьмерке нормально все, хотя в прошлых версиях была такая фигня.

  Максимальная версия сейчас EVC 4.0

Цитата(zkv @  26.10.2007,  15:18 Найти цитируемый пост)
ну это на компилятор не стоит сваливать


А на кого? Не я же генерю машинный код. Кто ему виноват, что он не знает того, что не все инлайны можно делать инлайнами, ведь стандарт утверждает что делать или нет оптимизацию инлайн на совести компилятора. Че это я должен убрать слово inline руками в тех местах, где он не сумел правильно подставить? Раз не можешь делай функцию! Так везде работает.

Цитата(zkv @  26.10.2007,  15:18 Найти цитируемый пост)
это как, можно пример простой?

  В двух cpp шниках если объявить функцию с одинаковым именем, то линкер ругается, хотя в заголовочных файлах прототипы функций не объявлены!

Добавлено через 2 минуты и 4 секунды
Цитата(Lazin @  26.10.2007,  15:41 Найти цитируемый пост)
Виртуальных конструкторов не бывает в принципе 

  Это еще почему? Очень даже есть, на них весь VCL держится. Просто их нет в С++.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 26.10.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Alexeis @  26.10.2007,  15:42 Найти цитируемый пост)
В двух cpp шниках если объявить функцию с одинаковым именем, то линкер ругается, хотя в заголовочных файлах прототипы функций не объявлены!

И правильно делает, в таких случаях положено использовать модификатор static.
Цитата(Alexeis @  26.10.2007,  15:42 Найти цитируемый пост)
Очень даже есть, на них весь VCL держится. Просто их нет в С++

Что-то я не замечал в вцл такого, на этапе создания объекта всегда известен его тип.
Код

TWinControl* btn = new TButton(Form);

PM MAIL Skype GTalk   Вверх
Kuvaldis
Дата 26.10.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



Alexeis
Цитата

 Это еще почему? Очень даже есть, на них весь VCL держится. Просто их нет в С++.

В С++ нет метаклассов.
А виртуальный конструктор "через бубен" можено сделать, как предлагает Страуструп, метод Clone


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Alexeis
Дата 26.10.2007, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(zkv @  26.10.2007,  15:18 Найти цитируемый пост)
в смысле? 

  ХЗ. Недоделанный он и урезанный до нельзя.

Цитата(Lazin @  26.10.2007,  15:51 Найти цитируемый пост)
Что-то я не замечал в вцл такого, на этапе создания объекта всегда известен его тип.

  А вот среда не знает тип объекта, потому при мышкоделии юзает виртуальный конструктор для создания необходимого класса. 



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
zkv
Дата 26.10.2007, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Alexeis @  26.10.2007,  15:42 Найти цитируемый пост)
EVC

упустил из виду. Тогда молчу.
PM MAIL   Вверх
Lazin
Дата 26.10.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Alexeis @  26.10.2007,  16:07 Найти цитируемый пост)
А вот среда не знает тип объекта
 среда не знает, но код который его создает знает, иначе как-бы выделялась память под объект.

Добавлено через 53 секунды
зы
никогда eVC не использовал
PM MAIL Skype GTalk   Вверх
Alexeis
Дата 26.10.2007, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(Lazin @  26.10.2007,  15:51 Найти цитируемый пост)
И правильно делает, в таких случаях положено использовать модификатор static.

хм.. а другие компиляторы и без static не ругаются...

Цитата(Lazin @  26.10.2007,  16:14 Найти цитируемый пост)
 среда не знает, но код который его создает знает, иначе как-бы выделялась память под объект.

  Вот этот код и вызывает виртуальный конструктор, который создает нужный объект.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 26.10.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Alexeis @  26.10.2007,  16:22 Найти цитируемый пост)
Вот этот код и вызывает виртуальный конструктор, который создает нужный объект. 

Тогда это уже фабрика классов, а не конструктор.
Цитата(Alexeis @  26.10.2007,  16:22 Найти цитируемый пост)
хм.. а другие компиляторы и без static не ругаются...

вот BCB6 к примеру не ругается, а вызывает какую либо одну реализацию функции. Для компоновщика они одинаковы, хоть и находятся в разных obj файлах. Он в принципе не может определить какую функцию вызывать, так как не обрабатывает исходники.

PM MAIL Skype GTalk   Вверх
archimed7592
Дата 26.10.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alexeis @  26.10.2007,  16:22 Найти цитируемый пост)
хм.. а другие компиляторы и без static не ругаются...

Хм, это плохие компиляторы.


Цитата(Alexeis @  26.10.2007,  16:22 Найти цитируемый пост)
Вот этот код и вызывает виртуальный конструктор, который создает нужный объект. 

Что именно он вызывает?
TButton::TButton(TControl *parent)? smile


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alexeis
Дата 26.10.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(archimed7592 @  26.10.2007,  16:34 Найти цитируемый пост)
Что именно он вызывает?

  Не буду утверждать, но предположу, что виртуальный конструктор Create у переменной метакалсса, ведь классы реализованы не на C++.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
archimed7592
Дата 26.10.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Alexeis, не буду утверждать, но предположу, что TButton.Create - это тоже никакой не виртуальный конструктор smile.
А вот создание объекта имеяя только метакласс - это уже виртуальный конструктор. Это легко реализуемо. Сложнее с получением самих метаклассов. В Delphi они есть. В С++ их нет, но, к примеру, Qt реализует их(и рефлексию вообще) посредством отдельных утилит. В BCB это делается точно также, только "отдельная" утилита "встроена" в компилятор.



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alexeis
Дата 26.10.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(archimed7592 @  26.10.2007,  17:31 Найти цитируемый пост)
не буду утверждать, но предположу, что TButton.Create - это тоже никакой не виртуальный конструктор

  Все наследники TComponent по дефолту имеют виртуальный конструктор Create, а это вся палитра VCL, остальные его перекрывают.

Цитата(archimed7592 @  26.10.2007,  17:31 Найти цитируемый пост)
В BCB это делается точно также, только "отдельная" утилита "встроена" в компилятор.

  Боюсь что эта утилита называется Dcc32.exe.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
archimed7592
Дата 26.10.2007, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alexeis @  26.10.2007,  17:52 Найти цитируемый пост)
Все наследники TComponent по дефолту имеют виртуальный конструктор Create, а это вся палитра VCL, остальные его перекрывают.

Ок, сменим приоритеты: что такое виртуальный конструктор? В чём заключается его виртуальность(помимо, возможно, ключевого слова virtual)?

Добавлено через 37 секунд
Другими словами приведи пример, где будет видно, что конструктор виртуален.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alek86
Дата 26.10.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Lazin @  26.10.2007,  15:41 Найти цитируемый пост)

Цитата(Alek86 @  26.10.2007,  15:39 )
чисто виртуальный конструктор

Виртуальных конструкторов не бывает в принципе


сори, оговорился. Деструктор



--------------------
user posted image    user posted image
PM MAIL   Вверх
archimed7592
Дата 26.10.2007, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Alek86, студия позволяет делать чисто виртуальные деструкторы(точно так же, как и любой другой компилятор, утверждающий, что он соответствует Стандарту). Скорее всего их не умеешь делать ты smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alek86
Дата 26.10.2007, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



отакие сразу наезды...

отэто по стандарту должно скомпилиться и слинковаться?
Код


class IC {
public:
    virtual ~IC() = 0;
};

class C1 : public IC {
public:
    virtual ~C1() {}
};

int main() {
    IC* pC = new C1();
}



Это сообщение отредактировал(а) Alek86 - 26.10.2007, 19:42


--------------------
user posted image    user posted image
PM MAIL   Вверх
archimed7592
Дата 26.10.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alek86 @  26.10.2007,  19:42 Найти цитируемый пост)
отэто по стандарту должно скомпилиться и слинковаться?

Нет - ты же своим объявлением виртуального деструктора класс IC "отменил" его неявное определение(definition), а сам его определить не потрудился. А чтобы уничтожить объект деструкторы всех базовых классов должны быть доступны(не private) и определены(потому что деструктор твоего класса неявно вызывает деструкторы базовых классов).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 26.10.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Alek86 @  26.10.2007,  19:42 Найти цитируемый пост)
отэто по стандарту должно скомпилиться и слинковаться?

нет.


Цитата(Alek86 @  26.10.2007,  19:42 Найти цитируемый пост)
virtual ~IC() = 0;

чисто виртуальный деструктор? быть не должно, исправляйте:
Код

virtual ~IC() {};



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 26.10.2007, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(JackYF @  26.10.2007,  19:59 Найти цитируемый пост)
чисто виртуальный деструктор? быть не должно, исправляйте:

Интересно, почему? 0_о

Добавлено @ 20:07
То ли я чё-т недопонимаю, то ли... вы надо мной издеваетесь? smile
Вам религия не позволяет написать определение деструктора?
Это примерно то же самое что говорить "а почему вот это не линкуется?"
Код

stuct B
{
    virtual void foo() = 0;
};
stuct D
    : public B
{
    void foo()
    {
        B::foo();
        // ...
    }
};


Либо напишите определение B::foo, либо не делайте явный вызов B::foo()(либо не задавайте вопросов почему это не линкуется smile). Разница с деструктором только в том, что вы не можете не делать явный вызов IC::~IC() ибо за вас это сделает компилятор вам по любой придётся написать определение деструктора(если компилятор не делает это за вас).

Это сообщение отредактировал(а) archimed7592 - 26.10.2007, 20:10


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 26.10.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(archimed7592 @  26.10.2007,  20:03 Найти цитируемый пост)
Интересно, почему?

а что будет вызывать компилятор?

foo ему вызывать не требуется, а вот деструктор - извольте.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 26.10.2007, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(JackYF @  26.10.2007,  20:22 Найти цитируемый пост)
а что будет вызывать компилятор?

IC::~IC(). А какие ты видишь в этом преграды? 0_о
Он и так его вызывает, только линкер определения ф-ции не находит.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alexeis
Дата 26.10.2007, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(archimed7592 @  26.10.2007,  17:56 Найти цитируемый пост)
Ок, сменим приоритеты: что такое виртуальный конструктор? В чём заключается его виртуальность(помимо, возможно, ключевого слова virtual)?

Добавлено через 37 секунд
Другими словами приведи пример, где будет видно, что конструктор виртуален.


Например такой гипотетический пример загрузки вида.

Код

Function GetComponentClass : TCompomponentClass;
Begin
  Result := TButton;
end;

......

procedure ShowChild(InitProc : Function : TCompomponentClass; astream : TStream);
var
  AChild            : TComponent;
Begin
  AChild            := InitProc.Create(Panel1);
  AChild.LoadSizesFromStream(astream);
end;



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
archimed7592
Дата 26.10.2007, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alexeis @  26.10.2007,  21:01 Найти цитируемый пост)
TCompomponentClass;

Ну, вот видишь - виртуальность конструктора проявляется только в случае создания через метакласс(как я и сказал ранее).
В С++ это реализуется очень просто - одна проблема: это нужно именно реализовывать. К примеру это реализованно утилитой moc в случае Qt. Это же реализованно частью компилятора bcc32(нет, нет, dcc32 тут не при чём - он же не понимает С++ код).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alexeis
Дата 26.10.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(archimed7592 @  26.10.2007,  21:07 Найти цитируемый пост)
Это же реализованно частью компилятора bcc32(нет, нет, dcc32 тут не при чём - он же не понимает С++ код). 

  И не нужно, VCL классы C++ Builder являются лишь интерфейсами делфийских классов, для которых есть метаклассы. Потому билдер просто использует этот отработанный механизм, не внося туда ничего от самого языка С++. А компилятор dcc32 поставляется с билдером и нужен для компиляции кода на Delphi (Object Pascal), который реально и реализует механизмы VCL.

Добавлено через 2 минуты и 6 секунд
Цитата(archimed7592 @  26.10.2007,  21:07 Найти цитируемый пост)
Ну, вот видишь - виртуальность конструктора проявляется только в случае создания через метакласс(как я и сказал ранее).

  А я разве говорил что это не так? Я говорил лишь, что это интенсивно используется в VCL и все, опровергая доводы о том, что это мало где используется.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
archimed7592
Дата 26.10.2007, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alexeis @  26.10.2007,  21:15 Найти цитируемый пост)
И не нужно, VCL классы C++ Builder являются лишь интерфейсами делфийских классов, для которых есть метаклассы.

Мы друг друга не понимаем...
В С++ рефлексии нет.
Пользовательский компонент можно использовать как и любой другой VCL'овский(в т.ч. виртуальные конструкторы и рефлексию в общем).
Вывод: bcc32 добавляет к С++ рефлексию(в том или ином виде) и dcc32 тут не при делах smile.


Цитата(Alexeis @  26.10.2007,  21:15 Найти цитируемый пост)
Я говорил лишь, что это интенсивно используется в VCL и все, опровергая доводы о том, что это мало где используется. 

А разве кто-то говорил, что это мало где используется? smile


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alexeis
Дата 26.10.2007, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(Lazin @ 26.10.2007,  15:51)
Цитата(Alexeis @  26.10.2007,  15:42 Найти цитируемый пост)
Очень даже есть, на них весь VCL держится. Просто их нет в С++

Что-то я не замечал в вцл такого, на этапе создания объекта всегда известен его тип.
Код

TWinControl* btn = new TButton(Form);

Пояснение было больше к этому.

Цитата(archimed7592)

Пользовательский компонент можно использовать как и любой другой VCL'овский(в т.ч. виртуальные конструкторы и рефлексию в общем).


  Пользовательский компонент не может не быть наследником TComponent. 
class PASCALIMPLEMENTATION TButton : public TButtonControl 
  Мне кажеться что для классов наследников в билдере тоже создаются метаклассы иначе это потребовало слишком значительной переделкой самого VCL.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
archimed7592
Дата 26.10.2007, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alexeis @  26.10.2007,  21:51 Найти цитируемый пост)
Пользовательский компонент не может не быть наследником TComponent. 

Почему? Хочешь сказать в Builder'е невозможно создавать пользовательские контролы? smile


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alexeis
Дата 26.10.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(archimed7592 @  26.10.2007,  21:54 Найти цитируемый пост)
Почему? Хочешь сказать в Builder'е невозможно создавать пользовательские контролы? 

  Лезем на Torry.net качаем первый попавшийся компонент, берем даже невизуальный, чтобы не было соблазна использовать классы высокого уровня, смотрим в объявление класса
Код

class PACKAGE TAnimTimer : public TComponent
{
public:
  __fastcall TAnimTimer(TComponent* Owner);
  virtual __fastcall ~TAnimTimer();

__published:
  __property bool Enabled = {read=FEnabled,write=SetEnabled,default=true};
  __property unsigned int Interval = {read=FInterval,write=SetInterval,default=10};
  __property TNotifyEvent OnTimer = {read=FOnTimer,write=SetOnTimer};



  Хм... с чего бы тут нужен был наследник TComponent?

Смотрим ниже, секция __published !!! епрст, как же мы увидим свойства Enabled, Interval и OnTimer в object inspector, если их не будет в RTTI метакласса? Их же извлекают по названию.

Все это на 100% повторяет объявление класса в Delphi. Очевидно, что и для TAnimTimer будет создан метакласс. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
archimed7592
Дата 26.10.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alexeis @  26.10.2007,  22:19 Найти цитируемый пост)
Все это на 100% повторяет объявление класса в Delphi. Очевидно, что и для TAnimTimer будет создан метакласс.  

Гхм... Да я не спорю... Я лишь говорю, что bcc32 расширяет язык С++, добавляя к нему рефлексию(чтобы было видно в object inspector'е, чтобы можно было делать метаклассы, и т. д.).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
powerfox
Дата 27.10.2007, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Цитата

Основная разница между С++ и Basic'ом вовсе не в том, что трансляторы Basic'а генерируют тормозной код. Главное отличие С++ в том, что он никому не принадлежит. Есть открытый стандарт и десятки аттестованных компиляторов, которые генерируют стандартный промежуточный код, легко интегрируемый в любой проект, написанный, например, на Паскале или Ассемблере.

Не объясните, что это значит? Стандартный промежуточный код - понятие и .NET. Если не ошибаюсь, то в "чистом" С++ такого нет. А вызывать API программ на других языках -- не проблема. Вставлять код... Компановка объектных файлов -- это не промежуточный код. И тут надо юзать связки, наподобие g++ + gpc, и то... Это не всегда просто (если сравнивать с .NET).


--------------------
user posted image
PM WWW   Вверх
MAKCim
Дата 28.10.2007, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



powerfox
тот же GCC генерирует промежуточный код с целью дополнительной оптимизации
т. е сначала код на ЯВУ преобразуется во внутреннее представление компилятора, далее идет его оптимизация, (архитектуро-независимая (основное назначение промежуточного кода))
потом из оптимизированного внутреннего представления идет генерация кода целевой машины, далее его архитектуро-зависимая оптимизация и наконец на последнем шаге - формиование объектного файла

Это сообщение отредактировал(а) MAKCim - 28.10.2007, 10:15


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
archimed7592
Дата 28.10.2007, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(powerfox @  27.10.2007,  21:24 Найти цитируемый пост)
десятки аттестованных компиляторов, которые генерируют стандартный промежуточный код

Я не очень хорошо знаком с вопросом кодогенерации современными компиляторами, но, если учесть, существование name mangling и кучу других не специфицированных стандартом ньюансов, то, осмелюсь предположить, что, даже при наличии промышленных стандартов на объектники, склеивание объектников от разных компиляторов - весьма не тривиальная задача.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
ksili
Дата 28.10.2007, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Цитата(archimed7592 @  28.10.2007,  15:23 Найти цитируемый пост)
склеивание объектников от разных компиляторов - весьма не тривиальная задача

В свете всего этого Крис Касперски хвалит (не в этой статье) линкер ulink от Юрия Харона,  smile  даже вроде говорит, что он единственный может делать это нормально


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
MAKCim
Дата 28.10.2007, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(archimed7592 @  28.10.2007,  10:23 Найти цитируемый пост)
что, даже при наличии промышленных стандартов на объектники, склеивание объектников от разных компиляторов - весьма не тривиальная задача. 

не вижу ничего нетривиального  smile 


Это сообщение отредактировал(а) MAKCim - 28.10.2007, 10:35


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
archimed7592
Дата 28.10.2007, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Думаю, проблема больше не в нормальном линкере а в том, что делая это ты накладываешь множество ограничений на свой код. В частности:
1) нельзя выпускать исключения за пределы модуля
2) нельзя освобождать память в модуле, отличном от того, в котором она была выделена.
3) нужно заставлять компилятор какие-нибудь распространённые правила вызова ф-ций(calling conventions), т.о. связывая руки оптимизатору.
4) список думаю можно продолжить - если бы я сталкивался с этим на практике, то скорее всего что-нибудь добавил бы.

Добавлено @ 10:41
MAKCim, я же сказал "осмелюсь предположить" smile. Если ты имел с этим дело на практике, то тебе виднее.
В частности, я не представляю как можно "нетривиально" решить проблему с name mangling.

Это сообщение отредактировал(а) archimed7592 - 28.10.2007, 10:54


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
MAKCim
Дата 28.10.2007, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(archimed7592 @  28.10.2007,  10:40 Найти цитируемый пост)
В частности, я не представляю как можно "нетривиально" решить проблему с name mangling. 

с объектниками, которые были сгенерировали С компиляторами, проблем нет, согласен?
в случае с С++ компиляторами
можно сравнивать имена символов и находить одинаковые подстроки в них (связано с тем, что С++ компиляторы добавляют суффиксы и/или префиксы к именам символов)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
archimed7592
Дата 28.10.2007, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(MAKCim @  28.10.2007,  11:18 Найти цитируемый пост)
в случае с С++ компиляторами

Ну дык статья то про С++ smile.

foo(int, char);
foo(const A &, int);
...
Как выбрать сравнениями выбрать одну из нужных? ;-)
С шаблонами вообще труба.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
powerfox
Дата 28.10.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



MAKCim, спасибо. Понял.


--------------------
user posted image
PM WWW   Вверх
Mayk
Дата 28.10.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(archimed7592 @  28.10.2007,  14:40 Найти цитируемый пост)
В частности, я не представляю как можно "нетривиально" решить проблему с name mangling.

Это достаточно  легко.  Нужен стандарт mangling'а и   ......................... extern "C++"[та да!], который можно вставлять перед определенными классами/ф-циями[как справделиво заметили в C++ FQA Lite,  свзяать си и си++ легче, чем с++ и с++].


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 28.10.2007, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Mayk @  28.10.2007,  14:55 Найти цитируемый пост)
extern "C++"

Вообще говоря, стандарт не оговаривает даже то, что может указываться после extern в кавычках smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Mayk
Дата 28.10.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(archimed7592 @  28.10.2007,  21:30 Найти цитируемый пост)

Вообще говоря, стандарт не оговаривает даже то, что может указываться после extern в кавычках

ну вот, значит будет  smile Ставлю десятку, что когда-нибудь extern "cpp" или extern "c++"  станет стандартным.  smile 
лет так через 50.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 28.10.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



А в чём предполагаемая разница между extern "c++" и обыкновенными c++ объявлениями? smile


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
MAKCim
Дата 28.10.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(archimed7592 @  28.10.2007,  11:32 Найти цитируемый пост)
Как выбрать сравнениями выбрать одну из нужных? ;-)
С шаблонами вообще труба.

да, тут я задумался
может и никак



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Lazin
Дата 30.10.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(archimed7592 @  26.10.2007,  19:12 Найти цитируемый пост)
Alek86, студия позволяет делать чисто виртуальные деструкторы(точно так же, как и любой другой компилятор, утверждающий, что он соответствует Стандарту)

кстати стандарт Embedded C++ не включает в себя, множественное наследовани пространства имен RTTI и абстрактные базовые классы и многое другое
PM MAIL Skype GTalk   Вверх
archimed7592
Дата 30.10.2007, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Lazin @  30.10.2007,  13:03 Найти цитируемый пост)
стандарт Embedded C++

Что за стандарт такой? smile
Я только о 14882 слышал...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alexeis
Дата 30.10.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



фигасе  smile , значит я зря матюгался на отстутствие исключений и кривой STL .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
zkv
Дата 30.10.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(archimed7592 @  30.10.2007,  15:01 Найти цитируемый пост)
Что за стандарт такой?

похоже Lazin прав, не нашел ничего совсем "официального", но аргументы имеются:
wiki
homepage
PM MAIL   Вверх
archimed7592
Дата 30.10.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Alexeis, я не думаю, что в embeded delphi(если такой существует) возможностей больше...


zkv, да я не говорю, что он не прав smile. Я спрашиваю, что это за стандарт такой...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Lazin
Дата 30.10.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Ну может это и не совсем стандарт, но в WinAVR(порт gcc для AVR) эта приблуда входит. 
eVC - скорей всего то-же что-то в этом роде.
зы
я сам никогда Embedded C++ не использовал
PM MAIL Skype GTalk   Вверх
archimed7592
Дата 30.10.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Lazin, ты об этом?

Насколько я понимаю, это промышленный стандарт. Это так?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alexeis
Дата 30.10.2007, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(Lazin @  30.10.2007,  16:06 Найти цитируемый пост)
eVC - скорей всего то-же что-то в этом роде.
зы
я сам никогда Embedded C++ не использовал

  Ну там есть и абстрактные классы и множественное наследование и нэймспэйсы и даже шаблоны (хоть и кривые).

Добавлено через 5 минут и 50 секунд
Цитата(archimed7592 @  30.10.2007,  15:19 Найти цитируемый пост)
Alexeis, я не думаю, что в embeded delphi(если такой существует) возможностей больше...

  Существует только дополнение для разработки под compact framework Windows Forms, но имхо это извращение... 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1320 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.