функций?
За такие языки чё нить известно?
Сложный вопрос, я таких языков не назову сходу. Теоретически они конечно могут быть, т.е. а почему бы нет... Особенно если вернуться чуть выше, и прочесть о том что замыкание может создаваться даже когда оно не возвращается/используется. *Прост некоторые думают что замыкание это когда мы из функции функцию возвращаем - а если не возвращаем, то нет замыкания вовсе))
Ну вот в си по сути есть замыкания, но там и функции первоклассные
Там где функции первоклассные, замыкания обычно есть, это да. Вот наоборот - уже сложно, т.к. они блин почти везде первоклассные... надо вспоминать архаичные/специфичные языки.
В Lua как такового замыкания нет, хоть функции и первоклассные
А, так вот откуда идея вопроса про ООПшный контекст))
Это из си, там замыкания только на объекты лежащие в стеке
Ну определение функции внутри функции
Будто в других языках иначе... в жс, опять же, окружение через стек передается.
Ну вообще-то иначе... В других языках замыкание живёт и после выхода из блока кода где эта функция создавалась, а в си у тебя всё по пизде пойдет если такую функцию просто вернуть и вызывать её без всякой подготовки...
О какой именно подготовке речь?.. что-то я не в теме насчет этого И кстати, если окружение "дохнет" после выхода из функции (разрушается или маркируется для GC), то это не замыкание получается. Сама суть жеж в сохранении окружения вызова, разве не?
Перед вызовом функции где есть замыкания происходит выделение памяти из кучи и перенаправление указателя вершины стека в кучу. (То есть создание объекта). И произходит вызов той функции (инициализация объекта). Там локальные функции можно замыкать на переменные в стеке. Там можно эти функции куда угодно передавать. Но при вызове тех функций, нам надо будет предварительно менять указатель стека на ту самую область памяти... По сути это и есть создание объекта прям почти как в жс. А те функции ведут себя как методы объекта.
Чё нет то, если замкнутый объект нигде не используется, то и как бы объекты замыкания можно освобождать если их никто не использует
Да это понятно что можно, главное чтобы оно само не дохло. Конечно же, я согласен с тем что "объект можно освобождать" и "объект не создается" совсем не равнозначные утверждения))
Обсуждают сегодня