Pull to refresh
1
0
Dmitry Soshnikov @dsCode

User

Send message
Ух, какой старый топик подняли, я уж и забыл про него =)

> 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, это не к Вам прямо относится, возможно, это не Вы.
> Есть одна небольшая трудность. Бога нет.
> По крайней мере, пока не докажут обратное.

Простите, а Вы кто? Вы реально не считаете слишком наивным в таком тоне и с таким подходом говорить? Вы ни разу не задумались (хотя бы, анализируя Космос; или фрактальное устройство объектов), что это Вы — «небольшая трудность», чтобы так потребительски разговаривать о науке?

Вы не путайте религии и Творца, это разные вещи. Вам надо было хотя бы с Эйнштейном посоветоваться (у него, кстати, научных достижений (я полагаю) побольше Ваших (к сожалению, уже — было), нет?).

Вы не путайте учёного-атеиста, который пытается выстроить целость Мироздания и потребительского-атеиста, который с наукой вообще не связан, но считает своим долгом в каждой фразе, как затычка, ляпнуть — «Бога нет.» Ну при чём тут «Бога нет», а? ;)

Когда человек говорит: «я — верующий», он напоминает атом, который рассуждает: «я — атом, я претендую на то, что выше меня есть молекула».

Когда говорит атеист-затычка, его слова звучат не иначе, как: «я — атом, и выше меня ничего нет».

Истинный учёный, создавая теории или изучая невообразимые (как кажется) аспекты (ведь всё, что изучается — это лишь в рамках нашей Земной формальной, выдуманной нами же, науки, и эта наука — всего лишь удобная запись явлений. Она действительно удобная, т.к. происходит движение вперёд, но ни один из нас сейчас не скажет, движемся ли мы в оригинальном направлении законов Мироздания), чуть ли не через раз поражается невероятности и красоте этого Мироздания.

К примеру, Дарвин, на полях своей теории Эволюции, написал: «всё здесь описанное может быть полностью опровергнуто» — это слова истинного учёного, который изучает, анализирует, сомневается, снова анализирует, выдвигает теории, восхищается. Чувствуете разницу между таким учёным и «атеистом-затычкой»?

Эйнштейн, будучи гениальным учёным, сделавшим фундаментальные открытия, истинно был уверен в существовании Творца. Но, как он сам говорил, не религиозного Бога, а Творца всего и вся.

Мне наиболее вероятной кажется мысль (а ведь мы наделены способностью мыслить; я надеюсь, Вы не воспринимаете эту данность потребительски?), что, даже, если не созданы отдельные объекты Космоса и Микрокосма, то очень (и очень вероятно) созданы законы, по которым это всё выстроилось.
> Очень симпатично выглядит

И девушка, и девайс ;)
EmEditor (лет 7 уже пользуюсь), т.к. удовлетворяет всем нужным мне требованиям, основные из которых:

— подстветка (с возможностью объявлять свои конфигурации и слова);
— автокомплит;
— снипеты;
— плагины (автокомплит в качестве снипитов).
— др.

К сожалению, как уже было отмечено, не бесплатный.
ах, какая красивая демагогия ;) зачем это здесь?
> Теперь прочитайте определение языка программирования и вопрос будет снят.

Да вопрос и не поднимался, чтобы его снимать. Машинные коды — это тоже формальная система записи команд. Тоже, относительно, высокий уровень придуманный человеком — для удобства и структуризации формального алгоритма, мыслительного процесса.
> Ну, в JS все очень от реализации зависит
> Но в данном случае «сахар» решает:)

Ага ;)
> Первая вкусность руби, которая мне больше всего нравится(не считая сахара) это метапрограммирование.
Я даже статью на эту тему писал 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

А вот это интересно, спасибо.
> 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

Ну, это уже дело десятое, в этой беседе — слишком прикладное, не идеологическое. Хотя, конечно, если задаться провидением тестирования схожих языков в схожем функционале — конечно, тесты можно провести (если интересно).
> зачем изобретать новое? Что дает это новое?

Вспомнилась цитата, ни в коем случае не воспринимайте на свой счёт, она абстрактная, не к вам лично относится, но всё же:

«Если бы все были такими как ты, ты бы щас сырое мясо в пещерах ел».
Забыл ссылку на Narcissus — en.wikipedia.org/wiki/Narcissus_(Javascript_engine)
> А ЗАЧЕМ? Если это уже реализовано, причём реализовано хорошо.

Всё это и так во всех языках реализовано. Сравнивать нужно архитектурные и идеологически идеи, а не набор стандартной библитеки. «Зрите в корень», как раз относилось к иделогиям, схожим в JS и Ruby, но и имеющим свои особенности.

> Я имел в виду ООП в JS основанную на замыканиях

Ай, опять придётся бредом назвать, уж извините. Почитайте (если конечно интересно ;) статью полностью, чтобы в следующий раз быть подкованней в беседах о JS.

> почему именно такая модель более распространена я не помню, ибо в последний раз имел дело с JS ООП более полгода назад, но осадок остался

ну, тогда простительно ;)

> А вот тут буду против, но напишу позже, ибо мне надо уходить =)

Я подожду, мне интересно.
> Своими динамическими взможностями ruby превосходит js(по крайней мере в их «сахарности»).

Да тоже спорно, на самом деле ;)

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity