Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> closure - замыкание, сокрытие, приближение? как корректнее перевести 
:(
    Опции темы
rene
Дата 17.11.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 31.10.2006
Где: г. Висагинас, р. Литва

Репутация: нет
Всего: нет



Всё-таки у меня есть сомнения насчёт того, что "closure" следует переводить как "замыкание".

Сначала мне думалось, что "closure" это сокрытие(от "close" - закрывать), так как оно скрывает, заключает в себя  
свой локальный контекст плюс ссылки на переменные внешней функции. Но потом меня начал
терзать сомнения.

Статья на Wikipedia Closure
отсылает нас к модели актёра, в которой говориться, что "если актёр имеет адрес одного из других актёров, то они состоят в знакомстве.

"Closure" имеет ссылки на переменные внешней функции, т.е. некая внутренняя анонимная функция знакома с внешней функцией. А "close" - это переводится, в том числе, как "близкий". Может "closure" корректней переводить как "приближение" или "близость"?





Это сообщение отредактировал(а) rene - 18.11.2006, 21:51
PM MAIL ICQ   Вверх
AKS
Дата 17.11.2006, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



rene, действительно, замыкание нельзя назвать "дословным" переводом. Однако на "знакомство" англоязычные авторы этого понятия наверняка также не намекали. 

На мой взгляд это понятие можно представлять как нечто (мы знаем, что в данном случае нечто - это функция-выражение), заключенное внутри чего-то, закрытое в чем-либо, находящееся в некоем замкнутом пространстве. 

Вообще ведь очень многие вещи дословно не переводятся, и их остается только интерпретировать (ха, все к одному - javascript и все, что с ним связано, должно интерпретироваться  ;)  ).
PM MAIL   Вверх
Nicholas_S
Дата 18.11.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 19



В принципе, можно так и называть - клаузы. Есть такое компьютерное понятие (словарное). Понятие "клаузы" используется, в основном, в понятии предложений, например, в языке Prolog. Я думаю, тут можно тоже так же обозначать эти самые clauses.


--------------------
...все в мире относительно
PM   Вверх
SelenIT
Дата 18.11.2006, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Nicholas_S, clauses != closures ;)


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Nicholas_S
Дата 18.11.2006, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 19



Посмотри в словаре, слова имеют равноправные значения, за исключением того, то у closure их чуть больше  smile
Хотя написать мне стоило, конечно же, closure, а не clauses. 


--------------------
...все в мире относительно
PM   Вверх
SelenIT
Дата 18.11.2006, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



 smile (заранее прошу прощения у модераторов)
Nicholas_S, в каком словаре такое можно увидеть?
Смотрю в lingvo.yandex: clause, closure. Где хоть одно общее значение?



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Zeroglif
Дата 18.11.2006, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(rene @  17.11.2006,  22:57 Найти цитируемый пост)
Всё-таки у меня есть сомнения насчёт того, что "closure" следует переводить как "замыкание".

Вполне привычный перевод в математике...

В функции могут обитать связанные идентификаторы (коренное население) и могут быть свободные (мигранты). Вызов функции формирует контекст исполнения, с которым связаны первые (строго - вары, формальные параметры, имена вложенных функций), и по определению не могут быть связаны вторые. Мигранты мешают функции "закрыться" в себе (типа я в домике, тут только свои). Чтобы она закрылась нужно найти, откуда приехали чужие, с кем они связаны (где зарегистрированы). Для этого в ECMAScript реализован механизм поиска по окружению (милицейская проверка "scope chain"), где-то там в окружении функции регистрация должна быть найдена, а значит функция "замкнётся". Замыкание.

SelenIT
Русская "клауза", но не "clause"... 
http://www.multitran.ru/c/m.exe?t=1034517_2_1

Это сообщение отредактировал(а) Zeroglif - 18.11.2006, 03:18
PM MAIL WWW   Вверх
rene
  Дата 18.11.2006, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 31.10.2006
Где: г. Висагинас, р. Литва

Репутация: нет
Всего: нет



Цитата(Zeroglif @ 18.11.2006,  03:12)
 Для этого в ECMAScript реализован механизм поиска по окружению (милицейская проверка "scope chain"), где-то там в окружении функции регистрация должна быть найдена, а значит функция "замкнётся". Замыкание.

Нет, всё-таки не понимаю почему "замкнётся"? smile  Если она найдётся, то значит они знакомы.
И "модель актера" на это наводит.

Это сообщение отредактировал(а) rene - 18.11.2006, 21:50
PM MAIL ICQ   Вверх
Zeroglif
Дата 19.11.2006, 03:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(rene @  18.11.2006,  21:49 Найти цитируемый пост)
Нет, всё-таки не понимаю почему "замкнётся"?

Функция, не содержащая свободных идентификаторов, считается замкнутой. Аксиома. Ибо на то она и чёрный ящик, локальность ей дороже денег. В Javascript функции равноправны с другими значениями и могут летать туда-сюда. Во время этих полётов связанным идентификаторам будет всё нипочём, а вот свободным позарез нужно не потерять связь со своим домом, поэтому функция-замыкание берёт с собой в полёт контекст, который держит эту связь. С помощью контекста с точки зрения функционального программирования свободные идентификаторы можно посчитать связанными, а значит функция замыкается...

PM MAIL WWW   Вверх
AKS
Дата 19.11.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Не особо разбираясь в программерских терминах ("модель актера" и т.д.), хотел бы дополнить картину, вернувшись к "простому" переводу слова closure. 
Одно из значений глагола close - это замыкать ток. Т.е., сунул два пальца в розетку - получил "два контекста" и короткое замыкание. 
С функциями процесс похож, только замыкание не короткое, а такое, что пока есть ссылки на inner-function - два контекста в памяти браузера, висят, как шаровая молния, сохраняя "напряжение", замкнувшись меж собой... 

 ;) Вот такие у меня "электрические" ассоциации (в силу отсутствия математических и программерских)...

Насчет "знакомства" - трудно судить, кто там с кем именно знаком. Inner-function, по идее, не знает об outer-function ничего, она знает лишь об идентификаторах внешней функции, и то только о тех, которые ее мы "заставляем" использовать. Так что "актеры" вроде бы не знают адресов друг друга...
PM MAIL   Вверх
12345c
Дата 19.11.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Zeroglif, если в 2 словах, то замыкания внутренних функций происходят в момент высвобождения памяти внешней функцией при окончании её; и существуют, если только были присвоены внешним переменным? Больше никаких принципиальных моментов в замыканиях нет?

(А пока сушествует внешняя, то внутренние функции ведут себя как простые, имеющие ссылки на временные переменные внешней функции, равно как и ссылки на глобальные переменные.)

Кстати, а что произойдёт, если сделаем delete var1; для глобальной переменной, используемой в некоторой функции? Замыкание или ошибочная ссылка?

Добавлено @ 13:06 
AKS, по терминам электротехники, пальцами "короткое" замыкание не сделаешь. сопротивление тела - десятки килоом. Короткое - когда низкоомное с эффектом сгорания проводов или предохранителей. smile

Добавлено @ 13:13 
Цитата(12345c @  19.11.2006,  13:03 Найти цитируемый пост)
и существуют, если только были присвоены внешним переменным?
уточню: замыкания-функции существуют, если определения внутренних функций были присвоены внешним, например, глобальным переменным:

Код
var b;
function a(){
var c=1;
b=function (){var x=c+.../*будет замыканием под именем b*/}
}

PM WWW   Вверх
rene
Дата 19.11.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 31.10.2006
Где: г. Висагинас, р. Литва

Репутация: нет
Всего: нет



Цитата(AKS @ 19.11.2006,  12:49)
Одно из значений глагола close - это замыкать ток. Т.е., сунул два пальца в розетку - получил "два контекста" и короткое замыкание. 

когда говорят о коротком замыкании в электричестве обычно используют слово "short", например:
short circuit

Добавлено @ 14:43 
Цитата(Zeroglif @ 19.11.2006,  03:33)
Функция, не содержащая свободных идентификаторов, считается замкнутой. Аксиома. Ибо на то она и чёрный ящик, локальность ей дороже денег. В Javascript функции равноправны с другими значениями и могут летать туда-сюда. Во время этих полётов связанным идентификаторам будет всё нипочём, а вот свободным позарез нужно не потерять связь со своим домом, поэтому функция-замыкание берёт с собой в полёт контекст, который держит эту связь. С помощью контекста с точки зрения функционального программирования свободные идентификаторы можно посчитать связанными, а значит функция замыкается...

Извиняюсь за упрямство. smile 

Zeroglif:
Цитата

Функция, не содержащая свободных идентификаторов, считается замкнутой. Аксиома. 

Можно источник аксиомы?

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

Предпологаю, что  перевод "closure" появился
сначала в переводных книгах по Perl, где это слово  было переведено, как "замыкание".
Затем этот преревод перекочевал в другие переводы, где переводили по аналогии.


PM MAIL ICQ   Вверх
AKS
Дата 19.11.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



12345c, 
Цитата

пальцами "короткое" замыкание не сделаешь

А у меня и с электричеством поверхностное знакомство (как со всем остальным). Поэтому стараюсь чаще смайлики вставлять... ;)
Цитата

delete var1;

Переменные нельзя удалить оператором delete.

rene, 
Цитата

обычно используют слово "short", 

Я ведь не знаю об их "обычаях". Все беру из словаря (close - замыкать (ток)).
Цитата

она имеет их адреса, значит она с ней "знакома".

Все же она с ней "не знакома":
Код

(function() {
  return (function() { alert(arguments.callee.caller); });
})()(); // return null;

PM MAIL   Вверх
Zeroglif
Дата 19.11.2006, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата

Извиняюсь за упрямство.

Хорошо. Пусть будет Javascript сам по себе, "closure/замыкание" в функциональном программировании само по себе. Описание замыканий применительно к Javascript - это в некоторой степени притягивание устоявшейся терминологии за уши, с этим можно соглашаться, можно не соглашаться. По факту JS-сообщество (включая шишек-разработчиков) приняло этот термин, его использует, он быстрый, понятный, плюс-минус точно отражает суть. Протестовать против замыкания как термина так же бесполезно, как бороться с хешами, ассоциативными массивами, классами в ECMAScript. Называют и называют. Лично мне не сложно мысленно переложить механизм ECMAScript на рельсы функционального программирования - "замыкание", "свободные переменные", "связанные переменные" и т.п., так проще и самому понять и объяснить другим. Хотя мне же ближе по смыслу и духу терминология, принятая в очень хорошей книжке товарища Абельсона "Структура и интерпретация компьютерных программ" (.pdf), где это дело называется "модель вычислений с окружениями". Замыкание там не рассматривается с привычной нам стороны, ECMAScript-овая scope chain там можно сопоставить, как покадровое разбиение вычислений, где рулят пары, каждая пара - это объект плюс окружение...

Цитата

Можно источник аксиомы?

Можно. Это из весьма уважаемой книжки товарища Филда "Функциональное программирование" (.djvu), несколько почти цитат (убрал лямбду, сократил текст) надёрганных оттуда (из разных мест, но даю одним блоком):

Цитата

Связанная переменная - формальный параметр функции. Выражение, не содержащее свободных переменных, является замкнутым. Контекст - абстрактная структура данных. Контекст обеспечивает связь между связанными идентификаторами функции и выражениями (их значениями). Тело функции может содержать свободные переменные, связь для которых нужно брать из того контекста, который существует в момент вычисления самой функции. При возврате функции существует опасность потери этой связи (FUNARG-проблема). По этой причине возвращать нужно не только функцию, но и контекст, дающий корректную связь для свободных переменных. Такая составная структура (функция плюс контекст) называется замыканием, поскольку она представляет собой замкнутое выражение, где "условно говоря" нет свободных переменных.


p.s. Обязательно кликните по всем трём ссылкам в тексте, это нужно прочитать.
PM MAIL WWW   Вверх
AKS
Дата 19.11.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Zeroglif, 
Цитата

Описание замыканий применительно к Javascript - это в некоторой степени притягивание устоявшейся терминологии за уши...

А почему "за уши"? Вроде бы все сходится:
Цитата

Такая составная структура (функция плюс контекст) называется замыканием...

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0914 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.