Re[7]: Многопоточность
От: ie Россия http://ziez.blogspot.com/
Дата: 14.09.06 10:11
Оценка:
Здравствуйте, Lloyd, Вы писали:

AVK>>А при чем тут собственно то, что в C# замыкания read-only?

L>
L>
L>    ThreadStart ts = new ThreadStart(delegate() { Method(str); str = "Учите матчасть, AndrewVK ;)"; });
L>


О! Все понял! Надо ж было так тупить. Пойти чтоль чайку попить на радостях.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[7]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 10:22
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>И как она здесь используется? Переделай на любой другой класс, результат будет тот же.


    StringBuilder str = new StringBuilder("This is a test!");
    ThreadStart ts = new ThreadStart(delegate() { Method(str); });
    Thread t = new Thread(ts);
    str.Length = 0; str.Append("This is a second test!");
    t.Start();
    t.Join();
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[7]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 10:22
Оценка:
Здравствуйте, Lloyd, Вы писали:

AVK>>А при чем тут собственно то, что в C# замыкания read-only?


L>


Хочешь поспорить о терминах? Имелось ввиду, что изменение замыканий во внешнем контексте после его образования не распространяется на внутренний, что, собственно, приведенный пример и демонстрировал.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[8]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 10:31
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>
AVK>    StringBuilder str = new StringBuilder("This is a test!");
AVK>    ThreadStart ts = new ThreadStart(delegate() { Method(str); });
AVK>    Thread t = new Thread(ts);
AVK>    str.Length = 0; str.Append("This is a second test!");
AVK>    t.Start();
AVK>    t.Join();
AVK>


Не, такие лоховские подтасовки не катят. Пиши тогда уж:
str = new StringBuilder("This is a second test!");
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 10:31
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Lloyd, Вы писали:


AVK>>>А при чем тут собственно то, что в C# замыкания read-only?


L>>


AVK>Хочешь поспорить о терминах? Имелось ввиду, что изменение замыканий во внешнем контексте после его образования не распространяется на внутренний, что, собственно, приведенный пример и демонстрировал.


А можно то же самое, но на русском языке. Что значит "изменение замыканий"? Для меня замыкание — это совокупность "захваченных" переменных. Как он может измениться?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 11:55
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Не, такие лоховские подтасовки не катят. Пиши тогда уж:


Что то у тебя с терминологией не то. Подтасовок тут никаких нет, всего лишь демонстрация того, как нужно действовать, когда таки хочется получить требуемое. Только, конечно, лучше не StringBuilder использовать, а специальный mutable класс. А еще лучше вобще такое не использовать, ибо чревато.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[9]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 11:55
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>А можно то же самое, но на русском языке. Что значит "изменение замыканий"? Для меня замыкание — это совокупность "захваченных" переменных. Как он может измениться?


Я лучше на английском процитирую:

any changes to such variables from within the body of anonymous method are not visible after it returns. This is because anonymous methods are in fact implemented in a way very similar to anonymous inner classes in Java, and do not have direct access to variables from the enclosing scope; rather, the method makes a copy of all local variables it uses.

... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[10]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 12:51
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Lloyd, Вы писали:


L>>Не, такие лоховские подтасовки не катят. Пиши тогда уж:


AVK>Что то у тебя с терминологией не то. Подтасовок тут никаких нет, всего лишь демонстрация того, как нужно действовать, когда таки хочется получить требуемое.


Только вот требуемого поведения таким способом не получить. Смотри первоначальный пост.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 12:51
Оценка:
Здравствуйте, AndrewVK, Вы писали:

L>>А можно то же самое, но на русском языке. Что значит "изменение замыканий"? Для меня замыкание — это совокупность "захваченных" переменных. Как он может измениться?


AVK>Я лучше на английском процитирую:

AVK>

any changes to such variables from within the body of anonymous method are not visible after it returns. This is because anonymous methods are in fact implemented in a way very similar to anonymous inner classes in Java, and do not have direct access to variables from the enclosing scope; rather, the method makes a copy of all local variables it uses.


Ну, во-первых, тебе привели пример того, что изменения захваченные переменных все-таки видны после возврата из метода. А во-вторых, причем здесь джава?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 13:07
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Ну, во-первых, тебе привели пример того, что изменения захваченные переменных все-таки видны после возврата из метода.


Мне не надо.

L> А во-вторых, причем здесь джава?


При том, что текст, оказавшийся под рукой, был заодно и про Java.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[12]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 13:11
Оценка:
Здравствуйте, AndrewVK, Вы писали:

L>>Ну, во-первых, тебе привели пример того, что изменения захваченные переменных все-таки видны после возврата из метода.


AVK>Мне не надо.


Чего не надо? Твои слова опровергаются простейшим тестом.

L>> А во-вторых, причем здесь джава?


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


Но, как минимум, по отношению к .net-у он не верен.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 13:29
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Чего не надо? Твои слова опровергаются простейшим тестом.


Это спор о терминах.

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


L>Но, как минимум, по отношению к .net-у он не верен.


Конкретно в цитате про C#.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[14]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 13:38
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Lloyd, Вы писали:


L>>Чего не надо? Твои слова опровергаются простейшим тестом.


AVK>Это спор о терминах.


Хорошо, напиши по-русски как ты понял приведенную цитату. Вот мой перевод:

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


Если я не наврал в переводе, то то что там написано не соответствует действительности.

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


L>>Но, как минимум, по отношению к .net-у он не верен.


AVK>Конкретно в цитате про C#.


А как ты вот это
Автор: Lloyd
Дата: 14.09.06
объяснишь?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 13:50
Оценка: -1
Здравствуйте, Lloyd, Вы писали:

L>А как ты вот это
Автор: Lloyd
Дата: 14.09.06
объяснишь?


Открой этот код рефлектором, если тебе интересно. Там все очень хорошо видно.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[16]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 13:54
Оценка: -1
Здравствуйте, AndrewVK, Вы писали:

L>>А как ты вот это
Автор: Lloyd
Дата: 14.09.06
объяснишь?


AVK>Открой этот код рефлектором, если тебе интересно. Там все очень хорошо видно.


Да я прекрасно знаю как работают замыкания. А вот судя по твоим высказываниям, у тебя в этой области есть определенные пробелы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: Многопоточность
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.09.06 14:11
Оценка: -1
Здравствуйте, Lloyd, Вы писали:

L>Да я прекрасно знаю как работают замыкания. А вот судя по твоим высказываниям, у тебя в этой области есть определенные пробелы.


Понятно, заняться не чем. В следующий раз разводить в форуме черти что не нужно, достаточно написать свое фе мне лично на сыло.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[18]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 14:14
Оценка:
Здравствуйте, AndrewVK, Вы писали:

L>>Да я прекрасно знаю как работают замыкания. А вот судя по твоим высказываниям, у тебя в этой области есть определенные пробелы.


AVK>Понятно, заняться не чем. В следующий раз разводить в форуме черти что не нужно, достаточно написать свое фе мне лично на сыло.


До этой ветки никакого моего фе по отношению к вам не было. Так что не смог бы воспользоваться вашим советом при всем желании.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Многопоточность
От: Воронков Василий Россия  
Дата: 14.09.06 14:28
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Понятно, заняться не чем. В следующий раз разводить в форуме черти что не нужно, достаточно написать свое фе мне лично на сыло.


Тем не менее можно все-таки объяснить на примере каким образом замыкания бывают "только для чтения"? Если мне не изменяет память переменные используемые одноврменно в контексте родительского метода и анонимного при компиляции превращаются в поля класса, соответственно, менять их пределах области видимости класса можно откуда угодно.
Re[19]: Многопоточность
От: Lloyd Россия  
Дата: 14.09.06 14:37
Оценка: -2 :)
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Тем не менее можно все-таки объяснить на примере каким образом замыкания бывают "только для чтения"? Если мне не изменяет память переменные используемые одноврменно в контексте родительского метода и анонимного при компиляции превращаются в поля класса, соответственно, менять их пределах области видимости класса можно откуда угодно.


Да лажанулся чувак. Толко признаваться в этом очень не хочется, модератор все-таки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Многопоточность
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 14.09.06 14:37
Оценка: 1 (1)
Здравствуйте, ie, Вы писали:

ie>Здравствуйте, AndrewVK, Вы писали:


ie>>>А причем тут собственно строки?

AVK>>А при чем тут собственно то, что в C# замыкания read-only? Вопрос был про передачу параметров в поток, а не про возврат оттуда.

ie>Дык, я оттуда ничего вернуть и не пытаюсь. Разве не так?


AVK>>При необходимости всегда можно передать mutable объект (C# ведь не функциональный язык, в нем это вполне естественно) и менять его, не меняя ссылки. Но к исходному вопросу это никакого отношения не имеет.


ie>Мы уже с Lloyd выяснили, что я не правильно понимал замыкания. Я полагал, что используется значение которое было в момент создания делегата, а не в момент его вызова. Оказалось ровно наоборот.


Выше сказанное абсолютно правильно. Маленькое дополнение — цитата из Ecma-334:

14.5.15.2 Anonymous method blocks
...
The block has access to the outer variables (§14.5.15.3) of the anonymous method. Access of an outer
variable will reference the instance of the variable that is active at the time the anonymous-methodexpression
is evaluated
(§14.5.15.4).

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.