Войти
ПрограммированиеФорумОбщее

Вопросы по Delphi (35 стр)

Страницы: 134 35 36 3746 Следующая »
#510
(Правка: 23:33) 23:33, 5 авг 2022

skalogryz
> может быть потому что ты лучше знаешь, чем компилятор когда нужно освободить
> память.
Если ссылка теряется, то я уже даже если захочу - не смогу освободить память.

> вот зачем в шарпе IDisposable? а память не является таким же ресурсом?
В шарпе если по хорошему - тоже можно сказать ручной менеджмент памяти.
Вот есть у тебя объект текстура. Она хранит какой-то хендл на на неё. Это анменеджед данные. Значит что? Значит надо делать IDisposable:

class Texture : IDisposable {
  uint tex_handle;
//.....
}

Теперь у нас есть объект, которому назначена данная текстура:

class MyObject {
  public Texture texture { get; set; }
}

И это не правильно. По хорошему т.к. объекты, реализующие IDisposable - считаются анменеджед. Значит что? Значит MyObject тоже должен поддерживать IDisposable:

class MyObject : IDisposable {
  public Texture texture { get; set; }
}

Храним мы объекты в списке, он тоже должен быть IDisposable:

class MyWorld : IDisposable {
  List<MyObject> game_objects;
};

И внезапно язык из автоматического менеджмента памяти превращается в ручной. Конечно можно забить болт, и сделать только class Texture : IDisposable. И в большинстве случаев это сработает, ибо GC бегает по памяти очень часто. Но как бы сам факт. В тех же плюсах если следовать RAII такой проблемы нет. А Rust тебе еще и сам проверит, что ты следуешь RAII.

#511
0:05, 6 авг 2022

MrShoor
> Если ссылка теряется, то я уже даже если захочу - не смогу освободить память.
для этого и делают данные для её сохранения.
Если ты знаешь, что будешь создавать динамические данные, то как ты ими пользоваться собрался, если ты ссылку на них теряешь? )))

#512
0:12, 6 авг 2022

Mirrel
> Если ты знаешь, что будешь создавать динамические данные, то как ты ими
> пользоваться собрался, если ты ссылку на них теряешь? )))

begin
    obj := TSomeData.Create(input);
    obj.DoSomething();
    //всё, я поработал с данными, получил какой-то результат, obj мне больше не нужен
    //но не забудь удалить, ведь компилятор не в курсе, что ты потерял ссылку на данные
end;
#513
0:55, 6 авг 2022

MrShoor
obj - уже содержит указатель. От него и удаляем.

Но конечно проще, когда за нас это делает компилятор.

#514
2:25, 6 авг 2022

MrShoor
> Значит что? Значит MyObject тоже должен поддерживать IDisposable
Работать оно будет и без этого. Просто текстурка освободится не сразу, а позже.

#515
(Правка: 4:22) 2:43, 6 авг 2022

MrShoor
> всё, я поработал с данными, получил какой-то результат, obj мне больше не нужен
а если ты obj тебе по завершению нужен, то сам собой напрашивается refcount.
ты же уже советовал интерфейсы выше по теме.

Может быть тебя заинтересует спец конструктор, которой инструктирует компилятор освободить объект по завершению процедуры (аки какой-нить управляемый тип - принудително в скрытой finally секции)? (а любой явный .Free или .Destroy ещё и зануляют ссылку)

var
  obj : TSomeData local; // всё! ты заявил что переменная используется только здесь
                         // и только здесь она должна быть освобждена
begin
  obj := TSomeData.Create(input);

samrrr
> Просто текстурка освободится не сразу, а позже.
при прибитии процесса? ну это как бы и есть классическая утечка ресурсов.

#516
4:50, 6 авг 2022

лол видели интервью с кармаком недавнее? https://www.youtube.com/watch?v=I845O57ZSy4

они там где-то обсуждали полчаса огромное (как выяснилось) дерево паскалеподобных языков и самых экзотических ответвлений от паскаля, о существовании которых лично я даже не знал. однако, о дельфи ничего даже не упомянули :D

#517
(Правка: 6:14) 5:47, 6 авг 2022

Suslik
> они там где-то обсуждали полчаса огромное (как выяснилось) дерево
> паскалеподобных языков
дослушал до 42 минуты (части - Programming languages, Modern programming). Паскаль не упомянули. (Хаскель (14:29), да, но не Паскель).

#518
7:20, 6 авг 2022

Suslik
> они там где-то обсуждали полчаса огромное (как выяснилось) дерево
> паскалеподобных языков

Да в какой хоть части?
Я уже и прощёлкал каждую часть, но единственное где было что-то про обсуждение языка программирования - это про Quake C.

#519
7:21, 6 авг 2022

skalogryz
> а если ты obj тебе по завершению нужен, то сам собой напрашивается refcount.
заводить рефкаунт на объект у которого за всё время жизни всего одна ссылка - помоему оверхед


> obj : TSomeData local; // всё! ты заявил что переменная используется только
> здесь
Выглядит любопытно. Это в FPC такое завезли?

#520
(Правка: 7:46) 7:28, 6 авг 2022

MrShoor
> заводить рефкаунт на объект у которого за всё время жизни всего одна ссылка -
> помоему оверхед
запрещать его присваивание?

MrShoor
> Выглядит любопытно. Это в FPC такое завезли?
нет. но выглядит костыльно.
в том плане, что начнётся фигня, когда ты obj присвоишь другой переменной и освободишь её.

var
obj : TMyObject local;
v : TObject;
...

obj:=TMyObject.Create; // упадёт при выходе из функции, потому что компилятор не сделает FreeAndNil
v:=obj;
v.Free; // вот здесь

функционал получается очень ограниченным, просто ради экономии одной (четырёх) строчек.

=A=L=X=
> Да в какой хоть части?
это такой тонкий троллинг от Суслика - а точнее реклама его любимого блогера, чтобы все посмотрили.
Кармак очень правильные вещи говорит, в том плане, чтоб язык и способы его написания годились для долгосрочного обслуживания. А не так, что - только лишь бы написать до релиза, а потом хоть трава не расти.

ЗЫ: если гуглить carmack pascal, то вылазят ссылки на его твитеры, где он говорит "ооо я бейске писал, на паскале и на азмах". Но это нужно относить к тому времени, когда он под стол пешком ходил. Тогда турбо паскаль ещё даже не завезли, ну и паскалей было великое множество.

хотя нет. Вот тут "турбо паскаль":
https://twitter.com/id_aa_carmack/status/424280173437919232?lang=en

+ а вот это и есть игра

что интересно - 3д
причём сделал он именно то, что делают и юные геймдевелоперы ныне - клонировал любимую игру с одной платформы на другую.
Ничё придумывать не нужно - образец есть - только реализуй.

#521
7:48, 6 авг 2022

skalogryz
> Кармак очень правильные вещи говорит

У меня нет времени 5 часов сидеть его и слушать, но я словил ощущение, что на какую бы секунду ни ставил видео - Кармак говорит очевидно правильные вещи.
Как бы сказать... как будто и нет смысла это всё слушать потому что ответы на заданные вопросы и так очевидны.
Вот даже то, что люди к 2030 не высадятся на Марс (скорее всего), а автопилот напротив скорее всего уже будет коммерчески доступен. Он сидит объясняет почему, а мне уже неинтересно - очевидно же.
Забавно.

#522
7:53, 6 авг 2022

=A=L=X=
> Кармак говорит очевидно правильные вещи
ну.... ты не первый день на гд.ру...
1) люди не верят в очевидные вещи.
2) нет пророка в отечестве... Т.е. если кто-то на гд.ру что-то говорит - то это фуфло, а если что-то скажет Кармак, то это истина в первой инстанции.

#523
9:50, 6 авг 2022

skalogryz
> при прибитии процесса?
При GC объекта.

#524
11:37, 6 авг 2022

Suslik
> лол видели интервью с кармаком недавнее?
Чёт он неважно выглядит для своего полтинника :(


skalogryz
> Кармак очень правильные вещи говорит, в том плане, чтоб язык и способы его
> написания годились для долгосрочного обслуживания
Помоему тут и обсуждать нечего. Это единственный подход, который может быть применён, а остальные не стоит даже рассматривать.

skalogryz
> клонировал любимую игру с одной платформы на другую
КМК все через это проходили.

Посмотрел я тут синтаксис XAML, он же WPF. Ну вот почему dfm годится для редактирования в блокноте, а эти языки с тэгами как будто нарочно делают, чтобы затруднить редактирование вне нативной IDE.

Страницы: 134 35 36 3746 Следующая »
ПрограммированиеФорумОбщее