Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вложенные и анонимные функции. (http://www.flasher.ru/forum/showthread.php?t=150437)

terbooter 11.02.2011 19:59

Вложенные и анонимные функции.
 
Хочу разобраться как работает GC с вложенными и анонимными функциями.
Например, вот в этот листинг http://pastie.org/780300 демонстрирует, как анонимная функция просто подвисает в памяти.
Вообще, удаляются ли анонимные функции из памяти?
А вложенные?

zuxul 11.02.2011 23:08

Этот пример не демонстрирует того, что функция "подвисает в памяти".
GC съест их по-любому, если не останется ни одной ссылки на эти функции (хочется верить в GC).
В этом примере показывается, что при создании функции, в которой используются локальные переменные текущей области видимости (даже не текущей, а той области видимости, из которой потом не должно быть видно этих переменных), локальные переменные становятся как бы глобальными переменными для этой функции - сумбурно описал, еще это называется "замыкание". Замыкание нередко используется в языка программирования JavaScript, perl... в ActioScript из-за "кривой" реализации "замыканиев", везде советуют не пользоваться данным методом.

Psycho Tiger 11.02.2011 23:32

terbooter, а сам проверял? Попробуй, может они уничтожаться как локальные переменные.

TanaTiX 12.02.2011 00:03

Я конечно понимаю, что истина дороже, но дались вам эти анонимные функции? Во ФД Ctrl+Shift+1 и нет проблем. Лучше читаемость кода, лучше масштабируемость, лучше типизация. ЗАЧЕМ?

dimarik 12.02.2011 00:09

А разве Блуд не рассказывал про анонимные функции? Кто-то еще не понял?

КорДум 12.02.2011 00:15

А разве в поиске мало тех тем, где люди спрашивают про анонимные функции?

Psycho Tiger 12.02.2011 00:44

Цитата:

Сообщение от dimarik (Сообщение 972688)
А разве Блуд не рассказывал про анонимные функции? Кто-то еще не понял?

Если не ошибаюсь, Блуд рассказывал про замыкания в обработчиках.
Я давно хочу изучить вопрос об анонимных функциях как параметр, например, в Array#filter, т.к. для тестов пользуюсь. Достаточно удобно, будет здорово, если безболезненно такое можно пускать в продакшн.

dimarik 12.02.2011 01:12

Цитата:

Сообщение от Psycho Tiger (Сообщение 972698)
Если не ошибаюсь, Блуд рассказывал про замыкания в обработчиках.

Можно было более высокопарно "лямбда-замыкания", чего постеснялся? В чем тут неразбериха? Молоко стало вкуснее и шИколаднее, из-за того, что корова стала альпийской?

Котяра 12.02.2011 05:13

Пришлось разбирать код на javaScript..
ребята - это упитанный пушистый белый, но не заяц.
ненавижу js и php - это хуже чем код в кадрах.
PS. А анонимные функции - зло, как и php c js

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

terbooter 12.02.2011 08:15

Согласен, анонимные функции зло злейшее. (JS - да, тоже не люблю, но ПХП не так уж плох)
Термин замыкание избегаю сознательно, чтобы не вводить путаницу.

Просто сейчас я работаю в большом проекте и у меня нет выбора, кроме как полностью разобраться с замыканиями.

Psycho Tiger 12.02.2011 12:42

Цитата:

Сообщение от dimarik (Сообщение 972702)
Можно было более высокопарно "лямбда-замыкания", чего постеснялся? В чем тут неразбериха? Молоко стало вкуснее и шИколаднее, из-за того, что корова стала альпийской?

Твой вердикт что нужно избегать замыканий/анонимных функций везде?

Цитата:

Просто сейчас я работаю в большом проекте и у меня нет выбора, кроме как полностью разобраться с замыканиями.
Поделись нуждой =)

P.P.S. анонимная функция, присвоенная полю класса продолжает относится к анонимным?

expl 12.02.2011 13:17

Цитата:

Просто сейчас я работаю в большом проекте и у меня нет выбора, кроме как полностью разобраться с замыканиями.
Тимлид рассказывал, как они избавились от анонимных функций на одном проекте и потребление памяти упало с 800Мб до 200.

gloomyBrain 12.02.2011 23:53

[offtop]
Классно - мы вчера подключили кеширование векторной анимации и подняли потребляемую память с 50 до 400 мб =)
[/offtop]
А вообще я себе это позволяю только на тестах да и то редко, ибо область видимости и все такое...

wvxvw 13.02.2011 18:39

Код:

grep -rPn '(?<!public|private|protected|internal|static|override)\sfunction' .
И за каждую найденую строчку автору 7 суток общественно-полезных работ :)
(Можно сделать поправки на кастомные немспейсы, если такковые имелись).

TanaTiX 13.02.2011 18:41

wvxvw, что это было?

wvxvw 13.02.2011 18:44

Поиск во всех файлах текущей директории текста содержащего регулярное выражение ^. Или вы про общественно-полезные работы? Это как в "Операция Ы".

Psycho Tiger 13.02.2011 18:45

Что-то типа регулярки, если встретилось function, но без модификаторов, доступных только методу?)

Ай-ай, опередил. Короче, поиск замыканий.

TanaTiX 13.02.2011 19:32

wvxvw, нет не про работы конечно :) Я так понимаю, любимый Lisp?

wvxvw 13.02.2011 22:49

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

BlooDHounD 13.02.2011 22:56

@TanaTiX, вам сюда

TanaTiX 13.02.2011 22:58

BlooDHounD, ну спасибо, в ламеры записали.

terbooter 14.02.2011 08:13

wvxvw, ох суровые тарифы на наказание.
В текущем проекте на 100 модификаторов public приходится один private.
Кастомных нэймспейсов нет =)

При таком подходе, даже внуки получат пожизненно

Добавлено через 10 минут
Вообщем мое мнение по вопросу анонимных функций во флеше такое:
низачто и никогда!
Тк они нужны для эмуляции ОО подхода при функциональном стиле программирования.
Единственный плюс от использования - код немного компактнее, но его труднее читать.

Многое еще зависит от типа мышления человека. Кому-то просто нравится ruby, как раз за блоки кода и безумные
конструкции которые можно наворотить в 10 строчках.

wvxvw 14.02.2011 09:30

"Кстати о птичках..." если уж мы говорим об ОО подходе в функциональных языках, CLOS - это как бы обрзец... и там нету никаких анонимных функций, как раз наоборот. Вообще-то, на сколько я понимаю, анонимные функции должны были выполнять, по задумке автора, то же, что и лямбда в ФП. Но есть нюанс... лямбда, по определению контекстно независимая, а задача объектов, как раз наоборот, поместить методы в свой контекст. А если говорить о реализации ОО в AS3, то вообще анонимные функции противопоказаны, и в языке есть другие инстументы для реализации тех же вещей...
Т.е. эквивалентом
Код AS3:

class Foo {
public function Foo() { super(); }
public function someMethod():void {}
}

будет примерно следующее:
Код:

(deflcass Foo () ((someMethod :accessor someMethod)))
(defgeneric someMethod ()
    (defmethod someMethod ())
)

Никакой анонимности :)

terbooter 15.02.2011 22:10

Немного не то имел ввиду.
Я хотел сказать, что вложенная функция это "как-бы" свойство, "как-бы" объекта.
Где "как-бы" объект является методом всего лишь, настоящего (инстанс класса) объекта.
Попытка нагромоздить микроархитектуру ОО подобную.
Фрактал, блин, такой.
Встречал статью про замыкания в as3, где высказывалась похожее сравнение.

wvxvw 16.02.2011 02:02

Не знаю... если чесно то функциональные языки тут притянуты за уши... просто потому, что модно. В функциональных языках this не имеет смысла, нету переменных (разрушающего присваивания) ну и т.п. И это просто на стколько далеко от реалий AS3 / JavaScript, что остается только пожимать плечами, когда кто-то берется срванивать :) Ну ни разу не похоже. Т.е. методы в ФП отличаются от не-методов тем, что принимают первым параметром функции объект определенного класса, а классы - это просто списки методов ассоциируемых с ними.

Bgg 16.02.2011 02:11

А есть факты того что с использованием анонимных функций код может исполнятся не верно или не так как задумано?

BlooDHounD 16.02.2011 04:39

@Bgg, есть факты того, что с использованием анонимных функций, код всегда исполняется верно, но возможно не так как задумано.


Часовой пояс GMT +4, время: 10:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.