Ух, какой старый топик подняли, я уж и забыл про него =)
> foo.func_code.co_consts[1]?
Речь шла о внутренней функции, доступной снаружи посредством имени test. Правильный ответ: функции test доступна локальная переменная «x» за счёт запоминания лексического контекста при порождении функции тест (т.е. функция inner — является замыканием).
Лексический контекст хранится в функции свойством __closure__:
test.__closure__[0].cell_contents
> а зачем это может пригодится?
Вопрос больше теоретического характера, на, более-менее, глубокое понимание технологии. Однако, и в прикладном программировании могут возникнуть случаи, когда нужно получить доступ к замкнутым данным.
P.S. если интересно, у меня написана статья о замыканиях. Там, правда, в Javascript, но общая теория одинаковая на многие технологии, включая Python.
Я ни в коем случае не посягаю на Ваше восприятие религий и Бога. Я отметил, что Вы подавляюще отвечали RomanL, Hanhe, ivanych с видом, как будто несёте просветление идиотам. Именно подобные ситуации заставляют меня отвечать, особо не церемонясь, жёстко клином выбивая «дурь» (и я сейчас не имею в виду Ваши комменты и тем более, Ваше мнение, я описываю абстрактную ситуацию).
К Вам лично я не имею никакой агрессии, Вы — лишь собеседник в Интернете (равно, как и я Вам).
> Вот ведь наглец какой, ещё и своё мнение имеет ?!
С человеком, имеющим своё мнение общаться приятно. Главное, чтобы оно не подавалось в той манере, которую я описал выше.
> вам ведь в интернет-дискуссии главное победить и со словами «мне вас жаль» или «слив засчитан» гордо удалится, не так ли?
Я общаюсь и обмениваюсь информацией, знаниями, не более. Никогда «не ставлю никому ногу на грудь».
Однако, меня раздражают комментарии, с претензией на истину в последней инстанции (Ваш первый коммент — разновидность подобных комментов) при том, что предметной областью комментирующий — либо вообще не владеет, либо владеет очень слабо. Это касается не только «науки», я говорю в общем.
Вот именно. Откройте для себя критерий Поппера. И самого Поппера, как философа, связанного с наукой, а не белибердой, которую Вы тут несёте. Его труды — это труды учёного философа — и фальсифицируемость он выдвинул уж никак не для того, чтобы невежды повсеместно писали абсолютно ничего не значащую фразу «Бога нет.».
Это лишь «беспощадность» к самому себе. Чтобы не ошибиться, чтобы не быть самонадеяным, чтобы не льстить себе, чтобы ставить под сомнение даже себя и свои идеи.
P.S.: вопрос «веры-не веры» — это абсолютно другой вопрос, и, уж тем более, «религий» — я не касаюсь этих вопросов. Я даже не касаюсь вопроса Бога. Здесь каждый выбирает сам и подобные темы — пустой холивор, не более. Но воспринимать Мироздание потребительски — это надо быть просто невеждой.
P.S.[2]: та трусливая херня, которая минусует без обоснований (да ещё и в карму) — не создавай лицо Хабра, выйди, пожалуйста, покажись ;) bems, это не к Вам прямо относится, возможно, это не Вы.
> Есть одна небольшая трудность. Бога нет.
> По крайней мере, пока не докажут обратное.
Простите, а Вы кто? Вы реально не считаете слишком наивным в таком тоне и с таким подходом говорить? Вы ни разу не задумались (хотя бы, анализируя Космос; или фрактальное устройство объектов), что это Вы — «небольшая трудность», чтобы так потребительски разговаривать о науке?
Вы не путайте религии и Творца, это разные вещи. Вам надо было хотя бы с Эйнштейном посоветоваться (у него, кстати, научных достижений (я полагаю) побольше Ваших (к сожалению, уже — было), нет?).
Вы не путайте учёного-атеиста, который пытается выстроить целость Мироздания и потребительского-атеиста, который с наукой вообще не связан, но считает своим долгом в каждой фразе, как затычка, ляпнуть — «Бога нет.» Ну при чём тут «Бога нет», а? ;)
Когда человек говорит: «я — верующий», он напоминает атом, который рассуждает: «я — атом, я претендую на то, что выше меня есть молекула».
Когда говорит атеист-затычка, его слова звучат не иначе, как: «я — атом, и выше меня ничего нет».
Истинный учёный, создавая теории или изучая невообразимые (как кажется) аспекты (ведь всё, что изучается — это лишь в рамках нашей Земной формальной, выдуманной нами же, науки, и эта наука — всего лишь удобная запись явлений. Она действительно удобная, т.к. происходит движение вперёд, но ни один из нас сейчас не скажет, движемся ли мы в оригинальном направлении законов Мироздания), чуть ли не через раз поражается невероятности и красоте этого Мироздания.
К примеру, Дарвин, на полях своей теории Эволюции, написал: «всё здесь описанное может быть полностью опровергнуто» — это слова истинного учёного, который изучает, анализирует, сомневается, снова анализирует, выдвигает теории, восхищается. Чувствуете разницу между таким учёным и «атеистом-затычкой»?
Эйнштейн, будучи гениальным учёным, сделавшим фундаментальные открытия, истинно был уверен в существовании Творца. Но, как он сам говорил, не религиозного Бога, а Творца всего и вся.
Мне наиболее вероятной кажется мысль (а ведь мы наделены способностью мыслить; я надеюсь, Вы не воспринимаете эту данность потребительски?), что, даже, если не созданы отдельные объекты Космоса и Микрокосма, то очень (и очень вероятно) созданы законы, по которым это всё выстроилось.
> Теперь прочитайте определение языка программирования и вопрос будет снят.
Да вопрос и не поднимался, чтобы его снимать. Машинные коды — это тоже формальная система записи команд. Тоже, относительно, высокий уровень придуманный человеком — для удобства и структуризации формального алгоритма, мыслительного процесса.
> Первая вкусность руби, которая мне больше всего нравится(не считая сахара) это метапрограммирование.
Я даже статью на эту тему писал habrahabr.ru/blogs/ruby/48754/
Попробуйте реализовать что-нибудь похожее в джс.
Статья хорошая, особенно для новичков, а данное метапрограммирование реализуется в JS идентично. JS полностью поддерживает динамическую интроспекцию. Причём, определение новых характеристик там по синтаксису даже удобней.
> Насчет Ruby, из скриптовых языков он предоставляет самые мощные возможности метапрограммирования
Да и JS немалые ;) Такие же, в своём представлении.
Кто вам там что навнушал? Какие заголовки статей и чьи-то комментарии о «красоте и элегантности»? =) Оба, Ruby и JS — красивые и элегантные. Цените.
> Интересно как он реализует на JS binding?
Что значит реализует binding? Запомнить текущий лексический контекст? Как в Ruby нельзя, однако, в некоторых реализациях, например, SpiderMonkey до версии 1.7 позволяют eval-у передавать вызывающий контекст, равно как и в Ruby передавать запомненный binding.
> www.webdemon.net/blog/object-oriented-javascript/ вот тут говорится про тот подход что я имел в виду и 2 раза был назван бредом =) (когда я этим занимался, это был самый популярный подход к организации ООП в JS
Ну, обычная прикладная статья, относительно — весьма поверхностная. Ни лучше, ни хуже других (десяти, ста) прикладных статей об ООП в JS. Там «бред» не пишется, но то, что я отметил как «бред» в ваших постах, остаётся бредом. И я говорю это исключительно с благой, образовательной целью. Если нужно пояснить, почему бред, с удовольствием расскажу (если, опять же, интересен сам JS).
> По поводу модульности, я имел в виду раздельные области имён для разных файлов с кодом, дабы при подключении нового файла со скриптами ничего не поломалось, ни на уровне языка, ни какого-то общего подхода в JS для этого на данный момент нет насколько я в курсе. Т.е. просто случайно подгружаем файл с подобной уже загруженным областью имён, и без ошибок и.т.п. получаем кучу неработающего кода.
Ну так это идеология такая — dynamic mutable objects — да, объекты могут быть переопределены, не статика же. Да, текущая версия стандарта понятий пространства имён и модулей не описывает. Однако, можно использовать для неймспейсов отдельные объекты.
> Опять же ЗАЧЕМ его развивать если он не может ничего выдающегося, мало того отстаёт по возможностям, почему бы не развить те языки (более матёрые и гибкие), которые уже есть?
Если вы обратили внимание, моя позиция (в отличии от автора топика) анализирующая. Я не отстаиваю ни один из обсуждаемых языков, хотя и знаю три из них (JS, Ruby, Python) достаточно хорошо (а JS занимаюсь на «академическом» уровне).
Меня, повторю, в большей степени интересует схожесть идеологий этих языков. Стандартная библиотека и «синтаксический сахар» — дописывается «за день», при условии, что JS займёт ещё какую-нибудь альтернативную нишу. При этом я имею в виду, не поделки вроде фреймворков и т.д., а доработку самого языка, ядра, модулей и стандартной библиотеки. Если рассуждать глобально, это мелочи. Важная схожесть идеологий.
> Опять же, никаких революционных идей не видно. JS пытается догнать текущие скриптовые языки по функционалу, но где революция то, где «архитектура»?
Что за революционные идеи ещё? Что вы вкладываете в это определение? Ну ладно, в 60-ые, 70-ые, 80-ые, Simula, SmallTalk, Self — здесь можно ещё говорить о какой-то революции. Более молодые языки, типа Python, Ruby и JS питали идеи уже из них. JS при этом в текущей версии был реализован на базе прототипов, делегирования и динамических объектов — это его архитектура, частью позаимствованная из Self-a, SmallTalk-a и Python-a. Python ввёл понятие класса, но, по большому счёту, класс там можно приравнять к «синтаксическому сахару», т.к. используется та же делегация, что и в прототипировании.
> Есть какие то тесты в которых только «ИТОГО» в основном, в других с другими языками есть немного сравнений, но все не в пользу JS
Ну, это уже дело десятое, в этой беседе — слишком прикладное, не идеологическое. Хотя, конечно, если задаться провидением тестирования схожих языков в схожем функционале — конечно, тесты можно провести (если интересно).
> А ЗАЧЕМ? Если это уже реализовано, причём реализовано хорошо.
Всё это и так во всех языках реализовано. Сравнивать нужно архитектурные и идеологически идеи, а не набор стандартной библитеки. «Зрите в корень», как раз относилось к иделогиям, схожим в JS и Ruby, но и имеющим свои особенности.
> Я имел в виду ООП в JS основанную на замыканиях
Ай, опять придётся бредом назвать, уж извините. Почитайте (если конечно интересно ;) статью полностью, чтобы в следующий раз быть подкованней в беседах о JS.
> почему именно такая модель более распространена я не помню, ибо в последний раз имел дело с JS ООП более полгода назад, но осадок остался
ну, тогда простительно ;)
> А вот тут буду против, но напишу позже, ибо мне надо уходить =)
> foo.func_code.co_consts[1]?
Речь шла о внутренней функции, доступной снаружи посредством имени test. Правильный ответ: функции test доступна локальная переменная «x» за счёт запоминания лексического контекста при порождении функции тест (т.е. функция inner — является замыканием).
Лексический контекст хранится в функции свойством __closure__:
test.__closure__[0].cell_contents
> а зачем это может пригодится?
Вопрос больше теоретического характера, на, более-менее, глубокое понимание технологии. Однако, и в прикладном программировании могут возникнуть случаи, когда нужно получить доступ к замкнутым данным.
P.S. если интересно, у меня написана статья о замыканиях. Там, правда, в Javascript, но общая теория одинаковая на многие технологии, включая Python.
К Вам лично я не имею никакой агрессии, Вы — лишь собеседник в Интернете (равно, как и я Вам).
> Вот ведь наглец какой, ещё и своё мнение имеет ?!
С человеком, имеющим своё мнение общаться приятно. Главное, чтобы оно не подавалось в той манере, которую я описал выше.
Я предлагаю разойтись на этой точке.
Я общаюсь и обмениваюсь информацией, знаниями, не более. Никогда «не ставлю никому ногу на грудь».
Однако, меня раздражают комментарии, с претензией на истину в последней инстанции (Ваш первый коммент — разновидность подобных комментов) при том, что предметной областью комментирующий — либо вообще не владеет, либо владеет очень слабо. Это касается не только «науки», я говорю в общем.
Жертва субкультур? ;) Только ссылку на луркморе не кидайте.
> или сумасшедший
Слив. Вы свободны.
Всё понятно, засчитываю за слив. Свободен.
Вот именно. Откройте для себя критерий Поппера. И самого Поппера, как философа, связанного с наукой, а не белибердой, которую Вы тут несёте. Его труды — это труды учёного философа — и фальсифицируемость он выдвинул уж никак не для того, чтобы невежды повсеместно писали абсолютно ничего не значащую фразу «Бога нет.».
Это лишь «беспощадность» к самому себе. Чтобы не ошибиться, чтобы не быть самонадеяным, чтобы не льстить себе, чтобы ставить под сомнение даже себя и свои идеи.
Нет.
> истина безотноситальна
Могу лишь посочувствовать, не больше.
P.S.: вопрос «веры-не веры» — это абсолютно другой вопрос, и, уж тем более, «религий» — я не касаюсь этих вопросов. Я даже не касаюсь вопроса Бога. Здесь каждый выбирает сам и подобные темы — пустой холивор, не более. Но воспринимать Мироздание потребительски — это надо быть просто невеждой.
P.S.[2]: та трусливая херня, которая минусует без обоснований (да ещё и в карму) — не создавай лицо Хабра, выйди, пожалуйста, покажись ;) bems, это не к Вам прямо относится, возможно, это не Вы.
> По крайней мере, пока не докажут обратное.
Простите, а Вы кто? Вы реально не считаете слишком наивным в таком тоне и с таким подходом говорить? Вы ни разу не задумались (хотя бы, анализируя Космос; или фрактальное устройство объектов), что это Вы — «небольшая трудность», чтобы так потребительски разговаривать о науке?
Вы не путайте религии и Творца, это разные вещи. Вам надо было хотя бы с Эйнштейном посоветоваться (у него, кстати, научных достижений (я полагаю) побольше Ваших (к сожалению, уже — было), нет?).
Вы не путайте учёного-атеиста, который пытается выстроить целость Мироздания и потребительского-атеиста, который с наукой вообще не связан, но считает своим долгом в каждой фразе, как затычка, ляпнуть — «Бога нет.» Ну при чём тут «Бога нет», а? ;)
Когда человек говорит: «я — верующий», он напоминает атом, который рассуждает: «я — атом, я претендую на то, что выше меня есть молекула».
Когда говорит атеист-затычка, его слова звучат не иначе, как: «я — атом, и выше меня ничего нет».
Истинный учёный, создавая теории или изучая невообразимые (как кажется) аспекты (ведь всё, что изучается — это лишь в рамках нашей Земной формальной, выдуманной нами же, науки, и эта наука — всего лишь удобная запись явлений. Она действительно удобная, т.к. происходит движение вперёд, но ни один из нас сейчас не скажет, движемся ли мы в оригинальном направлении законов Мироздания), чуть ли не через раз поражается невероятности и красоте этого Мироздания.
К примеру, Дарвин, на полях своей теории Эволюции, написал: «всё здесь описанное может быть полностью опровергнуто» — это слова истинного учёного, который изучает, анализирует, сомневается, снова анализирует, выдвигает теории, восхищается. Чувствуете разницу между таким учёным и «атеистом-затычкой»?
Эйнштейн, будучи гениальным учёным, сделавшим фундаментальные открытия, истинно был уверен в существовании Творца. Но, как он сам говорил, не религиозного Бога, а Творца всего и вся.
Мне наиболее вероятной кажется мысль (а ведь мы наделены способностью мыслить; я надеюсь, Вы не воспринимаете эту данность потребительски?), что, даже, если не созданы отдельные объекты Космоса и Микрокосма, то очень (и очень вероятно) созданы законы, по которым это всё выстроилось.
И девушка, и девайс ;)
— подстветка (с возможностью объявлять свои конфигурации и слова);
— автокомплит;
— снипеты;
— плагины (автокомплит в качестве снипитов).
— др.
К сожалению, как уже было отмечено, не бесплатный.
Да вопрос и не поднимался, чтобы его снимать. Машинные коды — это тоже формальная система записи команд. Тоже, относительно, высокий уровень придуманный человеком — для удобства и структуризации формального алгоритма, мыслительного процесса.
> Но в данном случае «сахар» решает:)
Ага ;)
Я даже статью на эту тему писал habrahabr.ru/blogs/ruby/48754/
Попробуйте реализовать что-нибудь похожее в джс.
Статья хорошая, особенно для новичков, а данное метапрограммирование реализуется в JS идентично. JS полностью поддерживает динамическую интроспекцию. Причём, определение новых характеристик там по синтаксису даже удобней.
> Насчет Ruby, из скриптовых языков он предоставляет самые мощные возможности метапрограммирования
Да и JS немалые ;) Такие же, в своём представлении.
Кто вам там что навнушал? Какие заголовки статей и чьи-то комментарии о «красоте и элегантности»? =) Оба, Ruby и JS — красивые и элегантные. Цените.
> Интересно как он реализует на JS binding?
Что значит реализует binding? Запомнить текущий лексический контекст? Как в Ruby нельзя, однако, в некоторых реализациях, например, SpiderMonkey до версии 1.7 позволяют eval-у передавать вызывающий контекст, равно как и в Ruby передавать запомненный binding.
> Есть реализация ruby на JS hotruby.yukoba.jp
А вот это интересно, спасибо.
Ну, обычная прикладная статья, относительно — весьма поверхностная. Ни лучше, ни хуже других (десяти, ста) прикладных статей об ООП в JS. Там «бред» не пишется, но то, что я отметил как «бред» в ваших постах, остаётся бредом. И я говорю это исключительно с благой, образовательной целью. Если нужно пояснить, почему бред, с удовольствием расскажу (если, опять же, интересен сам JS).
> По поводу модульности, я имел в виду раздельные области имён для разных файлов с кодом, дабы при подключении нового файла со скриптами ничего не поломалось, ни на уровне языка, ни какого-то общего подхода в JS для этого на данный момент нет насколько я в курсе. Т.е. просто случайно подгружаем файл с подобной уже загруженным областью имён, и без ошибок и.т.п. получаем кучу неработающего кода.
Ну так это идеология такая — dynamic mutable objects — да, объекты могут быть переопределены, не статика же. Да, текущая версия стандарта понятий пространства имён и модулей не описывает. Однако, можно использовать для неймспейсов отдельные объекты.
> Опять же ЗАЧЕМ его развивать если он не может ничего выдающегося, мало того отстаёт по возможностям, почему бы не развить те языки (более матёрые и гибкие), которые уже есть?
Если вы обратили внимание, моя позиция (в отличии от автора топика) анализирующая. Я не отстаиваю ни один из обсуждаемых языков, хотя и знаю три из них (JS, Ruby, Python) достаточно хорошо (а JS занимаюсь на «академическом» уровне).
Меня, повторю, в большей степени интересует схожесть идеологий этих языков. Стандартная библиотека и «синтаксический сахар» — дописывается «за день», при условии, что JS займёт ещё какую-нибудь альтернативную нишу. При этом я имею в виду, не поделки вроде фреймворков и т.д., а доработку самого языка, ядра, модулей и стандартной библиотеки. Если рассуждать глобально, это мелочи. Важная схожесть идеологий.
> Опять же, никаких революционных идей не видно. JS пытается догнать текущие скриптовые языки по функционалу, но где революция то, где «архитектура»?
Что за революционные идеи ещё? Что вы вкладываете в это определение? Ну ладно, в 60-ые, 70-ые, 80-ые, Simula, SmallTalk, Self — здесь можно ещё говорить о какой-то революции. Более молодые языки, типа Python, Ruby и JS питали идеи уже из них. JS при этом в текущей версии был реализован на базе прототипов, делегирования и динамических объектов — это его архитектура, частью позаимствованная из Self-a, SmallTalk-a и Python-a. Python ввёл понятие класса, но, по большому счёту, класс там можно приравнять к «синтаксическому сахару», т.к. используется та же делегация, что и в прототипировании.
> Есть какие то тесты в которых только «ИТОГО» в основном, в других с другими языками есть немного сравнений, но все не в пользу JS
Ну, это уже дело десятое, в этой беседе — слишком прикладное, не идеологическое. Хотя, конечно, если задаться провидением тестирования схожих языков в схожем функционале — конечно, тесты можно провести (если интересно).
Вспомнилась цитата, ни в коем случае не воспринимайте на свой счёт, она абстрактная, не к вам лично относится, но всё же:
«Если бы все были такими как ты, ты бы щас сырое мясо в пещерах ел».
Всё это и так во всех языках реализовано. Сравнивать нужно архитектурные и идеологически идеи, а не набор стандартной библитеки. «Зрите в корень», как раз относилось к иделогиям, схожим в JS и Ruby, но и имеющим свои особенности.
> Я имел в виду ООП в JS основанную на замыканиях
Ай, опять придётся бредом назвать, уж извините. Почитайте (если конечно интересно ;) статью полностью, чтобы в следующий раз быть подкованней в беседах о JS.
> почему именно такая модель более распространена я не помню, ибо в последний раз имел дело с JS ООП более полгода назад, но осадок остался
ну, тогда простительно ;)
> А вот тут буду против, но напишу позже, ибо мне надо уходить =)
Я подожду, мне интересно.
Да тоже спорно, на самом деле ;)