На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 161 162 [163] 164 165 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата D_KEY @
    :D Может хватит придираться? Других ссылок, кроме той, что в списке, на него нет.

    дык и зачем GC его удалять? охота заиметь указатель в никуда?
      Цитата korvin @
      Цитата D_KEY @
      :D Может хватит придираться? Других ссылок, кроме той, что в списке, на него нет.

      дык и зачем GC его удалять? охота заиметь указатель в никуда?

      Так в этом и состоит задача weak_ref :D
      GC удалит объект, а указатель в никуда ты не заимеешь :)
        Цитата D_KEY @
        Так в этом и состоит задача weak_ref :D
        GC удалит объект, а указатель в никуда ты не заимеешь :)

        если объект удалиться -- заимеешь. рантайм-указатель вникуда.

        Добавлено
        но в случае с GC объект не удалится, т.к. есть ссылка -- из weak_ptr на объект

        Добавлено
        ну или откуда там, из списка
          Цитата korvin @
          Цитата D_KEY @
          Так в этом и состоит задача weak_ref :D
          GC удалит объект, а указатель в никуда ты не заимеешь :)

          если объект удалиться -- заимеешь. рантайм-указатель вникуда.

          Прочти еще раз хотя бы статью в википедии :)
          Ты заводишь слабую ссылку у которой(когда тебе нужно, например, при посылке "события") запрашиваешь жесткую ссылку на объект. Если объект уже удален, тебе придет null, если нет - то жесткая ссылка на объект. Какие указатели в никуда?

          Добавлено
          Цитата korvin @
          но в случае с GC объект не удалится, т.к. есть ссылка -- из weak_ptr на объект

          weak_ref не хранит ссылку и weak_ref не учитывается сборщиком мусора(то есть он спокойно удаляет объект, если на него нет жестких ссылок).
          Сообщение отредактировано: D_KEY -
            не, я понял:

            ExpandedWrap disabled
              (define weak-object (box (make-object)))
               
              (define some-list (list weak-object))
               
              (send (box-ref (first some-list)) get-x) ; => x
               
              (box-set! weak-object #f)
               
              (send (box-ref (first some-list)) get-x) ; => error

            но зачем это?

            Добавлено
            Цитата D_KEY @
            Прочти еще раз хотя бы статью в википедии :)

            прочти еще раз, что такое GC =) объекты живут до тех пор, пока на них есть хоть какая-то ссылка, в языках с GC нет weak_ptr в принципе, их можно реализовать как я показал выше, но не более, ты _не можешь_ создать weak_ptr

            Добавлено
            Цитата korvin @
            объекты живут до тех пор, пока на них есть хоть какая-то ссылка

            точнее пока до них есть доступ
              Цитата korvin @
              рочти еще раз, что такое GC =) объекты живут до тех пор, пока на них есть хоть какая-то ссылка, в языках с GC нет weak_ptr в принципе, их можно реализовать как я показал выше, но не более, ты _не можешь_ создать weak_ptr
              А GC это такой волшебник, которое ну просто ЗНАЕТ, где лежит объект, есть ли ссылки на него и когда можно удалить объект?
                Цитата Adil @
                А GC это такой волшебник, которое ну просто ЗНАЕТ, где лежит объект, есть ли ссылки на него и когда можно удалить объект?

                эм... не волшебник, но да, знает. в этом его суть как бэ...
                  Во. Нарыл такой код.
                  ExpandedWrap disabled
                    procedure DoSomething(const AProc: TProcedure);
                      var X: Integer;
                    begin
                      for X := 1 to 3 do
                       AProc;
                    end;
                     
                    function Test: Integer;
                      var N: Integer;
                     
                      procedure UseLocalVar;
                      begin
                       Inc(N);
                      end;
                    begin
                      N := 0;
                      DoSomething(@UseLocalVar);
                      Result := N;
                    end;
                     
                    procedure TForm1.Button1Click(Sender: TObject);
                    begin
                      Caption := IntToStr(Test); // ожидается: 3; реальный результат: access violation
                    end;
                  Понятное дело, что код скелетный, из реального проекта выкинули всё лишнее. Господа дельфисты, коммент не врёт? Если правда, даже не знаю, как исправить. Кстати, там, откуда взял, утверждается, что это ошибка не Дельфи, а программиста. Если и это правда, то объясните с точки зрения документации, бо я что-то не припомню подобных ограничений у Turbo Pascal.
                    Цитата korvin @
                    Цитата D_KEY @
                    Прочти еще раз хотя бы статью в википедии :)

                    прочти еще раз, что такое GC =)

                    Спасибо, я знаю. Приходилось даже реализовывать два алгоритма(простой с ячейкама фиксированного размера и посложнее с произвольным)...

                    Цитата
                    объекты живут до тех пор, пока на них есть хоть какая-то ссылка, в языках с GC нет weak_ptr в принципе

                    :fool:
                    Даже в статье в википедии есть пример на яве и луа.

                    Цитата
                    их можно реализовать как я показал выше, но не более, ты _не можешь_ создать weak_ptr

                    Ты не можешь их реализовать, если их нет в языке с GC. Именно поэтому такие языки предоставляют специальные средства для этого.
                      Цитата Qraizer @
                      Во. Нарыл такой код.
                      ExpandedWrap disabled
                        procedure DoSomething(const AProc: TProcedure);
                          var X: Integer;
                        begin
                          for X := 1 to 3 do
                           AProc;
                        end;
                         
                        function Test: Integer;
                          var N: Integer;
                         
                          procedure UseLocalVar;
                          begin
                           Inc(N);
                          end;
                        begin
                          N := 0;
                          DoSomething(@UseLocalVar);
                          Result := N;
                        end;
                         
                        procedure TForm1.Button1Click(Sender: TObject);
                        begin
                          Caption := IntToStr(Test); // ожидается: 3; реальный результат: access violation
                        end;
                      Понятное дело, что код скелетный, из реального проекта выкинули всё лишнее. Господа дельфисты, коммент не врёт? Если правда, даже не знаю, как исправить. Кстати, там, откуда взял, утверждается, что это ошибка не Дельфи, а программиста. Если и это правда, то объясните с точки зрения документации, бо я что-то не припомню подобных ограничений у Turbo Pascal.

                      кстати согласен, какое-то неочевидное поведение, три раза пытался мысленно прогнать код, получал 3, а не AV

                      Добавлено
                      Цитата D_KEY @
                      Спасибо, я знаю. Приходилось даже реализовывать два алгоритма(простой с ячейкама фиксированного размера и посложнее с произвольным)...

                      это который из этих: http://ulizko.com/posts/44/ ?

                      Добавлено
                      Цитата D_KEY @
                      Именно поэтому такие языки предоставляют специальные средства для этого.

                      реквестирую пример, нет такого в Схеме/КЛ/Хаскелле

                      Добавлено
                      Цитата D_KEY @
                      Ты не можешь их реализовать, если их нет в языке с GC.

                      и таки могу, привел пример. могу и как часть языка макрами сделать

                      Добавлено
                      Цитата D_KEY @
                      Даже в статье в википедии есть пример на яве и луа.

                      а, вроде натыкался на обсуждение исключения нулевого указателя в яве? ну на то она и ява, но не думал, что в луа это тоже возможно...
                        Цитата Qraizer @
                        Если и это правда, то объясните с точки зрения документации, бо я что-то не припомню подобных ограничений у Turbo Pascal.
                        Турбо-Паскаль, кстати, такое в принципе не компилирует, ибо
                        Цитата
                        Кроме того, в качестве процедурных значений не могут указываться стандартные процедуры и функции, вложенные процедуры и функции, ...
                        .
                          Цитата korvin @
                          Цитата D_KEY @
                          Спасибо, я знаю. Приходилось даже реализовывать два алгоритма(простой с ячейкама фиксированного размера и посложнее с произвольным)...

                          это который из этих: http://ulizko.com/posts/44/ ?

                          Отвечу не сегодня. Скорее всего, никакой из конкретных. Механизм требовался не очень крутой и не для прикладной системы. Так что были особенности.

                          Цитата
                          Цитата D_KEY @
                          Именно поэтому такие языки предоставляют специальные средства для этого.

                          реквестирую пример, нет такого в Схеме/КЛ/Хаскелле
                          А я и спрашиваю, что делать в этих языках, если нужны слабые ссылки.

                          Цитата
                          Цитата D_KEY @
                          Ты не можешь их реализовать, если их нет в языке с GC.

                          и таки могу, привел пример. могу и как часть языка макрами сделать

                          Насколько я вижу, ты не понял, что нужно...

                          Цитата
                          Цитата D_KEY @
                          Даже в статье в википедии есть пример на яве и луа.

                          а, вроде натыкался на обсуждение исключения нулевого указателя в яве? ну на то она и ява, но не думал, что в луа это тоже возможно...

                          Какие еще исключения нулевого указателя? Ты код не смотрел что ли?
                          ExpandedWrap disabled
                            import java.lang.ref.WeakReference;
                             
                            public class ReferenceTest {
                                    public static void main(String[] args) throws InterruptedException {
                             
                                            Student s1 = new Student(1);
                                            System.out.println(s1);
                                            WeakReference<Student> ws = new WeakReference<Student>(s1);
                                            System.out.println(ws.get());
                                            s1 = null;
                                            System.gc();
                                            Thread.sleep(1000);
                             
                                            System.out.println(ws.get());
                                    }
                            }
                             
                            class Student {
                                    public Student(int id) {
                                            this.id = id;
                                    }
                             
                                    int id;
                             
                                    public String toString() {
                             
                                            return "[id=" + id + "]";
                             
                                    }
                            }


                          Создаем объект класса Student
                          ExpandedWrap disabled
                            Student s1 = new Student(1);

                          Затем создаем объект слабой ссылки
                          ExpandedWrap disabled
                            WeakReference<Student> ws = new WeakReference<Student>(s1);

                          Теперь ws "ссылается" на тот же объект, что и s1, но сборка мусора не учитывает эту ссылку на объект.
                          А потом мы берем, и делаем так, чтобы на объект, на который ссылался s1, нет больше ссылок(для этого достаточно сделать так, чтобы на него не ссылался s1):
                          ExpandedWrap disabled
                            s1 = null;

                          Далее принудительно инициируем сборку мусора.
                          После чего объект s1 будет удален, а при попытке получить ссылку от ws получим null.
                          Для получения "жесткой" ссылки от мягкой вызывается метод get.
                          Теперь ясно?
                          Сообщение отредактировано: D_KEY -
                            Цитата D_KEY @
                            А я и спрашиваю, что делать в этих языках, если нужны слабые ссылки.

                            а я и показал, что делать.

                            Цитата D_KEY @
                            Насколько я вижу, ты не понял, что нужно...

                            понял, только это не нужно

                            Цитата D_KEY @
                            Ты код не смотрел что ли?
                            ExpandedWrap disabled
                              import java.lang.ref.WeakReference;
                               
                              public class ReferenceTest {
                                      public static void main(String[] args) throws InterruptedException {
                               
                                              Student s1 = new Student(1);
                                              System.out.println(s1);
                                              WeakReference<Student> ws = new WeakReference<Student>(s1);
                                              System.out.println(ws.get());
                                              s1 = null;
                                              System.gc();
                                              Thread.sleep(1000);
                               
                                              System.out.println(ws.get());
                                      }
                              }
                               
                              class Student {
                                      public Student(int id) {
                                              this.id = id;
                                      }
                               
                                      int id;
                               
                                      public String toString() {
                               
                                              return "[id=" + id + "]";
                               
                                      }
                              }


                            Создаем объект класса Student
                            ExpandedWrap disabled
                              Student s1 = new Student(1);

                            Затем создаем объект слабой ссылки
                            ExpandedWrap disabled
                              WeakReference<Student> ws = new WeakReference<Student>(s1);

                            Теперь ws "ссылается" на тот же объект, что и s1, но сборка мусора не учитывает эту ссылку на объект.
                            А потом мы берем, и делаем так, чтобы на объект, на который ссылался s1, нет больше ссылок(для этого достаточно сделать так, чтобы на него не ссылался s1):
                            ExpandedWrap disabled
                              s1 = null;

                            Далее принудительно инициируем сборку мусора.
                            После чего объект s1 будет удален, а при попытке получить ссылку от ws получим null.
                            Для получения "жесткой" ссылки от мягкой вызывается метод get.
                            Теперь ясно?

                            мне и до этого было ясно, не ясно только, почему тебе не ясно, что мне ясно =)
                            и это таки не нужно
                            Сообщение отредактировано: korvin -
                              Цитата korvin @
                              и это таки не нужно

                              :wacko: В системах со сборкой мусора нет другого способа ссылаться на объект, не являясь одним из его владельцев. Пример я уже приводил - список подписчиков. Если бы это было не нужно - это бы и не появилось в языках со сборкой мусора(а появилось это в них не сразу).
                              Кстати, можешь в общих чертах рассказать о том решении, которое ты привел?

                              Добавлено
                              Цитата korvin @
                              мне и до этого было ясно, не ясно только, почему тебе не ясно, что мне ясно =)

                              Потому, что ты упорно утверждал, что этого нет в языках со сборкой мусора. Хотя эта концепция именно в них и появилась(кстати, она освещена в некоторых книгах по языкам программирования и компиляторам, в частности в "книге дракона", если мне память не изменяет).
                                Цитата D_KEY @
                                :wacko: В системах со сборкой мусора нет другого способа ссылаться на объект, не являясь одним из его владельцев. Пример я уже приводил - список подписчиков.

                                а в системах с GC так и не пишут, чтобы возникала необходимость в мягких ссылках, а многие даже и подумать не могут, что такое вообще есть и зачем-то даже кому-то нужно.
                                и "владельцев" нет.
                                а список подписчиков делается и без этого.

                                Цитата D_KEY @
                                Если бы это было не нужно - это бы и не появилось в языках со сборкой мусора(а появилось это в них не сразу).

                                давай ты перечислишь языки с GC, где есть мягкие ссылки, а я -- где нет?

                                Цитата D_KEY @
                                Кстати, можешь в общих чертах рассказать о том решении, которое ты привел?

                                то лишь набросок, если нужно полноценное решение, могу написать.

                                Цитата D_KEY @
                                Потому, что ты упорно утверждал, что этого нет в языках со сборкой мусора.

                                дык этого и нет ни в одном ЯП с GC, что я знаю (ну кроме джавы и возможно C#). языки с отключаемым GC (типа как в D, если не ошибаюсь) не считаются.

                                Цитата D_KEY @
                                Хотя эта концепция именно в них и появилась

                                в каких именно? в Яве что ли? =))

                                Добавлено
                                Цитата korvin @
                                дык этого и нет ни в одном ЯП с GC, что я знаю (ну кроме джавы и возможно C#).

                                вру, в Racket есть

                                Добавлено
                                вот, кстати на StackOverflow прочитал более понятный пример, но вопрос: если нужен plist в объектах, почему бы сразу не спроектировать класс с таким свойством? а в случае наличия множественного наследования или примесей это вообще не проблема
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 161 162 [163] 164 165 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.3029 ]   [ 15 queries used ]   [ Generated: 31.07.26, 14:27 GMT ]