На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (29) « Первая ... 6 7 [8] 9 10 ...  28 29  ( Перейти к последнему сообщению )  
> Вопрос к программистам на C , Исходники ядра Linux
    Цитата
    www.linuxfromscratch.org


    Хе-хе-хе... linuxfromsratch.org... :)))

    Шад, попробуй обкатать еще и -Bdirect, ибо прелинк для открываемых с помощью dlopen() библиотек помогают аки мертвому припарки, а эта вещица помогает. Нужно, правда, патчить либц и бинутилз.

    Говорят, с этой штукой не дружит лишь X.org (ну и нафиг, можно не компилять с этим флагом -- не сломается), а вот опенофис раза в 4 быстрее подымается.
      Цитата
      Шад, попробуй обкатать еще и -Bdirect,

      Хммм... Погляжу. А linux из скрэтча... Shit, если честно. :(
        the_Shadow, ты хотел задачку? Изволь. Нередко встает задача обменять две переменные местами. Бывает? Бывает. Например, в алгоритмах сортировки. Да и не только. Можешь ли ты на С написать такую функцию (или макрос) обмена двух значений, которая максимально эффективно работает со значениями любых типов, для которых ты можешь ее вызвать. В частности, для интегральных типов (обмен через xor), типов, у которых есть своя функция обмена (должен вызвать ее), и для всех остальных типов, для которых используется обмен через третью переменную. В твоем распоряжении - С + препроцессор. В моем - С++.
          Цитата LuckLess @
          к примеру

          ExpandedWrap disabled
            if (func1())
             {
              if (func2())
              {
               if (func3())
               {
               DoSmth()
               }
              }
             
             }

          я заменю на
          ExpandedWrap disabled
            do
            {
            if (!func1()) break;
            if (!func2()) break;
            if (!func3()) break;
            DoSmth()
            }
            while(0)

          Эквивалентно простому
          ExpandedWrap disabled
            if (func1() && func2() && if (func3())
               {
               DoSmth()
              }
             }
            Цитата
            типов, у которых есть своя функция обмена (должен вызвать ее)

            А бывает ли в сях, в которых нет классов, такой тип? Как предполагается его описывать?
              Цитата Ho Im @
              А бывает ли в сях, в которых нет классов, такой тип? Как предполагается его описывать?

              Ну, насколько мне известно, C-струкруты допускают объявление в своем теле функций. Это, конечно, не тоже самое, что функции члены в С++, но хоть какая-то замена оным.
                Цитата Flex Ferrum @
                А исходники boost'а - да. Это сильно и сложно. Но врядли сложнее ядра линукса. Точно также, как и для ядра, в команде буста есть свои правила и соглашения по оформлению исходных текстов, и в них есть своя внутренняя логика. Так что пример не совсем уместный.

                Я намекаю на то, что C++ порождает избыточно сложные синтаксические конструкции, которые для повторного чтения пригодны примерно как ассемблерный код. Я не имею претензий к отступам или форматированию в исходниках стандартной библиотеки C++ или boost'а, я имею претензии к читаемости этого кода, потому что какой-то аспект не будет освещен в документации, то куча времени уйдет на разборы вычурных языковых конструкций.
                  Да, на С++ задача мною успешно решена.

                  Добавлено
                  Цитата linuxfan @
                  Я намекаю на то, что C++ порождает избыточно сложные синтаксические конструкции, которые для повторного чтения пригодны примерно как ассемблерный код. Я не имею претензий к отступам или форматированию в исходниках стандартной библиотеки C++ или boost'а, я имею претензии к читаемости этого кода, потому что какой-то аспект не будет освещен в документации, то куча времени уйдет на разборы вычурных языковых конструкций.

                  Это с одной стороны. С другой - это слихвой покрывается удобностью использования результата. Кстати, если наши коллеги (Шад и Ho Im) приняли предложение - будет возможность сравнить результаты на С и С++ с его "избыточно сложными языковыми конструкциями".
                    Цитата
                    Ну, насколько мне известно, C-струкруты допускают объявление в своем теле функций.

                    Ну естессно, можно в структуре держать указатель на функцию сравнения, но некошерно это, если честно. И "стандартного, работающего для всех" решения быть, соответственно, не может. Давай мы еще наследование опишем на сях, да так, чтобы понятно было?

                    Смотрел в исходники мозиллы.

                    Там довольно интенсивно используется препроцессор.

                    Может, попробуем просветить ребят на предмет "использовать препроцессор в плюсовом проекте -- низко"? :D

                    Добавлено
                    Цитата
                    Кстати, если наши коллеги (Шад и Ho Im) приняли предложение

                    Я пас, меня в ближайшие дни ждет порно с исходниками мозиллы. Порт на xlib хочу попробовать поправить так, чтобы он хотя бы работал (сейчас он якобы работает, но не рисует ничего).
                      Цитата Ho Im @
                      Ну естессно, можно в структуре держать указатель на функцию сравнения, но некошерно это, если честно. И "стандартного, работающего для всех" решения быть, соответственно, не может. Давай мы еще наследование опишем на сях, да так, чтобы понятно было?

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

                        Нет. И я очень сильно хочу посмотреть на "чудака", который это будет писать на С.

                        Почему так? А просто. Давай ещё раз к идеологии. С очень хорош для решения задач в полностью определённых системах. Т.е., системах, где явно ясно какие типы мы используем. "Любые" к данному описанию не относится. В случае, скажем, int, char, float я просто напишу ф-ии для int, char и float и буду использовать их по месту. Но вот зачем мне иметь возможность (заметь -- не реальную необходимость, а именно возможность) этот код подладить под, скажем, double, если его в моей системе не использовалось, не используется и использоваться не будет?

                        Просто, для того, чтобы иметь "рычажок", за который можно дёрнуть? А зачем, если это выливается во что-то далёкое от "структурного программирования"? Зачем мне тратить на это время вообще, лишая попутно себя ряда полезных возможностей в части реализации? Flex, если честно, то мне это непонятно. Я не отрицаю ряда преимуществ С++, но помилуй -- не в ядре же, которе работает именно как полностью детерминированная система!

                        Добавлено
                        Цитата
                        Это с одной стороны. С другой - это слихвой покрывается удобностью использования результата. Кстати, если наши коллеги (Шад и Ho Im) приняли предложение - будет возможность сравнить результаты на С и С++ с его "избыточно сложными языковыми конструкциями".

                        Мы вернёмся к этому вопросу. Стопудов вернёмся. Но позже.
                          Цитата the_Shadow @
                          Почему так? А просто. Давай ещё раз к идеологии. С очень хорош для решения задач в полностью определённых системах. Т.е., системах, где явно ясно какие типы мы используем. "Любые" к данному описанию не относится. В случае, скажем, int, char, float я просто напишу ф-ии для int, char и float и буду использовать их по месту. Но вот зачем мне иметь возможность (заметь -- не реальную необходимость, а именно возможность) этот код подладить под, скажем, double, если его в моей системе не использовалось, не используется и использоваться не будет?

                          Вот смотри. (рассматривая с позиции С++). У меня (как у разработчика клиентского кода) есть три последовательности - массив int'ов, массив double'ов и массив std::string'ов. (заметь - полностью детерминированная система. Так?) Мне эти три последовательности надо отсортировать. Имею право на такое желание? Имею. Но вот незадача - скорость сортировки меня не совсем устраивает. Узкое место - в процедуре обмена значений. Следуя твоей логике, я должен написать три варианта функции сортировки для каждого из типа последовательностей. Так? Продолжая работать над кодом у меня появилось еще две последовательности - массив char'ов и массив структур MySuperPuperStructure. Может быть такое? Легко. Для каждого из вновь появившехся типов последовательностей заново писать алгоритм сортировки? А через месяц появится еще три типа последовательностей. Что мне делать, следуя предложенной тобою линии? Всякий раз переписывать функции сортировки? Али как?
                            Кхммм... :D:D:D

                            Цитата
                            У меня (как у разработчика последнего кода) есть три последовательности - массив int'ов, массив double'ов и массив std::string'ов. (заметь - полностью детерминированная система. Так?) Мне эти три последовательности надо отсортировать. Имею право на такое желание? Имею. Но вот незадача - скорость сортировки меня не совсем устраивает. Узкое место - в процедуре обмена значений. Следуя твоей логике, я должен написать три варианта функции сортировки для каждого из типа последовательностей. Так?

                            Так.

                            Цитата
                            Продолжая работать над кодом у меня появилось еще две последовательности - массив char'ов и массив структур MySuperPuperStructure. Может быть такое? Легко.

                            Нет. Докладную на "системного аналитика" на моё имя... Немедленно! :D:D:D
                            Цитата
                            Для каждой из вновь появившехся типов последовательностей заново писать алгоритм сортировки? А через месяц появится еще три типа последовательностей. Что мне делать, следуя предложенной тобою линии? Всякий раз переписывать функции сортировки? Али как?

                            В таком случае, да. Переписывать. И... докладные... докладные пожалуйста... :D:D:D

                            Это, извини меня, какой пассивный гомосексуалист так поставил задачу, что раз в месяц мы переопределяем исходные данные для системы? Кто так решил? Блин, Flex, уверяю тебя -- бардак не компьютеризируем в принципе. И, если мы постоянно меняем условия задачи, то в пень такого "постановщика задач" -- разжаловать в рядовые и сослать на Восточный фронт! :D:D:D
                              Цитата the_Shadow @
                              Это, извини меня, какой пассивный гомосексуалист так поставил задачу, что раз в месяц мы переопределяем исходные данные для системы? Кто так решил? Блин, Flex, уверяю тебя -- бардак не компьютеризируем в принципе. И, если мы постоянно меняем условия задачи, то в пень такого "постановщика задач" -- разжаловать в рядовые и сослать на Восточный фронт! :D:D:D

                              Ок. У меня изначально есть пятнадцать различных типов последовательностей. Уменьшить это число системный аналитик не смог.

                              Цитата the_Shadow @
                              В таком случае, да. Переписывать.

                              Зачем, если я могу сразу написать обощенный алгоритм сортировки и обмена, после чего использовать его в добром десятке проектов?
                                Цитата
                                Ок. У меня изначально есть пятнадцать различных типов последовательностей. Уменьшить это число системный аналитик не смог.

                                Ну и опиши их все... В чём проблема? В описании (реализации)? Я не говорил, что на С писать легко. Но, если разбить реализацию по функциям и по типам данных, ты поразишься как быстро дело пойдёт... :D:D:D
                                Если нет желания "развлекаться" с описанием каждого типа, то... Ну, в принципе, уговорил -- в качестве гимнастики для мозгов можно по-развлекаться... :D:D:D Хотя, это и противоречит "структурному программированию".

                                Цитата
                                Зачем, если я могу сразу написать обощенный алгоритм сортировки и обмена, после чего использовать его в добром десятке проектов?

                                Зачем, если у меня есть возможность создать динамические или статические библиотеки? И использовать их в том же "добром десятке"?
                                Или "недобрых" 15 проектах? :D:D:D
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (29) « Первая ... 6 7 [8] 9 10 ...  28 29


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0497 ]   [ 14 queries used ]   [ Generated: 19.09.25, 05:49 GMT ]