|
|
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
1. Интерфейсы компонентов теряют любой смысл. В программах на Паскале (я имею ввиду Turbo Pascal 7.1 для DOS) я мог написать компонент, а имя файла, в котором он расположен, использовалось как имя этого компонента. Там была такая замечательная секция Interface, читая которую, всегда можно было понять, к чему обращаться. В программах на Java имя физического модуля задаёт имя единственного доступного извне класса, который тоже задаёт интерфейс. В программах на Си есть заголовочные файлы. С++ в этом свете - уникум. Во-первых, имена физических модулей никак ни с чем не связаны. Вроде бы тоже существуют заголовочные файлы, но: а) Если я написал иерархию классов, я вынужден полностью поместить её объявление в заголовок; б) Как только я где-нибудь сказал магическое слово "template", туда же - в заголовок - тянется и вся реализация! Выходит, что в реальной практике _интерфейсов - нет_! Т.е. ситуация построена так, что всегда можно узнать имя методов базового класса, к которому вообще-то может быть и нельзя напрямую обращаться, даже этот класс завёрнут в пространство имён: оно всё равно будет находиться в том же заголовочном файле, и его можно узнать. А нотации интерфейсов во-первых, не придерживаются программисты, и во-вторых, это есть неоправданное усложнение по правилу бритвы Оккама. 2. Что для меня на самом деле важно? Я совершенно точно знаю, что со 100% уверенностью в моей программе будут properties. Даже если я не буду их применять, они будут всё-равно - как код, который делает ровно то же самое. Однако, если я начну применять свойства как отдельный библиотечный элемент, то я буду вынужден на каждом шагу запинаться об трёхэтажную конструкцию их объявления! Такова парадигма С++: делать всё библиотеками. В этом плане, например, C# - язык более элегантный, потому что в нём не боятся интегрировать непосредственно в сам язык то, что действительно должно быть в него интегрировано. Аналогичный пример можно привести из Java: это безымянные классы. В С++ я постоянно вынужден тащить за собой кучу лишнего кода только потому, что кто-то взвесил необходимость добавления в язык этой возможности, и решил, что лучше меньше в самом языке, даже если в итоге придётся кодировать больше. Однако к чему привёл такой подход? C# и Java считаются элегантными языками, а С++ (несмотря на явные попытки выкинуть, или точнее, не вводить в него "лишние" конструкции) - весьма громоздок. 3. Корявая Агрегация. class A; class B; class C; class D { public: A a_pub; B b_pub; C c_pub; void doIt_pub(); protected: A a_prot; B b_prot; C c_prot; void doIt_prot(); private: A a_priv; B b_priv; C c_priv; void doIt_priv(); }; Время жизни агрегированных в D объектов однозначно не превышает время жизни агрегировавшего их объекта класса D. Это значит, что даже если вы напишете код, влезающий в канализацию для переделки объёктов a_xx, b_xx, c_xx - из них всё равно можно будет обратиться к объекту D в примерно таком вот коде: a_pub::some_func() { super->doIt_pub(); } А столько разных функций я создал для того, чтобы показать возможность применения прав доступа, например: a_pub::some_func() { super->doIt_priv(); // ошибка: попытка обратиться к закрытому методу из объекта, объявленного в открытой части. } Сейчас этой техники нет; поэтому приходится каждый раз сохранять отдельный указатель на агрегировавший класс, да ещё и прописывать лишние строчки с ключевым словом friend, чтобы всё работало! Но я не понимаю, какие ограничения есть к тому, что сделать такой указатель?! PS. Можно заменить ключевое слово "super->" на "meta->", чтобы стал более понятен великий смысл и необходимость данной конструкции. Сейчас в Языке++ есть только одна возможность обойти создание лишних указателей в данном контексте - это статические функции и члены данных. Автор очень просит всех, кто имеет такую возможность, донести данные пункты в комитет ДО принятия новой версии стандарта языка. Я очень люблю С++, но я с ним уже просто замучился... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2006, 23:51 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
waster1. Интерфейсы компонентов теряют любой смысл. В программах на Паскале (я имею ввиду Turbo Pascal 7.1 для DOS) я мог написать компонент, а имя файла, в котором он расположен, использовалось как имя этого компонента. Там была такая замечательная секция Interface, читая которую, всегда можно было понять, к чему обращаться. вы путаете реализацию среды разработки с языковыми конструкциями и никто не мешает вам писать детальный хелп. waster С++ в этом свете - уникум. Во-первых, имена физических модулей никак ни с чем не связаны. Вроде бы тоже существуют заголовочные файлы, но: и слава Богу waster а) Если я написал иерархию классов, я вынужден полностью поместить её объявление в заголовок; б) Как только я где-нибудь сказал магическое слово "template", туда же - в заголовок - тянется и вся реализация! а вы что хотели ? --Выходит, что в реальной практике _интерфейсов - нет_! причем тут темплейты и интерфейсы ? не надо валить все в кучу. --Я совершенно точно знаю, что со 100% уверенностью в моей программе будут properties. Даже если я не буду их применять, они будут всё-равно - как код, который делает ровно то же самое. Однако, если я начну применять свойства как отдельный библиотечный элемент, то я буду вынужден на каждом шагу запинаться об трёхэтажную конструкцию их объявления! пользуйтесь языковой конструкцией __property std::string Text = {read=getText, write=setText }; и не надо придумывать велосипеды Такова парадигма С++: делать всё библиотеками. ---В этом плане, например, C# - язык более элегантный, потому что в нём не боятся интегрировать непосредственно в сам язык то, что действительно должно быть в него интегрировано. спасибо, красота С++ в том что если кому что надо - тот может сам встроить любую конструкцию --Однако к чему привёл такой подход? C# и Java считаются элегантными языками, для домохозяек. --Время жизни агрегированных в D объектов однозначно не превышает время жизни агрегировавшего их объекта класса D. а почему должно быть наоборот ? waster А столько разных функций я создал для того, чтобы показать возможность применения прав доступа, например: a_pub::some_func() { super->doIt_priv(); // ошибка: попытка обратиться к закрытому методу из объекта, объявленного в открытой части. } а почему должно быть наоборот ? waster Автор очень просит всех, кто имеет такую возможность, донести данные пункты в комитет ДО принятия новой версии стандарта языка. Я очень люблю С++, но я с ним уже просто замучился... может все таки лучше поменять стиль программирования ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 01:16 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
1... Интерфейсы в C++ есть. Но они реализованы как классы. Яркий пример - технология COM, CORBA. Вроде-бы из концепции языка мы не выпадаем, но в то-же время, разработка без использования Визарда-компонентов становится достаточно сложным для человеческого восприятия процессом. Грубо говоря, лабать код в блокноте становится сложнее и сложнее Когда разбирался с COM - крыл по матери всех его учредителей. Как понавводили всякой х..ни. Скажите пожалуйста зачем мне GUID ? Какой смысл для МЕНЯ он несет? В продвинутых языках и технологиях реализация интерфейсов принципально не намного далеко ушла от классов С++, однако эта реализация умело завуалирована в синтаксисе. Собственно для меня - без разницы в каком файле (пакете, сборке) лежит класс или интерфейс. Гораздо важнее насколько логично и гладко ложится его идентификация в пространство имен. Хедеры С++ - это пережиток прошлого. Не пытайтесь подвести их смысл под что-то серьезное. Они создавались в эпоху ассемблерного программирования, и сохранились для совместимости. Для Java и .Net., был заложен механизм "рефлексирования" бинарника. А это делает хедер ненужным. 2... Плюсы удобны для сбора совершенно автономного кода (драйвер, программа для микроконтроллера, бут-сектор и.т.п). Это можно рассматривать как преимущество так и недостаток. Шарпы - для многих прикладных программистов стали наркотиком, с которого трудно спрыгнуть (если вообще возможно). . Java - рулит в своем секторе, однако в самом языке я бы желал увидеть некоторые улучшения. Для меня оба языка - образец легкой интегрируемости решений, чего к сожалению нельзя потребовать от С++. 3... По поводу прав доступа. Это обширная тема для дискуссий на предмет безопасности. В самом деле... Обладая указателем на область памяти, и имея представление о протоколе, ничто не мешает мне взламывать все приватные поля и вызывать скрытые методы. Это трюкачество. И сам факт его сущестования дискредитирует любую модель программирования где такое допускается. Особенно если вопрос касается эксплуатации серверов приложений. Недаром солидные конторы (и ваш покорный слуга) тратят деньги на создание изощренных Policy и FGAC для библиокек кода, балансируя на грани удобно / безопасно . В заключение хочу добавить. Доносить о каких-либо пунктах в какой-либо комитет я не буду. Потому-как они общеизвестны. А поддерживать спецификацию нового С++ я не собираюсь потому-как считаю, что овчинка выделки не стоит. Лучше поддержать принципиально новое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 02:43 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
maytonОбладая указателем на область памяти, и имея представление о протоколе, ничто не мешает мне взламывать все приватные поля и вызывать скрытые методы. Это трюкачество. И сам факт его сущестования дискредитирует любую модель программирования где такое допускается. В уголовном кодексе не написано что нельзя сморкаться соплёй оземь. Однако, некоторые это делают, а некоторые нет. Это вопрос воспитания, в данном случае - стиля. И навряд ли стоит вносить это в уголовный кодекс (спецификацию языка). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 07:20 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
В уголовном кодексе написано что нельзя воровать чужое, однако некоторые так делают, некоторые нет. Но это же не повод убирать это из уголовного кодекса :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 09:37 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Добавлю свои "5 копеек": Не нравится - не ешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 14:30 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
waster 1. Не стоит пользоваться термином интерфейс если вы имеете в виду открытую интерфейсную часть модуля (в C++ это содержимое .h-файла) так как это приводит ошибочной трактовке и двусмысленности. В ООП интерфейс это устоявшийся термин в С++ соответствующий абстрактному классу из виртуальных функций и констант, а не заголовочному файлу или секции interface из Паскаля. Далее если вы написали иерархию классов вы НЕ обязаны засовывать ее всю в заголовок для этого используется препроцессор Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. В С++ нет поддержки модульности на уровне языка и вместо него используются средства препроцессора. Это действительно может быть рассмотрено как архаизм и недостаток - но такой уж он есть и лучше не требовать от комитета изменения стандарта, а научиться его правильно использовать... Также поддержка пространств имен в С++ не включает в себя возможности ограничения области видимости классов (они все являются public) и если нужно можно скрывать классы объявляя их внутренними в private секции других классов. 2. по поводу свойств... Принято считать что поддержка свойств на уровне языка это синтаксический сахар без которого можно и так прожить (принципиально они ни на что не влияют). Так свойств нет в java (вместо этого там есть соглашение о наименовании). Также многие поставщики компиляторов добавили поддержку свойств в свои продукты (см. Borland). Делать выводы о элегантности С++ и java в пользу C# на основе наличия в последнем свойств я бы не стал :) 3. Анонимные классы (так они вообще-то называются). Они в java появились не просто так а как часть концепции и подхода к написанию определенного кода. Это достаточно специфичная вещь и она остается непонятой до сих пор достаточно большой частью разработчиков. Если еще учесть что такие классы можно легко заменить на обычные (например внутренние) то решающей роли в общей идеологии ООП они не играют 4. Как я понял вы имеете в виду поддержку двухсторонних связей между объектами... Т.е. вы считаете что если один объект (например,a_pub) является частью другого (D) то a_pub должен иметь способ доступа к объекту-владельцу? Тогда ответ будет звучать так - это сделано из соображений производительности. Дело в том что навигация от части к целому нужна далеко не всегда. В случае если такая навигация нужна то в класс части нужно добавить атрибут D *owner. Вообще, если говорить строго, отношения между классами (в терминах UML) бывают 4х основных видов - это ассоциация, агрегация, композиция и наследования. Так вот из них только композиция отображается на С++ в структуру которую вы привели. Дело в том что агрегация допускает использование одного и того же объекта в качестве части для нескольких разных объектов класса D. Т.е. для реализации двухсторонней связи в общем случае для настоящей агрегации мы получим во-первых сложный, во-вторых очень затратных механизм, который (как я говорил) в большинстве случаев будет не нужен.... Кстати, ключевое слово friend тут вообще не причем, так как часть должна общаться с целым также через его открытый контракт и не иметь доступа к его private-части... Теперь насчет super->... В С++ такой конструкции нет по очень простой причине - наличие множественного наследования :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 15:05 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Lepsik--Однако к чему привёл такой подход? C# и Java считаются элегантными языками, для домохозяек.+ 1е100 ! Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 07:04 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас Lepsik--Однако к чему привёл такой подход? C# и Java считаются элегантными языками, для домохозяек.+ 1е100 ! Что такого остроумного в столь плоском утверждении? Если бы Лепсег напесал что для индусов, тогда зерно здравого смысла было бы. Но домохозяйки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 12:57 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Сергей ИльичНо домохозяйки...не за остроумие,а за точность аналогии. Домохозяйки любят всякие кухонные комбайны и посудомоечные машины Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 13:00 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Lepsik waster --Я совершенно точно знаю, что со 100% уверенностью в моей программе будут properties. Даже если я не буду их применять, они будут всё-равно - как код, который делает ровно то же самое. Однако, если я начну применять свойства как отдельный библиотечный элемент, то я буду вынужден на каждом шагу запинаться об трёхэтажную конструкцию их объявления! пользуйтесь языковой конструкцией __property std::string Text = {read=getText, write=setText }; и не надо придумывать велосипеды Это расширение характерно для C++ Builder, который в настоящий момент скорее мертв, чем жив. Lepsik спасибо, красота С++ в том что если кому что надо - тот может сам встроить любую конструкцию waster --Однако к чему привёл такой подход? C# и Java считаются элегантными языками, для домохозяек. Можно сделать эксперимент - написать на чистом С++ какое-нибудь тривиальное приложение - которое бы считало pi с любой заданной точностью или корелляцию данных в двух файлах. Причем все делать в стиле чистого С++, STL + iostreams, безо всяких C-хаков, все делать in a typesafe maneer. В результате получим бинарь размером ~1Мб работающий со скоростью как у Java - аналога (или меньшей). При сложности кодирования в 2+ раза большей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 13:14 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Сергей ИльичВ результате получима вот это не факт, батенька Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 13:50 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Эта, народ, канчай базар разводить. Хочешь флейма - иди в вон Программирование, там и обсуждай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 13:56 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Lepsik --Однако к чему привёл такой подход? C# и Java считаются элегантными языками, для домохозяек. Афтар жжотъ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 15:34 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Сергей ИльичМожно сделать эксперимент - написать на чистом С++ какое-нибудь тривиальное приложение - которое бы считало pi с любой заданной точностью или корелляцию данных в двух файлах. Причем все делать в стиле чистого С++, STL + iostreams, безо всяких C-хаков, все делать in a typesafe maneer. В результате получим бинарь размером ~1Мб работающий со скоростью как у Java - аналога (или меньшей). При сложности кодирования в 2+ раза большей. даже без споров знаю что такое умещается в единицы байтов. со скоростью в разы лучше чем джаве. вы бы товарисч не позорились бы. я делаю проекты и в джаве и в С++ и отличаю язык программирования от мягкого и теплого. ---Это расширение характерно для C++ Builder, который в настоящий момент скорее мертв, чем жив. Builder 2006 мертв для кого ? для индусских домохозяек или адептов жавы после курсов тети Сони жава за 21 день ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 18:04 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Lepsik даже без споров знаю что такое умещается в единицы байтов. со скоростью в разы лучше чем джаве. вы бы товарисч не позорились бы. Бинарь, которая выдает "Hello World" через stdio на С занимает 40 кб, на C++ через iostreams - 200кб+. Какие единицы байт? Если активно использовать STL, то он зае@ет кучу постоянной неявными аллокациями/деаллокациями мелких блоков памяти, выполняющихся на уродской модели памяти С++ за линейное время, угробив перформанс. Lepsik ---Это расширение характерно для C++ Builder, который в настоящий момент скорее мертв, чем жив. Builder 2006 мертв для кого ? для индусских домохозяек или адептов жавы после курсов тети Сони жава за 21 день ? Тсой жыфф (С). Я не тот человек, который быдет смотреть в рот Борландам, когда же они сделают очередной высер Билдера. MSVC++ пока стабильно выходит раз за разом, становясь лучше. Последние версии даже уверенно проглатывают шаблоны из Loki, и при этом они по скорости компилирования получше Intel С++. Про С++ Builder X помницца Вы мне беспардонно наврали - он не был продолжением С++ Builder 5. Сам его не щупал, но судя по отзывам это был блокнот с колорингом к которому можно подключить внешний компилятор (MinGW или бесплатный борландовский). Визуального конструирования форм в нем не было. Какой был смысл в этой лжи? Почему Вы рассматриваете борландовские расширения как стандарт на С++, который "отменяет велосипеды" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 19:25 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Сергей Ильич Lepsik даже без споров знаю что такое умещается в единицы байтов. со скоростью в разы лучше чем джаве. вы бы товарисч не позорились бы. Бинарь, которая выдает "Hello World" через stdio на С занимает 40 кб, на C++ через iostreams - 200кб+. Это у вас какие-то странные компиляторы. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 20:34 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
BlackStar Это у вас какие-то странные компиляторы. На униксах С++ iostreams наверное как-то интегрированы в библиотеки ОС. Я экспериментировал на win32 (stlport 4.5.3 + sgi iostreams). Получал exe килобайт по 400 без отладочной информации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 22:12 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Сергей Ильич BlackStar Это у вас какие-то странные компиляторы. На униксах С++ iostreams наверное как-то интегрированы в библиотеки ОС. Я экспериментировал на win32 (stlport 4.5.3 + sgi iostreams). Получал exe килобайт по 400 без отладочной информации. Помилуйте, ну откуда там могут быть 400? Версия компилятора? Параметры? Иначе, какой же это "эксперимент", так мысли вслух :) Сейчас взял для примера MSVC 6.0. Все установки проекта оставил по умолчанию. Собрал файлы, содержимое которых указано. Результат: C 28762 C++ 53248 То же самое для MSVC 7.1 С 26112 С++ 69632 (много, но не 400 кб.) Причем, уверен, покрутив настройками можно сделать бинарники и поменьше. Никогда не заморачивался по этому поводу, и сейчас не стал. Настройки, повторюсь, по умолчанию. Если надо могу, конечно, прислать содержимое ком. строки, но там ничего особенного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 22:59 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
уже было на ПТ, но все равно в тему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 23:21 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
[quot Сергей Ильич] ---Бинарь, которая выдает "Hello World" через stdio на С занимает 40 кб, на C++ через iostreams - 200кб+. Какие единицы байт? Если активно использовать STL, то он зае@ет кучу постоянной неявными аллокациями/деаллокациями мелких блоков памяти, выполняющихся на уродской модели памяти С++ за линейное время, угробив перформанс. может все таки стоит учится программировать а не слушать байки не знаю от кого. --Тсой жыфф (С). Я не тот человек, который быдет смотреть в рот Борландам, когда же они сделают очередной высер Билдера. культура так и прет --MSVC++ пока стабильно выходит раз за разом, становясь лучше. на сегодняшний день среда VC++ отстает даже от BBC 5.0 года так на 2-3 --Последние версии даже уверенно проглатывают шаблоны из Loki, и при этом они по скорости компилирования получше Intel С++. меня это как-то мало волнует. ---Про С++ Builder X помницца Вы мне беспардонно наврали - он не был продолжением С++ Builder 5. Вы что-то напутали. Я привожу обычно слова людей из компании Борданд. Если вас интересует текущее положение дел : http://www.borland.com/ca/products/delphi/index.html Среда Delphi 2006 интегрирует Delphi, C, C++, and C# programming languages. компания действительно закрыла сначала BBC, сделав С++ Builder X новым направлением, но потом изменила свое мнение и продолжила поддержку С++. ТАк что не надо нездоровых инсинуаций. --Почему Вы рассматриваете борландовские расширения как стандарт на С++, который "отменяет велосипеды" ? а кто пишет на стандарте ? MVC что ли ? boost/loki еще не являются стандартами. поэтому степень компиляции определяется не качеством компиляции, а желанием разработчиков. кстати к размерам программ на жаве не забывайте добавлять 100 мег рантайма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 01:02 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Сергей ИльичЯ экспериментировал на win32 (stlport 4.5.3 + sgi iostreams). Получал exe килобайт по 400 без отладочной информации.Мягко говоря, преувеличение. Приведенный выше код для С и С++, скомпилированный на Бильдере 6: С: 50 688 С++: 280 576 Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 07:27 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Lepsik кстати к размерам программ на жаве не забывайте добавлять 100 мег рантайма. Во-первых, вы вроде размеры бинарников сравнивали без учета rtl и прочих библиотек, потому как если ты предлагаешь посчитать размер библиотек из JRE то тогда неплохо бы посчитать размер каких-либо библиотек на C++ покрывающих функционал базовой библиотеки J2SE :) Во-вторых, зачем же придумывать вот у меня стоит последняя jre1.5.0_06 которая вся полностью весит меньше 70Мб. Это при том что ее функционал намного шире чем BCB rtl+vcl... То что размер бинарника в java будет на порядок меньше (в силу хотя бы того что там не машинный код, а байт код - который намного высокоуровней) - это общеизвестная вещь - о чем тут спорить мне не ясно В-третьих, я как-то тебе приводил пример с 2мя багами в BCB 6 SP2 на которые фирма борланд благополучно забила. Так вот чтобы не быть голословным прилагаю код приводящий к AV при линковке (см. test3.rar). В-четвертых, я тебе в прошлый раз говорил про баг в ADO врапере для VCL приводящий к некорректной работе приложения с строками в юникоде - ты сказал что это легко решить. Вот мне и интересно - как можно пересобрать VCL для BCB6? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 10:03 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
А чего, было бы не плохо иметь специфику для агрегации. Но, чтобы не давать слишком много необоснованного доступа сторонним классам, сделать так, чтобы все это касалось только nested-классов, объявленных прямо внутри контейнера, а не снаружи, как в приведенном примере. И плюс еще с какимнибудь модификатором. Например так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 10:35 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Блин, форматирование в сорсах не действует. Читать как: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 10:37 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Lepsik Me ---Бинарь, которая выдает "Hello World" через stdio на С занимает 40 кб, на C++ через iostreams - 200кб+. Какие единицы байт? Если активно использовать STL, то он зае@ет кучу постоянной неявными аллокациями/деаллокациями мелких блоков памяти, выполняющихся на уродской модели памяти С++ за линейное время, угробив перформанс. [/qout] может все таки стоит учится программировать а не слушать байки не знаю от кого. А может не стоит изображать св.невинность. Ведь Вы же прекрасно знаете, что 1) в С++ невозможно взять указатель на объект и оттрассировать какие у него вложенные указатели 2) В С++ нельзя перемещать объекты Это приводит к тому, что в С++ нет выбора, какую модель памяти использовать. Есть одна и негибкая. Lepsik [quot Me] --Тсой жыфф (С). Я не тот человек, который быдет смотреть в рот Борландам, когда же они сделают очередной высер Билдера. культура так и прет Я обычно меняю тон в зависимости от собеседника. У Вас нет какой-либо интеллектуальности, тонкого сарказма. "Для домохозяек!", "Может все-таки учиться программировать?" Lepsik Me --MSVC++ пока стабильно выходит раз за разом, становясь лучше. на сегодняшний день среда VC++ отстает даже от BBC 5.0 года так на 2-3 Зато почему-то под него всегда есть свежие MSDN и Platform SDK. И сторонние либы пишутся и собираются в первую очередь под MSVC++. Lepsik компания действительно закрыла сначала BBC, сделав С++ Builder X новым направлением, но потом изменила свое мнение и продолжила поддержку С++. ТАк что не надо нездоровых инсинуаций. Я бы избавился от проектов на Бильдере, как только судьба линейки стала сомнительной. Проникновенные письма в Борланд писать бы не стал. Lepsik кстати к размерам программ на жаве не забывайте добавлять 100 мег рантайма. Ну он же не весь грузится, только то что используется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 11:49 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Пардон, это все же моё Lepsik может все таки стоит учится программировать а не слушать байки не знаю от кого. А может не стоит изображать св.невинность. Ведь Вы же прекрасно знаете, что 1) в С++ невозможно взять указатель на объект и оттрассировать какие у него вложенные указатели 2) В С++ нельзя перемещать объекты Это приводит к тому, что в С++ нет выбора, какую модель памяти использовать. Есть одна и негибкая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 11:53 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Сергей Ильич Последние версии даже уверенно проглатывают шаблоны из Loki, и при этом они по скорости компилирования получше Intel С++. А Intel просто никуда не торопится. Ему не нужно. Он задуман как plugable -компилятор вместо MS-овского. Компилят им только релизы, а в отладке пользуются стандартным. Зато код он генерит лучше, и ошибки находит такие, какие MS даже не замечает. В общем - это дополнительный, опциональный беловой компилятор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 18:29 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Корочи, бальшая просьба к афтару : выпий вотки и иди праграми на бейсике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 18:36 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
funikovyuri Lepsik кстати к размерам программ на жаве не забывайте добавлять 100 мег рантайма. Во-первых, вы вроде размеры бинарников сравнивали без учета rtl и прочих библиотек, потому как если ты предлагаешь посчитать размер библиотек из JRE то тогда неплохо бы посчитать размер каких-либо библиотек на C++ покрывающих функционал базовой библиотеки J2SE :) начнем с того что жавный рантайм не стоит по умолчанию в ОС. Это значит тащит придется, причем для разного сотфа разные версии. Поэтому уже на можно считать спор о размерах окончен. ---Во-вторых, зачем же придумывать вот у меня стоит последняя jre1.5.0_06 которая вся полностью весит меньше 70Мб. Это при том что ее функционал намного шире чем BCB rtl+vcl... Я сужу по той паре папок с разными версия этого добра. одна версия 118 другая 105. Как бы то нибыло вынь да положь. --То что размер бинарника в java будет на порядок меньше (в силу хотя бы того что там не машинный код, а байт код - который намного высокоуровней) - это общеизвестная вещь - о чем тут спорить мне не ясно Упасть не встать. Так можно договорится что размер исходников всегда меньше бинарников - там ведь высокоуровневый язык. --В-третьих, я как-то тебе приводил пример с 2мя багами в BCB 6 SP2 на которые фирма борланд благополучно забила. Так вот чтобы не быть голословным прилагаю код приводящий к AV при линковке (см. test3.rar). А зачем коды в паскале, если мы говорим о С++ ? Может С++ показался слишком сложным для программирования после паскаля? Ну тогда зачем валить с больной головы( паскаль) на здоровую (С++) ? Обьемы проектов в которых я участвую меньше десятка-двух мег в исходниках просто не бывают и до сих пор проблем не заметил. --В-четвертых, я тебе в прошлый раз говорил про баг в ADO врапере для VCL приводящий к некорректной работе приложения с строками в юникоде - ты сказал что это легко решить. Вот мне и интересно - как можно пересобрать VCL для BCB6? Уже не помню о чем сыр бор, посокльку в основном в уникоде и работаю с базой ? а что действительно есть проблемы ? Дай ссылку - гляну на досуге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 08:19 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
[quot Сергей Ильич] ---А может не стоит изображать св.невинность. Ведь Вы же прекрасно знаете, что ---1) в С++ невозможно взять указатель на объект и оттрассировать какие у него вложенные указатели что такое оттрасировать ? отладчики что в VC что в BCC пркрасно ходят по ссылкам на любую глубину вложенности ? Или вы о чем ? --2) В С++ нельзя перемещать объекты --Это приводит к тому, что в С++ нет выбора, какую модель памяти использовать. Есть одна и негибкая. куда и откуда ? модели памяти были в ДОС-е или вы про стек-хип ? Тогда не пойму что значит двигать ? ---Я обычно меняю тон в зависимости от собеседника. У Вас нет какой-либо интеллектуальности, тонкого сарказма. "Для домохозяек!", "Может все-таки учиться программировать?" А что поделать, на многих языках приходится программировать, одни языки для домохозяек (Жава, васик, C#) - лозунги не мной придуманы - а компаниями вендорами. Вот уж С++ и ассемблер никогда не рекламировался для дилетантов. Поэтому обижаться в данном случае можно только на себя. --Зато почему-то под него всегда есть свежие MSDN и Platform SDK. И сторонние либы пишутся и собираются в первую очередь под MSVC++. кем пишутся и кем собираются ? фактами надо оперировать и статистикой. --Ну он же не весь грузится, только то что используется. Тогда чего вдруг вас стал интересовать размер программ на С++ ? Никто не мешает мне написать одно большую dll назвать моим рантаймом и тыкать всем в нос загрузчиком в 10К - вот какие компактные программы на С++. НЕ может быть компактными и быстрыми программы на языке где даже примитивные типы типа int являются классами со всеми вытекающими последствиями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 08:28 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
LepsikНЕ может быть компактными и быстрыми программы на языке где даже примитивные типы типа int являются классами со всеми вытекающими последствиями. Ээээээээээээээээээээээээээээээээ.................. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 09:35 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Восхищает обилие команд XOR Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 09:37 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Карабас БарабасВосхищает обилие команд XOR Ну это Код: plaintext 1. 2. 3. Это я тоже не понимаю зачем??? Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 09:53 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
_БалтикаНо ведь классов то нет.Да может это опимизатор так наваял :) Хотя по обилию бесполезных команд можно сделать вывод, что оптимизатора нет как такового Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 10:17 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас _БалтикаНо ведь классов то нет.Да может это опимизатор так наваял :) Хотя по обилию бесполезных команд можно сделать вывод, что оптимизатора нет как такового :) Ясно что нет. С оптимизатором это выглядит так: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 10:29 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
_Балтика:) Ясно что нет. С оптимизатором это выглядит так: 00000000 push ebp 00000001 mov ebp,esp 00000003 xor eax,eax 00000005 pop ebp 00000006 ret Да ..... уж ..... ибо ............ Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 10:42 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
авторначнем с того что жавный рантайм не стоит по умолчанию в ОС. Это значит тащит придется, причем для разного сотфа разные версии. Поэтому уже на можно считать спор о размерах окончен. А борландский рантайм уже вместе с ОС поставляться стал? авторЯ сужу по той паре папок с разными версия этого добра. одна версия 118 другая 105. Как бы то нибыло вынь да положь. Может хоть название папок приведешь? А то такие сведения большого доверия не вызывают авторУпасть не встать. Так можно договорится, что размер исходников всегда меньше бинарников - там ведь высокоуровневый язык. А ты сомневаешься? Да, размер исходников в общем случае будет меньше чем их машинный эквивалент, если только эти исходники записать с помощью байт-кода, а не human readable текста... авторА зачем коды в паскале, если мы говорим о С++ ? Может С++ показался слишком сложным для программирования после паскаля? Ну тогда зачем валить с больной головы( паскаль) на здоровую (С++) ? Ты, кстати, сам за тоном бы следил - а то не красиво как-то получается... Этот код генериться автоматически по определенным метаданным. Генериться на паскале по ряду причин, здесь не важных. Вот тут ты говорил что BCB стоит использовать потому что он поддерживает как паскалевский код так и С++-ный /topic/115992&pg=2&hl=lepsik#934506 Вместе с приведенным мною примером получается, что ты говорил неправду и паскаль в нем лучше не использовать?! авторУже не помню о чем сыр бор, поскольку в основном в уникоде и работаю с базой ? а что действительно есть проблемы ? Дай ссылку - гляну на досуге. http://www.sql.ru/forum/actualthread.aspx?tid=243135&hl=funikovyuri#2159906 авторНЕ может быть компактными и быстрыми программы на языке где даже примитивные типы типа int являются классами со всеми вытекающими последствиями. Уважаемый, не стоит рассуждать о вопросах, о которых не имеешь ни малейшего понятия (см. http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html). После подобного заявления твои фразы о том, что java - язык для дилетантов выглядят элементарным хамством. Очень жаль, что ты опустился до подобных заявлений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 15:12 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Lepsik .. По поводу дилетантства. Я не считаю, что сложность С++ должна быть оправданием его продвинутости . Любопытный факт. Ни один из сишников не может сходу написать рекурсивную функцию которая возвращает строку без дополнительных извращений типа создание классов-врапперов и т.п. Lepsik НЕ может быть компактными и быстрыми программы на языке где даже примитивные типы типа int являются классами со всеми вытекающими последствиями. Не могу с вами согласится, коллега. В продвинутых языках для типов свойстеннен дуализм. То есть их можно рассматривать как атомы, и как классы. Как вам удобно, так и работайте. Как частный случай, можно рассмотреть работу с коллекциями обьектов, но это уж на ваше усмотрение. Будет example - продолжим полемику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 21:40 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
mayton Любопытный факт. Ни один из сишников не может сходу написать рекурсивную функцию которая возвращает строку без дополнительных извращений типа создание классов-врапперов и т.п. Вот это ты ляпнул... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 07:42 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
2 Evgeny Ну..ну.. сказал А - надо говорить и Б. Предложи свой вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 08:32 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
mayton mayton Любопытный факт. Ни один из сишников не может сходу написать рекурсивную функцию которая возвращает строку без дополнительных извращений типа создание классов-врапперов и т.п. Вот это ты ляпнул... 2 Evgeny Ну..ну.. сказал А - надо говорить и Б. Предложи свой вариант. Вариант чего? "Рекурсивная функция возвращающая строку", как-то уж слишком общо. Какие требования? А то, вот эти варианты тоже вполне подходят :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 09:31 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Или вот так :) (потому что по "сишник" не совсем понятно - имеется в виду пишущий на С или С++) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 09:39 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Да, можно сказать, что "с ходу не написал", потому что не обрабатываю случай когда переданный параметр отрицательный. Увы мне, увы. mea culpa :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 09:42 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
Может хватит пиьками меряться ? Форум сишный, и доказать тут, что С/С++ гамно - невозможно, да и надо ли ? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 10:37 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
А может лучше сравнить VB и Fortran или ещё чего? Вообще тема - какой язык для домохозяек а какой для крутых программеров и какой компилятор (среда разработки) лучше - страшно увлекательная. Лучше только сравнение SQL серверов - казалось бы и тесты есть, а народ чем-то недоволен. Что касается слухов о неудобстве, размере и пр., то вот расчёт корреляции Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. VC 7.1 Время на написание ~ 15 минут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 10:41 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
niknameА может лучше сравнить VB и Fortran или ещё чего? Вообще тема - какой язык для домохозяек а какой для крутых программеров и какой компилятор (среда разработки) лучше - страшно увлекательная. Лучше только сравнение SQL серверов - казалось бы и тесты есть, а народ чем-то недоволен. Что касается слухов о неудобстве, размере и пр., то вот расчёт корреляции Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. VC 7.1 Время на написание ~ 15 минут Че сказать...отец!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 02:07 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
ОК. Благодарю всех за содействие. Я доволен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2006, 10:43 |
|
||
|
Антиправила C++
|
|||
|---|---|---|---|
|
#18+
funikovyuri А борландский рантайм уже вместе с ОС поставляться стал? от борландавского рантайма там 25К. Если не пользоваться его библиотеками. авторЯ сужу по той паре папок с разными версия этого добра. одна версия 118 другая 105. Как бы то нибыло вынь да положь. --Может хоть название папок приведешь? А то такие сведения большого доверия не вызывают достаточно зайти в анинсталяцию и посмотреть сколько добра приплыло . J2SE Runtime Enviroment 1.50.0.40 151 Mb J2SE Runtime Enviroment 1.4.2_3 107 Mb или ты только размер папки java считаешь ? --Ты, кстати, сам за тоном бы следил - а то не красиво как-то получается... извини, не хотел кого-либо обидеть - сам был очень расстроен, когда увидел присланный паскалевский текст. Получается обсуждаем С++, а ты паскаль присылаешь. --Вот тут ты говорил что BCB стоит использовать потому что он поддерживает как паскалевский код так и С++-ный /topic/115992&pg=2&hl=lepsik#934506 ---Вместе с приведенным мною примером получается, что ты говорил неправду и паскаль в нем лучше не использовать?! И сейчас говорю, что VS2005 еще слаб по части использования совметного кода даже по сравнению с Борландом v3. ---http://www.sql.ru/forum/actualthread.aspx?tid=243135&hl=funikovyuri#2159906 Если ты внимательно прочтешь топик до конца то увидишь, что твоя проблема была зафиксена, так что твое возражение не принято. --Уважаемый, не стоит рассуждать о вопросах, о которых не имеешь ни малейшего понятия (см. http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html). да тут я соглашусь - давно не читал новых ревизий жавы, успевших подоптимизировать и код и подредактировать описания. ---После подобного заявления твои фразы о том, что java - язык для дилетантов выглядят элементарным хамством. Очень жаль, что ты опустился до подобных заявлений. это не мои заявления, а рекламные продавцов услуг. Если профи пишет макрос для бейсика, то определению не может быть дилетантоm. Я говорил о позиционировании языка для начинающих. По жизни и VB и Java на волне бума 1999-2000 предлагался как простое решение для программирования. Прошу прощения если кого я обидел. Но серьезными языками ни тот ни другой не считаю по прежнему. Хотя на первой жаве пару проектов сделал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 18:04 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2032089]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
175ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 529ms |

| 0 / 0 |
