FDSC wrote:
> C>Врет. Строковые команды еще с 486 процессора работают медленнее. > Минуточку. Медленнее чего? Приведи asm код, который работает быстрее, > или хотя бы (если лень) опиши его. Впрочем, я посмотрю VC 7, может > найду там что-нибудь интересное.
Медленнее явного цикла.
> C>В VC7.1 (и тем более в VC8.0) компилятор намного лучше, чем в VC6. > C>Больше оптимизаций, лучше качество работы, меньше глюков. Ну и > поддержка > C>Стандарта С++ почти полная. > И что из этого?
Ничего, просто работать с ним в разы удобнее, чем с древним VC6.
> Там что, появилась поддержка VCL? Я же говорю не про компилятор. > Delphi позволяет разрабатывать приложения быстрее.
Это г. под названием VCL давно пора отправить на свалку. Есть нормальные
решения: QT или хотя бы WTL.
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[9]: Частота ошибок в зависимости от языка: что делать?
tarkil wrote
> C>У меня копия из CVS. У BOOST_STRONG_TYPEDEF есть один недостаток — в > нем > C>определен оператор присваивания из исходного типа. > И конструктор. И оператор приведения к исходному типу. Ай-яй-яй...
Еще и операторы сравнения, кстати
У них там в CVS еще библиотека физических констант развивается
(медленно), там еще все с поддержкой размерностей сделано было
То есть примерно так:
Force f;
Mass m(12);
Acceleration a(11);
f=m*a; //OK
f=m; //Error
> C>Выглядит он так: > C> > >C>template<class T> struct strong_typedef : boost::totally_ordered1< >C>strong_typedef<T> > ... >C> > > У этого класса есть большой минус — больше одного псевдонима int не > сделаешь.
Кстати да, хотя там где он использовался это было ненужно.
> Наверное, лучше из BOOST_STRONG_TYPEDEF изъять левые методы.
С этим никаких проблем нет
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[8]: Частота ошибок в зависимости от языка: что делать?
Здравствуйте, WolfHound, Вы писали:
WH>На дельфе хорошо только формочки клепать. А как язык дельфи отстает от С++ по всем параметрам.
Ой-ёй, а Вы Delphi Pascal точно хорошо знаете? Я на нём не писал уже года четыре, но воспоминания самые хорошие. Например, там есть полноценная поддержка RTTI, именованные конструкторы, удобные списки аргументов переменной длины... это что в голову сходу пришло.
tarkil wrote:
> WH>На дельфе хорошо только формочки клепать. А как язык дельфи отстает > от С++ по всем параметрам. > Ой-ёй, а Вы Delphi Pascal точно хорошо знаете? Я на нём не писал уже > года четыре, но воспоминания самые хорошие. Например, там есть > полноценная поддержка RTTI
RTTI есть в С++ уже лет 10. Reflection'а нет — это недостаток, но он и
не нужен.
> именованные конструкторы, удобные списки аргументов переменной > длины... это что в голову сходу пришло.
Именованые конструкторы — это фабрики, только интегрированные в язык
(уродство). Аргументы переменной длины в С++ не нужны — есть другие
средства (перегрузка операторов).
Зато в Дельфи нет: умных указателей, автоматических объектов,
темплейтов. Дальше можно не продолжать.
Здравствуйте, tarkil, Вы писали:
WH>>На дельфе хорошо только формочки клепать. А как язык дельфи отстает от С++ по всем параметрам. T>Ой-ёй, а Вы Delphi Pascal точно хорошо знаете?
Я с него начинал. T>Я на нём не писал уже года четыре, но воспоминания самые хорошие.
У меня тоже были хорошие пока С++ не выучил. T>Например, там есть полноценная поддержка RTTI,
В С++ тоже есть RTTI. Несколько скромнее чем в дельфе но есть.
Что касается полноценности дельфевого RTTI то у меня язык не повернется назвать его полноценным после того как я поработал с reflection'о в .NET. T>именованные конструкторы,
В дельфе нет конструкторов. В дельфе есть фабрики на уровне языка.
Уродство еще то.
Ктомуже в С++ это делается на раз. Помнится я както развлекался и достиг синтаксиса почти как в дельфе. T>удобные списки аргументов переменной длины... это что в голову сходу пришло.
В С++ оно тоже есть... вот только никто этим не пользуется ибо нафиг не упало.
За то в С++ есть:
1)Шаблоны.
2)Автоматические деструкторы.
3)Перегрузка операторов.
И как следствие мы можем создавать умные указатели, типизированые коллекции, универсальные алгоритмы которые работают для любых типов причем с такойже скоростью как еслибы их писали для каждого типа отдельно...
Короче дельфе такие возможности и не снились.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: Частота ошибок в зависимости от языка: что делать?
Здравствуйте, Cyberax, Вы писали:
>> У этого класса есть большой минус — больше одного псевдонима int не сделаешь. C>Кстати да, хотя там где он использовался это было ненужно.
Это раешается добавлением еще одного параметра шаблона.
class strong_typedef_tag{};//Чтобы не поломать старый код
//Хотя я бы поломал ибо работы по починке не много да и компилятор носом ткнет.template<class T, class TAG = strong_typedef_tag> struct strong_typedef : boost::totally_ordered1<
strong_typedef<T> >
{
...
};
class NumberOfSymbolInStringTag{};
typedef boost::strong_typedef<int, NumberOfSymbolInStringTag> NumberOfSymbolInString;
class NumberOfSymbolInTextTag{};
typedef boost::strong_typedef<int, NumberOfSymbolInTextTag> NumberOfSymbolInText;
А лишние операторы это они зря
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Cyberax, Вы писали:
C>RTTI есть в С++ уже лет 10. Reflection'а нет — это недостаток, но он и C>не нужен.
Чую назревание священной войны... RTTI в C++ это убогая тачанка по сравнению с Дельфийским. Там даже поля и методы класса перебрать нельзя. Reflection это типа сериализации — сохранение/восстановление из потока? Ну кому как... Мне — нужен.
C>Именованые конструкторы — это фабрики, только интегрированные в язык C>(уродство).
Обосновать бы... Вот мне лично кажется что конструктор и фабрика выполняют одни и те же функции и уродским является как раз их разделение (ибо избыточно оно).
C>Аргументы переменной длины в С++ не нужны — есть другие C>средства (перегрузка операторов).
А с переменные аргументами всё равно часто удобнее. Классика это, конечно, форматирование строк.
// C++ - подобный (оно не скомпилируется, но важна идея!) :-)
string s;
s
<< "Фигня на постном масле = " << obj.getX() << endl
<< width(8) << precision(2) << "Она же, но на сливочном = " << obj.getX();
foo( s );
Кому как, а мне следующий вариант кажется куда как более простым и наглядным:
// C# - подобный
s = new String;
s.Format(
"Фигня на постном масле = {0}\n"
"Она же, но на сливочном = {0,8:p2}",
[obj.getX()]
);
foo( s );
C>Зато в Дельфи нет: умных указателей, автоматических объектов, C>темплейтов. Дальше можно не продолжать.
Да, там много чего нету, кто б спорил. Темплитами, кстати, почти никто похвастаться не может, кроме C++. А что подразумевается под автоматическими объектами? Которые не через new, а на стеке? Да, пожалуй, их не хватало, как и возможности определить переменную в произвольной точке. Зато в C++ не хватает вложенных функций... Вот, буквально полчаса назад жалел об этом.
--
wbr, Peter Taran
Re[9]: Частота ошибок в зависимости от языка: что делать?
Здравствуйте, tarkil, Вы писали:
T>Здравствуйте, Cyberax, Вы писали:
C>>RTTI есть в С++ уже лет 10. Reflection'а нет — это недостаток, но он и C>>не нужен.
T>Чую назревание священной войны... RTTI в C++ это убогая тачанка по сравнению с Дельфийским. Там даже поля и методы класса перебрать нельзя. Reflection это типа сериализации — сохранение/восстановление из потока? Ну кому как... Мне — нужен.
Reflection — это как раз и есть возможность перебрать поля и методы класса.
C>>Именованые конструкторы — это фабрики, только интегрированные в язык C>>(уродство).
T>Обосновать бы... Вот мне лично кажется что конструктор и фабрика выполняют одни и те же функции и уродским является как раз их разделение (ибо избыточно оно).
А зачем они, если вы всегда можете объвить статическую функцию в классе, которая будет создавать вам объект? По сути тоже самое
C>>Аргументы переменной длины в С++ не нужны — есть другие C>>средства (перегрузка операторов).
T>А с переменные аргументами всё равно часто удобнее. Классика это, конечно, форматирование строк.
Не нравится не кури... или кури strintf ...
T>Да, там много чего нету, кто б спорил. Темплитами, кстати, почти никто похвастаться не может, кроме C++.
Зато шарп может ими постыдиться...
T>А что подразумевается под автоматическими объектами? Которые не через new, а на стеке?
Да — которые на стеке, причём в любом месте локальной области видимости и содержат в себе те, которые создаются динамически, причём доступ к динамическим прозрачный и они уничтожаются вместе со статическими... Имеется в виду auto_ptr...
T>Зато в C++ не хватает вложенных функций... Вот, буквально полчаса назад жалел об этом.
Зато в C++ есть локальные классы, что суть есть тоже самое, только круче, потому что они могут быть даже шаблонами и быть вложены в шаблоны...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, WolfHound, Вы писали:
T>>Например, там есть полноценная поддержка RTTI, WH>В С++ тоже есть RTTI. Несколько скромнее чем в дельфе но есть.
Ага, несколько. "Москвич-412" он тоже несколько хуже, чем Toyota Mark II.
WH>Что касается полноценности дельфевого RTTI то у меня язык не повернется назвать его полноценным после того как я поработал с reflection'о в .NET.
Sure. Всё течёт, всё развивается, Дельфи уже устаревший язык. Но в C++ нету reflection, мы ж о нём, не о .NET?
T>>именованные конструкторы, WH>В дельфе нет конструкторов. В дельфе есть фабрики на уровне языка.
Второй раз слышу этот тезис. Кто-нибудь мне расскажет о том, в чём концептуальной отличие фабрики от конструктора?! Вроде б и та и тот задачей ставят создание целостного объекта (банду четырёх я читал, не помогло).
T>>удобные списки аргументов переменной длины... это что в голову сходу пришло. WH>В С++ оно тоже есть... вот только никто этим не пользуется ибо нафиг не упало.
Форматирование строк. Поточный вывод не слишком-то удобен на практике оказался, хотя концепция и реализация очень изящны. Ещё пару применений можно придумать.
WH>1)Шаблоны. WH>2)Автоматические деструкторы. WH>3)Перегрузка операторов.
Ага. Это здорово. Только исходное сообщение было в том духе, что "Дельфи вчистую проигрывает C++". Я и привёл пару примеров, где он выигрывает. Не заявляя об идеальности. А C++ в целом на порядок мощнее, кто б спорил — это ж целый огромный полигон для экспериментов.
--
wbr, Peter Taran
Re[15]: Частота ошибок в зависимости от языка: что делать?
Здравствуйте, Cyberax, Вы писали:
C>FDSC wrote:
>> C>Врет. Строковые команды еще с 486 процессора работают медленнее. >> Минуточку. Медленнее чего? Приведи asm код, который работает быстрее, >> или хотя бы (если лень) опиши его. Впрочем, я посмотрю VC 7, может >> найду там что-нибудь интересное.
C>Медленнее явного цикла.
Беру свои слова по поводу строковых команд назад... Но не совсем. Не всё получается как ты говоришь.
// Vinogradov S.V. 2005 jun.
// TestAsm.cpp. For RSDN Forum.
// Сравнение производительности цикла поиска в целочисленном массиве для C++ и asm кода.
// MS VS 7.1.3088
// Результаты (с обычным while):
//1: VC compiler: 2407 (33554431); asm: 2328 (33554431)
//2: VC compiler: 2344 (33554431); asm: 2328 (33554431)
//3: VC compiler: 2359 (33554431); asm: 2313 (33554431)
//4: VC compiler: 2359 (33554431); asm: 2312 (33554431)
//5: VC compiler: 2360 (33554431); asm: 2328 (33554431)
// Результаты (с модифицированным while):
//1: VC compiler: 1734 (33554431); asm: 2328 (33554431)
//2: VC compiler: 1656 (33554431); asm: 2329 (33554431)
//3: VC compiler: 1656 (33554431); asm: 2312 (33554431)
//4: VC compiler: 1672 (33554431); asm: 2313 (33554431)
//5: VC compiler: 1672 (33554431); asm: 2312 (33554431)
#include "stdafx.h"
#include <windows.h>
#include <conio.h>
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
const K = 1024*1024 * 32 /* *4 = 128 Мб */;
const MaxTestIteration = 5, MaxRepeat = 10;
int A;
int B = 7;
int * C;
int LC = 0, LA = 0;
C = (int *) ::LocalAlloc( LPTR, K * sizeof(int) );
if (NULL == C) return 1;
C[K - 1] = B;
SYSTEMTIME ST, ST2, ST3;
int RepeatCount, E = 0;
for (int iTestIteration = 0; iTestIteration++ < MaxTestIteration;)
{
GetSystemTime(&ST);
// Обычный while
/*for (RepeatCount = 0; RepeatCount++ < MaxRepeat;)
{
A = 0;
while (C[A++] != B && A < K);
}*/
// Модифицированный while
int I, T;
for (RepeatCount = 0; RepeatCount++ < MaxRepeat;)
{
A = 0;
while (C[A] != B && A < K - 1023)
{
for (T = 16; T < 1024; T += 16)
{
E += C[A + T];
}
I = 1;
while (C[A + I++] != B && I < 1024);
A += I;
if (I < 1024 ) break;
}
}
LC = A - 1;
GetSystemTime(&ST2);
for (RepeatCount = 0; RepeatCount++ < MaxRepeat;)
__asm{
pushad
push es
mov ax, ds
mov es, ax
mov edi, [C]
mov eax, [B]
CLD
mov edx, edi
mov ecx, [K]
repne scasd
sub edi, edx
shr edi, 2
dec edi
mov [LA], edi
pop es
popad
}
GetSystemTime(&ST3);
const hk = 3600*1000, mk = 60*1000, sk = 1000;
int R1 = ST2.wHour * hk + ST2.wMinute * mk + ST2.wSecond * sk + ST2.wMilliseconds -
ST .wHour * hk - ST .wMinute * mk - ST .wSecond * sk - ST .wMilliseconds;
int R2 = ST3.wHour * hk + ST3.wMinute * mk + ST3.wSecond * sk + ST3.wMilliseconds -
ST2.wHour * hk - ST2.wMinute * mk - ST2.wSecond * sk - ST2.wMilliseconds;
printf("%i: VC compiler: %i (%i); asm: %i (%i) \n", iTestIteration, R1, LC, R2, LA);
}
::LocalFree(C);
printf("E = %i", E);
getch();
return 0;
}
Получается, что компилятор всё же не оптимизирует код как надо. См. отладчик:
A = 0;
00401070 xor eax,eax
while (C[A++] != B && A < K);
00401072 mov edx,dword ptr [esi+eax*4]
00401075 inc eax
00401076 cmp edx,7
00401079 je main+82h (401082h)
0040107B cmp eax,2000000h
00401080 jl main+72h (401072h)
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, FDSC, Вы писали:
FDS>>Нет. Компилятор должен мне вывести граф возможных ситуаций в программе, а я сам посмотрю, что можно, что нельзя. WH>В проекте на 10 метров кода будет тАкой граф...
Чушь. Это смотря как его представить.
WH> На gamedev.ru бал здоровый флейм на эту тему. Толпа народа пыталась обогнать интеловский
компилятор. Ни у кого не получилось даже догнать. Делай выводы.
Сделал.
FDS>>А, вот о чём! Согласен. Но в C++ нет некоторых возможностей Delphi — вот я и не могу перейти на него. Иначе бы все уже давно на Delphi плюнули. WH>На дельфе хорошо только формочки клепать. А как язык дельфи отстает от С++ по всем параметрам.
Нет.
WH>В принципе есть тандартная связка формочки на VB6 + inproc COM cerver на С++. WH>В место VB6 можно взять дельфи.
Жуть. Что ты предлагаешь, !
FDS>>Попробую, когда время будет хорошо посидеть на этом. Мне тут очень квалифицированный человек говорил, что строковые команды всегда лучше. Надо будет разобратся. FDS>>Может напишу ответ... через месяцок так... WH>Попробуй, попробуй...
Уже. Где-то тут есть, э-э-э, чёрт, не могу найти, но точно есть ответ.
WH>А сейчас в недрах мелкософта создается очень интересный оптимизатор который можно будет расширять своими правилами.
Откуда знаешь?
S>>>Код, сгенерированный компилятором Intel, ты будешь догонять месяцами. А изучая дизассемблернуый код, будешь периодически всплескивать руками и говорить "не может быть! Это должно работать медленнее, чем у меня". FDS>>Где это я его буду догонять, на своём AMD Athlon? WH>Ну код интеловского компилятори и на атлонах работает не плохо...
Это было язвительно замечание.
FDS>>Много нового, насколько я помню, случилось в .NET. А в VS for Windows, если только мастера изменились. В прочем, может я что-то важное упустил?! WH>Ну да так по мелочи... довили язык до 98%ного соответствия стандарту, улучшели оптимизатор...
А мне то что от этого. Мне наплевать... Мне не то нужно.
Здравствуйте, Cyberax, Вы писали:
C>Сергей Губанов wrote:
>> C>Когда же прекратят издеваться над школьниками.... >> Что Вы имеете в виду?
C>Использовать мертвые, неудобные и никому ненужные языки. Уж лучше бы C>Питон изучали — от него хоть польза есть.
По моему над школьниками совсем не так издеваются — заставляют их делать всякую чушь.
Эта тема отдельного форума, и не на RSDN.
Здравствуйте, tarkil, Вы писали:
WH>>В С++ тоже есть RTTI. Несколько скромнее чем в дельфе но есть. T>Ага, несколько. "Москвич-412" он тоже несколько хуже, чем Toyota Mark II.
А что такого крутого в дельфийском RTTI? Возможность перебрать свойства в published секции?
Вот только толку от этого мало.
А учитывая что в следующем стандарте наверняка появится compile time reflection то дельфя будет мягко говоря нервно курить в углу.
Хотя скорее всего она не доживет ибо ее убъет .НЕТ
T>Второй раз слышу этот тезис. Кто-нибудь мне расскажет о том, в чём концептуальной отличие фабрики от конструктора?! Вроде б и та и тот задачей ставят создание целостного объекта (банду четырёх я читал, не помогло).
Ты вобще понимаешь механику работы конструкторов/деструкторов в С++?
T>Форматирование строк. Поточный вывод не слишком-то удобен на практике оказался, хотя концепция и реализация очень изящны. Ещё пару применений можно придумать.
Смотри boost::format
cout << format("%1% %2% %3% %2% %1% \n") % "o" % "oo" % "O";
// prints "o oo O oo o \n"
T>Ага. Это здорово. Только исходное сообщение было в том духе, что "Дельфи вчистую проигрывает C++". Я и привёл пару примеров, где он выигрывает. Не заявляя об идеальности. А C++ в целом на порядок мощнее, кто б спорил — это ж целый огромный полигон для экспериментов.
Угу. Вот только на дельфевем RTTI далеко не уедешь, фабрики нужны гораздо реже чем полноценные конструкторы к томуже фабрику легко написать, а вот сэмулировать конструктор на дельфе , переменное число параметров нафиг не упало см выше.
ИТОГО: Отсутствие необходимых инструментов компенсируется парой сомнительных фичек
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, FDSC, Вы писали:
FDS>ЧУШЬ. ЧУШь. ЧУшь. Чушь. чушь....
Аргументы будут?
FDS>Умные указатели в Delphi есть, прада только в строковых типах.
А толку? Умные указатели нужны везде. Только строки меня не устраивают.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн