Расшаренные ссылки на объекты

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

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

Re: Расшаренные ссылки на объекты

Сообщение zub » 25.11.2020 09:15:14

Сомневаюсь что на этапе компиляции можно отследить динамически регистрируемые и динамически создаваемые сущности, такие ошибки обычно очень нетривиальны.
А Form1:=TForm.create сделал, но Form1.free забыл - это и не ошибка имхо, так, опечатка
zub
долгожитель
 
Сообщения: 2664
Зарегистрирован: 14.11.2005 23:51:26

Re: Расшаренные ссылки на объекты

Сообщение Дож » 25.11.2020 10:13:09

Сомневаюсь что на этапе компиляции можно отследить динамически регистрируемые и динамически создаваемые сущности

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

А Form1:=TForm.create сделал, но Form1.free забыл - это и не ошибка имхо, так, опечатка

Так это же аргумент в пользу того, что отлавливать такое -- работа компилятора, а не высококвалифицированного программиста :)
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 863
Зарегистрирован: 12.10.2008 16:14:47

Re: Расшаренные ссылки на объекты

Сообщение zub » 25.11.2020 10:24:27

>>Так это же аргумент в пользу того, что отлавливать такое -- работа компилятора, а не высококвалифицированного программиста :)
из пушки по воробьям

вы прям умные показатели панацеей считаете. Строки в паскале давным давно умные, а утекшие динамически созданные строки у меня например - обычное дело

Добавлено спустя 2 минуты 28 секунд:
зы. ниче не имею против новых фич в компиляторе - лишь бы они старому не мешали
zub
долгожитель
 
Сообщения: 2664
Зарегистрирован: 14.11.2005 23:51:26

Re: Расшаренные ссылки на объекты

Сообщение Дож » 25.11.2020 10:26:58

вы прям умные показатели панацеей считаете. Строки в паскале давным давно умные, а утекшие динамически созданные строки у меня например - обычное дело

Утечек было бы столько же, если бы вы не использовали паскалевские строки вообще, а все их выделяли руками через GetMem/FreeMem?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 863
Зарегистрирован: 12.10.2008 16:14:47

Re: Расшаренные ссылки на объекты

Сообщение zub » 25.11.2020 10:33:45

хз, думаю больше. но умность не гарантия безошибочности.
Пожалуй я сольюсь из спора. появится нормальная возможность реализации хитрых указателей - посмотрим
zub
долгожитель
 
Сообщения: 2664
Зарегистрирован: 14.11.2005 23:51:26

Re: Расшаренные ссылки на объекты

Сообщение Дож » 25.11.2020 10:59:28

Почему Management Operators -- ненормальная возможность?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 863
Зарегистрирован: 12.10.2008 16:14:47

Re: Расшаренные ссылки на объекты

Сообщение iskander » 25.11.2020 11:15:07

zub писал(а):Пожалуй я сольюсь из спора.появится нормальная возможность реализации хитрых указателей - посмотрим

zub, погоди сливаться, я когда-то(года три назад?) использовал что-то вроде этого:
Код: Выделить всё
type

  generic TAutoShared<T: class> = record
  private
  type
  {$push}{$interfaces com}
    IOwner = interface
      function  GetInstance: T;
    end;
  {$pop}
    TOwner = class(TInterfacedObject, IOwner)
    protected
      FInstance: T;
      function  GetInstance: T;
    public
      constructor Create;
      constructor Create(aInst: T);
      destructor Destroy; override;
    end;
  var
    FOwner: IOwner;
    function GetInstance: T; inline;
    procedure SetInstance(aValue: T); inline;
  public
    class operator :=(var s: TAutoShared): T; inline;
    class operator Explicit(var s: TAutoShared): T; inline;
    procedure Release; inline;
    property Instance: T read GetInstance write SetInstance;
  end;

implementation

{ TAutoShared.THolder }

function TAutoShared.TOwner.GetInstance: T;
begin
  Result := FInstance;
end;

constructor TAutoShared.TOwner.Create;
begin
  FInstance := T.Create;
end;

constructor TAutoShared.TOwner.Create(aInst: T);
begin
  FInstance := aInst;
end;

destructor TAutoShared.TOwner.Destroy;
begin
  FInstance.Free;
  inherited;
end;

{ TAutoShared }

function TAutoShared.GetInstance: T;
begin
  if FOwner = nil then
    FOwner := TOwner.Create;
  Result := FOwner.GetInstance;
end;

procedure TAutoShared.SetInstance(aValue: T);
begin
  if aValue <> Default(T) then
    begin
      if (FOwner <> nil) and (aValue = FOwner.GetInstance) then exit;
      FOwner := TOwner.Create(aValue)
    end
  else
    FOwner := nil;
end;

class operator TAutoShared.:=(var s: TAutoShared): T;
begin
  Result := s.Instance;
end;

class operator TAutoShared.Explicit(var s: TAutoShared): T;
begin
  Result := s.Instance;
end;

procedure TAutoShared.Release;
begin
  FOwner := nil;
end;

Что в ней тебе не нравится?(Набросал по памяти, могут быть и ошибки, сейчас пользуюсь библиотечной)
iskander
постоялец
 
Сообщения: 386
Зарегистрирован: 08.01.2012 18:43:34

Re: Расшаренные ссылки на объекты

Сообщение sts » 25.11.2020 11:17:16

Mikhail писал(а):Проблема даже не в том что нужно переделать компилятор, а в том что нужно еще все библиотеки и существующий на Паскале софт переделать.

Это не проблема это задача.
Без этого нет смысла в развитии языка, вон добавили дженерики и что? где TComboBox<TMyObject>.Items<T> (или как там)?.
Нужно так развивать язык чтоб он качественно улучшал разработку, уже давно очевидно что без переписывания не обойтись а значит новые возможности должны упрощать переписывание, вместо страницы кода один вызов функции и прогеры с радостью перепишут.
sts
постоялец
 
Сообщения: 295
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Расшаренные ссылки на объекты

Сообщение zub » 25.11.2020 11:23:02

>>Почему Management Operators -- ненормальная возможность?
Убедился что появились в 3.2 не знал

>>Что в ней тебе не нравится?
Интерфейсы

Добавлено спустя 1 минуту 50 секунд:
>>Нужно так развивать язык чтоб он качественно улучшал разработку
Паскаль это паскаль. Тебе придется придумать чтото новое, на базе
zub
долгожитель
 
Сообщения: 2664
Зарегистрирован: 14.11.2005 23:51:26

Re: Расшаренные ссылки на объекты

Сообщение sts » 25.11.2020 11:29:44

в паскале не было классов и интерфейсов и ничего в припрыжку перешли на них
sts
постоялец
 
Сообщения: 295
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Расшаренные ссылки на объекты

Сообщение iskander » 25.11.2020 11:55:28

zub писал(а):Интерфейсы

Та приблуда, которой сейчас пользуюсь, примерно то же самое с заменой интерфейса на Management Operators.
Разница в производительности ~30%, по памяти не считал.
sts писал(а):Без этого нет смысла в развитии языка, вон добавили дженерики и что? где TComboBox<TMyObject>.Items<T> (или как там)?.

Генерики(по крайней мере в текущем состоянии) в сочетании с виртуальными методами это та ещё субстанция.
iskander
постоялец
 
Сообщения: 386
Зарегистрирован: 08.01.2012 18:43:34

Re: Расшаренные ссылки на объекты

Сообщение zub » 25.11.2020 12:38:35

Посмотрел примеры Management Operators
Насколько я понял поведение "аля стринг" на них не реализовать(( и стринги не переписать на этой фиче внутри компилятора - компиляторные managed типы так и останутся магическими((

Добавлено спустя 1 минуту 23 секунды:
>>в паскале не было классов и интерфейсов и ничего в припрыжку перешли на них
это новые фичи, старый код вполне работает без них

Добавлено спустя 2 минуты 12 секунд:
>>Насколько я понял поведение "аля стринг" на них не реализовать((
имею ввиду служебную инфу по отрицательному смещению и возможность использовать как указатель непосредственно на данные
zub
долгожитель
 
Сообщения: 2664
Зарегистрирован: 14.11.2005 23:51:26

Re: Расшаренные ссылки на объекты

Сообщение iskander » 25.11.2020 13:02:48

Эта фича осталась недоделанной, но Copy On Write на ней организовать вполне можно.
iskander
постоялец
 
Сообщения: 386
Зарегистрирован: 08.01.2012 18:43:34

Re: Расшаренные ссылки на объекты

Сообщение Дож » 25.11.2020 13:03:47

имею ввиду служебную инфу по отрицательному смещению и возможность использовать как указатель непосредственно на данные

Ужас :) Можно же написать у своих строк методы .GetHackedInfo и .GetRawPtr и это повысит читабельность кода, разве нет?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 863
Зарегистрирован: 12.10.2008 16:14:47

Re: Расшаренные ссылки на объекты

Сообщение zub » 25.11.2020 13:09:47

>>Можно же написать у своих строк
Можно.
А стринги на них переписать - нет
zub
долгожитель
 
Сообщения: 2664
Зарегистрирован: 14.11.2005 23:51:26

Пред.След.

Вернуться в Разное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru