ZX Spectrum - 25 лет

Свернуть
X
 
  • Время
  • Показать
Очистить всё
новые сообщения
  • Павел_17
    христианин

    • 13 September 2002
    • 24020

    #31
    На счет ошибок на Си - согласен с Claricce. Компилятор можно настроить так, что он будет следить за вами не хуже Паскаля.
    После того, как я решил всерьез покопаться Форте - там же на Синклере - дня три выворачивал и распутывал собственные мозги. Мне кажется, что Форт с его обратной записью - для особо одаренных извращенцев.
    Не смог развернуть мозги наоборот, поэтому Форт не осилил.

    Комментарий

    • Итальянец
      Yes, we can

      • 09 December 2003
      • 10834

      #32
      Фортран это вещь!! Помню мои поползновения...
      - Ты правда не веришь в Бога? Совсем?
      - Да вот те крест!

      Комментарий

      • Павел_17
        христианин

        • 13 September 2002
        • 24020

        #33
        На Синклере вроде не было Фортрана?

        Комментарий

        • Tuareg
          Adoring

          • 15 June 2004
          • 2880

          #34
          Сообщение от Tessaract
          Ой, не знаю, не знаю, для меня Си это настоящий ночной кошмар! Добивает то, что он не проверяет указатели (забыл поставить "звездочку", поставил не там где надо, выход за пределы массива при обработке) и как следствие программа после запуска падает! А ведь можно же было следать трассировку и определить все ошибки перед компиляцией! Причем непонятно мне нежелание разработчиков вводить такие проверки! Вон как в Паскале к примеру, тот при всем желании не позволит обратиться туда, куда нельзя!
          Нельзя определить все ошибки во время компиляции. Простой пример: размер массива при компиляции может быть просто неизвестен так как динамически вычисляется во время исполнения программы. Во вторых есть такая вещь как smart pointers. В третьих, надо использовать итераторы для навигации по контейнерам, тогда не будет никокого out of range. Но это уже C++
          Pentecostal Evangelical Сhurch

          Комментарий

          • Итальянец
            Yes, we can

            • 09 December 2003
            • 10834

            #35
            А я что, говорил, что был?
            - Ты правда не веришь в Бога? Совсем?
            - Да вот те крест!

            Комментарий

            • Tessaract
              Сатанист

              • 18 August 2004
              • 6119

              #36
              Ну а что Вы хотели - Си строг, но справедлив.
              Конкретно о границах массива - не знаю, как у Вас это получается, но warning в этом случае я обычно получаю. А дальше уж... - поступайте как хотите.
              Возможно Вы поставили слишком жесткие ограничения в настройках компилятора и линковщика - убрали предупреждения и мелкие, нефатальные ошибки. Но тогда это - Ваша вина.
              Пробовал я снимать все ограничения и играть настройками, да бестолку все это! Все равно большинство ошибок с указателями он не вылавливает!

              Если Вам часто приходится прокалываться на компиляторе, то поставьте себе pc-lint. Это программка, которая находит ошибки гораздо более тщательно, чем стандартный компилятор.
              Начинается! Поставьте то, поставьте это! А с самого начала разработчику написать полноценный трассировщик было не судьба?

              Си дает больше возможностей, но налагает на Вас самого ответственность за программу.
              А от Паскаля что же требовать - учебный язык. Он и будет Вас дергать за руку все время.
              А вот это можно оспорить! Современные варианты Паскаля дают ничуть не меньше возможностей!

              Павел_17
              На счет ошибок на Си - согласен с Claricce. Компилятор можно настроить так, что он будет следить за вами не хуже Паскаля.
              Ну настройте мне GCC так, чтобы он отлавливал к примеру такую ошибку
              (специально написано с очевидной ошибкой, чтоб наверняка рухнуло)

              int main () {

              char *x[10];
              int y,z;

              for(y=0;y<10000000;y++) {
              z=*x[y];
              }

              }

              У меня он не крякнув ее проглотил! И Си Буилдер тоже проглотил!
              И бесплатный Lcc тоже!
              (не знаю мож и впрям не так настроил)
              Человек человеку волк!!!!!!!!!!!!!!!!

              Комментарий

              • Tessaract
                Сатанист

                • 18 August 2004
                • 6119

                #37
                Сообщение от Tuareg
                Нельзя определить все ошибки во время компиляции. Простой пример: размер массива при компиляции может быть просто неизвестен так как динамически вычисляется во время исполнения программы. Во вторых есть такая вещь как smart pointers. В третьих, надо использовать итераторы для навигации по контейнерам, тогда не будет никокого out of range. Но это уже C++
                Если верхний предел массива определен как сумма констант, Паскаль такой out of range вычислит на раз, а Си проглотит! Я сообщением выше привел прогламму, попробуйте обмануть ею Паскаль! Да что Паскаль, даже современные Бейсики и прочие языки такие ошибки отлавливают

                Вот к примеру:

                <?php

                $x[10]="";

                print $x[100];

                ?>

                И.....

                PHP Notice: Undefined index: 100 in /home/user/work/test.php on line 5
                Человек человеку волк!!!!!!!!!!!!!!!!

                Комментарий

                • Alex-v
                  Ветеран

                  • 24 August 2003
                  • 2840

                  #38
                  А мне Си (С++) нравится. И чтобы на нем писать, голова должна быть на плечах. Программист сам должен быть ответственнен за код.
                  С Богом. Александр.

                  Комментарий

                  • Tessaract
                    Сатанист

                    • 18 August 2004
                    • 6119

                    #39
                    Сообщение от Alex-v
                    А мне Си (С++) нравится. И чтобы на нем писать, голова должна быть на плечах. Программист сам должен быть ответственнен за код.
                    1. Я не говорил ничего плохого про Си!
                    2. С чего вдруг я должен делать то (искать ошибки), что компьютер отлично может сделать за меня? В 21-м веке все-таки уже живем!
                    Человек человеку волк!!!!!!!!!!!!!!!!

                    Комментарий

                    • Alex-v
                      Ветеран

                      • 24 August 2003
                      • 2840

                      #40
                      Кстати и на Pascal`e можно делать ассемблерные вставки, и ни один компилятор не найдет там ошибку выхода за пределы массива.
                      С Богом. Александр.

                      Комментарий

                      • Claricce
                        Ветеран

                        • 22 December 2000
                        • 4267

                        #41
                        Здравствуйте, Tessaract!

                        Сообщение от Tessaract
                        ...
                        z=*x[y];
                        ...
                        Результат pc-lint

                        Warning 661: Possible access of out-of-bounds pointer (9999990 beyond end of data) by operator '['
                        Начинается! Поставьте то, поставьте это! А с самого начала разработчику написать полноценный трассировщик было не судьба?
                        Потому что никому не нужно - никто, кроме Вас, не жалуется на Си.
                        Вот и советую Вам - по Вашему конкретному случаю конкретную заплатку.
                        Современные варианты Паскаля дают ничуть не меньше возможностей!
                        Паскаль всегда будет догонять Си по возможностям.
                        Паскаль просто по своему определению и целям создания - учебный язык. Даже последние версии. А это значит, что есть в нем упрощения и сложности в программировании, искусственно введенные для лучшего понимания в обучении.
                        Си - язык программистов, написанный программистами. Язык позволяющий максимально использовать возможности программирования, а не быть максимально удобным для новичка. Нельза написать язык, одновременно мощный и учебный - чем-то приходится жертвовать. Есть учебные самолеты, на которых трудно разбиться - но на них нельзя воевать с настоящим противником.

                        Для примера.
                        Вот есть автомобиль с автоматической коробкой передач. Удобная вещь. Мирная семейная машина - "Вольво" там или "Фольксваген".
                        На нем Вы не сможите врубить полный газ с места. Можно спросить - а зачем нужны такие эксперименты вообще? На фига рвать покрышки?
                        Так ведь это - смотря кому.
                        И вправду - ни новичкам, ни женщинам не нужно рвать шины, разгоняясь за семь секунд до максимума. А вот профессионалу руля и любителю острых ощущений такой мирный авто не по душе. Им - нужно. Им нужен "Порше", "Харлей-Дэвидсон", реставрированный "Бугатти" или "Мазератти".

                        Паскаль - язык с автоматической коробкой передач своего компилятора, ограничивающей Ваши возможности. Если Вам нужен тихий и спокойный язык для неторопливых программ, на котором Вы будете учиться обьезжать резиновые манекены и полосатые конусы в учебном городке, если Вы вполне согласны заплатить надежностью учебного авто в обмен за ветер в лицо и компактность кода... - пишите на Паскале.
                        Зачем Вам Си, если Вы не видите его красоты? Ездите на "Фольксвагене"-жуке...
                        И Си Буилдер тоже проглотил!
                        Строго говоря, CBuilder не есть Си. Это Си, скрещенный с компонентной оболочкой Дельфи.
                        1. Я не говорил ничего плохого про Си!
                        Рад за Вас.
                        2. С чего вдруг я должен делать то (искать ошибки), что компьютер отлично может сделать за меня? В 21-м веке все-таки уже живем!
                        Фортран написали для ученых.
                        Кобол - для экономистов.
                        Паскаль - для учебы.
                        Лисп - работа со списками.
                        Форт - для мазохистов.
                        Басик - для непрофессионалов.
                        Ассемблер - сугубо для профессионалов.
                        Ада - для систем управления...

                        У каждого из них есть свои плюсы и минусы. Просто выберите тот, что подходит для Вас лично.

                        P.S. Не имеет, конечно, радикального значения, но лучше писать проги в виде:
                        //Искать так ошибки на порядок легче...
                        int main ()
                        {
                        ....char *x[ 10 ];
                        ....int y, z;

                        ....for( y = 0; y < 10000000; ++y)
                        ....{
                        .........z = *x[y];
                        ....}
                        } // многоточие заменяет здесь табуляцию - не знаю, как отобразить ее в письме
                        // а на фига Вам возвращаемый int, если нечего возвращать?
                        // размерность y в int тоже мелковата для 10**7

                        С Уважением,
                        Claricce

                        Комментарий

                        • Alex-v
                          Ветеран

                          • 24 August 2003
                          • 2840

                          #42
                          Claricce
                          Паскаль всегда будет догонять Си по возможностям.
                          Паскаль просто по своему определению и целям создания - учебный язык.
                          Си - язык программистов, написанный программистами.
                          Я с вами полностью согласен на счет Си и Pascal`я.
                          С Богом. Александр.

                          Комментарий

                          • Tessaract
                            Сатанист

                            • 18 August 2004
                            • 6119

                            #43
                            Сообщение от Alex-v
                            Кстати и на Pascal`e можно делать ассемблерные вставки, и ни один компилятор не найдет там ошибку выхода за пределы массива.
                            А еще в Паскале есть динамические массивы (в дополнение к сказанному выше), поэтому там нет смысла забивать свою голову мудрежкой со всякими malloc!

                            Claricce
                            Результат pc-lint
                            Warning 661: Possible access of out-of-bounds pointer (9999990 beyond end of data) by operator '['
                            Эээ, нет! Вы стандартными функциями компилятора эту ошибку выловите!
                            Потому что никому не нужно - никто, кроме Вас, не жалуется на Си.
                            Вот и советую Вам - по Вашему конкретному случаю конкретную заплатку.
                            Ага, заплатку, как в Виндах! Кстати переполнения буфера со всеми вытекающими существуют только на Си, а в остальных языках это больше исключение чем правило!

                            Паскаль всегда будет догонять Си по возможностям.
                            Паскаль просто по своему определению и целям создания - учебный язык. Даже последние версии. А это значит, что есть в нем упрощения и сложности в программировании, искусственно введенные для лучшего понимания в обучении.
                            Учебным Паскаль был лет эдак 15-ть назад, сейчас это нормальный язык, отнюдь не учебный! В Интернете можно найти множество примеров драйверов, написанных на Паскале! А еще, как заметил Alex-V, в Паскаль можно вставлять ассемблерные коды! А это отнюдь не учебная функция! Паскаль был создан ученым и как любая вещь в науке он выверен и четко структурирован! Как вы думайте, откуда в вашем Си взялось обьектное программирование?

                            Си - язык программистов, написанный программистами.
                            Можно подумать другие языки писались неизвестно для кого!

                            И вправду - ни новичкам, ни женщинам не нужно рвать шины, разгоняясь за семь секунд до максимума. А вот профессионалу руля и любителю острых ощущений такой мирный авто не по душе. Им - нужно. Им нужен "Порше", "Харлей-Дэвидсон", реставрированный "Бугатти" или "Мазератти".
                            Скажем так, на Паскале благодаря ассемблерным вставкам тоже разогнаться ой как можно! Еще помню в Турбо Паскале писал на ассемблере модуль для работы с мышкой! И ничего ведь - работало!

                            Паскаль - язык с автоматической коробкой передач своего компилятора, ограничивающей Ваши возможности.
                            Чем же? Назовите, что можно написать на Си и чего при этом впринципе невозможно написать на Паскале!

                            Фортран написали для ученых.
                            Кобол - для экономистов.
                            Паскаль - для учебы.
                            Лисп - работа со списками.
                            Форт - для мазохистов.
                            Басик - для непрофессионалов.
                            Ассемблер - сугубо для профессионалов.
                            Ада - для систем управления...
                            То есть вы хотите сказать, что кроме как для учебы Паскаль больше ни на что не годен?

                            int main ()
                            {
                            ....char *x[ 10 ];
                            ....int y, z;

                            ....for( y = 0; y < 10000000; ++y)
                            ....{
                            .........z = *x[y];
                            ....}
                            }
                            Раз пошла такая пьянка..
                            Писать проги лучше так:
                            int main() {
                            for( y = 0; y < 10000000; ++y) {
                            }
                            }
                            (Кривая скобка в конце строки - стиль Кернигана-Ричи, см. файл CodingStyle ядра Линукс или прочие GPL)

                            // а на фига Вам возвращаемый int, если нечего возвращать?
                            // размерность y в int тоже мелковата для 10**7
                            А мало-ли, хочу я так, хозяин - барин!
                            Человек человеку волк!!!!!!!!!!!!!!!!

                            Комментарий

                            Обработка...