![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| rene |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 31.10.2006 Где: г. Висагинас, р. Литва Репутация: нет Всего: нет |
Всё-таки у меня есть сомнения насчёт того, что "closure" следует переводить как "замыкание".
Сначала мне думалось, что "closure" это сокрытие(от "close" - закрывать), так как оно скрывает, заключает в себя свой локальный контекст плюс ссылки на переменные внешней функции. Но потом меня начал терзать сомнения. Статья на Wikipedia Closure отсылает нас к модели актёра, в которой говориться, что "если актёр имеет адрес одного из других актёров, то они состоят в знакомстве. "Closure" имеет ссылки на переменные внешней функции, т.е. некая внутренняя анонимная функция знакома с внешней функцией. А "close" - это переводится, в том числе, как "близкий". Может "closure" корректней переводить как "приближение" или "близость"? Это сообщение отредактировал(а) rene - 18.11.2006, 21:51 |
|||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
rene, действительно, замыкание нельзя назвать "дословным" переводом. Однако на "знакомство" англоязычные авторы этого понятия наверняка также не намекали.
На мой взгляд это понятие можно представлять как нечто (мы знаем, что в данном случае нечто - это функция-выражение), заключенное внутри чего-то, закрытое в чем-либо, находящееся в некоем замкнутом пространстве. Вообще ведь очень многие вещи дословно не переводятся, и их остается только интерпретировать (ха, все к одному - javascript и все, что с ним связано, должно интерпретироваться ;) ). |
|||
|
||||
| Nicholas_S |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 12.10.2006 Где: Санкт-Петербург Репутация: 5 Всего: 19 |
В принципе, можно так и называть - клаузы. Есть такое компьютерное понятие (словарное). Понятие "клаузы" используется, в основном, в понятии предложений, например, в языке Prolog. Я думаю, тут можно тоже так же обозначать эти самые clauses.
-------------------- ...все в мире относительно |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 49 Всего: 401 |
Nicholas_S, clauses != closures ;)
-------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| Nicholas_S |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 12.10.2006 Где: Санкт-Петербург Репутация: 5 Всего: 19 |
Посмотри в словаре, слова имеют равноправные значения, за исключением того, то у closure их чуть больше
Хотя написать мне стоило, конечно же, closure, а не clauses. -------------------- ...все в мире относительно |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 49 Всего: 401 |
Nicholas_S, в каком словаре такое можно увидеть? Смотрю в lingvo.yandex: clause, closure. Где хоть одно общее значение? -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Вполне привычный перевод в математике... В функции могут обитать связанные идентификаторы (коренное население) и могут быть свободные (мигранты). Вызов функции формирует контекст исполнения, с которым связаны первые (строго - вары, формальные параметры, имена вложенных функций), и по определению не могут быть связаны вторые. Мигранты мешают функции "закрыться" в себе (типа я в домике, тут только свои). Чтобы она закрылась нужно найти, откуда приехали чужие, с кем они связаны (где зарегистрированы). Для этого в ECMAScript реализован механизм поиска по окружению (милицейская проверка "scope chain"), где-то там в окружении функции регистрация должна быть найдена, а значит функция "замкнётся". Замыкание. SelenIT Русская "клауза", но не "clause"... http://www.multitran.ru/c/m.exe?t=1034517_2_1 Это сообщение отредактировал(а) Zeroglif - 18.11.2006, 03:18 |
|||
|
||||
| rene |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 31.10.2006 Где: г. Висагинас, р. Литва Репутация: нет Всего: нет |
Нет, всё-таки не понимаю почему "замкнётся"? И "модель актера" на это наводит. Это сообщение отредактировал(а) rene - 18.11.2006, 21:50 |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Функция, не содержащая свободных идентификаторов, считается замкнутой. Аксиома. Ибо на то она и чёрный ящик, локальность ей дороже денег. В Javascript функции равноправны с другими значениями и могут летать туда-сюда. Во время этих полётов связанным идентификаторам будет всё нипочём, а вот свободным позарез нужно не потерять связь со своим домом, поэтому функция-замыкание берёт с собой в полёт контекст, который держит эту связь. С помощью контекста с точки зрения функционального программирования свободные идентификаторы можно посчитать связанными, а значит функция замыкается... |
|||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Не особо разбираясь в программерских терминах ("модель актера" и т.д.), хотел бы дополнить картину, вернувшись к "простому" переводу слова closure.
Одно из значений глагола close - это замыкать ток. Т.е., сунул два пальца в розетку - получил "два контекста" и короткое замыкание. С функциями процесс похож, только замыкание не короткое, а такое, что пока есть ссылки на inner-function - два контекста в памяти браузера, висят, как шаровая молния, сохраняя "напряжение", замкнувшись меж собой... ;) Вот такие у меня "электрические" ассоциации (в силу отсутствия математических и программерских)... Насчет "знакомства" - трудно судить, кто там с кем именно знаком. Inner-function, по идее, не знает об outer-function ничего, она знает лишь об идентификаторах внешней функции, и то только о тех, которые ее мы "заставляем" использовать. Так что "актеры" вроде бы не знают адресов друг друга... |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Zeroglif, если в 2 словах, то замыкания внутренних функций происходят в момент высвобождения памяти внешней функцией при окончании её; и существуют, если только были присвоены внешним переменным? Больше никаких принципиальных моментов в замыканиях нет?
(А пока сушествует внешняя, то внутренние функции ведут себя как простые, имеющие ссылки на временные переменные внешней функции, равно как и ссылки на глобальные переменные.) Кстати, а что произойдёт, если сделаем delete var1; для глобальной переменной, используемой в некоторой функции? Замыкание или ошибочная ссылка? Добавлено @ 13:06 AKS, по терминам электротехники, пальцами "короткое" замыкание не сделаешь. сопротивление тела - десятки килоом. Короткое - когда низкоомное с эффектом сгорания проводов или предохранителей. Добавлено @ 13:13 уточню: замыкания-функции существуют, если определения внутренних функций были присвоены внешним, например, глобальным переменным:
|
|||
|
||||
| rene |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 31.10.2006 Где: г. Висагинас, р. Литва Репутация: нет Всего: нет |
когда говорят о коротком замыкании в электричестве обычно используют слово "short", например: short circuit Добавлено @ 14:43
Извиняюсь за упрямство. Zeroglif:
Можно источник аксиомы? По моему разумению, если внутренняя функция имеет ссылки на переменные внешней функции, то есть она имеет их адреса, значит она с ней "знакома". Предпологаю, что перевод "closure" появился сначала в переводных книгах по Perl, где это слово было переведено, как "замыкание". Затем этот преревод перекочевал в другие переводы, где переводили по аналогии. |
||||||
|
|||||||
| AKS |
|
||||||||||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
12345c,
А у меня и с электричеством поверхностное знакомство (как со всем остальным). Поэтому стараюсь чаще смайлики вставлять... ;)
Переменные нельзя удалить оператором delete. rene,
Я ведь не знаю об их "обычаях". Все беру из словаря (close - замыкать (ток)).
Все же она с ней "не знакома":
|
||||||||||
|
|||||||||||
| Zeroglif |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Хорошо. Пусть будет Javascript сам по себе, "closure/замыкание" в функциональном программировании само по себе. Описание замыканий применительно к Javascript - это в некоторой степени притягивание устоявшейся терминологии за уши, с этим можно соглашаться, можно не соглашаться. По факту JS-сообщество (включая шишек-разработчиков) приняло этот термин, его использует, он быстрый, понятный, плюс-минус точно отражает суть. Протестовать против замыкания как термина так же бесполезно, как бороться с хешами, ассоциативными массивами, классами в ECMAScript. Называют и называют. Лично мне не сложно мысленно переложить механизм ECMAScript на рельсы функционального программирования - "замыкание", "свободные переменные", "связанные переменные" и т.п., так проще и самому понять и объяснить другим. Хотя мне же ближе по смыслу и духу терминология, принятая в очень хорошей книжке товарища Абельсона "Структура и интерпретация компьютерных программ" (.pdf), где это дело называется "модель вычислений с окружениями". Замыкание там не рассматривается с привычной нам стороны, ECMAScript-овая scope chain там можно сопоставить, как покадровое разбиение вычислений, где рулят пары, каждая пара - это объект плюс окружение...
Можно. Это из весьма уважаемой книжки товарища Филда "Функциональное программирование" (.djvu), несколько почти цитат (убрал лямбду, сократил текст) надёрганных оттуда (из разных мест, но даю одним блоком):
p.s. Обязательно кликните по всем трём ссылкам в тексте, это нужно прочитать. |
||||||
|
|||||||
| AKS |
|
||||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Zeroglif,
А почему "за уши"? Вроде бы все сходится:
|
||||
|
|||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |