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

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

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

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

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

А стринги на них переписать - нет

Ну, типа можно через type helpers...
Код: Выделить всё
{$MODE FPC}
{$MODESWITCH TYPEHELPERS}

type
TZubHacks = type helper for AnsiString
  function GetRawPtr: PAnsiChar;
end;

function TZubHacks.GetRawPtr: PAnsiChar;
begin
  Exit(@Self[1]);
end;

var
  S: AnsiString;
begin
  S := 'foo bar';
  Writeln(S.GetRawPtr);
end.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

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

Сообщение zub » 25.11.2020 13:23:18

Похоже это и имелось ввиду когда упоминались 2 сущности - говно и палки))
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение iskander » 25.11.2020 13:40:10

zub, а как бы ты хотел?
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

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

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

Возможность написания *string, перепись внутри компилятора *string и иже с ними на фиче (или хотябы такая возможность, если сделать лень). досвидания магия

остальное - полумеры. но это на мой вкус и цвет
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение iskander » 25.11.2020 14:06:36

Не, без переделки языка и компилятора нереально.
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

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

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

Фичей я обязательно попытаюсь воспользоваться при удобном случае
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение DedFrend » 25.11.2020 20:37:08

Вот не понимаю я, что вообще в Паскале означает Object goes out of scope ?
Допустим, у меня в модуле А есть перемнная-объект Sample.TSample Я из модуля А вызываю процедуру proc1, которая находится в модуле В и модуль В не имеет в секции uses модуля А. То есть для proc1 переменная Sample не видна и недостижима Это что, повод освободить ее?
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

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

Сообщение zub » 26.11.2020 07:58:35

Код: Выделить всё
Var
a:TCompilerManagedType;
begin <-тут a проинициализируется
  ...
  ProcInOtherUnit(a);
  ...
end; <-тут a умрет

ProcInOtherUnit(var a:TCompilerManagedType)
begin
  тут а вполне живо;
end;


как кстати у операторов с автоматикой по времени жизни?
Последний раз редактировалось zub 26.11.2020 09:12:37, всего редактировалось 1 раз.
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение iskander » 26.11.2020 09:09:37

zub писал(а):как кстати у операторов с автоматикой по времени жизни?

Имхо если вдруг станет по-другому, это будет повод постучаться в багтрекер.
DedFrend писал(а):Вот не понимаю я, что вообще в Паскале означает Object goes out of scope ?

Полагаю, это образное выражение, движутся не переменные, а поток исполнения. Но ведь всё относительно?
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

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

Сообщение DedFrend » 26.11.2020 19:05:50

Спасибо zub, просветил. Но вообще-то я не очень понимаю зачем вообще нужно автоматическое размещение. Лень написать Create/Free ? Так может и тип будет лень описывать? А нередко оно вообще неприменимо. Вот надо мне не в момент объявления инициализировать, а во время выполнения. Или я вообще заранее не знаю с каким типом буду создавать?
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

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

Сообщение iskander » 26.11.2020 19:23:59

DedFrend писал(а):Но вообще-то я не очень понимаю зачем вообще нужно автоматическое размещение.

DedFrend, если не знаешь, зачем это нужно, значит, скорее всего, оно тебе и не нужно. Но иногда это удобно и позволяет писать более простой и надежный код.
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

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

Сообщение sts » 26.11.2020 21:57:14

Когда постоянно пишешь одно и тоже возникает желание автоматизировать , раньше тоже конструкции class не было, vmt, вручную на рекордах делали, надоело - добавили, освободили программиста от рутины.
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

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

Сообщение DedFrend » 27.11.2020 21:14:35

Признаться, после публикации статьи (а это моя статья, если кто не понял) я ожидал сразу бурного обсуждения, но две недели вообще ничего не было. Наконец, вроде, заметили, но обсуждение мгновенно свалилось с обсуждения предлагаемого МЕТОДА на обсуждение общих ПРОБЛЕМ , связанных с как их тут обозвали "расшаренными" ссылками.
Мне же, как автору, интересно две вещи.
1) Встречал ли кто-нибудь такой метод (назовем его использование косвенных ссылок) где-нибудь еще? Все эти умные указатели и разные фичи ничего общего не имеют с предложенным методом.
2) Какие проблемы видятся при использовании предложенного метода?
Дополнительно поясняю :
1) Указанный метод преследует единственную цель - чтобы попытка использовать уже освобожденный объект гарантировано вело к возникновению ошибки. Никакой автоматизации здесь не предусмотрено.
2) Поскольку используются тривиальные вещи, то их можно применять в любых средах, где есть такая проблема (отсутствие ошибки при обращении к освобожденному объекту). В том числе в С++.
3) В методе не используются интерфейсы, и, вообще, не требуется переделка классов. Все остается как было, меняются только ссылки на объекты.
4) Новые х-ссылки можно безбоязненно размножать и хранить в контейнерах. Если кто-то удалит объект, все ссылки станут недействительными. Правда, классы-контейнеры, вероятно, потребуют модификации (FreeAndNil(Items[i]^) и тому подобное)
5) Использование промежуточного менеджера ссылок также открывает новые возможности. Можно проверить не пытаемся ли мы освободить нил-указатель .
6) Возможно использование х-ссылок для подмены объекта
Код: Выделить всё
  FreeAndNil(xSample^);
  xSample^ := TSample.Create;

и в результате все раннее созданные ссылки (включая "контейнерные") будут указывать на новый экземпляр объекта.
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

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

Сообщение iskander » 27.11.2020 22:33:12

DedFrend писал(а): их тут обозвали "расшаренными" ссылками

Ну, жаргонизм, конечно. :oops:
DedFrend писал(а):вообще, не требуется переделка классов

И "умные" указатели тоже не требуют никакой переделки классов.
DedFrend, если бы я прочёл твою статью лет этак 20 назад, может быть и проникся бы. Но дело в том, что твой метод не решает озвученную проблему, а "умные" указатели вполне могут решить.
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

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

Сообщение DedFrend » 27.11.2020 22:47:35

iskander писал(а):твой метод не решает озвученную проблему

Проблему, которую озвучивал я - решает
И опять-таки ответов на вопросы нет.
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

Пред.След.

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

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

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

Рейтинг@Mail.ru