Конференция "Прочее" » Как вы относитесь к использованию меток в Delphi?
 
  • Kerk © (26.05.16 19:48) [100]
    Я тоже честно говоря не понял конкретный пример. Но идея понятна.
  • Владислав © (26.05.16 20:00) [101]
    > Kerk ©   (26.05.16 19:48) [100]

    Идея-то понятно, но если бы был Range Check Error с переменной цикла, это был бы большой фейл.

    var
     I: 0..9;
    begin
     for I := 0 to 9 do // Нет выхода за границы диапазона, не будет и исключения.
       ;
    end;
  • Юрий Зотов © (26.05.16 20:05) [102]
    А ведь и верно - в Delphi ошибки нет. Но в Turbo Pascal 5.5 точно была.
  • Плохиш © (26.05.16 20:17) [103]
    Читал ветку, читал. Но так и не понял, о чём копья ломаются.
    Господа, какую проблему решаем?
  • Sha © (26.05.16 20:20) [104]
    > Юрий Зотов ©   (26.05.16 19:01) [95]
    > Вход в цикл минуя его заголовок - запросто.

    Это в PL как раз нельзя было.
    Если, конечно, память не обманывает.
  • Inovet © (26.05.16 21:36) [105]
    Так, начиная с [72] - всё быстро просмотрел, местами даже относительно внимательно. Похоже, пока что, добавить мне нечего.

    ПС. А кто это там так боянисто вбросил? И зачем? - вот главный вопрос.:) А вы тут про метки и прочие агрегаты.:)
    Если что - я тут уже давно под одним ником.
  • Юрий Зотов © (26.05.16 22:07) [106]
    > Плохиш ©   (26.05.16 20:17) [103]

    > Читал ветку, читал. Но так и не понял, о чём копья ломаются.
    > Господа, какую проблему решаем?


    А никакую, просто общаемся. Редкий случай, когда разговор на холиварную тему протекает в нормальном тоне.
  • DayGaykin © (26.05.16 22:16) [107]

    > Kerk ©   (26.05.16 15:00) [88]
    > Ну так да. Где-то в эту сторону языки программирования и
    > развиваются в основном. Больше типизации, меньше прямой
    > работы с памятью. И это хорошо

    Насчет типизации соглашусь. Насчет работы с памятью: сборщики мусора, по-моему, зло злейшее. Жаль что эта мода врядли скоро пройдет. Думаю можно найти приемлемый способ убивать ненужные объекты сразу после выхода из зоны видимости и не использовать сборщик мусора.
  • Юрий Зотов © (26.05.16 22:51) [108]
    > DayGaykin ©   (26.05.16 22:16) [107]

    > можно найти приемлемый способ убивать
    > ненужные объекты сразу после выхода из зоны видимости и
    > не использовать сборщик мусора.


    Его и искать не надо, он уже есть: обнулился счетчик ссылок - убили объект.

    Но не все так просто. Если память, которую занимал объект просто возвратить в хип, то довольно быстро наступит такая фрагментация памяти, что получим OutOfMemory, хотя свободной памяти - до фига и больше. Надо проводить дефрагментацию паамяти, а если делать ее на каждое удаление объекта, то будет слишком накладно.
  • Юрий Зотов © (26.05.16 23:09) [109]
    Кстати, интересная штука открылась (в java). Есть там метод freeMemory, который, если верить документации, просто возвращает кол-во свободной памяти в байтах. И был у меня кусок программы, который загружал дисковый файл и по нему строил в памяти список неких объектов.

    Так вот - если этот файл слишком большой, то возникало то самое OutOfMemory. Тогда при отладке перед и после этого куска я вставил freeMemory с выводом в консоль - для контроля.

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

    Позже я использовал этот прием и в других похожих местах. Результат всегда был один - ошибка OutOfMemory исчезала.
  • Kerk © (27.05.16 00:41) [110]
    Фатальный недостаток счетчика ссылок - циклические ссылки. Их конечно можно вручную разрывать, но не всегда просто отследить.
  • Германн © (27.05.16 01:10) [111]

    > Юрий Зотов ©   (26.05.16 20:05) [102]
    >
    > А ведь и верно - в Delphi ошибки нет. Но в Turbo Pascal
    > 5.5 точно была.
    >

    Юр, не было. TP 5.5 у меня под рукой. До сих пор использую. Пришлось даже VMWare установить.
    Точнее, если и была, то не в совсем таком коде. Да после итерации счетчик цикла сначала увеличивается, а затем проверяется условие цикла. Но это не должно приводить к ошибке.
  • Юрий Зотов © (27.05.16 05:07) [112]
    > Германн ©   (27.05.16 01:10) [111]

    Поставь опции (или птички):
    {R+}
    {Q+}
    {O-}
    и сбилди проект.
  • Eraser © (27.05.16 08:37) [113]

    > Kerk ©   (27.05.16 00:41) [110]
    > Фатальный недостаток счетчика ссылок - циклические ссылки.
    >

    ну в новой версии сделали weak reference, правда это само по себе несколько портит концепцию подсчета ссылок.
  • Kerk © (27.05.16 11:43) [114]
    Да, это самая важная фича со времен дженериков по-моему :)
  • K-1000 © (27.05.16 20:46) [115]
    Самое интересное, что в "Модула-2" GOTO убрали. :)
  • jack128 © (29.05.16 01:04) [116]

    > А если это будет TPersonRec то менять мы сможем только запись
    > целиком, т.е.

    Это следствие дизайна дельфи, который гласит: "за любое удобство нужно платить производительностью".
    В плюсах, и кстати в следующей версии C#, то что ты хочешь можно и для структур со свойствами сделать.
  • Германн © (29.05.16 02:22) [117]

    > Юрий Зотов ©   (27.05.16 05:07) [112]
    >
    > > Германн ©   (27.05.16 01:10) [111]
    >
    > Поставь опции (или птички):
    > {R+}
    > {Q+}
    > {O-}
    > и сбилди проект.
    >

    Юр. Поставил/снял птички/галочки R и O и сбилдил проект. Птичку/галочку Q не нашел в Options. Поставил в коде явно.
    {Q+}
    program Test;
    var i : 0..9;

    begin
     for i:=0 to 9 do
    end.


    Никаких сообщений об ошибках не получил.
  • Германн © (29.05.16 02:24) [118]
    Ну т.е. {$Q+}.
  • DVM © (29.05.16 11:48) [119]

    > Юрий Зотов ©   (26.05.16 23:09) [109]


    > Результат всегда был один - ошибка OutOfMemory исчезала.

    Мне кажется, если в программе возникает OutOfMemory - это повод задуматься об алгоритмах и архитектуре программы, а не добавлять недокументированные костыли.
    Может я конечно не прав и в мире Java все не так.
 
Конференция "Прочее" » Как вы относитесь к использованию меток в Delphi?
Есть новые Нет новых   [134432   +19][b:0.001][p:0.001]