powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Антиправила C++
49 сообщений из 49, показаны все 2 страниц
Антиправила C++
    #33483157
waster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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->", чтобы стал более понятен великий смысл и необходимость данной конструкции. Сейчас в Языке++ есть только одна возможность обойти создание лишних указателей в данном контексте - это статические функции и члены данных.


Автор очень просит всех, кто имеет такую возможность, донести данные пункты в комитет ДО принятия новой версии стандарта языка. Я очень люблю С++, но я с ним уже просто замучился...
...
Рейтинг: 0 / 0
Антиправила C++
    #33483185
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Автор очень просит всех, кто имеет такую возможность, донести данные пункты в комитет ДО принятия новой версии стандарта языка. Я очень люблю С++, но я с ним уже просто замучился...

может все таки лучше поменять стиль программирования ?
...
Рейтинг: 0 / 0
Антиправила C++
    #33483202
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1...
Интерфейсы в C++ есть. Но они реализованы как классы. Яркий пример
- технология COM, CORBA. Вроде-бы из концепции языка мы не выпадаем, но
в то-же время, разработка без использования Визарда-компонентов
становится достаточно сложным для человеческого восприятия процессом.
Грубо говоря, лабать код в блокноте становится сложнее и сложнее

Когда разбирался с COM - крыл по матери всех его учредителей. Как
понавводили всякой х..ни. Скажите пожалуйста зачем мне GUID ?
Какой смысл для МЕНЯ он несет?


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

Собственно для меня - без разницы в каком файле (пакете, сборке) лежит
класс или интерфейс. Гораздо важнее насколько логично и гладко ложится
его идентификация в пространство имен.

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

Для Java и .Net., был заложен механизм "рефлексирования" бинарника.
А это делает хедер ненужным.

2...
Плюсы удобны для сбора совершенно автономного кода (драйвер, программа
для микроконтроллера, бут-сектор и.т.п). Это можно рассматривать как
преимущество так и недостаток.

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

3...
По поводу прав доступа. Это обширная тема для дискуссий на предмет
безопасности. В самом деле... Обладая указателем на область памяти, и
имея представление о протоколе, ничто не мешает мне взламывать все приватные
поля и вызывать скрытые методы. Это трюкачество. И сам факт его сущестования
дискредитирует любую модель программирования где такое допускается. Особенно
если вопрос касается эксплуатации серверов приложений.

Недаром солидные конторы (и ваш покорный слуга) тратят деньги на
создание изощренных Policy и FGAC для библиокек кода,
балансируя на грани удобно / безопасно .

В заключение хочу добавить. Доносить о каких-либо пунктах в какой-либо
комитет я не буду. Потому-как они общеизвестны. А поддерживать спецификацию
нового С++ я не собираюсь потому-как считаю, что овчинка выделки
не стоит. Лучше поддержать принципиально новое решение.
...
Рейтинг: 0 / 0
Антиправила C++
    #33483252
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОбладая указателем на область памяти, и
имея представление о протоколе, ничто не мешает мне взламывать все приватные
поля и вызывать скрытые методы. Это трюкачество. И сам факт его сущестования
дискредитирует любую модель программирования где такое допускается.
В уголовном кодексе не написано что нельзя сморкаться соплёй оземь. Однако, некоторые это делают, а некоторые нет. Это вопрос воспитания, в данном случае - стиля. И навряд ли стоит вносить это в уголовный кодекс (спецификацию языка).
...
Рейтинг: 0 / 0
Антиправила C++
    #33483270
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В уголовном кодексе написано что нельзя воровать чужое, однако некоторые так делают, некоторые нет.
Но это же не повод убирать это из уголовного кодекса
:)
...
Рейтинг: 0 / 0
Антиправила C++
    #33483466
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю свои "5 копеек":
Не нравится - не ешь.
...
Рейтинг: 0 / 0
Антиправила C++
    #33483513
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waster

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

Далее если вы написали иерархию классов вы НЕ обязаны засовывать ее всю в заголовок для этого используется препроцессор

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#ifndef DerivedClassHeaderH
#define DerivedClassHeaderH

#include "baseclassheader.h"
class DerivedClass
{
};
#endif

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

Также поддержка пространств имен в С++ не включает в себя возможности ограничения области видимости классов (они все являются public) и если нужно можно скрывать классы объявляя их внутренними в private секции других классов.

2. по поводу свойств... Принято считать что поддержка свойств на уровне языка это синтаксический сахар без которого можно и так прожить (принципиально они ни на что не влияют). Так свойств нет в java (вместо этого там есть соглашение о наименовании). Также многие поставщики компиляторов добавили поддержку свойств в свои продукты (см. Borland).

Делать выводы о элегантности С++ и java в пользу C# на основе наличия в последнем свойств я бы не стал :)

3. Анонимные классы (так они вообще-то называются). Они в java появились не просто так а как часть концепции и подхода к написанию определенного кода. Это достаточно специфичная вещь и она остается непонятой до сих пор достаточно большой частью разработчиков. Если еще учесть что такие классы можно легко заменить на обычные (например внутренние) то решающей роли в общей идеологии ООП они не играют


4. Как я понял вы имеете в виду поддержку двухсторонних связей между объектами... Т.е. вы считаете что если один объект (например,a_pub) является частью другого (D) то a_pub должен иметь способ доступа к объекту-владельцу?

Тогда ответ будет звучать так - это сделано из соображений производительности. Дело в том что навигация от части к целому нужна далеко не всегда. В случае если такая навигация нужна то в класс части нужно добавить атрибут D *owner.

Вообще, если говорить строго, отношения между классами (в терминах UML) бывают 4х основных видов - это ассоциация, агрегация, композиция и наследования. Так вот из них только композиция отображается на С++ в структуру которую вы привели. Дело в том что агрегация допускает использование одного и того же объекта в качестве части для нескольких разных объектов класса D. Т.е. для реализации двухсторонней связи в общем случае для настоящей агрегации мы получим во-первых сложный, во-вторых очень затратных механизм, который (как я говорил) в большинстве случаев будет не нужен....

Кстати, ключевое слово friend тут вообще не причем, так как часть должна общаться с целым также через его открытый контракт и не иметь доступа к его private-части...

Теперь насчет super->... В С++ такой конструкции нет по очень простой причине - наличие множественного наследования :)
...
Рейтинг: 0 / 0
Антиправила C++
    #33484030
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik--Однако к чему привёл такой подход? C# и Java считаются элегантными языками,

для домохозяек.+ 1е100 !
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Антиправила C++
    #33484710
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабас Lepsik--Однако к чему привёл такой подход? C# и Java считаются элегантными языками,

для домохозяек.+ 1е100 !

Что такого остроумного в столь плоском утверждении? Если бы Лепсег напесал что для индусов, тогда зерно здравого смысла было бы. Но домохозяйки...
...
Рейтинг: 0 / 0
Антиправила C++
    #33484724
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ИльичНо домохозяйки...не за остроумие,а за точность аналогии. Домохозяйки любят всякие кухонные комбайны и посудомоечные машины
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Антиправила C++
    #33484781
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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+ раза большей.
...
Рейтинг: 0 / 0
Антиправила C++
    #33484924
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ИльичВ результате получима вот это не факт, батенька
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Антиправила C++
    #33484961
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта, народ, канчай базар разводить. Хочешь флейма - иди в вон Программирование, там и обсуждай.
...
Рейтинг: 0 / 0
Антиправила C++
    #33485337
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik

--Однако к чему привёл такой подход? C# и Java считаются элегантными языками,

для домохозяек.

Афтар жжотъ!
...
Рейтинг: 0 / 0
Антиправила C++
    #33485700
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ИльичМожно сделать эксперимент - написать на чистом С++ какое-нибудь тривиальное приложение - которое бы считало pi с любой заданной точностью или корелляцию данных в двух файлах. Причем все делать в стиле чистого С++, STL + iostreams, безо всяких C-хаков, все делать in a typesafe maneer.
В результате получим бинарь размером ~1Мб работающий со скоростью как у Java - аналога (или меньшей). При сложности кодирования в 2+ раза большей.

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

я делаю проекты и в джаве и в С++ и отличаю язык программирования от мягкого и теплого.

---Это расширение характерно для C++ Builder, который в настоящий момент скорее мертв, чем жив.

Builder 2006 мертв для кого ? для индусских домохозяек или адептов жавы после курсов тети Сони жава за 21 день ?
...
Рейтинг: 0 / 0
Антиправила C++
    #33485869
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik
даже без споров знаю что такое умещается в единицы байтов. со скоростью в разы лучше чем джаве. вы бы товарисч не позорились бы.

Бинарь, которая выдает "Hello World" через stdio на С занимает 40 кб, на C++ через iostreams - 200кб+. Какие единицы байт? Если активно использовать STL, то он зае@ет кучу постоянной неявными аллокациями/деаллокациями мелких блоков памяти, выполняющихся на уродской модели памяти С++ за линейное время, угробив перформанс.

Lepsik
---Это расширение характерно для C++ Builder, который в настоящий момент скорее мертв, чем жив.

Builder 2006 мертв для кого ? для индусских домохозяек или адептов жавы после курсов тети Сони жава за 21 день ?

Тсой жыфф (С). Я не тот человек, который быдет смотреть в рот Борландам, когда же они сделают очередной высер Билдера. MSVC++ пока стабильно выходит раз за разом, становясь лучше. Последние версии даже уверенно проглатывают шаблоны из Loki, и при этом они по скорости компилирования получше Intel С++.
Про С++ Builder X помницца Вы мне беспардонно наврали - он не был продолжением С++ Builder 5. Сам его не щупал, но судя по отзывам это был блокнот с колорингом к которому можно подключить внешний компилятор (MinGW или бесплатный борландовский). Визуального конструирования форм в нем не было. Какой был смысл в этой лжи?
Почему Вы рассматриваете борландовские расширения как стандарт на С++, который "отменяет велосипеды" ?
...
Рейтинг: 0 / 0
Антиправила C++
    #33485959
BlackStar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Ильич Lepsik
даже без споров знаю что такое умещается в единицы байтов. со скоростью в разы лучше чем джаве. вы бы товарисч не позорились бы.

Бинарь, которая выдает "Hello World" через stdio на С занимает 40 кб, на C++ через iostreams - 200кб+.

Это у вас какие-то странные компиляторы.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// test.c
#include <stdio.h>
int main()
{
	puts( "Hello, world" );
	return  0 ;
}
// test.cc
#include <iostream>
int main()
{
	std::cout << "Hello, world" << std::endl;
	return  0 ;
}
Код: plaintext
1.
2.
3.
4.
5.
6.
bs@Hearse:~/prj/q> gcc -O3 -o test_c test.c
bs@Hearse:~/prj/q> g++ -O3 -o test_cpp test.cc
bs@Hearse:~/prj/q> ls -l test_*
total 28
-rwxr-xr-x  1 bs bs 7006 2006-01-16 20:27 test_c
-rwxr-xr-x  1 bs bs 8498 2006-01-16 20:28 test_cpp
...
Рейтинг: 0 / 0
Антиправила C++
    #33486019
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackStar
Это у вас какие-то странные компиляторы.

На униксах С++ iostreams наверное как-то интегрированы в библиотеки ОС. Я экспериментировал на win32 (stlport 4.5.3 + sgi iostreams). Получал exe килобайт по 400 без отладочной информации.
...
Рейтинг: 0 / 0
Антиправила C++
    #33486042
redskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Ильич 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 кб.)

Причем, уверен, покрутив настройками можно сделать бинарники и поменьше. Никогда не заморачивался по этому поводу, и сейчас не стал. Настройки, повторюсь, по умолчанию. Если надо могу, конечно, прислать содержимое ком. строки, но там ничего особенного.
...
Рейтинг: 0 / 0
Антиправила C++
    #33486057
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уже было на ПТ, но все равно в тему
...
Рейтинг: 0 / 0
Антиправила C++
    #33486100
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[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 мег рантайма.
...
Рейтинг: 0 / 0
Антиправила C++
    #33486178
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ИльичЯ экспериментировал на win32 (stlport 4.5.3 + sgi iostreams). Получал exe килобайт по 400 без отладочной информации.Мягко говоря, преувеличение. Приведенный выше код для С и С++, скомпилированный на Бильдере 6:
С: 50 688
С++: 280 576

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Антиправила C++
    #33486440
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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?
...
Рейтинг: 0 / 0
Антиправила C++
    #33486544
Бармолей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А чего, было бы не плохо иметь специфику для агрегации. Но, чтобы не давать слишком много необоснованного доступа сторонним классам, сделать так, чтобы все это касалось только nested-классов, объявленных прямо внутри контейнера, а не снаружи, как в приведенном примере. И плюс еще с какимнибудь модификатором. Например так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
class Parent 
{
    ....
    void UsefulFunc();
    ....
    [SIZE= 3 ][color=blue]aggregated[/color][/SIZE] class Child
    {
         void CallParentFunc()
         {
              super->UsefulFunc();
         }
    };
    ....
};
Поскольку класс Child объявлен прямо внутри Parent, при написании этого Parent, то, вероятно, ему в плане прав доступа можно сделать послабления.
...
Рейтинг: 0 / 0
Антиправила C++
    #33486555
Бармолей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, форматирование в сорсах не действует. Читать как:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
class Parent 
{
    ....
    void UsefulFunc();
    ....
    aggregated class Child
    {
         void CallParentFunc()
         {
              super->UsefulFunc();
         }
    };
    ....
};
где aggregated - новый кейворд
...
Рейтинг: 0 / 0
Антиправила C++
    #33486783
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 мег рантайма.
Ну он же не весь грузится, только то что используется.
...
Рейтинг: 0 / 0
Антиправила C++
    #33486792
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, это все же моё

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


А может не стоит изображать св.невинность. Ведь Вы же прекрасно знаете, что
1) в С++ невозможно взять указатель на объект и оттрассировать какие у него вложенные указатели
2) В С++ нельзя перемещать объекты
Это приводит к тому, что в С++ нет выбора, какую модель памяти использовать. Есть одна и негибкая.
...
Рейтинг: 0 / 0
Антиправила C++
    #33488102
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Ильич Последние версии даже уверенно проглатывают шаблоны из Loki, и при этом они по скорости компилирования получше Intel С++.



А Intel просто никуда не торопится. Ему не нужно. Он задуман как plugable -компилятор вместо MS-овского. Компилят им только релизы, а в отладке пользуются стандартным. Зато код он генерит лучше, и ошибки находит такие, какие MS даже не замечает. В общем - это дополнительный, опциональный беловой компилятор.
...
Рейтинг: 0 / 0
Антиправила C++
    #33488126
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Корочи, бальшая просьба к афтару : выпий вотки и иди праграми на бейсике.
...
Рейтинг: 0 / 0
Антиправила C++
    #33488512
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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?

Уже не помню о чем сыр бор, посокльку в основном в уникоде и работаю с базой ? а что действительно есть проблемы ?
Дай ссылку - гляну на досуге.
...
Рейтинг: 0 / 0
Антиправила C++
    #33488518
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Сергей Ильич]

---А может не стоит изображать св.невинность. Ведь Вы же прекрасно знаете, что
---1) в С++ невозможно взять указатель на объект и оттрассировать какие у него вложенные указатели

что такое оттрасировать ? отладчики что в VC что в BCC пркрасно ходят по ссылкам на любую глубину вложенности ? Или вы о чем ?

--2) В С++ нельзя перемещать объекты
--Это приводит к тому, что в С++ нет выбора, какую модель памяти использовать. Есть одна и негибкая.

куда и откуда ? модели памяти были в ДОС-е или вы про стек-хип ? Тогда не пойму что значит двигать ?

---Я обычно меняю тон в зависимости от собеседника. У Вас нет какой-либо интеллектуальности, тонкого сарказма. "Для домохозяек!", "Может все-таки учиться программировать?"

А что поделать, на многих языках приходится программировать, одни языки для домохозяек (Жава, васик, C#) - лозунги не мной придуманы - а компаниями вендорами. Вот уж С++ и ассемблер никогда не рекламировался для дилетантов.
Поэтому обижаться в данном случае можно только на себя.

--Зато почему-то под него всегда есть свежие MSDN и Platform SDK. И сторонние либы пишутся и собираются в первую очередь под MSVC++.

кем пишутся и кем собираются ? фактами надо оперировать и статистикой.

--Ну он же не весь грузится, только то что используется.
Тогда чего вдруг вас стал интересовать размер программ на С++ ?
Никто не мешает мне написать одно большую dll назвать моим рантаймом и тыкать всем в нос загрузчиком в 10К - вот какие компактные программы на С++.

НЕ может быть компактными и быстрыми программы на языке где даже примитивные типы типа int являются классами со всеми вытекающими последствиями.
...
Рейтинг: 0 / 0
Антиправила C++
    #33488607
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LepsikНЕ может быть компактными и быстрыми программы на языке где даже примитивные типы типа int являются классами со всеми вытекающими последствиями.
Ээээээээээээээээээээээээээээээээ..................
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int _tmain()
{
	int k =  10 ;
	int l =  10 ;
	int j =  10 ;
	int i =  3 ;
	i = j;
  	return  0 ;
}
2
Код: 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.
int _tmain()
{
//	int k = 10;
 00000000   push        ebp  
 00000001   mov         ebp,esp 
 00000003   sub         esp,10h 
 00000006   push        edi  
 00000007   push        esi  
 00000008   push        ebx  
 00000009   xor         esi,esi 
0000000b  xor         edi,edi 
0000000d  xor         ebx,ebx 
0000000f  mov         dword ptr [ebp-10h], 0  
 00000016   mov         dword ptr [ebp-10h],0Ah 
//	int l = 10;
0000001d  mov         ebx,0Ah 
//	int j = 10;
 00000022   mov         edi,0Ah 
//	int i = 3;
 00000027   mov         esi, 3  
//	i = j;
0000002c  mov         esi,edi 
	return  0 ;
0000003a  nop              
0000003b  jmp         0000003D 
}
И где же здесь классы?
...
Рейтинг: 0 / 0
Антиправила C++
    #33488613
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Восхищает обилие команд XOR
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Антиправила C++
    #33488640
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас БарабасВосхищает обилие команд XOR
Ну это
Код: plaintext
1.
2.
3.
 00000009   xor         esi,esi 
0000000b  xor         edi,edi 
0000000d  xor         ebx,ebx 
перестраховка. Для универсальности, судя по всему.
Это я тоже не понимаю зачем???
Код: plaintext
1.
2.
0000000f  mov         dword ptr [ebp-10h], 0  
 00000016   mov         dword ptr [ebp-10h],0Ah 
Но ведь классов то нет.
...
Рейтинг: 0 / 0
Антиправила C++
    #33488696
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_БалтикаНо ведь классов то нет.Да может это опимизатор так наваял :)
Хотя по обилию бесполезных команд можно сделать вывод, что оптимизатора нет как такового
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Антиправила C++
    #33488723
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабас _БалтикаНо ведь классов то нет.Да может это опимизатор так наваял :)
Хотя по обилию бесполезных команд можно сделать вывод, что оптимизатора нет как такового
:) Ясно что нет. С оптимизатором это выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
 00000000   push        ebp  
 00000001   mov         ebp,esp 
 00000003   xor         eax,eax 
 00000005   pop         ebp  
 00000006   ret              
...
Рейтинг: 0 / 0
Антиправила C++
    #33488766
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Балтика:) Ясно что нет. С оптимизатором это выглядит так:
00000000 push ebp
00000001 mov ebp,esp
00000003 xor eax,eax
00000005 pop ebp
00000006 ret
Да ..... уж ..... ибо ............
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Антиправила C++
    #33489646
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторначнем с того что жавный рантайм не стоит по умолчанию в ОС. Это значит тащит придется, причем для разного сотфа разные версии. Поэтому уже на можно считать спор о размерах окончен.

А борландский рантайм уже вместе с ОС поставляться стал?

авторЯ сужу по той паре папок с разными версия этого добра. одна версия 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 - язык для дилетантов выглядят элементарным хамством. Очень жаль, что ты опустился до подобных заявлений
...
Рейтинг: 0 / 0
Антиправила C++
    #33490449
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik
..


По поводу дилетантства.

Я не считаю, что сложность С++ должна быть оправданием
его продвинутости .

Любопытный факт. Ни один из сишников не может сходу написать
рекурсивную функцию которая возвращает строку без дополнительных
извращений типа создание классов-врапперов и т.п.

Lepsik
НЕ может быть компактными и быстрыми программы на языке где даже примитивные типы типа int являются классами со всеми вытекающими последствиями.


Не могу с вами согласится, коллега. В продвинутых языках
для типов свойстеннен дуализм. То есть их можно рассматривать
как атомы, и как классы. Как вам удобно, так и работайте.

Как частный случай, можно рассмотреть работу с коллекциями
обьектов, но это уж на ваше усмотрение. Будет example - продолжим
полемику.
...
Рейтинг: 0 / 0
Антиправила C++
    #33490653
Eugene7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Любопытный факт. Ни один из сишников не может сходу написать
рекурсивную функцию которая возвращает строку без дополнительных
извращений типа создание классов-врапперов и т.п.

Вот это ты ляпнул...
...
Рейтинг: 0 / 0
Антиправила C++
    #33490699
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Evgeny

Ну..ну.. сказал А - надо говорить и Б. Предложи свой вариант.
...
Рейтинг: 0 / 0
Антиправила C++
    #33490807
redskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* f1(int n);
char* f1(int n)
{
    if(n)
        return f1(n- 1 );
    else
    {
        char *p = malloc( 6 );
        if(p)
            strncpy(p, "hello\0",  6 );
        return p;
    }
}

char* f2(int n, char* dst, int max_len);
char* f2(int n, char* dst, int max_len)
{
    if(n)
        return f2(n- 1 , dst, max_len);
    else
    {
        strncpy(dst, "hello\0", max_len);
        return dst;
    }
}


int main()
{
    char *p1 = f1( 5 );
    if(p1)
    {
        printf("p1 %s\n", p1);
        free(p1);
    }

    char *p2 = malloc( 6 );
    if(p2)
    {
       printf("p2 %s\n", f2( 20 , p2,  5 ));
       free(p2);
    }
   
    return  0 ;
}

...
Рейтинг: 0 / 0
Антиправила C++
    #33490828
redskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или вот так :)

(потому что по "сишник" не совсем понятно - имеется в виду пишущий на С или С++)

Код: 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.
#include <string>
#include <iostream>

using namespace std;

string f1(int n);
string& f2(int n, string& s);

string f1(int n)
{
    if(n)
        return f1(n- 1 );
    else
        return "hello";
}

string& f2(int n, string& s)
{
    if(n)
        return f2(n- 1 , s);
    else
    {
        s = "hello";
        return s;
    }
}


int main()
{
    string s;
    cout << "f1 = " << f1( 5 ) << endl 
         << "f2 = " << f2( 5 , s) << endl;
    return  0 ;
}

...
Рейтинг: 0 / 0
Антиправила C++
    #33490836
redskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, можно сказать, что "с ходу не написал", потому что не обрабатываю случай когда переданный параметр отрицательный. Увы мне, увы.
mea culpa :)
...
Рейтинг: 0 / 0
Антиправила C++
    #33490994
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может хватит пиьками меряться ? Форум сишный, и доказать тут, что С/С++ гамно - невозможно, да и надо ли ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Антиправила C++
    #33491019
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.
#include "stdafx.h"
#include <time.h>
#include <vector>
#include <vector>
#include <fstream>
#include <algorithm>

using namespace std;
typedef struct {
	double d[ 2 ];
}_Data;

void usage(void)
{
	cerr<<"stat {[g N]|[c]}\ng - generate file 1.dat 2.dat with n > 1 random numbers\nc - calculate correlation\n"<<endl;
	exit( 1 );
}

class MyFunc
{
private:
   double dAvg[ 2 ];   
public:

   MyFunc ( const double& _Val1, const double& _Val2) {
		dAvg[ 0 ] = _Val1;
		dAvg[ 1 ] = _Val2;
		dProd =  0 .;
   }

   void operator ( ) ( _Data &_Val) 
   {
		dProd += (_Val.d[ 0 ]-dAvg[ 0 ])*(_Val.d[ 1 ]-dAvg[ 1 ]);
   }

public:
   double dProd;   

};

int _tmain(int argc, _TCHAR* argv[])
{
	if ( argc <  2  )
		usage();
	if ( toupper(argv[ 1 ][ 0 ]) == 'G' ){
		if ( argc !=  3  )
			usage();
		int n = atoi(argv[ 2 ]);
		if ( n<= 1  ){
			cerr<<"n <= 1!"<<endl;
			usage();
		}
		ofstream f1("1.dat"),f2("2.dat");
		srand( (unsigned)time( NULL ) );
		for(int i =  0 ; i<n; i++){
			f1<<rand()<<endl;
			f2<<rand()<<endl;						
		}
	}else if ( toupper(argv[ 1 ][ 0 ]) == 'C' ){
		ifstream f1("1.dat"),f2("2.dat");
		vector<_Data>dat;
		double d,dAvg[ 2 ]={ 0 ., 0 .},dDisp[ 2 ]={ 0 ., 0 .};
		while(f1>>d){
			_Data tmp;
			dAvg[ 0 ]+=d;
			dDisp[ 0 ]+=d*d;
			tmp.d[ 0 ] = d;
			f2>>d;
			dAvg[ 1 ]+=d;
			dDisp[ 1 ]+=d*d;
			tmp.d[ 1 ] = d;
			dat.push_back(tmp);
		}
		dAvg[ 0 ] /= dat.size();
		dAvg[ 1 ] /= dat.size();
		MyFunc mf(dAvg[ 0 ],dAvg[ 1 ]);
		for_each(dat.begin(),dat.end(),mf);
		cout<<"Avg1="<<dAvg[ 0 ]<<endl<<"Avg2="<<dAvg[ 1 ]<<endl
<<"Disp1="<<dDisp[ 0 ]/(dat.size()- 1 )<<endl<<"Disp2="<<dDisp[ 1 ]/(dat.size()- 1 )<<endl		
<<"Corr="<<mf.dProd/dDisp[ 0 ]/dDisp[ 1 ]<<endl;

	}
	else usage();

	return  0 ;
}
Размер exe - 110 592
VC 7.1
Время на написание ~ 15 минут
...
Рейтинг: 0 / 0
Антиправила C++
    #33493172
klinkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
#include "stdafx.h"
#include <time.h>
#include <vector>
#include <vector>
#include <fstream>
#include <algorithm>

using namespace std;
typedef struct {
	double d[ 2 ];
}_Data;

void usage(void)
{
	cerr<<"stat {[g N]|[c]}\ng - generate file 1.dat 2.dat with n > 1 random numbers\nc - calculate correlation\n"<<endl;
	exit( 1 );
}

class MyFunc
{
private:
   double dAvg[ 2 ];   
public:

   MyFunc ( const double& _Val1, const double& _Val2) {
		dAvg[ 0 ] = _Val1;
		dAvg[ 1 ] = _Val2;
		dProd =  0 .;
   }

   void operator ( ) ( _Data &_Val) 
   {
		dProd += (_Val.d[ 0 ]-dAvg[ 0 ])*(_Val.d[ 1 ]-dAvg[ 1 ]);
   }

public:
   double dProd;   

};

int _tmain(int argc, _TCHAR* argv[])
{
	if ( argc <  2  )
		usage();
	if ( toupper(argv[ 1 ][ 0 ]) == 'G' ){
		if ( argc !=  3  )
			usage();
		int n = atoi(argv[ 2 ]);
		if ( n<= 1  ){
			cerr<<"n <= 1!"<<endl;
			usage();
		}
		ofstream f1("1.dat"),f2("2.dat");
		srand( (unsigned)time( NULL ) );
		for(int i =  0 ; i<n; i++){
			f1<<rand()<<endl;
			f2<<rand()<<endl;						
		}
	}else if ( toupper(argv[ 1 ][ 0 ]) == 'C' ){
		ifstream f1("1.dat"),f2("2.dat");
		vector<_Data>dat;
		double d,dAvg[ 2 ]={ 0 ., 0 .},dDisp[ 2 ]={ 0 ., 0 .};
		while(f1>>d){
			_Data tmp;
			dAvg[ 0 ]+=d;
			dDisp[ 0 ]+=d*d;
			tmp.d[ 0 ] = d;
			f2>>d;
			dAvg[ 1 ]+=d;
			dDisp[ 1 ]+=d*d;
			tmp.d[ 1 ] = d;
			dat.push_back(tmp);
		}
		dAvg[ 0 ] /= dat.size();
		dAvg[ 1 ] /= dat.size();
		MyFunc mf(dAvg[ 0 ],dAvg[ 1 ]);
		for_each(dat.begin(),dat.end(),mf);
		cout<<"Avg1="<<dAvg[ 0 ]<<endl<<"Avg2="<<dAvg[ 1 ]<<endl
<<"Disp1="<<dDisp[ 0 ]/(dat.size()- 1 )<<endl<<"Disp2="<<dDisp[ 1 ]/(dat.size()- 1 )<<endl		
<<"Corr="<<mf.dProd/dDisp[ 0 ]/dDisp[ 1 ]<<endl;

	}
	else usage();

	return  0 ;
}
Размер exe - 110 592
VC 7.1
Время на написание ~ 15 минут
Че сказать...отец!!!!
...
Рейтинг: 0 / 0
Антиправила C++
    #33495443
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК. Благодарю всех за содействие. Я доволен.
...
Рейтинг: 0 / 0
Антиправила C++
    #33498098
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 предлагался как простое решение для программирования.

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


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