Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delphi - приемущества и недостатки, принимаются различные высказывания 
:(
    Опции темы
Alexeis
Дата 22.1.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Beltar @  22.1.2007,  09:59 Найти цитируемый пост)
Я тебе по секрету скажу, но я все-таки за шаблоны, с копи-пастом я порой так обламывался, что на поиск глупых ошибок уходили часы. ;) 

  А кто-то разве против? Принцип хорош, еще бы синтаксис был по проще, вообще было бы отлично. Тот же список на делфи реализован как список указателей. Нельзя сказать, что сильно удобно работать с указателями, при этом всегда держать в голове какого типа у тебя указатель. Весьма неудобно. Правда тот же механизм можно реализовать путем наследования. Таким образом получены TStringList, TImageList, TMemoStrings, TRichStrings и т.д. Получается, что в С++ объекты более самостоятельные и сами полностью в себе реализовывают. В делфи часть операций ложиться на объект контейнер. С другой стороны шаблон тоже иногда нужно "доробатывать" скажем тот же вектор или лист требуют присутствия определенных операторов, которые определены для стандартных классов, но для нестандартных их необходимо определять самостоятельно. Эта операция по сути схожа написанием класса наследника от Tlist, ведь для нормальной его работы нужно просто переопределить несколько его методов Insert(), Delete(), assign(), которые по своей сути аналогичны + и присвоить. Т.е. операторы заключены уже в контейнере, а не в самом объекте.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
nerezus
Дата 22.1.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

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


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Alexeis
Дата 22.1.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(nerezus @  22.1.2007,  11:00 Найти цитируемый пост)
небольшая проблемка будет: у классов C++ нет общего предка ;)

  К чему это?

  Общий предок совсем неплохо - это основа RTTI и интерфейсов. До BDS 2006 были старые паскалевские объекты без общего предка. В BDS2006 для этих целей ввели advanced record, которые являются простыми объектами с данными, методами, конструкторами и переопределенными операторами и т.д. Они не имеют общего наследника, могут передаваться по значению, копироваться и т.д. Уже добили проблему.

Цитата(nerezus @  22.1.2007,  11:00 Найти цитируемый пост)
+ небольшое уменьшение в скорости работы, т.к. шаблоны задаются типами при компиляции, а при наследовании будет выбираться нужный метод в процессе работы(табл. вирт. ф-ий) 


  Это существенно только для атомарных типов, кроме того все зависит от реализации самого объекта. Если у него в реализации будут использоваться виртуальные методы, а это нормальная практика программирования при построении схемы от простого к сложному, то для тех же операций будут тоже вызываться виртуальные методы наследника. 
  Атомарных типов не так много, потому ввести для них оптимизированные уникальные классы совсем не сложно. А чем выше поднимаемся тем больше использование виртуальных методов, при любой концепции. Но там это уже не существенно, так как накладные расходы на виртуальность тонут в обилии производимых над данными операций. Плата невелика и оправдана.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
nerezus
Дата 22.1.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



del

Это сообщение отредактировал(а) nerezus - 22.1.2007, 12:26


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
VectorMan
Дата 22.1.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 9.4.2006

Репутация: нет
Всего: 4



Цитата(Alexeis @ 22.1.2007,  12:49)
  А кто-то разве против? Принцип хорош, еще бы синтаксис был по проще, вообще было бы отлично. Тот же список на делфи реализован как список указателей. Нельзя сказать, что сильно удобно работать с указателями, при этом всегда держать в голове какого типа у тебя указатель.

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


Это сообщение отредактировал(а) VectorMan - 22.1.2007, 16:08
PM   Вверх
Beltar
Дата 22.1.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



А можно вместо шаблонов встроенных в язык, сделать генерацию кода по образцу. Шаблоны 99% нужны для создания контенеров в которых достаточно поменять имя класса. Просто скопировать объявления заменяя строку А на Б не самая сложная операция и весь код будет виден.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
nerezus
Дата 22.1.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

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

P.S.
Beltar, т.е. ты за шаблоны, но тебе просто не нравится их текущий синтаксис?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Alexeis
Дата 22.1.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(nerezus @  22.1.2007,  18:03 Найти цитируемый пост)
Но не у всех классов он есть.
Т.е. придется расширять каждый класс интерфейсом, чтобы заюзать подобное в C++?

  Ну я не совсем верно сказал. Интерфейсный класс это предок большинства класов VCL. Он реализует IUnknown. Самый нижний Cobject не интерфесный. Интерфес ничего особенного не накладывает. Просто объект содержит 2 дополнительных метода для реализации IUnknown. Это удобно для создания наследников от IUnknown, поскольку не нужно думать о связывании интерфеса с объектом который его реализует. А вот RTTI начинается с Cobject. В общем он только его и содежит, тем самым автоматически распространяя RTTI на все классы. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Beltar
Дата 22.1.2007, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



nerezus

Цитата

т.е. ты за шаблоны, но тебе просто не нравится их текущий синтаксис?


Я за автоматизацию рутинной работы, а также за то, чтобы в полученный при автоматической генерации код можно было зайти step-by-step отладчиком, т. е. он д/б виден и спокойно редактируем. А не как текст получаемый в C++ после препроцессора, когда неверное понимание того, что должно получиться после выполнения, какого-нибудь заковыристого #define может привести к не очень приятным последствиям.
Вообще проектировать язык следует с учетом того, какие IDE для него возможны. На современном этапе развития IDE и продвинутый компилятор может устранить ряд недостатков самого языка, например, фигурные скобки С можно подсветить, в огромной процедуре Delphi объявить новую переменную из контекстного меню не прокручивая код.
А конструкцию
Код

repeat
until false

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

Цитата

А вот RTTI начинается с Cobject.


Ну вообще-то TObject. Я как-то не вдавался в особенности RTTI, но в книжечке Фаронова "Исскуство создания компонентов Delphi" написано при директиву M, которая вкл/выкл RTTI и в VCL RTTI вкл у TPersistent.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Alexeis
Дата 22.1.2007, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Beltar @  22.1.2007,  20:42 Найти цитируемый пост)
Ну вообще-то TObject.

Конечно TObject  smile . Просто в последнее время пишу только на С++, вот и все классы у меня автоматом начинаются с "С"  smile 

Цитата(Beltar @  22.1.2007,  20:42 Найти цитируемый пост)
но в книжечке Фаронова "Исскуство создания компонентов Delphi" написано при директиву M, которая вкл/выкл RTTI и в VCL RTTI вкл у TPersistent. 


Код

 TObject = class
    constructor Create;
    procedure Free;
    class function InitInstance(Instance: Pointer): TObject;
    procedure CleanupInstance;
    function ClassType: TClass;
    class function ClassName: ShortString;
    class function ClassNameIs(const Name: string): Boolean;
    class function ClassParent: TClass;
    class function ClassInfo: Pointer;
    class function InstanceSize: Longint;
    class function InheritsFrom(AClass: TClass): Boolean;
    class function MethodAddress(const Name: ShortString): Pointer;
    class function MethodName(Address: Pointer): ShortString;
    function FieldAddress(const Name: ShortString): Pointer;
    function GetInterface(const IID: TGUID; out Obj): Boolean;
    class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry;
    class function GetInterfaceTable: PInterfaceTable;
    function SafeCallException(ExceptObject: TObject;
      ExceptAddr: Pointer): HResult; virtual;
    procedure AfterConstruction; virtual;
    procedure BeforeDestruction; virtual;
    procedure Dispatch(var Message); virtual;
    procedure DefaultHandler(var Message); virtual;
    class function NewInstance: TObject; virtual;
    procedure FreeInstance; virtual;
    destructor Destroy; virtual;
  end;


Возможно это и отключит RTTI как механизм, но из объекта никак не удалит  smile 
   class function - это и есть методы класса идентифицирующие класс.

Код

  TInterfacedObject = class(TObject, IInterface)
  protected
    FRefCount: Integer;
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
  public
    procedure AfterConstruction; override;
    procedure BeforeDestruction; override;
    class function NewInstance: TObject; override;
    property RefCount: Integer read FRefCount;
  end;



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Daevaorn
Дата 22.1.2007, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 5
Всего: 70



Цитата(Beltar @  22.1.2007,  21:42 Найти цитируемый пост)
Вообще проектировать язык следует с учетом того, какие IDE для него возможны

жестьsmile
Цитата(Beltar @  22.1.2007,  21:42 Найти цитируемый пост)
И генерировать по образцу код ИМХО более логичный подход, чем вставлять в язык шаблоны. При этом синтаксически не уходишь от других IDE.

можно пояснений?
PM MAIL WWW   Вверх
Beltar
Дата 22.1.2007, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Имеем класс

Код

TMyList=class(Tlist)
public
//...
functiuon Get:TMyType;
//...
end;

functiuon Get:TMyType;
begin
Result:=TMyType(inherited Add);
end;


Ну и на основании этого несколькими кликами мыши генерим код для TMyList1, контейнера для TMyType1.

Код

TMyList1=class(Tlist)
public
//...
functiuon Get:TMyType1;
//...
end;

functiuon Get:TMyType1;
begin
Result:=TMyType1(inherited Add);
end;


И подобный код, если нет привязок к VCL можно перенести во Free Pascal.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Daevaorn
Дата 22.1.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 5
Всего: 70



Цитата(Beltar @  23.1.2007,  00:03 Найти цитируемый пост)
Имеем класс

понятно. Но шаблоны намного гибче. А копи-паст, хоть и встроенный, никогда до их функциональности не дойдет. Хотя конечно эта идея проще в реализации.
PM MAIL WWW   Вверх
Artemios
Дата 23.1.2007, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 10
Всего: 50



Цитата(Beltar @  22.1.2007,  20:42 Найти цитируемый пост)
Вообще проектировать язык следует с учетом того, какие IDE для него возможны.

Тоже понравилось smile А можно еще ориентироваться на GUI-библиотеки для данного языка на данной платформе smile

Цитата(Beltar @  22.1.2007,  20:42 Найти цитируемый пост)
И генерировать по образцу код ИМХО более логичный подход, чем вставлять в язык шаблоны.

При условии, что образец писан свими руками или изучен вдоль и поперек. Еще раз ткну пальцем в Boost.


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
Void
Дата 23.1.2007, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 11
Всего: 173



Цитата(Artemios @  23.1.2007,  02:00 Найти цитируемый пост)
Вообще проектировать язык следует с учетом того, какие IDE для него возможны.

Тоже понравилось

А ведь если переформулировать этот тезис как: «стоит создавать языки с возможно более простой грамматикой», он уже не кажется таким смешным, нет?


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.