Здравствуйте, mihailik, Вы писали:
M>Ты считаешь, что реализовать шаблоны сложнее, чем написать хороший оптимизирующий компилятор?
Я считаю что эти задачи сопастовимы по сложности. Особенно если учесть что придется писать оптимизатор так чтобы он мог оптимизировать шаблоны...
А теперь представь что на разработка жабы или .НЕТ пришлось бы потратить примерно в двое больше ресурсов
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, centurn, Вы писали:
C> Ага, помнится, мне, для того, чтобы поработать в 5-м Delphi, приходилось переключать экран в какой-то жуткий режим, иначе уже Splash screen этой делфи мне намертво комп вешал. Так что для меня субъективно 4-й Делфи лучше 5-го.
4-я дельфя — это уродец эпохи Inprise. Глюк на глюке. А вот с пятой никаких проблем не было. Мы на 6ю перешли то всего с год назад. C>А 6-й студии афайк хронологически как раз 5-я делфя соответствует.
Нет. VS6 <-> Delphi6.
Здравствуйте, WolfHound, Вы писали:
WH>VC++7.1 WH>...
WH>Ну как? А какие результаты даст дельфя? Причем это очень простые примеры. WH>Но практака показывает что запутать компилятор практически не возможно.
Оптимизация, говоришь... You ain't seen nothing yet! Небольшой этюд на тему (ручной) оптимизации виртуальных методов (испольнитель (компилятор) все тот же):
#include <iostream>
#include <vector>
#include <boost/progress.hpp>
using namespace std;
using namespace boost;
#define TYPEID_CALL( TYPE, METHOD ) \
if ( type_info_ == TYPE::s_type_info ) return static_cast< TYPE * >( this )->METHOD
class CA
{
int type_info_;
public:
static const int s_type_info = 1;
CA( int ti = s_type_info )
: type_info_( ti )
{}
int a();
int b();
int c();
int d();
int e();
int a_impl() { return 55; }
int b_impl() { return 55; }
int c_impl() { return 55; }
int d_impl() { return 55; }
int e_impl() { return 55; }
};
class CB : public CA
{
public:
static const int s_type_info = 2;
CB()
: CA( s_type_info )
{}
int a_impl() { return 110; }
int b_impl() { return 110; }
int c_impl() { return 110; }
int d_impl() { return 110; }
int e_impl() { return 110; }
};
class CC : public CA
{
public:
static const int s_type_info = 3;
CC()
: CA( s_type_info )
{}
int a_impl() { return 220; }
int b_impl() { return 220; }
int c_impl() { return 220; }
int d_impl() { return 220; }
int e_impl() { return 220; }
};
int CA::a()
{
TYPEID_CALL( CA, a_impl )();
TYPEID_CALL( CB, a_impl )();
TYPEID_CALL( CC, a_impl )();
}
int CA::b()
{
TYPEID_CALL( CA, b_impl )();
TYPEID_CALL( CB, b_impl )();
TYPEID_CALL( CC, b_impl )();
}
int CA::c()
{
TYPEID_CALL( CA, c_impl )();
TYPEID_CALL( CB, c_impl )();
TYPEID_CALL( CC, c_impl )();
}
int CA::d()
{
TYPEID_CALL( CA, d_impl )();
TYPEID_CALL( CB, d_impl )();
TYPEID_CALL( CC, d_impl )();
}
int CA::e()
{
TYPEID_CALL( CA, e_impl )();
TYPEID_CALL( CB, e_impl )();
TYPEID_CALL( CC, e_impl )();
}
int test()
{
CA a1;
CB a2;
CC a3;
CA *c[ 3 ];
c[ 0 ] = & a3;
c[ 1 ] = & a1;
c[ 2 ] = & a2;
int s = 0;
for (int k = 0; k < 10000000; ++k)
{
for (int m = 0; m < 3; ++m)
{
CA * x = c[ m ];
s += x->a();
s += x->b();
s += x->c();
s += x->d();
s += x->e();
}
}
return s;
}
int main()
{
progress_timer t;
cout << test() << endl;
}
Здравствуйте, mihailik, Вы писали:
M>А, так ты Flush в try/finally делаешь? M>А шуму-то было, мол, в C++ try/finally не нужен никогда.
Что такое исключение? Это ФАТАЛЬНЫЙ сбой в алгоритме. Следовательно алгоритм не отработал.
Вопрос нафига записывать мусор если надо просто сообщить о провале и подчистить ресурсы?
M>А при чём здесь объём памяти? В C# всё прозрачно расписано, когда и в каких случаях стоит вызывать Dispose. Если не следуешь советам, сам виноват.
А при том что когда памяти мало GC убивает объекты до того как будут сожраны ВСЕ ресурсы, а когда много...
Вся проблема в том что вызов РЕКОМЕНДАТЕЛЕН те если ты его забыл сделать то ни кто тебе ни чего не скажет. А как показывает практика 90% ошибок происходит именно из-за забывчивости.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, mihailik, Вы писали:
M>Если я тебя правильно понял, ты считаешь, что драйвера нужно писать на продвинутом C++ с STL и прочими наворотами?
А почему нет?
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
WH>Да ни хрена ты не понял. Посошник САМ совободит память и вызовет деструкторы у объектов если в процессе заполнения произойдет сбой.
В Дельфи объекты нельзя распределить в какой-то особенной памяти, кроме как в стандартной куче. Да я и не вижу необходимости.
А стандартные типы не имеют никакой деструктивной логики, которую нужно было бы вызывать.
WH>try/finally это РУЧНОЕ освобождение ресурсов. В С++ освобождать ресурсы руками это дурной тон, а в дельфе без альтернатив.
Дурной тон? Понимаю.
Если нужно из чужой dll'ки вызвать пару-трёшку функций в определённом порядке, на C++ принято тратить полчаса на враппер? Даже если известно наверняка, что никогда и никому больше этот враппер не понадобится?
M>>Чего-то я не пойму. Такое впечатление, что для тебя просто не существует процесса написания помощников и связанных с этим трудозатрат.
WH>Один раз забить все необходимое в помошник и пользоваться не задумываясь об освобождении ресурсов или постоянно писать try/finally для освобождения ресурсов. WH>Как ты думаешь в каком случае трудозатраты больше?
Это зависит от цифр.
WH>Причем практика показывает что написать помошник выгодней даже если используешь его один раз ибо логика работы с ресурсом не смешивается с основной логикой программы.
Ну вот. А то кто-то говорит, что в C++ мало ручной работы. Пишете там всякие помощники по поводу и без повода, и нас, бедных Дельфистов агитируете. Доколе!
>>На теже грабли в другом языке я сознательно об этих вопросах беспокоюсь. А в C++ мне Wolfhound, авторитетно сказал, что о времени жизни беспокоиться не нужно.
M>>Или всё-таки нужно?
WH>Если тебя волнует будет ли освобожден ресурс до выхода из функции то не нужно.
Если я должен думать, есть опастность или нет — значит я просто всегда ожидаю опасность. Где же тут C++ даёт послабление относительно Дельфи? Думать-то всё равно нужно столько же.
WH>Но если есть какято очень хитрая логика которая случается раз в год...
Чтобы засечь этот "раз в год", я должен думать об этой возможности каждую секунду. Где же экономия?
_O_>Гм. У нас на нем (C++/C) написан CASE тул, который включает
Ну мало ли, что на нём можно написать. На VB тоже всякие невероятные дела делают. Но реально-то C++ лучше всего выстреливает в системном и низкоуровневом программировании. В создании прикладных систем у него есть мощная конкуренция.
_O_>С Delphi-ями мы бы зависли на реализации эффективного и удобного внутреннего представления по причине отсутствия множественного наследования и шаблонов.
У каждого свой уровень в Дельфи. Ничего зазорного нет, если кто-то не умеет на нём нормально продуктивно работать. Зато вы в C++ специалисты.
WH>>>КОМ серверы например. И вобще все что нужно. С++ дает неизмеримо больше возможностей и контроля чем дельфи.
M>>Ага. А Delphi, Java и C# избавляют программиста от необходимости контроля. Контроль берёт на себя среда.
WH>Где ты среду в дельфе нашол? Дельфи это unmanaged компилятор с произвольным доступом к памяти. Ни какого контроля.
Средой я назвал окружение. Все вот эти "примочки" и "магию" компилятора. Свойства, RTTI. Семантику самого языка в конце концов.
Прямой доступ, конечно, разрешён. Но всё-таки не так явно и беззастенчиво, как в C++. Никакой явной адресной арифметики, обращения к указателям в стиле массивов и пр. В C++ это ещё в наследство от обычного C осталось. А в Дельфи наоборот, палки в колёса суют, если хочешь с укзателями работать.
Кроме того, все объекты сугубо by ref. Никаких объектов на стеке или ещё где ни попало. Операторы, слава богу, не перегружаются. Никаких конструкторов копирования, неявных преобразований и множественного наследования. Шаблоны тоже разум не затмевают. Короче говоря, возможности поурезаны, но нам-то это и нужно.
А кому нужен мощный инструмент, налагающий большой груз ответственности, инструмент, требующий серьёзного и длительного обучения — вперёд. Тому на C++ работать самая дорога. Там и платят больше.
WH>>> Разговорные языки по функциональности практически равноценны. Но С++ и WH>>> делфи... ой не смешите мои тапочки.
m>> Мне кажется, твоя обувь слишком много на себя берёт. m>> По функциональности C++ опережает Дельфи только в возможности m>> компилировать драйвера.
AD>
AD>2mihailik: большая просьба, обдумывать свои ответы собеседнику, иначе есть AD>вероятность того, что модератор перенесёт эту ветку в "Коллеги, улыбнитесь" AD>
Если мои рассуждения народ задолбали, я могу и заткнуться. Делов-то
Кстати, а почему ты переводишь стрелу на модератора. Я считаю, у каждого должен быть свой внутренний модератор. Так что давай конструктивно. Что конкретно тебе не понравилось в моём сообщении?
M>>Есть COM-объект. Необходимо вызывать какие-то его методы, использовать свойства при помощи позднего связывания, т.е. методов IDispatch. В скриптовых языках, в VB, в Дельфи это очень просто.
ГВ>Ну вот же ж блин. Ну нельзя на C++ наезжать по таким направлениям — не для того он предназначен.
Ну так я о том же. Гнобят бедный Дельфи и в хвост и в гриву. В гриву я ещё согласен, но в хвост — это зря.
ГВ>Конечно, если накатать набор врапперов, то можно сделать и "по позднему связыванию". В результате код пользователя будет примерно таким:
Ну да, на Дельфи тоже можно TLB импортировать. Только это куча лишних действий. Если нужно всего-то открыть Excel и бросить значения в пару ячеек, тут враппер как помеха какая-то.
Кроме того, работа по позднему связыванию отличается от работы по интерфейсам тем, что освобождает от привязки к версиям. Если на C++ импортировать Office XP TLB, то с Office 2000 вполне полезут проблемы.
ГВ>Ну и наконец, если в твоей программе логики помимо подключения COM-объектов мало, то кой чёрт тогда тебе C++ использовать? Бери тот же VB и полный вперёд!
Ага. Согласен. Для OLE Automation лучше использовать более соответствующий язык.
M>>Чем C++ может уделать Дельфи с позиций внешнего наблюдателя?
WH>Ни чем. С точки зрения пользователя пофигу как написано приложение на дельфе, С++, асме или в машинных кодах. WH>А вот с точки зрения ПРОГРАММИСТА не первый план выходят "внутриязыковые приколы".
Пожалуй что так. Но тогда я и не знаю, как прийти к объективности.
Программисту-Дельфисту вряд ли понравятся монстровитый функции C++. А Сишнику в рамках Дельфи будет всё время тесновато.
Предлагается по этому поводу поздравить друг друга и всех окружающих с чем-нибудь там..
M>>Ну напишу я на Дельфи не 7, а 97 таких контейнеров — Дельфи станет от этого круче? WH>Это 7 базовых контейнеров на их основе можно сделать что угодно. WH>И вобще попробуй придумать 97 различных структур данных
Ладно, ладно, семь — магическое число. Согласен. Тут C++ переплюнул, у него число более знатное.
Здравствуйте, Serginio1, Вы писали:
WH>>А вот о других средствах которые могут заменить шаблоны по подробней. S>http://www.osp.ru/news/soft/2003/09/15_01_print.htm copy-paste-replace. Еще раз повторю шаблоны С++ значительно мощьнее чем copy-paste-replace. S>http://www.wn.ru/computers/16.09.2003/6.html Вот только очередного С++глюка от багландов мне и не хватало...
Я очень сильно удивлюсь если это будет нормальный компилятор.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, alexkro, Вы писали:
WH>>Ну как? А какие результаты даст дельфя? Причем это очень простые примеры. WH>>Но практака показывает что запутать компилятор практически не возможно.
A>Оптимизация, говоришь... You ain't seen nothing yet! Небольшой этюд на тему (ручной) оптимизации виртуальных методов (испольнитель (компилятор) все тот же):
Это я то ни чего не видел Мои реальные программы намного сильнее морочат компилятор. И ни чего. Вся навороченая compile-time логика летит в трубу.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, mihailik, Вы писали:
M>Если мои рассуждения народ задолбали, я могу и заткнуться. Делов-то
M>Кстати, а почему ты переводишь стрелу на модератора. Я считаю, у каждого должен быть свой внутренний модератор. Так что давай конструктивно. Что конкретно тебе не понравилось в моём сообщении?
Здравствуйте, mihailik, Вы писали:
M>В Дельфи объекты нельзя распределить в какой-то особенной памяти, кроме как в стандартной куче. Да я и не вижу необходимости.
Ты нет а вот те кто придумывал COM почемуто видят.
M>А стандартные типы не имеют никакой деструктивной логики, которую нужно было бы вызывать.
А варианты? А строки их к стати тоже нужно в COM аллокатором размещать если вернуть хочешь.
M>Дурной тон? Понимаю.
А в дельфе try/create/finally/free, try/create/finally/free, try/create/finally/free,....
В то время как в С++ new, new, new, new,...
Разницу замечаем или еще нет?
M>Если нужно из чужой dll'ки вызвать пару-трёшку функций в определённом порядке, на C++ принято тратить полчаса на враппер? Даже если известно наверняка, что никогда и никому больше этот враппер не понадобится?
Вот мне недавно надо было просканить папку и вернуть файлы удвалетворяющие маске. Я не задумываясь написал врапер над FindFirst/FindNext и не жалею ибо логика работы с ресурсом и логика работы программы были разделены что прибавило читабельности и сильно. К томуже затраты на написание врапера сравними с затратами на одно использование этих функций. А если учесть что работа с ресурсом как правило осуществляется в нескольких местах...
M>Слава богу, что в Дельфи с тоном посвободнее.
Ага вот только народ (из другой конторы) который писал OPC сервер на дельфе потратил много больше времени на разработку ибо за меня работал компилятор, а они все делали ручками.
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, mihailik, Вы писали:
WH>>Один раз забить все необходимое в помошник и пользоваться не задумываясь об освобождении ресурсов или постоянно писать try/finally для освобождения ресурсов. WH>>Как ты думаешь в каком случае трудозатраты больше? M>Это зависит от цифр.
Даже при одиночном использовании логика программы разделяется, а это уже стоит многого.
WH>>Причем практика показывает что написать помошник выгодней даже если используешь его один раз ибо логика работы с ресурсом не смешивается с основной логикой программы. M>Ну вот. А то кто-то говорит, что в C++ мало ручной работы. Пишете там всякие помощники по поводу и без повода, и нас, бедных Дельфистов агитируете. Доколе!
Именно по этому и мало ручной работы ибо я пишу логику один раз, а ты каждый раз при использовании.
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн