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.
MrShoor
> Если ссылка теряется, то я уже даже если захочу - не смогу освободить память.
для этого и делают данные для её сохранения.
Если ты знаешь, что будешь создавать динамические данные, то как ты ими пользоваться собрался, если ты ссылку на них теряешь? )))
Mirrel
> Если ты знаешь, что будешь создавать динамические данные, то как ты ими
> пользоваться собрался, если ты ссылку на них теряешь? )))
begin obj := TSomeData.Create(input); obj.DoSomething( ); //всё, я поработал с данными, получил какой-то результат, obj мне больше не нужен //но не забудь удалить, ведь компилятор не в курсе, что ты потерял ссылку на данные end;
MrShoor
obj - уже содержит указатель. От него и удаляем.
Но конечно проще, когда за нас это делает компилятор.
MrShoor
> Значит что? Значит MyObject тоже должен поддерживать IDisposable
Работать оно будет и без этого. Просто текстурка освободится не сразу, а позже.
MrShoor
> всё, я поработал с данными, получил какой-то результат, obj мне больше не нужен
а если ты obj тебе по завершению нужен, то сам собой напрашивается refcount.
ты же уже советовал интерфейсы выше по теме.
Может быть тебя заинтересует спец конструктор, которой инструктирует компилятор освободить объект по завершению процедуры (аки какой-нить управляемый тип - принудително в скрытой finally секции)? (а любой явный .Free или .Destroy ещё и зануляют ссылку)
var obj : TSomeData local; // всё! ты заявил что переменная используется только здесь // и только здесь она должна быть освобждена begin obj := TSomeData.Create(input);
samrrr
> Просто текстурка освободится не сразу, а позже.
при прибитии процесса? ну это как бы и есть классическая утечка ресурсов.
лол видели интервью с кармаком недавнее? https://www.youtube.com/watch?v=I845O57ZSy4
они там где-то обсуждали полчаса огромное (как выяснилось) дерево паскалеподобных языков и самых экзотических ответвлений от паскаля, о существовании которых лично я даже не знал. однако, о дельфи ничего даже не упомянули :D
Suslik
> они там где-то обсуждали полчаса огромное (как выяснилось) дерево
> паскалеподобных языков
дослушал до 42 минуты (части - Programming languages, Modern programming). Паскаль не упомянули. (Хаскель (14:29), да, но не Паскель).
Suslik
> они там где-то обсуждали полчаса огромное (как выяснилось) дерево
> паскалеподобных языков
Да в какой хоть части?
Я уже и прощёлкал каждую часть, но единственное где было что-то про обсуждение языка программирования - это про Quake C.
skalogryz
> а если ты obj тебе по завершению нужен, то сам собой напрашивается refcount.
заводить рефкаунт на объект у которого за всё время жизни всего одна ссылка - помоему оверхед
> obj : TSomeData local; // всё! ты заявил что переменная используется только
> здесь
Выглядит любопытно. Это в FPC такое завезли?
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д
причём сделал он именно то, что делают и юные геймдевелоперы ныне - клонировал любимую игру с одной платформы на другую.
Ничё придумывать не нужно - образец есть - только реализуй.
skalogryz
> Кармак очень правильные вещи говорит
У меня нет времени 5 часов сидеть его и слушать, но я словил ощущение, что на какую бы секунду ни ставил видео - Кармак говорит очевидно правильные вещи.
Как бы сказать... как будто и нет смысла это всё слушать потому что ответы на заданные вопросы и так очевидны.
Вот даже то, что люди к 2030 не высадятся на Марс (скорее всего), а автопилот напротив скорее всего уже будет коммерчески доступен. Он сидит объясняет почему, а мне уже неинтересно - очевидно же.
Забавно.
=A=L=X=
> Кармак говорит очевидно правильные вещи
ну.... ты не первый день на гд.ру...
1) люди не верят в очевидные вещи.
2) нет пророка в отечестве... Т.е. если кто-то на гд.ру что-то говорит - то это фуфло, а если что-то скажет Кармак, то это истина в первой инстанции.
skalogryz
> при прибитии процесса?
При GC объекта.
Suslik
> лол видели интервью с кармаком недавнее?
Чёт он неважно выглядит для своего полтинника :(
skalogryz
> Кармак очень правильные вещи говорит, в том плане, чтоб язык и способы его
> написания годились для долгосрочного обслуживания
Помоему тут и обсуждать нечего. Это единственный подход, который может быть применён, а остальные не стоит даже рассматривать.
skalogryz
> клонировал любимую игру с одной платформы на другую
КМК все через это проходили.
Посмотрел я тут синтаксис XAML, он же WPF. Ну вот почему dfm годится для редактирования в блокноте, а эти языки с тэгами как будто нарочно делают, чтобы затруднить редактирование вне нативной IDE.