в компайл тайме не известно сколько вложений в рекурсию. То есть компилятор не может вставить retain/release без проверки условия что счётчик упал до нуля. И после падения до нуля, обьект удаляется но далее в теле рекурсии опять происходит эта проверка, компилятор то не знает как и что, то есть там даже
if obj. counter == 0 and obj.not_destroyed(): object.destroy()
Работает это безусловно, объект и все его поля исчезают моментально. Вплоть до того, что объект не доживает даже до конца функции — компилятор может вставить release вызов ровно в том месте, с которого переменная более не используется.
А стоп, ты имеешь ввиду это разрешается в компайлтайме?
Тогда не настолько плачевно. А как разрулится рекурсия в компайлтайме с неизвестным количеством вложений?
Операции со счетчиком компилятор вставляет автоматически
куда и как вставляет? Предположим там что то вроде
if not obj.counter: obj.destructor()
В каких местах кода это прописывается, во всех где затрагивается обьект что ли?
А если знать место в памяти где счётчики или если они в самом обьекте, можно специально влесть туда и подменить, сделав шикарный лик памяти…
да как с самого начала как услышишь про этот концепт понятно что геморно. Тем более для мобильного девайса у которого итак не круто с производительностью.
да тогда лучше сразу в обьекте хранить.
кстати, ещё, как происходит наблюдение и удаление обьекта в случае когда счётчик достигает нуля? И кошмар — можно ли случайно написать так, чтобы что то нарушить, например ложно увеличить счётчик
какой момент не понятен. Насколько это я себе примерно представляю, при доступе к памяти грузится вся страница, которая будет грузиться при доступе к одной переменной счётчика. А инлайн обьектов это вроде Structure of Arrays с векторным выделением/удалением памяти под обьекты чтобы не считать для каждого отдельно. Так можно если очень мало обьектов и на производительность вообще забили.
действительно, представь оверхед на доступ к значению в памяти где число ссылок, инкремент или ещё что там делают. Где нибудь вообще делают инлайн обьектов с превращением в обычные массивы?
Ну да, и при этом эти же капиталисты спокойно садятся за стол переговоров и разрабатывают очередной стандарт, который как раз открывает дорогу для огромной конкуренции как внутри, так и со стороны.
Ога, манипуляция. Все быстро принялись определять стандарт интерфейса приложение / ОС который позволит производить отдельно операционку, отдельно программы для любой ОСи через интрфейс, в частности отдельно GUI, и конкуренцию между ними. Так нет, оказывается каждый старается монополизировать и впихнуть Ось, ПО и GUI в один пакет.
А текстовые стандарты типа XML это ерунда
Хм, не думаю что такой взгляд наилучший для любой задачи. Если копнуть глубже, стоит задуматься с какой стати вообще одни обьекты исчезают в то время как другие живут долго, и почему
Обычно, они освобождаются в хаотичном порядке
. И вообще не лучше ли представить обьекты как структуры примитивных величин (массивы, списки, хеш таблица) и определить весь функционал векторной обработки обьектов неким аналогом Numpy а вышеупомянутый подход годится для небольшой кучи непредсказуемых обьектов.
это всё ерунда, а когда вас затронет частное юридическое дело с большими юридичиескими возможностями другой стороны тогда будете знать чего стоит вся вышеперечисленная МЕЛОЧЬ.
ничё там не вырисовывается. Ненадо писать утверждения когда знаешь только про подачки мелочью денег И не знаешь реалии законов. При введении эконом. кибернетики у них как у готовой для этого развитой системы была бы экономика сильнее раз в 20.
при должной оптимизации тоже разрешался бы в компайл/интерпрет тайме, что я писал выше. Собственно я неправильно думал что js/ts делает это с const потому что там уж точно написано что переменная не меняется, переоценил интерпретатор. Более того, так замещаться может также изменение переменной вида
a = 10…
a = 20 создаст 2 константы, известные в компайл тайме.
Вообще-то нет. const — это для меня, чтобы я знал — эта переменная не меняется.
а не лучше выделить обьявление констант в один блок, по требованием софтваредизайна — в начале текста или в отдельный конфиг-файл с константами, и/или использовать общепринятое имя что это константа, а не загружать язык разными декларациями.
было бы не плохо, если бы новый язык хотя бы содержал какие то новые концепты, а то всё пермутация уже существующих фич. Так можно языки изобретать по 100 в день.
в компайл тайме не известно сколько вложений в рекурсию. То есть компилятор не может вставить retain/release без проверки условия что счётчик упал до нуля. И после падения до нуля, обьект удаляется но далее в теле рекурсии опять происходит эта проверка, компилятор то не знает как и что, то есть там даже
if obj. counter == 0 and obj.not_destroyed(): object.destroy()
А стоп, ты имеешь ввиду это разрешается в компайлтайме?
Тогда не настолько плачевно. А как разрулится рекурсия в компайлтайме с неизвестным количеством вложений?
куда и как вставляет? Предположим там что то вроде
if not obj.counter: obj.destructor()
В каких местах кода это прописывается, во всех где затрагивается обьект что ли?
А если знать место в памяти где счётчики или если они в самом обьекте, можно специально влесть туда и подменить, сделав шикарный лик памяти…
да тогда лучше сразу в обьекте хранить.
кстати, ещё, как происходит наблюдение и удаление обьекта в случае когда счётчик достигает нуля? И кошмар — можно ли случайно написать так, чтобы что то нарушить, например ложно увеличить счётчик
Или когда конкуренты достаточно сильны становится выгоднее объединиться, заместо того чтобы пытаться пожрать и иметь взаимные минусы из за этого
Ога, манипуляция. Все быстро принялись определять стандарт интерфейса приложение / ОС который позволит производить отдельно операционку, отдельно программы для любой ОСи через интрфейс, в частности отдельно GUI, и конкуренцию между ними. Так нет, оказывается каждый старается монополизировать и впихнуть Ось, ПО и GUI в один пакет.
А текстовые стандарты типа XML это ерунда
У меня выше
a = 10…
a = 20 создаст 2 константы, известные в компайл тайме.
а не лучше выделить обьявление констант в один блок, по требованием софтваредизайна — в начале текста или в отдельный конфиг-файл с константами, и/или использовать общепринятое имя что это константа, а не загружать язык разными декларациями.