powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не дадим C++ в обиду
105 сообщений из 105, показаны все 5 страниц
Не дадим C++ в обиду
    #32238332
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удивительно малая активность в этом топике, да и то, больше по BCB.
А как насчет "честных" С++ программ?

Самое неприятное в ситуации с C++, что всю мощь этого языка многие компиляторы стали поддерживать только несколько лет назад. Это зело удивительный факт, если учесть, что подавляющее большинство системных и прикладных программ на столе рядового пользователя написаны именно на нем.

Правда, это доля с каждым годом все уменьшается. Правомерный вопрос почему ?
Чем та же Java или C# лучше С++, что так активно его вытесняет? Попытаемся перечислить основные причины, и оценить степень их серьезности:

В пользу Java и С#:
1. Java и C# имеют систему автоматического сбора мусора. Это освобождает программиста от дополнительных затрат внимания при проектировании/кодировании.
2. Java и C# имеют способность оперировать мета-информацией, т.е. данными об устройстве классов.
3. Java и C# идут в поставке с мощнейшими и абсолютно бесплатными библиотеками пригодными практически на все случаи жизни.
4. Java и C# не могут работать с памятью напрямую (unsafe в C# пока не рассматриваем), что позволяет рассматривать это качество как "защиту от дурака"
5. Программы на Java и С# обычно при прочих равных условиях состоят из меньшего числа строк и требуют меньше времени на отладку (самое большое и стойкое заблуждение).

В пользу C++:
6. С++ позволяет использовать множественное наследование не только интерфейсов, но и реализации.
7. С++ позволяет работать с памятью напрямую, что при умелом использовании может дать приличный выигрыш в эффективности.
8. С++ имеет такое средство как шаблоны, уникальнейший и, к сожалению, плохо понимаемый большинством разработчиков механизм.

(пунктов в обоих списках могло быть гораздо больше, но и этого достаточно для начала обсуждения)

Теперь попробуем достойно ответить по пунктам-минусам.
>1. Для С++ можно использовать технологию COM для аналогичных целей. Однако, учитывая что эта технология совершенно не использует возможностей языка (т.к. предназначена для "межязыкового" общения), всерьез ее рассматривать не будем. На данный момент у меня есть отлаженная реализация классов и механизмов, которые решают эту проблему именно используя все возможности языка С++. Т.е. практически любые классы, которые написаны на C# или Java переводяться один-в-один (с точностью до мелких особенностей конструкций) на C++ c применением этой технологии. (правомерный вопрос про reflection - в следующем пункте).

>2. Какой процент классов в реальном приложении на Java и C# использует reflection? Если предположу, что 5% - это с запасом (я не беру специфические приложения) Использование для этих случаев в С++ такое понятие как Объект Класса, плюс применение всевозможных шаблонов проектирования (типа абстрактных фабрик) позволяет довольно легко решить проблему динамического создания различных экземпляров классов в зависимости от различных обстоятельств.

>3. На мой взгляд именно этот пункт (а не какие другие, учитывая только что сказанное) и является решающим. Эти библиотеки обеспечивают бОльшую начальную степень готовности пустого приложения для выполнения множества повседневных задач. Исторически, библиотеки под C++ стоят немало, и я еще не видел ни одной библиотеки хотя бы чуть-чуть сравнимой с тем, что дали нам Sun и Microsoft (.NET) сейчас. Причем, в пылу "горячей конкуренции", абсолютно даром . (чем весь мир и не преминул воспользоваться).

>4. Язык С++ можно рассматривать со многих сторон, и как довольно низкоуровневый и как довольно высокоуровневый. В этом его и сила и слабость. И здесь может помочь только строжайшая дисциплина кода. Могу предложить вариант, которым успешно пользуюсь много лет: когда кодируем участки кода, имеющие прикладной характер, строго придерживаемся стиля Java, C#, VB. Если тянет сделать что-то "нехорошее" ( п.7. ), нужно спросить себя "а возможно ли такое на этих языках". Если ответ "нет" - значит однозначно нет. Все более-менее сложные или близкие по характеру к системным задачи необходимо оформлять в виде самодостаточных абсолютно безопасных и имеющих простой внешний интерфейс классов. Все это, понятное дело, азы . Но имено нестрогое следование этим азам снискало такому мощному инструменту дурную славу. Почему программистам (а программист - это звучит "гордо", и это не пафос, это раздел человеческой деятельности требущий практически идеальных мозгов), так вот, почему программистам обязательно "давать линейкой по пальцам", в виде языков с заведомо и специально ограниченными возможностями, только для того, чтобы повышать надежность программ? Представьте только ход рассуждений разработчиков языка Java, когда они убирали оттуда все более-менее сложные и интересные конструкции языка С++ перед тем отправить Java в программистские "массы" (стадо). (Мне - обидно :)). Язык Java не люблю до сих пор, с С#, конечно, пообщаемся, там нам хоть что-то "вернули") .

>5. Самый-пресамый интересный момент. Правда жизни в том, что любые алгоритмы и любые иерархии классов, разработанные на C++, обычно оказываются как минимум вдвое меньше аналогичных на Java или там C#!!! (используя возможности 6 и 8 ). И занимают на разработку и отладку примерно вдвое меньше времени и сил. (Хотелось бы, чтобы проектировщики и системные аналитики обратили свое внимание на этот интересный факт).
Наследование реализаций и применение шаблонов - это уникальнейшие и мощнейшие инструменты, которые, почему-то нечасто используются прикладными программистами на С++. (может из-за "воспитания" на BCB?) В то время, когда програмистам на Java и C# приходится имплементить свои интерфейсы в КАЖДОМ классе-наследнике (или применять уродливые парадигмы адаптеров), в С++ мы имеем возможность лишь ОДНОКРАТНО реализовать и отладить интерфейс. Да и применение интерфейсов в чистом виде в среде чистого С++ неоправдано, я предпочитаю базовые библиотечные классы, выполняющие аналогичную роль - это экономит время, уменьшает размер программ и повышает эффективность.
Так почему же программы на С++ обычно столь громозки? А вы возьмите любую немаленькую программу на С++ и исследуйте ее на предмет соотношения количества кода общего назначения (который мог бы уже быть, как он есть в библиотеках .NET) и кода, относящегося непосредственно к прикладной области. Результат анализа обычно плачевный . Примерно 40%-80% это код, которого могло не быть . Т.е. каждый программист на С++ пишет свой очередной тысячный велосипед. И проектирование программы на С++ сводится к тривиальным и оскорбительным вещам: выбрать МИНИМУМ используемых средств и известных методологий общего назначения, дабы наша программа не превратилась в ходячую библиотеку. Т.е., на мой взляд, п.3 - это и есть тот камень предкновения. Таким образом, спорить о неких достоинствах языков в отрыве от среды, в которой они работают - бессмысленно. Языки типа Java и C# изначально по своим возможностям являются подмножествами языка С++, следовательно, утверждать, что эти языки мощнее - элементарно неграмотно . То же самое касается и насчет размера программ, написанных на С++. Повторюсь, при прочих РАВНЫХ условиях, программы на С++ гораздо короче и требуют гораздо меньше времени на разработку.

Резюме. Что дальше?
Дальше попытаемся представить себе примерный порядок работы программиста над прикладным проектом. Пусть проект будет не маленький, т.е. ситуацию написания программы в лоб отбрасываем. Прикладной программист/разработчик, исследуя полученные спецификации, пытается спроецировать сущности предметной области на разрабатываемые конструкции/типы (классы, структуры), а взаимодействия между этими сущностями описывает в виде процедур (в чистом ООП - методы классов). В конечном итоге, если разработчик шел по правильному пути, он получает отлаженный набор классов, в рамках которого решение любых задач из требуемой предметной области оборачивается весьма несложной задачей и обходиться в малое число строк исходного кода.
Т.е. на старе мы имеет некий уровень, "стартовый" уровень. Это то, что дано нам языком и библиотеками, имеющимися в распоряжении. И есть уровень некоей готовности под определенную прикладную область, "прикладной" уровень. Так вот, в случае языка С++, мы имеем возможность "подобраться" к прикладному уровню гораздо ближе, чем в случае Java и C#. Нам в этом помогает возможность переопределения практически ЛЮБЫХ операторов языка, что делает синтаксис программы наглядным а суть алгоритмов - очевидной, а так же теже самые шаблоны. Не стоит забывать, что в С++ шаблонными могут быть не только типы, но и отдельные функции, а так же отдельные методы классов внутри обычного не шаблонного класса, что позволяет нам обощать алгоритмы для работы с различными типами или специфировать их (частичная спецификация шаблонов) со сколь угодной степенью детализации.
Теперь насчет того самого "стартового" уровня. Ситуация такова, что за последние несколько лет сообщество С++ программистов так или иначе в меру своих сил и свободного времени решали отдельные задачи, т.е. уже имеется в наличии очень много исходного материала. (sourceforge, codeproject, codeguru, и еще миллион ресурсов). При желании, и наличии единомышленников, можно попытаться собрать некий framework, на основе этого самого материала, вместо того, чтобы каждый раз писать новый. У самого есть масса наработок, которые надо бы классифицировать, сделать легкий рефакторинг и (я надеюсь, с удовольствием) использовать.

Кто за - поднимите руки!
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238378
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Толково написано.
Особенно насчет >40%. Но пусть в меня кинут камнем, если можно было обойтись без этого :)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238381
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я за !!!

но вот я пока не могу никак слесть с BC++
а так скоро видимо на VC++ перейду ..

но тут да придется попотеть ,
MFC ,ATL придется изучать ну и в догонку STL :((
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238396
WolfHound
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во-во беда всех билдеровцов STL не знают. Да и STL под билдером толком не работает.
И вобще не забываем про www.boost.org
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238411
Достойно.

ИМХО, одна из причин активного продвижения языков со слабой типизацией - возможность быстро склепать что-то условно работающее не задумываясь о дальнейшем развитии продукта и без учёта некоторых вещей , которые естественным образом учитываются C++-программистами.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238420
ADB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"ИМХО, одна из причин активного продвижения языков со слабой типизацией - возможность быстро склепать что-то условно работающее не задумываясь о дальнейшем развитии продукта и без учёта некоторых вещей, которые естественным образом учитываются C++-программистами."

Это Java то язык со слабой типизацией? Ну-ну.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238441
2adb Хорошо: с сильной динамической типизацией. Убогости Java как языка это всё равно не отменяет. На мой вкус, разумеется. :)

К тому же, манера сводить всё к одному базовому Object... ну да... ну да...
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238457
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 adb

К сведению поклонников Java - это язык с крайне низкой степенью типизации. Java-библиотеки сводят свои программы к оперирования над Object, что не есть очень быстро, т.к. динамические преобразования типов во время исполнения тоже чего-то да стоят (в доказательство своих слов могу отослать к исходникам Java VM: http://www.kaffe.org )

С 1997-го (поправьте, ели ошибаюсь) в С++ утверждена конструкция dynamic_cast (хотя реально использовалась гораздо раньше), которая динамически приводит типы не хуже, чем это делает Java. Конструкция typeid() позволяет узнать имя типа и сравнивать типы, так что, все это у нас есть.

Когда говорят, что C++ - это язык с сильной типизацией, то имеют ввиду, что это язык с сильной статической типизацией, позволяющий еще на этапе компиляции отлавливать массу ситуаций, которые Java-программисты отлавливают при отладке.

Более того, частое использование динамического приведения типа - это признак дурного тона для С++ программы. Если есть иерархия/семейство классов, требующие взаимного приведения, предпочитаю в этом случае в один из базовых классов включать виртуальные функции, типа:
Код: plaintext
1.
virtual Control* ToControl() { throw ConversionError(); };
virtual DataHolder* ToDataHolder() { throw ConversionError(); }

а в наследниках их переопределять, причем делаю я это лишь однократно, в шаблоне, напр.:
Код: plaintext
1.
2.
3.
template<class T, class Base> class DataControlImpl: public Base {
    Control* ToControl() { return static_cast<Control*>(static_cast<T*>(this)); }
    DataHolder* ToDataHolder() { return static_cast<DataHolder*>(static_cast<T*>(this)); }
}

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

2 WolfHound, 2 JibSkeart
Когда я говорил о применении шаблонов в своих программах, я не имел ввиду применение не только лишь STL или Boost , это само собой. :)
Я говорю о широком применении шаблонов как способа разработки, т.е. наряду с классами необходимо разрабатывать свои шаблоны под прикладную область в рамках своего проекта. Это дает массу преимуществ. Необходимость писать и отлаживать код шаблона лишь однажды - одно из них.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238476
WolfHound
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 vdimas Ты же не знаешь насколько я применяю шаблоны так?...
А что касается dynamic_cast то Геннадию Васильеву и не только от меня на www.rsdn.ru уже досталось... Надоело повторять что иногда он незаменим.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238512
2 WolfHound

Ну, не путай частое приведение типов и " иногда незаменим". Я, например, всегда обходился без dynamic_cast<>. В плагинных архитектурах, кстати, тоже. В Java же (и не только) и его скриптовых клонах, к сожалению, приведение типов от базового к частному - в порядке вещей (а как иначе добиться общности тех же банальных контейнеров?), что и приводит в конечном итоге ко всем специфическим для данного подхода последствиям - ненадёжности и тормознутости.

А что до этого:

А что касается dynamic_cast то Геннадию Васильеву и не только от меня на www.rsdn.ru уже досталось... Надоело повторять что иногда он незаменим.

то какой смысл доказывать что-то оппонентам, которые в упор не желают видеть очевидных вещей? Вот я и почти прекратил дискуссию. А факт признания своей неправоты в конкретном случае ещё только собираюсь дополнить обобщающими выводами. ;)

Кстати, по крайней мере продолжаю настаивать на том, что активное применение dynamic_cast<> на C++ (как и любого другого способа runtime- анализа структуры программы) приводит к снижению надёжности и эффективности работы програмы или, как минимум, к её усложнению, а следовательно, желательно, чтобы таковое было исключено.

Да, справедливости ради упомяну, что для Java тоже появились шаблоны. Только вот атомарные типы в качестве аргументов не поддерживаются, что есть весьма досадно.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238551
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2vdimas: ох, ну и идеалист же ты.

На самом деле C#/Java - они та может и не выразительней, и множественного наследования с шаблонами в них нет - но отличаются они не этим - они отличаются наличием/отсутсвием среды выполнения - и только благодаря этому они могут похоронить C++ - если не появится поставщик который добавит ее и в него. Если, например, та же MS - продолжит поддержку managed C++ - то у него есть будущее - иначе....
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238552
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к стати - generic programming - оно только у Степанова без проблем!
В том виде в котором оно реализовано в C++ - с ни куча проблем
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238611
WolfHound
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Геннадий Васильев
Блин ну и упертый же ты...
1)Тормоза
При создании объекта который сам посебе весит насколько килов, происходит связь с базой данных и заполнение полей из базы... Короче рядом с этим затрыты на dynamic_cast не видимы даже под микроскопом.

2)Снижение надежности
Да ну ты брось фигня какая. 99% программы построено на статической типизации, а оставшийся пороцент будет громко материться при попытки поставить термометер в место уровнемера или математику для другого уровнемера.

3)Сложность
Вот это совсем бред. После введения динамической типизации размер кода уменьшился в разы. Длл может экспортировать кучу классов
Код: plaintext
1.
2.
3.
4.
5.
DLL_EXPORT_MAP_BEGIN()
	DLL_EXPORT_SINGLETON_CLASS(C_Manager_BDSensor)
	DLL_EXPORT_CLASS(C_BDSensorLM)
	DLL_EXPORT_CLASS(C_BDSystemLM)
DLL_EXPORT_MAP_END()

Надеюсь понятно что надо сделать чтобы добавить новый класс...

Короче не неси чушь типа того что гора кода которой может и не быть повысит надежность и понизит сложность системы. Ибо чем больше кода тем больше ошибок и тем больше сложность. Что касается производитнльности то пара наносекунд при инициализации ни от чего не спасут.

Еще MaximE пытался доказавать что RTTI сосет но ему хватило пары постов чтобы понять что он не прав. Чтож ты такой упертый то?
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238687
2 WolfHound

Ну ты прежде чем меня в упёртости обвинять, постинг-то прочти внимательно:

ГВ> ...продолжаю настаивать на том, что а-к-т-и-в-н-о-е применение...

Иными словами, я явно не твой "1%" имею ввиду. :) 1%, возможно, и не повредит сильно при достойном контроле. :))

Ну, опровергать дальнейшее, согласись, уже не имеет смысла.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238716
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 all

2 all

интервью с "родителем"

Наиболее интересна - вторая половина интервью.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238750
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 WolfHound

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class ObjectBase {
public:
	template<class T> T* QueryType() {
		T* tmp=NULL;
		if (QueryType(__uuidof(T), tmp)) 
			return tmp;
		throw ConversionError();
	}

protected:
	virtual bool QueryType(const IID& iid, void**) { return false;}
};

Пример на "скорую" руку.
__uuidof работает для любых классов и структур.
для не VC++ компиляторов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#define __uuidof(x) __guidof<x>()

template<class _Ty> const GUID& __guidof(void)
{
	// no default implementation, so generate compile-time error
	// You need define __guidof() inline function for your interfaces been used.
	return void;	
}

#define DEF_IID(x)	 template<> const GUID& __guidof<x>(void) { return IID_##x; }
#define DEF_CLSID(x) template<> const GUID& __guidof<x>(void) { return CLSID_##x; }
#define DEF_GUID(x) template<> const GUID& __guidof<x>(void) { return GUID_##x; }
#define DEF_LIBID(x) template<> const GUID& __guidof<x>(void) { return LIBID_##x; }

DEF_IID(IUnknown)
DEF_IID(IDispatch)


А вообще можно придумать полно чего.
И еще, когда в проект построен так, что в нем много маленьких классов, то выключение RTTI при компиляции уменьшает размер кода раза в два.

Давайте не будем спорить - можно обойтись или нельзя без dynamic_cast. Я в свое время 4 года писал вообще на С, и ничего. Так что обойтись можно. Но кто хочет, пусть на здоровье пользуются.

Но лично мне, увеличивать в два раза размер программы из 3-5 мест, где нужно динамическое приведение типа, неохота. Лучше я потрачу лишние 15 мин на имплементацию технологии типа QueryType.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32238998
WolfHound
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 vdimas
У меня такой ощущение что меня опять недооценивают :(((
Тебя просветить во что выльется этот твой QueryType или поверишь на слово что гемороя будет много?

К стати существуют упаковщики ехешников... А RTTI и шаблонные разбухания очень не плохо жмутся. К томуже обычно программы поставляются в виде инстольника который всеравно все пакует, а если учесть что сейчас винты мереють десятками гигабайт....
Вобщем отказ от RTTI не стоит того гемороя.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239132
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот если бы ссылки на литературку соответсвующюю кинули
было бы вообще замечательно ...

потому что для меня это почти темный лес ,
хоть и видел неоднократно .
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239207
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что RTII?
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239221
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Run Time Type Information (RTTI) - фича, позволяющая получать информацию о типе объекта во время выполнения программы
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239276
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2funikovyuri
Мне ?

я имел ввиду по MFC ,STL литературу
книжек у нас в далекой галактике таких не найти :(
и еще ATL но енто хочу попозже изучать ...
в COM технологи все вьехать толком немогу .
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239324
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не заморачивайся - все они мертвы...
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239350
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всмусле ?
кто мертвы зачем мертвы ?
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239527
WolfHound
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MFC скорее мертв чем жив. Теперь форточки модно на WTL писать
ATL живее всех живых.
STL будет жить пока жив С++, а помирать он и не собирается.
Почитать можно статьи на RSDN
Также полезно будет почитать описания книг.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239537
2 JibSekart
2 funikovyuri

Да никто не мёртв, все живы. :)

А STL вкупе с boost ещё о-о-очень - о-о-очень долго никуда не денутся.

2 WolfHound

У меня такой ощущение что меня опять недооценивают :(((

Не кипятись. Ради единичных случае использования RTTI вполне можно обойтись подходом, изложенным vdimas, правда, ИМХО, с небольшим усложнением для поддержки распознавания: нужно добавить что-то вроде QueryInterface и аккумулятор указателей на реализованные интерфейсы в виртуальном базовом классе. Можно будет их даже "на ходу" включать/отключать, если очень захочется.

2 vdimas

Страуструп не учитывает, однако, массовой деквалификации и "манагёризации" программистского сообщества, что неудивительно. А кроме того, "война платформ", которая одно время велась с открытым использованием C++ (библиотеки) сейчас ведётся со скрытым его использованием - те же Java и .Net как ты думаешь, на чём написаны? Ага, на нём самом. Вернее - Java, по-моему, в HP-шной реализации сделана на C++. Sun/Java вообще вся на plain-C.

offtopic

Мне вот очень интересно, кто же будет третьим игроком в противостоянии .Net - Java? Должен же появиться.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239729
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А третьим игроком будут макросредства, типа MS Access, PB, Lotus Notes, развитые до голосового ввода бизнез-рулз. :)

Или докажем что то-то могём, или вымрем как динозавры.

.NET тоже на C++ написана, микрософт исходники вывалила, можно полюбоваться. Гарбадж-коллектор оттуда - зело серьезная фишка. Интересно, его можно юзать вне .NET? :)
Он там стек прочесывает на предмет поиска переменных в стеке, т.е. там нет счетчика ссылок на объект (обычно). Я насчитал 4 способа уборки мусора, когда просматривал. Кстати - он объекты в памяти двигает! Прикол? И все ссылки сохраняют целостность. Думаю эту фишку вне микрософт писали, уж больно академическая...

Насчет MFC - я тут того, либу объектную писал, с 0-ля. Типа эксперименты. Быстродействие вышло гораздо выше, чем у ATL/MFC. И код маленький получается. Нинавижу обе технологии - наелся. Тупо и то и другое. И WTL не сильно сглаживает впечатление. Надо что-то типа System.Windows.Forms по стилю и принципам. MC++ не предлагать! :)

Кто хочет поучаствовать в разработке GUI-либы для Win32 на C++?
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239744
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2vdimas: а чем тебе MC++ не нравится?( без шуток - мне действительно интересно )
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239941
alexey_1979
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2vdimas: не пытайся изобрести велосипед.
Потеряешь год-два просто так. Лучше изучи что-нибудь стоящее (тот-же WTL).
Рукоблудных GUI библиотек - море. На RSDN есть, по крайней мере, две. Так что эта идея не оригинальна.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239955
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, когда говорю про MC++ то имею ввиду __gc и __value классы. К этим классам неприменимо ничего интересного из C++, на них действуют такие же ограничения, как на классы C#. Можно прочитать отличия MC++ от С++ в MSDN.

напр.
1. __gc классы можно наследовать только от __gc классов
2. Множественное наследование позволительно только в виде множественного наследования __interface.
3. забыдь про шаблонные классы и функции.
4. вместо статического приведения типов используй динамический dinamic_cast<>(), при той же сигнатуре он работает по-другому для .NET классов, хотя его смысл остается прежним.
5. __gc классы можно создавать только по new, __value классы создавать по new бесполезно.

Я бы использовал MC++ как "связку" c .NET или wrapper, т.к. MC++ класс все же позволяет хранить обычные (не .NET) типы. Т.е. твой чистый С++ класс может быть мембером __gc класса.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32239992
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2vdimas:

Сейчас рулит идея, что ООП себя не оправдало в смысле повторного использования кода и в данный момент модно говорить о компонентном подходе. А в этой области C++ никаких средств не предоставляет - т.е. развивается не адекватно требованиям. С другой стороны MS и SUN - которые предоставляют развитую инфраструктуру/среду выполнения и динамично развивающиеся языки/средства разработки. Никто никогда не говорил о слобой выразительности C++ - говорили о другом. В частности о его сложности и противоречивости.

Оказалось что сам язык сейчас значит далеко не все. Т.е ты же сам знаешь что если сказать что пишешь на C++ - обязательно спросят на чем именно - т.е. среда разработки/выполнения, подходы и т.д.

Насчет MC++ - все верно! Остается надеятся, что MS не бросит 1.5 млн разработчиков и наконец обеспечит полную поддержку C++ в CLR. И в принципе работы в этом нарпавлении вроде ведутся - например в VS С++ 2003 было много чего добавлено( в частности partial templates и дизайнер Win Forms ). Если бы они добавили еще и поддержку templates и множественного наследования в CLR !!!
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32240150
2 funikovyuri

Если бы они добавили еще и поддержку templates и множественного наследования в CLR !!!

МН в .Net скорее всего никогда не будет, очень много придётся ломать, да и Smalltalk-подобной концепции абстрагирования это очень противоречит.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32240207
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Геннадий Васильев: насчет множественного наследования - не знаю и врать не буду. Но вот добовить шаблоны они почти официально обещали
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32240674
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 alexey_1979

Желание "рукоблудить" пришло давно, по мере изучения внутренних принципов работы MFC/ATL/WTL.

На большинство приходящих в обычной работе собощений Windows, в этих библиотеках происходит следующее:
1. reflection всех Notifications
2. PretranslateMessage вдоль по всей иерархии окон.
3. Поиск объекта в MAP-ах по хендлеру.
4. линейное "прочесывание" message maps классов в ответ на КАЖДОЕ ПРИХОДЯЩЕЕ СООБЩЕНИЕ.

В моей либе среднее время обработки сообщения примерно на порядок меньше.

Да, очень много материала из ATL и WTL можно использовать вне проектов одноименных типов. (всякие EditImpl + тонна вспомогательных полезных классов и утилит)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32242892
Дарней
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не нужно еще забывать про такую вещь, как TrollTech QT.
Хотя я почти уверен, что большинство из Java и C# обожателей про это даже не слышали.
Очень даже неплохая библиотека классов (много лучше MFC), плюс - многоплатформенность, отражение (!!), визуальный редактор форм.
Но цена!!!! :(((
Правда, есть бесплатная некоммерческая версия - но для Windows не очень свежая :(
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32244185
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Vdimas
я бы рад поучавтсвовать в создании гуи либы, но...
время маловата, кое-что начал писать для себя, но потом подумал, может взять существующие...
амулет тот же или гтк или кутэ... желательно чтоб кросс-платформенность присутствовала...
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245007
Yossarian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возражения :

1. Все "в пользу" имеют ограниченную область применения.
Например, сборка мусора в Java иногда полезна, иногда вредна. Кому не приходилось сидеть и ждать, пока runtime не закончит сей процесс.
Хуже библиотек чем в Java я вообще не видел. итп.

2.
> Для С++ можно использовать технологию COM для аналогичных целей.
Для каких ? Для сборки мусора ? Здесь что-то не так.
> Какой процент классов в реальном приложении на Java и C# использует reflection
Какая разница, какой процент ? Это вопрос проектирования.
>Язык Java не люблю до сих пор,
может быть в этом дело ?
>Самый-пресамый интересный момент.
Действительно, интересный. Фактически автор утверждает, что на С++
все пишут неправильно, кроме самого автора. Я не спорю, возможно это
даже верно, но это ни в коем случае не является аргументом ЗА.
Может быть вопрос поставить так : если все пишут неправильно, может
что-то не так с языком ? (а что не так - в Java есть общий предок для всех
объектов, а в С++ нет, отсюда описанная проблема)

> Языки типа Java и C# изначально по своим возможностям являются подмножествами языка С++
Утверждать это - само по себе неграмотно. В строгом смысле слова "подмножество языка" это когда мы можем скомпилировать программу на подмножестве компилятором для надмножества, возможно с косметическими изменениями.

>При желании, и наличии единомышленников, можно попытаться собрать некий framework, на основе этого самого материала, вместо того, чтобы каждый раз писать новый. У самого есть масса наработок, которые надо бы классифицировать, сделать легкий рефакторинг и (я надеюсь, с удовольствием) использовать.
>Кто за - поднимите руки!

Я - за.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245020
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто может что сказать

на VC++ оптимальнее код получается ?
чем на BC++ ??

проверять самому неохота ...
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245182
alexey_1979
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2vdimas:
[q]
1. reflection всех Notifications
[/q]

Оказ от этого заметно усложнит реализацию и использование.

[q]
2. PretranslateMessage вдоль по всей иерархии окон.
[/q]
Не понял?
Если тебе не нравиться, что нужно вызывать m_view.PreTranslateMessage и PreTranslateMessage CMainFrema, то как реализовать, чтобы он автоматом вызывался?
А если мне не нужен PreTranslateMessage во вью? Макрос. Опять усложнение.

[q]
3. Поиск объекта в MAP-ах по хендлеру.
[/q]
Чаво?
MAP разворачивается в большой if then else. Это самое эффективное в данной ситуации. Ты же не будешь создавать массив обработчиков на несколько тысяч элементов для того, чтобы обработать пару сообщений. Альтернатива чуть по медленее была в реализована в MFC. Но это, ИМХО, полная лажа. Тяжело и не продуктивно.

[q]
4. линейное "прочесывание" message maps классов в ответ на КАЖДОЕ
ПРИХОДЯЩЕЕ СООБЩЕНИЕ.
[/q]
См. предыдущий ответ.

Если у тебя есть конкретные предложения, милости просим в форум ATL/WTL на RSDN.
Я сам не проч заняться созданием более продуманного фрейморка для GUI аплитух, но только
1. После выхода wtl7.1
2. После изучения и выявления недостатков всех существующих аналогов.

Твой пост, уж прости, на подробный анализ, походит очень отдаленно.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245351
2 Yossarian

Может быть вопрос поставить так : если все пишут неправильно, может
что-то не так с языком ? (а что не так - в Java есть общий предок для всех
объектов, а в С++ нет, отсюда описанная проблема)

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

Так что, увы, на C++ действительно часто и много пишут неправильно. Порой ещё и агрессивно защищая достаточно примитивный стиль и прочее.

И ещё. То, что все не могут в чём-то разобраться - это их собственные проблемы, а не того конкретного артефакта, в котором они не могут разобраться. ИМХО, из этой простой посылки и следует исходить. :) Знаешь, порой действительно оказывается, что все ошибаются.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245483
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 alexey_1979

Меня можно смело считать еретиком, потому как:

1. reflection всех Notifications
Оказ от этого заметно усложнит реализацию и использование.
А я порой не использую встроенные классы окон, типа "Button", "ComboBox", "ListBox", т.к. имею с 0-ля написанные ООП-аналоги. И мне не нужен Reflection, достаточно наследования для переопределения СВОИХ СОБСТВЕННЫХ свойств или поведения.

2. PretranslateMessage вдоль по всей иерархии окон.
Не понял?
Если тебе не нравиться, что нужно вызывать m_view.PreTranslateMessage и PreTranslateMessage CMainFrema, то как реализовать, чтобы он автоматом вызывался?
В том то и дело, что не понял. НЕ ДОЛЖНО БЫТЬ НИКАКОГО PretranslateMessage вдоль по всей иерархии окон. Это как хук по смыcлу, т.е. "черный вход", т.е. слабость самой модели. В своем GUI оно мне ПРИНЦИПИАЛЬНО не нужно!

3. Поиск объекта в MAP-ах по хендлеру.
Чаво?
MAP разворачивается в большой if then else. Это самое эффективное в данной ситуации. Ты же не будешь создавать массив обработчиков на несколько тысяч элементов для того, чтобы обработать пару сообщений.
Вот пример расточительного использования возможностей языка. if-else, понимаешь...
Загляни в файлы с описанием WM_XXXX, сколько там реальных сообщений? (я спрашиваю именно про общие сообщения, всякие EM_XXXX не берем, потому как в моей модели их НЕТ). Так вот, там чуть больше 200 реально используемых сообщений.
Слушай внимательно:
В моей модели я использую всего только 3 класса окон: простой контрол, контрол-контейнер, форма. Все! Большинство сообщений (99.99% из общего приходящего потока) в своей оконной процедуре просто достают адрес объекта из самомого экземляра МОЕГО класса окна (а не из многотысячного ATL/MFC MAP-а) и переходят сразу на функцию из таблицы. Т.е. у меня примерно 200 функций-обработчиков. Очень простых функций. Каждая функция-обработчик просто вызывает виртуальную функцию объекта! Поэтому у меня нет "прочесывания" MAP-ов на предмет поиска сообщений или на предмет if-else.
Почему же мне потребовалось 3 класса окна? Все эти классы оперируют одними и теми-же процедурами, просто используют разный их набор в своем массиве указателей на функции-обработчики. Самый младший из них - "контрол" просто игнорирует приличную часть сообщений, для него не предназначенную, чтобы не вызывать лишний раз виртуальную функцию, т.е. определив всего еще 2 таблицы из 200 элементов я получил дополнительное повышение эффективности.
Разработчик может наследовать свой GUI-элемент от Control, ControlContainer и Form - классов, используя разные базовые классы для требуемого множества перехваченных сообщений.
Повторюсь - у меня все работает примерно на порядок быстрее, чем MFC/WTL.
В этих библиотеках на каждое приходящее сообщение происходит тонна всяких бесполезных вызовов, у меня - не происходит ничего (вызов одной виртуальной функции и то не всегда, см. Control, ControlContainer, Form).

Если у тебя есть конкретные предложения, милости просим в форум ATL/WTL на RSDN.
ok. Только насколько это приятно - обсуждение тонкостей - если немного тошнит от самой концепции. Правда, в своих коммерчесских разработках я пока использую WTL или MFC, потому как мой фреймворк требует разработки аналогов всех контролов (!!!).
Однако, посмотрите что твориться с C#! Не успел толком выйти, как под него народ уже написал тысячи и тысячи контролов. Почему? Да потому, что там нужно просто отнаследоваться и переопределить несколько виртуальных функций - это на порядок проще, а главное - на порядок типобезопаснее, чем MESSAGE_MAP-ы. В моей либе - та же самая ситуация. Написать новый контрол так же легко, как на C#. Поэтому и приглашаю единомышленников.

Программируя на MFC/WTL я изучил WinAPI практически наизусть. А не пошел бы он... Очень смешно - программируешь на ООП-библиотеке, при этом думаешь понятиями OS API.
У меня сообщения Windows "спрятаны" в самых базовых классах и о них можно забыть - это тонкости конкретной платформы.

Я сам не проч заняться созданием более продуманного фрейморка для GUI аплитух, но только
1. После выхода wtl7.1
2. После изучения и выявления недостатков всех существующих аналогов.
Изучал QT и WxWindows.
QT - весьма оторвана от чего бы то ни было, в то время как моя либа обладает общей событийной моделью для всех классов, а не только для GUI. Т.е. у меня событие (не сообщение!) может получить экземпляр какого угодно класса (как в C#) и даже просто CallBack - функция (как только в С++)

WxWindows - сильно, весьма... Но хочется сильнее :)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245485
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Фурников Юрий

Сейчас рулит идея, что ООП себя не оправдало в смысле повторного использования кода и в данный момент модно говорить о компонентном подходе.
Если под компонентным подходом ты подразумеваешь открытые "чисто"-виртуальные интерфейсы, т.е. всего лишь "побочный" эффект множественного наследования. В .NET и Java, наряду с открытыми "голыми" интерфейсами так же рулит идея открытых базовых классов - это все одного поля ягоды...

Никто никогда не говорил о слобой выразительности C++ - говорили о другом. В частности о его сложности и противоречивости.
Сложность - да. Но без некоторой сложности не добиться некоторой выразительности. Слабый аргумент, особенно в эпоху насыщения рынка программистами. Кто не тянет - нафиг из области.

Оказалось что сам язык сейчас значит далеко не все. Т.е ты же сам знаешь что если сказать что пишешь на C++ - обязательно спросят на чем именно - т.е. среда разработки/выполнения, подходы и т.д.
К счастью компиляторы "движуться" на встречу друг-другу, вернее навстречу стандартному С++. Свои программы я обычно компилю на VC.NET и GCC для пущей переносимости.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245487
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Yossarian

> Для С++ можно использовать технологию COM для аналогичных целей.
Для каких ? Для сборки мусора ? Здесь что-то не так. >
Все так, и то и другое - подходы к контролю времени жизни объектов. И там и там используется общий смысл - объект уничтожается тогда, когда на него никто больше не ссылается.

>Язык Java не люблю до сих пор,
может быть в этом дело ?
А может, все же, яйцо раньше курицы... :)

>Самый-пресамый интересный момент.
Действительно, интересный. Фактически автор утверждает, что на С++
все пишут неправильно, кроме самого автора.
Нет. В том же посте ниже я приводил причину большого размера программ - это недостаточность существующих библиотек. При ПРОЧИХ РАВНЫХ условия программа на С++ обычно никак не меньше аналогов на Java или C#.

(а что не так - в Java есть общий предок для всех
объектов, а в С++ нет, отсюда описанная проблема)
Попал в точку! Почти...
Для всех объектов мне и не нужен один базовый класс, а вот для всех Exception - крайне необходим! Я бы запретил выброс Exception произвольного типа на уровне языка (фанаты С++ - не бейте), а оставил бы только унаследованные от некоторого одного класса (компилятор -> конкретный класс - не очень красивая связка, однако typeid использует тот же подход)

> Языки типа Java и C# изначально по своим возможностям являются подмножествами языка С++
Утверждать это - само по себе неграмотно. В строгом смысле слова "подмножество языка" это когда мы можем скомпилировать программу на подмножестве компилятором для надмножества, возможно с косметическими изменениями.
Именно так. Все вполне грамотно. (если, опять же, не иметь ввиду Reflection)

Я - за.
:)) угу, т.е. С++ все-равно умирать не собирается! (а иначе на чем будут .NET - фреймворки писать?)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245495
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в предыдущем посте читать:

>Самый-пресамый интересный момент. Действительно, интересный. Фактически автор утверждает, что на С++
все пишут неправильно, кроме самого автора.
Нет. В том же посте ниже я приводил причину большого размера программ - это недостаточность существующих библиотек. При ПРОЧИХ РАВНЫХ условия программа на С++ обычно никак не больше аналогов на Java или C#.

Да и с мнением Геннадия Васильева согласен - многие пишут так себе. В основном это то поколение, которое выросло на всяких Wizard-ах. (хотя, бывают исключения, у меня есть знакомый парень, 22 года, удивительно правильно мыслит и кодит).

www.codeproject.com - полно материала для подобного исследования. Порой там встречаются очень неплохие вещи, но большей частью - всякая ерунда. Материалы на сайте позволяют оценить средний уровень современного программиста.

Это может и хорошо, что есть Java и C#. Кому С++ кажется слишком сложным - просим туда. Не представляю грамотного С++-ника, который бы полностью разменялся на Java или C#. Я вот практически в совершенстве VB и VBScript знаю - писал несколько гибридных проектов, "стыковался" с ними при помощи COM. И что с того? VB-рулез?
Теперь активно изучаю .NET и C#, но "дно" уже видно. После изучения исходников .NET-а, и двоичного формата .NET-объектов, для меня вообще никаких интересных моментов относительно .NET не осталось. Мне откровенно импонирует язык C#, там где я раньше использовал VB, теперь буду использовать только его (учитывая беспланую VSA-engine). Но это все рассматриваю только как неплохое дополнение, которое очень экономит время в некоторых случаях. Просто полно ситуаций, когда на Java или C# поставленную задачу НЕВОЗМОЖНО РЕШИТЬ. Потому от С++ никуда не деться.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245504
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любителям Delphi:\r
\r
Обратите внимание, народ 2 недели пишет DBImage - компонент (6-й пост и ответ тигра в 11-м)\r
\r
/topic/45348\r
\r
Очень показательно.\r
На с++ это примерно за пол-дня делается, если не за 2 часа...
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245553
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте уж мухи отдельно, котлеты отдельно.
Проблема с DBImage - проблема VCL, а не Delphi в целом.
Можно ту же VCL на C++ перелопатить, но лучше от этого она не станет.
Реально проблема лишь в том, что методы записи/чтения изображения в базу не виртуальны, сиречь переопределению не подлежат. Если бы было одно лишнее слово в определении : virtual, то и постов по этому поводу многочисленных повсюду бы не было... А так, в сухом остатке, примерно 60% времени ушло на копание исходников VCL, 25% на кодирование пробных непрошедших тестирование решений, 15% на создание итогового решения.
А вообще-то, просто абсолютное большинство пользователей Delphi не заморачивается таким компонентом, а просто делает Copy+Paste кусков внешнего кода, реализующих запись/чтение в базу. Это делается гораздо быстрее, примерно минут за 15 написание первого куска, а потом по 1 мин. на Ctrl-C, Ctrl-V :-) Это уж мы, привыкшие к приличной архитектуре, объектному подходу и т.д. извращаемся... поскольку проект позволяет...
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245557
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтобы с++ не умер, нужно на нем программировать :-)

народ, посоветуйеи кроссплатворменную библиотек классов для гуи, пожалуйста...

хочу писать переносимые приложения :-) хотя бы вин32-Хвин

начал писать сам, понял что геморно, хотя вполне реально...
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245620
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 alex_k

WxWindows, в и-нете с пол-пинка найдешь.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245623
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел, спасибо :-)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245639
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Vdimas

что-то больно громоздкая вешь эта wxWindows
45 мег исходники, которые нужно сначала скомпилить... в общем я скомпилить не смог :-)

по прощще ничего нету?
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245656
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На чем компилишь?

Лучше потрать пару дней на изучение и компиляцию - это все вознаградится. Там не только GUI-либа. Еще тонна полезного материала.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245670
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну... потрачу, наверное...

я скачал dev-cpp прикрутил к нему mingw, импортировал проект вижлстудии и попытался скомпилить.... миллионы варнингов и тысячи ошибок... ну и хер с ним, попробую реадми почитать :-)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245692
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to: alex_k
www.fox-toolkit.org
юзаю уже больше года.
удобнее и компактнее пока ничего не нашел, хотя перерыл кучу кросс-платформных гуи. При разработке, даже на мастдае, испроьзуются принципы X-ов (виджиты, мультипоточная обработка событий ...)
сорцы - всего 3 метра. но есть все необходимое.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245696
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ссылку...
посмотрю, пока думаю мне просто не хватает скиллов, для подобного рода работы. Если уж я скомпилить либу не могу :-)

разбираюсь...
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245720
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если под компонентным подходом ты подразумеваешь открытые "чисто"-виртуальные интерфейсы,

Под компонентным подходом я понимаю именно компонентный подход - это не только интерфейсы( точнее это не абстрактные класса ). Вообще, интерфейс получил такое широкое распространение как точка входа!
Это важная деталь - так как изначально у абстрактных классов было иное назначение

Сложность - да. Но без некоторой сложности не добиться некоторой выразительности. Слабый аргумент, особенно в эпоху насыщения рынка программистами. Кто не тянет - нафиг из области.
Ни капельки не слабый - если что-то можно сделать проще - это надо делать проще! Опять же подчеркну - я не противник C++ - как раз наоборот - но он слишком статичен - особенно в эпоху насыщения рынка

К счастью компиляторы "движуться" на встречу друг-другу, вернее навстречу стандартному С++.
Не замечал особого движения - они даже ANSI C++ по разному поддерживают - не говоря о всяких расширениях языка, присутсвующие в каждом компиляторе. Чтобы охладить оптимизм стоит пойти на www.boost.org или www.stlport.org и посмотреть таблицы совместимости этих библиотек с наиболее распространенными компиляторами - и это при том что их создатели используют только стандартный C++!
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245784
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vdimas:

Изучал QT и WxWindows.
QT - весьма оторвана от чего бы то ни было, в то время как моя либа обладает общей событийной моделью для всех классов, а не только для GUI. Т.е. у меня событие (не сообщение!) может получить экземпляр какого угодно класса (как в C#) и даже просто CallBack - функция (как только в С++)


Не совсем понял это высказывание. Поподробнее можно? В Qt, насколько мне известно, модель слот/сигнал тоже не привязана именно к GUI. Вставил в список базовых классов QObject (он не имеет отношения к GUI), пару макросов в определение и можешь определять свои слоты и сигналы (какие угодно). То что слоты и сигналы отделены от обычных методов мне кажется достоинством, зачем лишняя путаница? Хотя собственно никто не запрещает вызывать слоты как обычные методы.

На мой взгляд, недостаток Qt не в этом, а вобщей тормознутости. То же связывание сигналов и слотов. Это что-то.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245839
Yossarian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Геннадий Васильев :
Y> Может быть вопрос поставить так : если все пишут неправильно, может
Y> что-то не так с языком ? (а что не так - в Java есть общий предок для всех
Y> объектов, а в С++ нет, отсюда описанная проблема)

ГВ> Однако, если те, кто "пишет правильно" добивается хороших результатов,
ГВ> то логично ведь предположить, что те, кто их не добился - пишут неправильно

Но те, кто "пишет правильно" на Delphi, Java, OCAML, FORTRANe, тоже добиваются
хороших результатов. Следовательно, если соотношение "плохих"/"хороших"
программистов не в пользу С++, можно сделать вывод, что этот язык
не поощряет хорошие практики программирования.
Я бы не настаивал на безусловной справедливости этого вывода, но обратное
совершенно точно неверно.

2vdimas

>>> Для С++ можно использовать технологию COM для аналогичных целей.
>>Для каких ? Для сборки мусора ? Здесь что-то не так.
>Все так, и то и другое - подходы к контролю времени жизни объектов. И там и там используется общий смысл - объект уничтожается тогда, когда на него никто больше не ссылается

М-да... я даже не знаю, что сказать. Это два совершенно разных алгоритма,
даже скажем - два совершенно разных подхода к организации памяти.
И говорить что это одно и то же это или передергивание или какое-то
чудовищное ламерство. Подход COM мало отличается от общего подхода
C++ (насколько я помню, у Страуструпа в книге есть пример класса с подсчетом
ссылок). Тогда как сборка мусора - это механизм языка, причем его невозможно
реализовать в С++ на уровне кода в общем виде.

>>> Языки типа Java и C# изначально по своим возможностям являются подмножествами языка С++
>>Утверждать это - само по себе неграмотно. В строгом смысле слова "подмножество языка" это когда мы можем скомпилировать программу на подмножестве компилятором для надмножества, возможно с косметическими изменениями.
>Именно так. Все вполне грамотно. (если, опять же, не иметь ввиду Reflection)
Скомпилируйте любую реальную программу на Java любым компилятором С++.
Сообщите, пожалуйста о результатах. Я настаиваю на том, чтобы Вы это сделали.

Гг. ! Я не против С++, я не за С++. Это один из языков, не лучший и не худший;
его надо знать любому серьезному программисту. Также я считаю очень правильной
идею создания наборов "правильных" библиотек для С++.
Но я категорически против передергивания, подмены понятий и всяческого
вранья как "за" так и "против". Поймите, рассуждая на уровне "круто-не круто"
или смешивая подсчет ссылок со сборкой мусора вы никогда не освоите
программирование. Компьютеру глубоко пофиг ваши переживания и эмоции.
Надо объективно подходить к вопросу.
Delphi лучше C++ тем-то и тем-то.
C++ лучше Delphi тем-то и тем-то.
А рассуждения о том, что одни отличия "несущественны", а другие
"доказывают превосходство" давайте оставим ламерам.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245932
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Yossarian

Боже, до чего буквальный товарищ... Будем жевать:
>>> Для С++ можно использовать технологию COM для аналогичных целей.
>>Для каких ? Для сборки мусора ? Здесь что-то не так.
>Все так, и то и другое - подходы к контролю времени жизни объектов. И там и там используется общий смысл - объект уничтожается тогда, когда на него никто больше не ссылается

М-да... я даже не знаю, что сказать. Это два совершенно разных алгоритма,
даже скажем - два совершенно разных подхода к организации памяти.
И говорить что это одно и то же это или передергивание или какое-то
чудовищное ламерство. Подход COM мало отличается от общего подхода
C++ (насколько я помню, у Страуструпа в книге есть пример класса с подсчетом
ссылок). Тогда как сборка мусора - это механизм языка, причем его невозможно реализовать в С++ на уровне кода в общем виде.
Во-первых, я именно и сказал, что используются разные подходы. Но не о подходах речь, а о самой возможности автоматизировать процесс контроля за временем жизни объектов. Повторить?
Какой там нафиг один пример у Страуструпа? Существует масса способов контроля за временем жизни. В том числе и точно такой, какой использован в Java (гарбэдж-коллектор). Слово smart-pointer тебе что-нибудь говорит? А способ ссылаться на объектны по хендлерам тебе известен? Если да, то как понимать твое скоропостижное заявление, что его невозможно реализовать в С++ на уровне кода в общем виде. Не только можно, но и НУЖНО, если хочешь добиться лаконичности своих программ и не желаешь иметь утечки памяти.

Скомпилируйте любую реальную программу на Java любым компилятором С++. Сообщите, пожалуйста о результатах. Я настаиваю на том, чтобы Вы это сделали.
Мы сегодня плохо спали? Или плохо читали? Можно на С++ писать программу один-в-один (так, кажется, было сказано). Т.е. задаем некое правило ОДНОЗНАЧНОГО отображения типов и конструкций языков, и переводим! Очень даже легко (про рефлекшн я уже оговаривался).
Объектные переменные в Java - суть ссылки. Все интерфейсы и классы по умолчанию унаследованы от Object. Вот и делаем в С++ так же:
(из моей реальной программы)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
interface Reader : public virtual System::Object {
    DEF_OBJECT(Reader)
    ...
    void Read(int& i)= 0 ;
};

class BinaryReader : public Reader {
    DEF_OBJECT(BinaryReader)
    ...
};

// где-то в программе

{
    Reader::var=new BinaryReader(memStream);
}


DEF_OBJECT - это макрос, который определяет типы - объектные ссылки.
Заметь, new стоит, а delete отсутствует.

Это один из языков, не лучший и не худший; его надо знать любому серьезному программисту.
Ну писал я одно время на Delphi, потому как пока не вышел VC 5.0 работать толком было не на чем. Этот дельфи по возможностям языка сейчас серьезно отстает даже от VB.NET. Так что, о чем речь?

Поймите, рассуждая на уровне "круто-не круто" или смешивая подсчет ссылок со сборкой мусора вы никогда не освоите программирование.
Да уж, глубокомысленно... А не приходило в голову узнать, как этот гарбэдж-коллектор работает, чтобы потом чепуху с умным видом не нести? И сколько там подходов используется? Кстати, в одной из реализаций Java VM используется именно грубый подсчет ссылок!!! В более-менее серьезных - обычно используется несколько способов. Гарбадж-коллектор от .NET - вообще чудо современной техники.
Никто ничего не путает. С помощью специальных ссылочных типов (смарт-поинтеров), я смогу реализовать ЛЮБОЙ способ контроля за временем жизни. (например, использовать .NET-овский). Выбирай на вкус.
И не пугай население. В С++ действительно можно практически все.
А вот эти строки:
ГВ> Однако, если те, кто "пишет правильно" добивается хороших результатов, то логично ведь предположить, что те, кто их не добился - пишут неправильно

пожалуй, повторю.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32245990
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 funikovyuri

Под компонентным подходом я понимаю именно компонентный подход - это не только интерфейсы( точнее это не абстрактные класса ). Вообще, интерфейс получил такое широкое распространение как точка входа!
Это важная деталь - так как изначально у абстрактных классов было иное назначение

Так. С этого места, поподробнее, если можно... Какое иное назначение?
Идея компонентов - COM объектов - выросла из чистого C++-ного абстрактного базового класса. Для того, чтобы это действительно стало компонентами, существует OLE/OLE2, набор типов данных интерфейсов, протоколов и поддерживающего фреймворка.

Компоненты Java Been - вообще историческое недоразумение. Для того, чтобы свойство объекта стало "компонентным", оно должно "правильно" называться. Умора.

Опять же подчеркну - я не противник C++ - как раз наоборот - но он слишком статичен - особенно в эпоху насыщения рынка
Java вышел где-то в 1992 (или даже раньше). С тех пор спецификация языка практически не претерпела изменений. С++ с тех пор изменился до неузнаваемости (правда, в лучшую сторону). И продолжает развиваться. Это один из наиболее динамично развивающихся языков.

К счастью компиляторы "движуться" на встречу друг-другу, вернее навстречу стандартному С++.
Не замечал особого движения - они даже ANSI C++ по разному поддерживают - не говоря о всяких расширениях языка, присутсвующие в каждом компиляторе.
Я же не сказал встретились , но ситуация с выходом VS.NET стала весьма обнадеживающей. Я компилю свои проги под VS.NET и под GCC без изменений!!! Категорически протестую против применения расширений языка! :) правда от некоторых, платформенно зависимых (типа __declspec(dllexport) ) не уйти, но эти ситуации легко изолировать макроподстановками.

Чтобы охладить оптимизм стоит пойти на www.boost.org или www.stlport.org и посмотреть таблицы совместимости этих библиотек с наиболее распространенными компиляторами - и это при том что их создатели используют только стандартный C++!

на этой странице полезно взглянуть в самый конец .

Выводы делаем сами...
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32246302
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MetaCommunications Engineering.
//boost.sourceforge.net/regression-logs/cs-win32_metacomm.html
и что видим - единственный компилятор, прошедший все тесты - VC 7.1!!!

//К стати днем раньне у Beman Dawes
http://boost.sourceforge.net/regression-logs/cs-win32.html
получились немного другие результаты

А насчет абстрактных классов... здесь нельзя спорить - но на мой взгляд вначале это был просто класс, а не уровень абстагирования
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32246858
2 Yossarian

ГВ> Однако, если те, кто "пишет правильно" добивается хороших результатов,
ГВ> то логично ведь предположить, что те, кто их не добился - пишут неправильно

Но те, кто "пишет правильно" на Delphi, Java, OCAML, FORTRANe, тоже добиваются
хороших результатов. Следовательно, если соотношение "плохих"/"хороших"
программистов не в пользу С++, можно сделать вывод, что этот язык
не поощряет хорошие практики программирования.
Я бы не настаивал на безусловной справедливости этого вывода, но обратное
совершенно точно неверно.

:) Ага, те, кто добивается хороших результатов на Java, Delphi (...) - пишут правильно на этих языках (наверное ;) ). Но ведь это никак не влияет на их (и не только их!) умение писать на C++. Весьма спорным представляется также ссылка на "...хорошие практики программирования". Что это такое? И почему факт достижния хорошего результата с использованием Delphi связывается с использованием хороших практик программирования? Рискну предположить, что этим термином обозначается некоторое структурирование кода, архитектура и т.п. Но как раз таки порог, при котором становится критичным применение "хороших практик" (и следовательно, соответвующая мозговая активность ;) ) при использовании здоровущих интегрированных сред типа Delphi отодвигается , т.е., условно говоря, можно написать хорошую программу совсем не применяя этих самых практик. А что? Затолкали в OnClickSuperButton() гору кода, чем нарушили целую гору принципов структурирования и привет: всё работает! Вместо LSP-compliant решения влепили анализ типа входного объекта (Java) и опять всё работает! Где же здесь поощрение хорошей практики? :))

Так что, ИМХО, твоё утверждение не только спорно, но ещё и безосновательно. :(
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32246902
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Геннадий Васильев

> Ага, те, кто добивается хороших результатов на Java, Delphi (...) - пишут правильно на этих языках (наверное ;) ). Но ведь это никак не влияет на их (и не только их!) умение писать на C++. Весьма спорным представляется также ссылка на "...хорошие практики программирования". Что это такое?
>Так что, ИМХО, твоё утверждение не только спорно, но ещё и безосновательно. :(

Давайте говорить о сопостовимых вещах: если сравнивать, то не Delphi с C++, а паскаль с C++. Паскаль искуственно навязывает хороший стиль программирования, он для этого и был придуман - обучать людей программировать, и последнее есть медицинский факт. За это приходится платить удобством: на C/C++ почти все можно сделать более компактно. Но если человек учился программировать на паскале (да при этом еще книжки и читал), то у него скорее всего (но не обязательно) будет то, что называется правильный стиль, в том числе и на C/C++, фортране и басике. А C/C++ хороший стиль не навязывает, но и не запрещает, он создавался из расчета на опытных людей как язык решения прикладных задач. Зато кода получается меньше чем в паскале. Отсюда не следует, что все начинавшие программировать с языка C программируют в неправильном стиле, наверное можно привести контрпримеры в обоих случаях. Но я лично не встречал ни одного хорошего прогограммиста, начинавшего только с C (а плохие встречались), в то же время знаю многих хороших специалистов, начинавших с паскаля. Хотя встречались и плохие. Т.е. умение программировать на паскале влияет на умение программировать на C/C++.

Так что утверждение Yossarian -а ИМХО абсолютно обосновано.

>"...хорошие практики программирования". Что это такое?

В качестве базового пособия по освоению хорошей практики можно предложить: Н.Вирт, Алгоритмы + Структуры Данных = Программы, Москва "МИР", 1985, 404с. Почитай, пригодится.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32246933
c127

Давайте говорить о сопостовимых вещах: если сравнивать, то не Delphi с C++, а паскаль с C++. Паскаль искуственно навязывает хороший стиль программирования, он для этого и был придуман - обучать людей программировать, и последнее есть медицинский факт.

OK, согласен, логичнее сопоставить C++ и Object Pascal. Но вот с тем, что Паскаль навязывает хороший стиль программирования я не совсем согласен. Да, по сравнению, например с С, он требует более жёсткой типизации, да, на его примере обучают структурированию реализации идей и в сущности, неплохо обучают.

Однако остаётся вопрос о средствах структурирования и об их применимости на практике. И здесь, ИМХО, ответ отнюдь не в пользу Pascal/Object Pascal. Как минимум, таких мощных средств как множественное наследование реализаций и шаблоны этот язык лишён (поравьте меня, если я ошибаюсь). Также, как лишена его и Java. Отсюда раньше или позже в реальных условиях возникает проблема эффективности процесса разработки. Я не буду утверждать, что эта проблема всегда принимает критический характер, но всё таки. Дальше, как логичное следствие, возникают нарушения хороших практик, которые сами по себе входят в "нормальную" практику. То же самое приведение типа "сверху вниз" и т.п. С другой стороны, конечно, можно и на Object Pascal не допустить подобных нарушений, например, повсеместно используя интерфейсы (или методы с модификатором abstract, сам когда-то занимался этим ещё на Turbo Pascal 5.5-7.0), но плата за это - потеря эффективности исполнения и увеличение длительности разработки. Т.е., O.Pascal/Java на самом деле при практическом использовании нередко провоцируют нарушения принципов "правильного" проектирования, поскольку опять таки нередко ставят программиста в условия, где сочетание:

а) сильной согласованности исходных текстов при их глубокой структурированности;
б) эффективности исполнения;
в) скорости разработки

становится практически недостижимым, тогда как C++ эти задачи блестяще (оговорюсь: на фоне остальных) решает. Но! Решает только при адекватном подходе к разработке, который, ИМХО, является логичным продолжением подхода, каковому обучают на примере Pascal.

Т.е. умение программировать на паскале влияет на умение программировать на C/C++.

Естественно, согласен, но только когда умение сие развивается до того, что начинает логично применять концепции C++. Развитие же в "обратном направлении", т.е., сознательный переход с C++ на O.Pascal, ИМХО, является свидетельством определённого рода деградации.

PS. За ссылку, конечно, спасибо, только я её уж лет десять как прочёл.
PPS. Вот, тоже рекомендую: Б. Лисков, Дж. Гатэг, Использование абстракций и спецификаций при разработке программ, М. Мир - 1989, 424 c. ISBN 5-03-000489-0
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32246977
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всех, у кого есть нормальный "спортивный" интерес, отсылаю к библиотеке Loki.

Поверьте, те кто пишут на С++ в большинстве своем имеют приличную практику на pascal-e (Turbo-Pascal и Delphi наверное никого стороной не обошли :) ), т.е. мы вполне адектватно можем сравнивать эти языки. А сравнивать там практически нечего. На С++ можно писать в pascal-стиле, если ничего "интересного" не использовать. И получим тогда функциональный эквивалент . А вот когда начинаешь использовать именно идиомы языка, то pascal просто остается стоять, где стоял, тогда как С++ уноситься в "заоблачные" дали. (поэт, однако...) :)

Просто всем тем, кто любит Delphi, но при этом немного разбирается в С++ советую внимательно рассмотреть библиотеку - она небольшая. Надеюсь, многим будет интересно (а многие так и просто опупеют).
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32248341
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Геннадий Васильев

>OK, согласен, логичнее сопоставить C++ и Object Pascal. Но вот с тем, что Паскаль навязывает хороший стиль программирования я не совсем согласен.

Я не очень хорошо знаю Object Pascal, по-моему паскаль сильно испортили, пытаясь подогнать под современную тогда ОО концепцию. Но чтоб на классическом (не ОО) паскале писать неправильно, нужно очень стараться. Гораздо проще и компактней писать правильно: с соблюдением структуры, объявлением правильных типов и т.д.

>Да, по сравнению, например с С, он требует более жёсткой типизации, да, на его примере обучают структурированию реализации идей и в сущности, неплохо обучают.

Некоторое взаимопонимание имеет место: знание паскаля положительно сказывается на общий уровень программиста. Такое знание является побочным эффектом обучения, просто паскаль очень подходящий для обучения общим принципам язык.

Абсолютно согласен что писать реальные программы на паскале - небольшое удовольствие, сам не люблю и не пишу. Да он и не предназначен для этого: паскаль по определению проверяет типы и потому медленный (проверки можно выключить, но это уже будет не паскаль), эти begin end задолбешься везде ставить. Потому в качестве языка для прикладной системы (дельфи) он выбран ИМХО неудачно, я бы лично предпочел C++. Но если вдуматься эти различия - только константа, ничего существенного.

Также согласен, что недостача чего-то паскале может привести к тому, что программисты начнут халтурить и нарушать принципы правильного программирования. Вопрос только в том, насколько часто это встречается. Так вот я этого не встречал ни разу, хотя вполне допускаю такую возможность.

Множественное наследование. Я никогда не сталкивался с необходимостью использования и не очень представляю, какие существенные преимущества оно дает. Существенные это те, которые перевешивают проблемы, порожденные введением в язык множественного наследования. Объясните если есть возможность.

Наболевший вопрос. У кого-нибудь есть каие-нибудь данные по сравнению C++ и C на аналогичных проектах в смысле размеров исходников, затраченного труда? То, что я знаю почему-то явно не в пользу C++. Но я специальных исследований не проводил.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32248355
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 c127

Множественное наследование. Я никогда не сталкивался с необходимостью использования и не очень представляю, какие существенные преимущества оно дает. Существенные это те, которые перевешивают проблемы, порожденные введением в язык множественного наследования. Объясните если есть возможность.
Никогда не может быть необходимости использовать какие-то определенные идиомы (т.к. любая задача решается множеством способов). Мы их можем только удачно выбирать. Правильно выбранная идиома может сэкономить трудозатраты в разы.
Все проблемы с множественным наследованием давно решены, нет таких проблем. Можно пользоваться. :))

Наболевший вопрос. У кого-нибудь есть каие-нибудь данные по сравнению C++ и C на аналогичных проектах в смысле размеров исходников, затраченного труда? То, что я знаю почему-то явно не в пользу C++. Но я специальных исследований не проводил.
Рискну предположить, что АНАЛОГИЧНЫЕ проекты на С и C++ не решают. Можно на С++ писать чисто сишный код! Почему нет. Если отключить при компиляции механизм исключений и run-time type information, то полученный двоичный код будет аналогичен написанному на С.
Если интересует вопрос, что лучше, С или С++, то его надо задавать так: Что лучше, структурный подход или ООП. В некоторых случаях (автоматные модели) структурный подход лучше! Чем мы занимаемся? Надо знать, чтобы ответить адекватно.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32249443
2 c127

Да он и не предназначен для этого: паскаль по определению проверяет типы и потому медленный (проверки можно выключить, но это уже будет не паскаль),

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

эти begin end задолбешься везде ставить.
:) ну, я думаю, по этому поводу спорить не будем. :)


Потому в качестве языка для прикладной системы (дельфи) он выбран ИМХО неудачно, я бы лично предпочел C++. Но если вдуматься эти различия - только константа, ничего существенного.

Delphi стала логичным развитием вполне себе успешного Turbo Pascal, а С++ тогда ещё не развился до нынешнего состояния.

Но собственно, речь не об этом.

Множественное наследование. Я никогда не сталкивался с необходимостью использования и не очень представляю, какие существенные преимущества оно дает. Существенные это те, которые перевешивают проблемы, порожденные введением в язык множественного наследования. Объясните если есть возможность.

Хммм... если обобщённо, то МН здорово экономит силы на реализации подмешиваемых интерфейсов. Иначе приходится писать гору дополнительного кода для связи методов, унаследованных от подмешанных интерфейсов с какими-то объектами, реализующими методы интерфейсов. Посмотри ATL - она в немалой степени построена на МН.

Иными словами, существенное преимущество МН перед одиночным наследованием в экономии сил, затрачиваемых на реализацию. Соответственно, проще отладка, тестирование и т.п.

Кстати, здесь присоединюсь к vdimas, поскольку необходимости использования МН на самом деле нет. Его всегда можно эмулировать одиночным наследованием реализации и множественным наследованием интерфейсов. Просто его использование позволяет обойтись без этой эмуляции. :) Из недостатков можно отметить то, что использование МН требует более вдумчивого проектирования.

Наболевший вопрос. У кого-нибудь есть каие-нибудь данные по сравнению C++ и C на аналогичных проектах в смысле размеров исходников, затраченного труда? То, что я знаю почему-то явно не в пользу C++. Но я специальных исследований не проводил.

Поищи в сети, где-то есть. На RSDN (www.rsdn.ru) в форуме, кажется "философия программироваия" проскакивало что-то из этой серии.

От себя рискну предположить, что скорее всего ты и будешь обнаруживать сравнения совсем не в пользу C++ по целому ряду причин. Смотри, если кто-то пишет на C++, то аналогичную программу он скорее всего не будет писать на чистом C, т.е., ему объективную оценку просто не из чего получать. Обратный случай: некий C-шный продукт переписывается "по-объектному". Следовательно, скорее всего, в нём блокируются какие-то трюки C (вроде использования void*), добавляются новые уровни абстракции и т.п., т.е., это уже не тот же самый продукт . Ну и кроме того, когда осваивают C++, на первых порах разработчики клепают горы ошибок в проектировании. Результат получается не ахти... Вот тебе и отрицательное сравнение. Третий вариант - когда в последнем случае среди C-шников попадается хороший C++-ник. Вот здесь есть основания для получения сравнения "в пользу" C++. Ну вот. И как ты думаешь, каких случаев (и следовательно - фактов оценок ) больше? ;)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32249470
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Геннадий Васильев

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

Нет, например в случае объявления:
type t=1..333;
var y: t;
тип должен проверяться в случае каждого присваивания вида y:=что_то;. Есть и более сложные случаи т.е. тормозит сильно. У классического паскаля очень строго с типами, целая наука.

>Delphi стала логичным развитием вполне себе успешного Turbo Pascal, а С++ тогда ещё не развился до нынешнего состояния

В то время (начало девяностых) C++ был уже на уровне, по крайней мере на уровне тогдашнего объектного паскаля. Не было в C++ темплейтов, какого-нибудь множественного наследование, так их objectpascal и сейчас нет и никому они в дельфях не нужны. А потом, как долго все ждали сишного варианта, а когда через несколько лет вышел CBuilder все вдруг стали его сильно ругать, так до сих пор и ругают. Хотя казалось бы, с точки зрения производителя нет никакой разницы, какой язык использовать, и тот и другой компилятор у борланда был. Это еще один аргумент против C++.

>Кстати, здесь присоединюсь к vdimas, поскольку необходимости использования МН на самом деле нет. Его всегда можно эмулировать одиночным наследованием реализации и множественным наследованием интерфейсов. Просто его использование позволяет обойтись без этой эмуляции. :)

Так и я о том же: сэмулировать множественное наследование в большинстве случаев ничего не стоит. Так нужно ли усложнять язык и вносить в него проблемы ради небольшого выигрыша.

Я попробую посмотреть на RDSN, спасибо. Мне в самом деле интересно разобраться.

>Следовательно, скорее всего, в нём блокируются какие-то трюки C (вроде использования void*), добавляются новые уровни абстракции и т.п., т.е., это уже не тот же самый продукт

Но ведь задача решается та же. В конечном счете ведь нас интересует решение задачи. C++ гораздо богаче чем C, вроде бы должен приводить к значительному упрощению кода и ускорению процесса разработки. А в действительности в тех двух-трех случаях когда велась параллельная разработка и которые мне удалось понаблюдать, выигрыша не наблюдалось. И потом, если C++ такой супер-пупер и имеет такие неоспоримые преимущества, то уже должен был бы уже вытеснить C, по крайней мере на больших проектах. На C бы писались драйвера и все. А ведь этого не происходит, до сих пор многие крупные проекты пишутся на сях. Только консерватизмом такую ситуацию объяснить по-моему нельзя. Например паскаль в промышленности практически умер и кое-как держится только из-за дельфи.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32249579
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 c127

Мне очень импонирует желание с127 спокойно разобраться, без скатывания на религиозные войны. К сожалению, здесь в форуме, нет возможности выложить реальные интересные материалы по тому же множественному наследованию. Если с127 кинет мне письмо, я в ответ вышлю вполне законченную иерархию классов (из реального проекта) с документацией и диаграммами наследования. Очень небольшой объем исходного кода при немалой функциональности, думаю, сможет послужить аргументом.

Да, и строгая типизация далеко не последнюю роль играет, но тут надо смотреть и обсуждать конкретные моменты (что это? почему именно так? и что это нам дает?).

Согласен, что переписанная "в лоб" на С++ С-шная задача в общем случае не даст выигрыша (напр. некий несложный алгоритм). На С++ задачи решаются ПРИНЦИПИАЛЬНО ПО-ДРУГОМУ. Реальный выигрыш от ООП можно получить там, где моделируется большая система взаимодействующих сущностей. До определенной сложности подобные системы можно разрабатывать с применением процедурного подхода, но потом начинаются трудности. На С++, при правильном подходе, трудности не начинаются НИКОГДА! Сколь большой бы не была система, если ее удается представить в иерархическом виде, то на каждом уровне происходит оперирование вполне счетным числом понятий.


Пиши.
После освоения множественного наследования перейдем к шаблонам и стратегиям.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32250697
2 c127

Нет, например в случае объявления:
type t=1..333;
var y: t;
тип должен проверяться в случае каждого присваивания вида y:=что_то;. Есть и более сложные случаи т.е. тормозит сильно. У классического паскаля очень строго с типами, целая наука.

Да, верно, я и забыл о паскалевской строгости с enumeration.

Так и я о том же: сэмулировать множественное наследование в большинстве случаев ничего не стоит. Так нужно ли усложнять язык и вносить в него проблемы ради небольшого выигрыша.

ИМХО, стОит, поскольку множественное наследование реализаций позволяет в ряде случаев сэкономить ручной труд и вобщем-то, является логичным развитием концепции наследования.

Но ведь задача решается та же. В конечном счете ведь нас интересует решение задачи.

Да, именно так. Но после решения задачи всегда остаётся период сопровождения, который нельзя игнорировать при начальной разработке программы.

Кстати, вспомнилось, если не читал, то советую посмотреть книжку Алана Голуба "Правила програмирования на C & C++". Хоть сама по себе она содержит довольно много устаревших и просто спорных вещей, но там есть интересное в контексте нашей беседы высказывание по поводу "гибридных" проектов - когда в рамках одного проекта сочетаются подходы C и C++. Дословно не помню, но суть сводилась к следующему: хоть менеджеры и утверждают, что "раз такие проекты эксплуатируются, то этот подход работает", но его сопровождение превращается в один непрерывный кошмар. Я, в принципе, двумя руками поддерживаю подобную оценку. Беда в том, что немалая часть проектов на C++ выполнена как раз по "гибридной" схеме. Можно даже правило определённое вывести: если активно используется MFC, то это - гибридный проект. Почему? Потому что MFC в целом представляет собой всё что угодно, только не объектную C++-библиотеку. Ну не объектная она и всё тут. Для того, чтобы ей пользоваться "объектно" и получить пряники, обещаемые ОО-подходом нужно сделать ещё гору врапперов, надстроек и т.п.

Готов принять поток критики, но я до сих пор уверен, что факт наличия работающего продукта ещё не означает, что этот продукт работает хорошо, уж тем более, это не является критерием того, что подходы, использованные в реализации проекта можно смело переносить на другие продукты. Никода не доводилось ужасаться по поводу своего кода, помещённого в выпущенный продукт? Мне - приходилось. :) Так что, факт "сданности" продукта сам по себе ничего не означает. Он может служить подтверждением работоспособности тех или иных методик, но для того, чтобы сравнивать методики сами по себе, нужно как очень детальное сравнение двух или более готовых продуктов, и, что не менее важно - сравнение характеристик цикла разработки и сопровождения. А их и считать-то толком не всегда умеют...

А ведь этого [С++ не вытесняет C] не происходит, до сих пор многие крупные проекты пишутся на сях. Только консерватизмом такую ситуацию объяснить по-моему нельзя. Например паскаль в промышленности практически умер и кое-как держится только из-за дельфи.

Ты не учитываешь фактора определённой стереотипичности мышления, присущей программстам. Кроме сугубо рациональных аспектов использования тех или иных языклв есть ещё и... Бытовала такая шутка: "Для чего предназначены языки программирования? Pascal - для студентов, APL - для марсиан, Lisp - для учёных, Smalltalk - для домохозяек, C - для программистов ". Там было перечислено много языков, остальных не помню, но суть, надеюсь, ясна. Потом опять же - "настоящие программисты пишут на Fortran"... :)

Потом, фактор того, что масса ПО уже написана на C (те же операционные системы).

Есть ещё и фактор, который можно сформулировать так: "я всегда писал на C и у меня всё получалось". Воздействие такого соображения очень трудно преодолеть. Приходится "тыкать носом" в очевидные проколы, которых удалось бы избежать, не будь там преобразования к void* и т.п.

Наконец, есть ещё фактор наличия инструментальных средств. Например, компиляторы C++ только сейчас начали подтягиваться к реализации стандарта ANSI. Соответственно, перенос разработок с платформы на платформу был затруднителен. С другой стороны, реализации C отличались по большому счёту только набором библиотек. Да и станарт C был принят, если не ошибаюсь, аж в 90 году.

И наконец, ИМХО, один из самых серъёзных, если не самый серьёзный фактор. "Правильная", т.е., "объектная" разработка на C++ требует бОльших вложений на начальной фазе развития проекта, чем разработка на C, особенно это заметно при переходе с C на C++ (проверял на себе). Различия проявляются позже - когда начинается эволюция/сопровождение. Это, кстати, неоднократно отмечалось апологетами ОО-подхода, цитат сейчас привести, к сожалению, не могу, но по-моему, такие высказывания есть у Буча, Шлеера, Голуба... В середине 90-х на эту тему только и жужжали.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32250900
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2vdimas\r
/topic/27708&pg=1\r
здесь как-то я просил привести пример из реального проекта с использованием шаблонов и мн. \r
(ну не дорос видимо я до использования шаблонов в своих проектах. очевидно потому что \r
задачи стоят проще. нет, например, необходимости лепить свои GUI.)\r
был бы багодарен за разьяснения.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32251963
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Геннадий Васильев
Спасибо, разбираюсь. Попробую почитать Голуба. Может быть действительно проблема в гибридности проектов. Звучит правдоподобно.

Все-таки консерватизмом относительная непопулярность C++ в сравнении с C по-моему не объясняется. По-видимому есть другие серьезные причины.

>"Для чего предназначены языки программирования? Pascal - для студентов, APL - для марсиан, Lisp - для учёных, Smalltalk - для домохозяек, C - для программистов"

Это не те ли домохозяйки, у которых кухоннй UNIX-компьютер управляет работой моющей машины? Smalltalk для этого подходит. Скорее там речь шла о васике для домохозяек, а для ученых - о фортране. Шутка.

2 vdimas

Отправляй чингизу, он разрешил, к тому же его этот вопрос тоже интересует:
tchingiz@ukrpost.net

Попробуем разобраться.

Согласен с тем, что в C++ задача должна решаться по другому, чем в C, уж на этапе кодирования - наверняка. Но не понимаю, почему же мало кто в реальности ее решает по-другому. Я пока вижу 3 варианта. При этом я пока принимаю за аксиому полезность ООП.
1) ООП в при кодировании в C++ счень сложен, по крайней мере для среднего разработчика, человек быстро скатывается к более простому сишному стилю.
2) Сишный стиль настолько прост и удобен, что от него нельзя отказаться.
3) Имеются серьезные скрытые проблемы, отличные от п.1, в практическом использовании C++ в кодировании ОО приложений, которые вынуждают программистов использовать более простой C-стиль, выдерживают только самые стойкие.

В полезности шаблонов я не сомневаюсь. Идея мне очень нравится, но вот похоже Степанов недоволен ее реализацией в C++. Я не очень понимаю почему, но ему виднее. Насколько я понимаю, к OOP-у шаблоны не имют отношения. Хотя я не большой знаток основ ООП и готов выслушать другие мнения.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32251997
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непопулярность C++ еще можно объяснить "техническими" причинами.

У меня было очень много знакомых, которые еще в студенчестве, в 1993-5 гг подавали неплохие надежды как С++-ники. Однако, вдруг вышел Delphi, а под С++ ничего такого не вышло :((. Большая часть народу просто "прыгнула" на него и на прочие визуальные редакторы. До сих пор не понимаю, почему они так задержали с ВСВ. BC++ 5.0 - это был просто кошмар (не путать с BCB), очевидно этот проект они забросили. (а OWL гораздо лучше была, чем MFC - практически "чисто" объектно-ориентирована).

Да, в среде *никсов C++ - сверхпопулярен. А виндовая платформа эмэфцой изгажена. Когда-то Майкрософт запретила поставщикам других С++-компиляторов поставлять в одной коробке собственные наработки (тот же OWL) и MFC. Так что, мы просто не имеем альтернативы мелкомягким поделкам (MFC/ATL/WTL). А альтернативы просятся давно...
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32252116
2 c127

...При этом я пока принимаю за аксиому полезность ООП.

:) Ты путаешь наблюдение следствий и идентификацию причин. Т.е., в принципе, мне перечисленные пункты понравились, но, ИМХО, в качестве определения причины они "бьют мимо цели". Вот почему:

1) ООП в при кодировании в C++ счень сложен, по крайней мере для среднего разработчика, человек быстро скатывается к более простому сишному стилю.

Проблема не в этом. Проблема в том, что разработчики часто поставлены в условия, когда им необходимо писать так, чтобы это было понятно даже... ммм... скажем так, не очень опытному коллеге. При этом упор делается не на то, что этому самому неопытному коллеге было бы очень полезно поковыряться в сложной программе, сделанной хорошим C++-ником, а на исключение фактора непредсказуемости времени, которое новичок потратит на саморазвите в этом случае. Т.е., не "низы поднимаем", а "опускаем" тех, кто более развит. И квалификация при этом всё чаще связывается не с умением мыслить, а с запоминанием API, технологий и прочим бредом.

А само по себе кодирование ООП-ной программы на C++ ничуть не сложнее, чем, например, на том же Java.

2) Сишный стиль настолько прост и удобен, что от него нельзя отказаться.

Неверная оценка. Сишный (процедурный) стиль прост и удобен для определённой категории разработчиков, безотносительно их "хорошести" или "плохости". Кроме того, сишный стиль всегда будет присутствовать на компьютерах с фон-неймановской архитектурой.

3) Имеются серьезные скрытые проблемы, отличные от п.1, в практическом использовании C++ в кодировании ОО приложений, которые вынуждают программистов использовать более простой C-стиль, выдерживают только самые стойкие.

Ну всё, обливаю себя бальзамом. Я стойкий. :) По моим наблюдениям, ни в коем случае не претендующим на полноту, самым большим откровением для "сишников" становится гораздо более мелкая объектная структуризация программы, чем это кажется им на первый взгляд. Ну, например, мне неоднократно задавали вопросы типа: "для чего эти смарт-пойнтеры-то нужны? Программу лучше тестировать надо!". Понимаешь, достаточно трудно используя, например, стандартные UML-диаграммы показать реализацию, например, массива указателей. Для сишника со стажем это просто массив указателей, для C++-ника же - инстанцирование шаблона vector<>.

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

Основное, что я хочу сказать, наверное, можно выразить кратко: причины эффективного применения C++ ищи в конкретных людях , причины провалов - в командах и менеджменте. Почему? Потому что эффективное использование C++ одним разработчиком в ряде случаев (я не хочу сказать - всегда) сводит на нет необходимость команды, менеджеров, промежуточной документации и прочих ритуальных плясок, тогда как неэффективность обусловлена коммуникационными барьерами между людьми. Вот уж действительно - пляски так пляски. Другая сторона медали, ИМХО, в том, что процедурный стиль ближе "паковщикам" по терминологии А.Картера, кои составляют бОльшую часть людей. Отсюда и бОльшая популярность языков вроде C, а вернее - процедурного подхода.

Отвлечённое наблюдение, возможно не совсем точное. C++ как и куча языков-сверстников развивался с прицелом, в частности, на повышение эффективности индивидуала , и перекладывание работы по верификации программы на компилятор. Сильная типизация - как раз игрища из этой области, поскольку понятие "тип" определяется как набор допустимых операций.
А современные нам языки, такие как Java и C# направлены на поддержку команд, менеджмента... На что угодно, только не на то, чтобы дать программисту в руки инструмент воплощения видения картины мира. Чувствуешь "изменение" вектора? Вместо развития, как повышения уровня абстракции и систематизации получается деградация.

В полезности шаблонов я не сомневаюсь. Идея мне очень нравится, но вот похоже Степанов недоволен ее реализацией в C++. Я не очень понимаю почему, но ему виднее. Насколько я понимаю, к OOP-у шаблоны не имют отношения. Хотя я не большой знаток основ ООП и готов выслушать другие мнения.

Как минимум, он недоволен отсутсвием consraints в шаблонах, насколько я помню. Ещё у него в интервью (где-то в сети есть) были замечательные слова (не дословно): "мне говорят, что надо идти туда, где большие деньги, но по-моему это дурно пахнет".
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32252245
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Геннадий Васильев
>Проблема в том, что разработчики часто поставлены в условия, когда им необходимо писать так, чтобы это было понятно даже... ммм... скажем так, не очень опытному коллеге.

Я такого не встречал, хотя наверное где-то есть и такое. То что я видел - каждый программирует как хочет. В лучшем случае оговаривается система именования переменных, функций, файлов, классов и пр.

>Так что, вынуждают переходить на "стиль C" нередко конкретные люди, а не "скрытые проблемы" языка.

Очень хорошо, но причины-то в чем? Почему конкретные люди, для облегчения жизни которых придуман и C++, не используют его преимущества в полной мере. Ситуация ведь интересная: люди придумали вроде бы удобный и правильный язык, защищают его от нападок несознательных элементов, а сами же в большинстве не используют его удобство. Всякая C++ программа, по крайней мере на этапе разработки, это постоянные проблемы с памятью, путанье типов и прочие прелести, свойственные C, от них же и пытались избавиться. Да и если посмотреть функции (методы), то там скорее всего будет последовательность new в начале и delete в конце. По большому счету оно ничем не лучше, чем malloc-free?

Взял книжку "C++ programming with CORBA" ISBN 0-471-28306-1. Книга по практическому применению C++. Открыл наугад на 239 странице. Вижу:

char **print_command;
char **queue_command;
CORBA::String_var printer_name;
....
//constructor
PrinterImp::printerImpl(const char *p_command, const char *q_command, const char *name, CORBA::typeCode_ptr dp_eval_ret_type) {
print_command = new char *[ 4 ];
print_command=new char[256];
......
}
Это основной конструктор, других конструкторов нет.

стр. 240:
void PrinterImp::print_file(const char *fn) {
strcpy(print_command," ");
strcat(print_command,fn);
....
}

Чистый C, от C++ одно название. Книгу я специально не выбирал, это первая попавшаяся под руку.

>Отвлечённое наблюдение, возможно не совсем точное. C++ как и куча языков-сверстников развивался с прицелом, в частности, на повышение эффективности индивидуала, и перекладывание работы по верификации программы на компилятор.....
>А современные нам языки, такие как Java и C# направлены на поддержку команд, менеджмента...

Нет, при создании C++ говорились те же самые слова насчет командной работы. Причем упор делался именно на большие проекты и большие команды разработчиков. Это одна из причин введения инкапсуляции - закрыть доступ внутрь класса, чтоб пользователи библиотек не лазили куда не надо.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32252252
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот пример свежий хочу привести.
в час носи ко мне пришли и говорят(на работе я был, случайно типа) надо сделать секвенцию кадров с цифровыми часами от 0 до 20 минут на синем фоне в правом нижнем углу. незнаю зачем, и почему нет таких плагинов в том же премьере. В общем, надо.
Я взял gcc из mingw и dev-c++ и сделал за два часа. на основе нескольких простых классов которые раньше делал сам для себя(пригодились таки).

на делфи я бы это сделал за пол часа. ну так я же только начинаю. Но интуиция мне уже говорит, с++ это крутая тема. нужен только опыт. Опыт работы в делфи у меня 5 лет. до этого паскаль. до этого ассемблер(ну, сами понимаете, какие времена были). так вот. с++ это действительно мощная штука для меня.

в общем, для меня с++ живее всех живых. за ним и *никс платформами я вижу будущее. по крайней мере свое.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32259262
2 c127

ГВ>Проблема в том, что разработчики часто поставлены в условия, когда им необходимо писать так, чтобы это было понятно даже... ммм... скажем так, не очень опытному коллеге.

c127>Я такого не встречал, хотя наверное где-то есть и такое.

Ну, мне доводилось видеть. И даже самому попадать под подобную критику.

ГВ>Так что, вынуждают переходить на "стиль C" нередко конкретные люди, а не "скрытые проблемы" языка.

c127>Очень хорошо, но причины-то в чем? Почему конкретные люди, для облегчения жизни которых придуман и C++, не используют его преимущества в полной мере. Ситуация ведь интересная: люди придумали вроде бы удобный и правильный язык, защищают его от нападок несознательных элементов, а сами же в большинстве (выделение моё - ГВ.) не используют его удобство.

Именно что в большинстве . Но C++ придумало отнюдь не большинство программистов и тем более, людей себя ими называющих. Большинство не придумало даже паскаль. Отходя немного в сторону от дискуссии замечу, что большинство - суть стадо, а апелляция к большинству - суть некорректная аргументация. ;) Большинство вообще неспособно ничего придумать. Придумывают единицы. Большинство - поддерживает их или не поддерживает. И кстати, далеко не факт, что большинство всегда оказывается правым. Впрочем, ладно...

Я вижу причины неприятия стиля C++ и неиспользования его возможностей всего лишь в его относительной необычности по сравнению с императивными языками. Ну, трудно переключиться сразу на стиль объектов с шаблонами. Тем более это трудно сделать, если сначала учиться C. Наверное, всё-таки, это правильно, что учиться нужно начинать с Pascal.

c127>Всякая C++ программа, по крайней мере на этапе разработки, это постоянные проблемы с памятью, путанье типов и прочие прелести, свойственные C, от них же и пытались избавиться.

Такие ошибки появляются, если выводить учёт ресурсов "за грань сознания", а это неверно. И, кстати, полный учёт совсем не мешает концентрации на прикладной функциональности. Заставляет делать её стройнее и предсказуемее - да, это есть...

c127>Да и если посмотреть функции (методы), то там скорее всего будет последовательность new в начале и delete в конце. По большому счету оно ничем не лучше, чем malloc-free?

Совершенно верно и это, кстати, и есть плохой стиль программирования на C++. "Хороший стиль", ИМХО, можно кратко сформулировать примерно так: всё есть объекты. Элементы жизненного цикла сущностей - в том числе.

c127>Взял книжку "C++ programming with CORBA" ISBN 0-471-28306-1. Книга по практическому применению C++. Открыл наугад на 239 странице. Вижу:

Ну дык! Книжка-то наверное больше о CORBA, чем о C++, т.е., в ней иллюстрируется в первую очередь использование CORBA и т.п. Её почти наверняка можно использовтаь для того, чтобы обучаться CORBA, но не стилю C++!

c127>Чистый C, от C++ одно название. Книгу я специально не выбирал, это первая попавшаяся под руку.

Ну, попробуй почитать что-нибудь именно по C++ без "разбавлений", вроде CORBA, Windows, Unix. Александреску, например. Просто хороший стиль C++ он не привязан к платформе, а проиллюстрировать одновременно стиль и аспекты конкретной библиотеки - сложная и, на мой взгляд, достаточно бессмысленная задача, чтобы её не решали.

c127>Нет, при создании C++ говорились те же самые слова насчет командной работы. Причем упор делался именно на большие проекты и большие команды разработчиков. Это одна из причин введения инкапсуляции - закрыть доступ внутрь класса, чтоб пользователи библиотек не лазили куда не надо.

Не только на большие команды. Делался упор ещё и на то, что один человек может контролировать больший объём исходного текста. Хотя в принципе, ты прав, я несколько загнул с оценками.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Не дадим C++ в обиду
    #32769207
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pop-up.

модераторам - не бить! :)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32769223
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
vdimas На большинство приходящих в обычной работе собощений Windows, в этих библиотеках происходит следующее:
1. reflection всех Notifications
2. PretranslateMessage вдоль по всей иерархии окон.
3. Поиск объекта в MAP-ах по хендлеру.
4. линейное "прочесывание" message maps классов в ответ на КАЖДОЕ ПРИХОДЯЩЕЕ СООБЩЕНИЕ
Ура!
Есть человек в мире осознающий наскоко MFC тяжёлая штука!

alexey_1979 Ты же не будешь создавать массив обработчиков на несколько тысяч элементов для того, чтобы обработать пару сообщений.
Ну MFC вообще-то так и делает....

vdimasБольшинство сообщений (99.99% из общего приходящего потока) в своей оконной процедуре просто достают адрес объекта из самомого экземляра МОЕГО класса окна (а не из многотысячного ATL/MFC MAP-а)
ещё респект!
тоже копался в механизме получения экзепляра в MFC - офигел от наворотов.
идея таскания указателя на объект в самом классе - гораздо приятнее.
Сам так делаю.
Как мне рассказали люди, MFC сделало сбор всех хэндлов окон в массив из соображений безопасности. Кто объяснит, что они обезопасили?
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32769913
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siebentearbeitpop-up.

модераторам - не бить! :)

да не будут бить .

блин башка раскалывается :(
(не пил вчера)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32770031
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
Ну бывает.
Я сёдня спать лёг в 3.45, а утром бежал за электричкой зимой 5км. в гору.
Никакой сижу, спать охота.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32770349
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sieзимой 5км. в гору.

:-)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32770664
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
да, это из рассказа про смену поколений :)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32770823
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sieда, это из рассказа про смену поколений :)

угу помню :))

эхх прощай С++

ухожу работать на Delphi + MSSQL 2k
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32770855
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понял, что за наезды такие на MFC ваще а ?
Причем абсолютно необоснованные.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32771555
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Геннадий Васильев

Идея мне очень нравится, но вот похоже Степанов недоволен ее реализацией в C++. Я не очень понимаю почему, но ему виднее. Насколько я понимаю, к OOP-у шаблоны не имют отношения. Хотя я не большой знаток основ ООП и готов выслушать другие мнения.

Как минимум, он недоволен отсутсвием consraints в шаблонах, насколько я помню. Ещё у него в интервью (где-то в сети есть) были замечательные слова (не дословно): "мне говорят, что надо идти туда, где большие деньги, но по-моему это дурно пахнет".



вот это?
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32772165
vadik_malyshev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На C++ можно написать любую программу, которую можно вообще написать.
Но не за те же деньги ))
В пользу этого утверждения есть следующие доводы
1 крутые сишники (срршники) за даром работать не будут
2 у некрутых сишников прога работать не будет

В такой ситуации выбор не велик.

А большую прикладу писать можно за дешево на более высоком уровне абстракции на урезанных языках. Тем более что этот уровень в них уже подготовлен (реализован и оттестирован). Имеются в виду либы, поддержка технологий и т.д. Поэтому многие менеджера скатываются в пользу java и т.д. И по деньгам они правы. Киньте в меня камень, если я неправ. Кроме того, если нужно во всех подобных языках можно подключать практически любые модули. Для узкого круга задач низкого уровня можно написать модуль на с++ и пользовать его.

Я сам обожаю с++. И другие языки для меня они как тесная детская колыбелька. Мне в ней тесно. Только на c++ можно лаконично и без извратов писать на любом уровне абстракции при условии, что это уровень еще нужно реализовать и отладить.
Если бы для с++ была нормально структурированная и отлаженная библиотека с исподниками хотя бы как в java и при надобности можно было бы возлагать контроль за ресурсами на язык. (Да… тогда получиться c# или java). Самое обидное, что c++ это позволяет, а этого до сих пор нет. А если нет то по кусочкам. Если вдруг эти кусочки попытаешься объеденить, то получишь как минимум длинный catch.

Короче нужна крутая отлаженная и простая в использовании библиотека. Если она будет, то мы всем нос утрем как по красоте и лаконичности, так и по скорости и стоимости разработки.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32772369
Chemburgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Короче нужна крутая отлаженная и простая в использовании библиотека. Если она будет, то мы всем нос утрем как по красоте и лаконичности, так и по скорости и стоимости разработки."

Не знаю как насчет "крутая", но помоему VCL от борланда, это как раз то о чем ты говоришь. Прибавь к этому STL и изобретать велосипед по второму разу не надо будет.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32772431
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vcl от борланда не столь хороша, в частности портируемость ее оставляет желать лучшего.
причем портируемость не только между операционныим системами, но и компиляторами.

Много ли компиляторов могут использовать vcl?
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32772622
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VCL писана на паскале. Вот если перевести на С++ и сделать портируемой - цены ей не будет.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32772779
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сказал один мой знакомый нехилый (когда я тока начинал работать, его зазвали работать в MS)

"С++ можно изучать всю жизнь"

Это правда и явное отражение мощи языка.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32773368
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb

С++ можно изучать всю жизнь

Главное найти тех парней что будут эту учебу финансировать :(

Lepsik

VCL написана на паскале. Вот если перевести на С++ и сделать портируемой - цены ей не будет.

Перенести, перепроектировав, или просто переписав? imho VCL очень тяжелая и "сама в себе" - как будто другого ничего нет... STL - вот что должно было стать фундаментом - в VCL же все свое - и достаточно среднее. Для написания клиентов к БД на Delphi подходит - но и только
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32773990
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
funikovyuriГлавное найти тех парней что будут эту учебу финансировать :(

Можно всё делать параллельно, работать на с++ и учится с++ работая на с++
:)

funikovyuriSTL - вот что должно было стать фундаментом
Ну, кстати, тут пробегал человек, недовольный STL по следующей причине:
во, вроде, всех компиляторах нет заточки на архитектуру процессора.
И я, кстати, на этом месте задумался...
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32774180
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как связана конкретная шаблонная библиотека с заточками компилятора?
компилятор должен вообще затачиваться, не заморачиваясь на конкретные библиотеки.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32774383
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2funikovyuri

большая часть VCL никаким боком с STL непересекается. да и в области строковый функций stl::string слабоват - мне больше boost нравится - вот где сила.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32774611
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
funikovyuriа как связана конкретная шаблонная библиотека с заточками компилятора?
Вроде как можно оптимизировать существенно под пень/амд

2 Lepsik

char* - вот где сила :) (и вообще указатели - сила)

Java и C# лишины этого счастья :)
Хотя в Javе есть ссылки. Тока чё-та я стал забывать без практики... можно ли там делать вещи типа (сhar*)++
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32775157
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нильзя. JAva ваапще атстой.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32775363
И сла те восподи, шо низзя. Указатели ацтой. Жаба рулез.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32775518
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни Java ни указатели не отстой - всё в природе нужно :)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32775638
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik

большая часть VCL никаким боком с STL непересекается.
Да тот же AnsiString используемый всюду в VCL. А StringList?

да и в области строковый функций stl::string слабоват - мне больше boost нравится - вот где сила.

в смысле слабоват? В boost'e нет никаких string'ов - boost это расширение стандартной stl - такие базовые классы как string там не переписываются

Sie
Вроде как можно оптимизировать существенно под пень/амд
Я этого не писал L)

можно ли там делать вещи типа (сhar*)++
Вот из-за таких вещей С++ и помер... Из-за того что любой Вася П может такого понаписать что хоть стой хоть падай
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32776259
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2funikovyuri

--большая часть VCL никаким боком с STL непересекается.
Да тот же AnsiString используемый всюду в VCL. А StringList?

я же сказал большая (ударение на O). оконные библиотека например и масса других

--да и в области строковый функций stl::string слабоват - мне больше boost нравится - вот где сила.
--в смысле слабоват? В boost'e нет никаких string'ов - boost это расширение стандартной stl - такие базовые классы как string там не переписываются

ты чем читаешь ? "строковых функций", а не класс типа string Если конечно ты курсе что в бусте они есть.
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32776372
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты чем читаешь ?

Слушай, может я в русском слабоват или ты его забывать стал, но вот это
да и в области строковый функций stl::string слабоват - мне больше boost нравится - вот где сила.
означает противопоставление boost и stl - а это не верно - о чем я и сказал. Так или иначе - я тебя обидеть не хотел - чего не скажешь о твоем посте. Я понимаю - у всех может тяжелый день приключиться - так что проехали...


PS> насчет boost'a и функций - представляешь - кое чего знаю :)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32776530
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C++ не помер...
указатели - нужная и сильная штука. А если Вася П не умеет ими пользоваться, то сам виноват.

Если Вася П залезет в эксковатор и поломает 2 дома - виноват не экскаватор, а Вася П
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32776583
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
виноват также владелец транспортного средства :-)
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32776795
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
авторвиноват также владелец транспортного средства :-)
Ну тока в том, что оставил без присмотра...

Если хотите, то можно сказать так, что MS оставила без присмотра компилятор С++ которым Вася П всё поломал?
...
Рейтинг: 0 / 0
Не дадим C++ в обиду
    #32777058
fixit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот наезд на владелца транспортного средства...
Теперь ставь, замки, противоугонники и т.д....

И в итоге получится си ++ дотнет манаджет - этакий мертвый кастрат мутант.
...
Рейтинг: 0 / 0
105 сообщений из 105, показаны все 5 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не дадим C++ в обиду
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]