Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.05.2010, 16:58   #81
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Простите что отхожу в сторону от холивара
Интересно как теперь устроена переменная record, с учетом того что она может быть и классом. Раньше она всегда содержала в себе саму запись, в отличие от переменной класса, в к-рой ссылка. Как теперь?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума
Старый 13.05.2010, 17:11   #82
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как теперь?
Наверное как в Обероне. Может иметь методы.
I'm learning to live...
Stilet вне форума
Старый 13.05.2010, 17:18   #83
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

надеюсь что работает по типу thiscall(возможно в сочетании с register/fastcall)
то есть
MyRecord.Clear;
это будет
mov ecx,MyRecord
call TMyRecord.Clear;

если структура содеоржит два числа LongInt(l1,l2)
то ecx это будет l1.
ecx+4 - l2.

а то лишние поля это проблема при сохранении в файл.

надеюсь что это не мечты
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 13.05.2010, 17:28   #84
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Не не, меня интересует на более прикладном уровне. В самой переменной теперь ссылка на запись, или сама запись как раньше? Я про простую запись, без методов. К примеру, при переносе старого кода не будет багов?
Можно ли теперь записи (обычные) в списках использовать?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума
Старый 13.05.2010, 17:49   #85
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

должно, работать как и прежде.

может ктонить проверить через отладку?

кстати эти нововведения с какой версии начинаются?(2009 или 2010?)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 13.05.2010, 17:58   #86
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
может ктонить проверить через отладку?
Можем, но лень Кстати важный вопрос, нужно будет действительно проверить.

Цитата:
кстати эти нововведения с какой версии начинаются?(2009 или 2010?)
По-моему еще раньше.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума
Старый 13.05.2010, 18:17   #87
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я бы проверил сам, но у меня сейчас нет их(2010-ку скачаю потом наверно)

Код:
TObject = class
эээ...а от кого TObject тогда?
Код:
 i:=TObject.Create;
 ShowMessage(i.ClassParent.ClassName);
итог AV.(Object не имеет родителя...причину выяснил)
попробую Дальше поизвращатся

(лезу в глубины TObject)

pu4koff, ну создал я обьект в стеке, и далее что мне с ним делать?
к сожалению в топологии Делфи не очень уютно так делать...регистр esp сохраняется не всегда...и восстанавливается соответственно тоже
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 14.05.2010 в 03:14.
Пепел Феникса вне форума
Старый 14.05.2010, 06:52   #88
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Ну и что они нового вводят? Ничего. Где новые технологии, продвигаемые делфями? Нету. Последние годы только успевают сильно не отставать и вводят примочки из других языков, т.е. добавляют синтаксический сахар и не более. Те же новшества в record - очередной показатель. В С++ подобное было всегда из-за особенностей его развития. Зачем это в Делфи добавили, лично я не понимаю.
Согласен с Вами, все это посто дань моде, попытка угнаться за конкурентами

Цитата:
Против TObject ничего не имею, но не вариант создавать свой заменитель:
1. Этого не получится, т.к. этот заменитель будет наследоваться от TObject'a
TObject такой же класс, как и какой-нибудь TList
Код:
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;
Не нравиться переправьте его как Вам вздумается и все остальные классы будут работать быстрей, лучше и интересней (живет в модуле System).

Цитата:
Интересно как теперь устроена переменная record, с учетом того что она может быть и классом. Раньше она всегда содержала в себе саму запись, в отличие от переменной класса, в к-рой ссылка. Как теперь?
Допускается и старый вариант - как просто перечисление полей. SizeOf для Дельфи2007 возвращает интересное значение. Для предыдущего примера я добавил обычные рекордовские поля:
Код:
x: Integer;
z: Array [1..100] of Integer;
SizeOf вернул 408, для одного поля х (без массива) SizeOf вернул 8, просто указанный выше вариант рекорда (без моих полей) - 4, с массивом, без целого 404. Закомментил внутреннюю переменную Red вернул нуль. Делайте выводы.

Цитата:
2010-ку скачаю потом наверно
Аккуратно, мне достался с глюками.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 14.05.2010 в 08:36.
Utkin вне форума
Старый 14.05.2010, 09:44   #89
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
pu4koff, ну создал я обьект в стеке, и далее что мне с ним делать?
к сожалению в топологии Делфи не очень уютно так делать...регистр esp сохраняется не всегда...и восстанавливается соответственно тоже
Ну с локальными переменными Вы как-то работаете же? Память ручками не выделяете, не освобождаете и проблем никаких не испытываете.
Вот и с классами та же ситуация, только синтаксис делфи не позволит красиво работать с классами на стеке в случае конструкторов с параметрами.
Поясняю кодом на С++:
Код:
void foo(int i)
{
  int n = i * 15;
  MyClass obj(n); // Создаём объект класса на стеке. Ручками память не выделяем
  // Тут работа с obj. Возможны исключения
  ...
}
Тут obj удалится компилятором автоматически по завершении работы функции, даже если в процессе работы были исключения

Теперь то же самое, но с созданием объекта в куче:
Код:
void foo(int i)
{
  int n = i * 15;
  MyClass *obj = new MyClass(n); // Выделяем память под объект в куче
  // Тут работа с obj. Возможны исключения
  ...
  delete obj; // Освобождаем память
}
Если между new и delete произошло исключение, которое не обработали, то память, выделенная под obj, никогда не будт освобождена и будет висеть мертвым грузом до завершения процесса. Чтобы этого не произошло, придётся оборачивать всё в try ... catch.
Такая же история и в Делфи. Стек на совести компилятора, а вот за кучей нужно самому следить, а это не всегда удобно. Просто нужно понимать разницу между этими двумя вещами. В том же С++ у программиста есть выбор, а вот в делфи его нет. Не то чтобы необходимость, но полезная штука. Только вот на делфи её сложно реализовать будет чисто из-за синтаксиса. Разве что могут для удобства прикрутить сборщик мусора...
Попутно вопрос: есть ли в 2010 Делфях Умные указатели?

Цитата:
Сообщение от Utkin Посмотреть сообщение
TObject такой же класс, как и какой-нибудь TList
...
Не нравиться переправьте его как Вам вздумается и все остальные классы будут работать быстрей, лучше и интересней (живет в модуле System).
Ну лично я против этого класса ничего не имею, да и править системные классы не в моих правилах.
pu4koff вне форума
Старый 14.05.2010, 10:01   #90
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Попутно вопрос: есть ли в 2010 Делфях Умные указатели?
Как минимум длинные строки (и в Д7 точно есть). Копирование одной строки в другую осуществляется увеличением счетчика такой ссылки. Настоящее копирование происходит уже при модификации объекта. Уничтожение такой строки происходит также максимально быстро + экономит память , правда в случае наличия кучи строк с одинаковым содержимым.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 14.05.2010 в 10:17.
Utkin вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем вам нравиться программирование RIO Свободное общение 31 10.11.2009 12:14
Chart (Delphi). В чем ошибка? Chudo4258 Помощь студентам 2 27.03.2009 05:28
Логотип какого поисковика вам нравится больше? Hallo Свободное общение 7 26.06.2008 09:26
Что тебе нравится геймер? BedDog Свободное общение 19 23.03.2007 08:04