На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Закрыто kanes 17-02-2009: Введите причину закрытия темы здесь

Страницы: (1182) « Первая ... 49 50 [51] 52 53 ...  1181 1182  ( Перейти к последнему сообщению )  
> Windows vs Linux - Как десктоп , и игровая станция.
    Блин,
    "О сколько глюков е?анутых
    Готовит Microsoft'а дух...
    И опыт, сын ошибок трудных...
    И гений, OpenSource друг..."
    Fuck! Прикол...

    Ставлю MSDN со всей фигнёй... Решил послушать AC/DC. C винчестера... Запускаю Windows Media Player... Угу... Оно открывает... "Program Files" с CD-ROM... ЗАЧЕМ???

    Мдяяя.... Отвык я от мастдая... Будет весело... :D:D:D

    Добавлено
    Цитата
    Потери в скорости (в основном) определяются степенью кривизны рук прокладки между стулом и монитором.

    Угу. А накладных расходов на все эти "обёртки" отсутствуют? ;) Ведь, если посмотреть на тот же gcc, то там вначале всё приводится к виду RTTL (это такой псевдо-язык) и, только потом компилится (ассемблируется).

    Всё -- и Java и Ada и С++, но не С. С, как ни странно, ассемблируется напрямую.
      Цитата the_Shadow @
      Угу. А накладных расходов на все эти "обёртки" отсутствуют? ;)

      В большинстве случаев. :tong: Исключение составляют исключения, но и они сейчас очень хорошо оптимизируются :)
        Цитата
        Исключение составляют исключения, но и они сейчас очень хорошо оптимизируются :)

        Возможно. Но, как ни странно, на С можно (в Linux) писать от "модуля ядра" (не часто, но... извините, нужно бывает) и до игрушки с OpenGL (вообще-то не пишу этого...) или интерфейсной части к БД.

        А вот что я могу написать на С++? Всё то же, минус, "модули ядра"? Нууу... Ладно. А как быть с кодом для RTLINUX, который должен идти на ARM (до кучи)? Замечу -- если не поняли, то лучше промолчите... ;)

        Так что, бусты с STL'ами -- ЗДОРОВО! Но... Пардон, менее универсально. ;)
          Цитата the_Shadow @
          Так что, бусты с STL'ами -- ЗДОРОВО! Но... Пардон, менее универсально. ;)

          Но когда я вижу что-то наподобие вот этого:
          ExpandedWrap disabled
            void SomeFoo(const char* fileName, struct SomeStruct* data)
            {
            struct SomeHeader header;
            unsigned char* data1;
            unsigned char* data2;
             
            FILE* f = fopen(fileName, "rb");
            if (f == NULL)
               return;
             
            fread(&header, sizeof(header), 1, f);
            if (header.sign != FILE_SIGN)
            {
               fclose(f);
               return;
            }
             
            data1 = malloc(header.Data1Size);
            if (data1 == NULL)
            {
               fclose(f);
               return;
            }
             
            if (fread(data1, header.Data1Size, 1, f) != header.Data1)
            {
               free(data1);
               fclose(f);
               return;
            }
             
            data2 = malloc(header.Data2Size);
            if (data2 == NULL)
            {
               free(data1);
               fclose(f);
               return;
            }
             
            if (fread(data2, header.Data2Size, 1, f) != header.Data2)
            {
               free(data2);
               free(data1);
               fclose(f);
               return;
            }
             
            data->Data1 = data1;
            data->Data2 = data2;
            fclose(f);
            }


          мне хочется плакать... :'( Причем я не уверен, что даже при написании этого фрагмента кода я не забыл где-нибудь что-нибудь закрыть/освободить... :tong:

          Добавлено
          Цитата the_Shadow @
          Всё то же, минус, "модули ядра"?

          А что не позволяет писать модули ядра на С++?
            Цитата
            А что не позволяет писать модули ядра на С++?

            Ууууу! Атэээээээц! Да ты чё????

            У тебя для C++ нужно что? Правильно -- libg* (в т.ч. и для С++), а оно позволительно использовать только после загрузки системы. Полной. Опосля модулей.

            К тому же, код... Ну, даже если мы и исхитримся не использовать С++-specific функций или чего-то там ещё, то... Зачем? Это же С получится! :D:D:D

            Цитата
            Причем я не уверен, что даже при написании этого фрагмента кода я не забыл где-нибудь что-нибудь закрыть/освободить...

            Hint! В мире UNIX есть такая фича, как splint. Смело пользуйся! Тогда даже огрехи в части безопасности выловишь. :D:D:D

            Добавлено
            А они (огрехи в части безопасности) у тебя там есть (судя по виду)... ;)

            Добавлено
            Да, Flex, а как тебе первые два глюка? ;)
            Не хило так, а? Особенно с select() -- меня воткнуло и не отпускало минут пятнадцать... :D:D:D
            Интересно, какие теперь вопросы можно задавать по "сетевой секьюрности" виндовс и т.д. и т.п.? Если всё реализовано через /dev/ass? :D:D:D
              Цитата the_Shadow @
              Hint! В мире UNIX есть такая фича, как splint. Смело пользуйся! Тогда даже огрехи в части безопасности выловишь. :D:D:D

              Hint: в мире С++ этот фрагмент уместился бы в:
              ExpandedWrap disabled
                void SomeFoo(const char* fileName, SomeStruct& data)
                {
                std::ifstream f(fileName, std::ios::binary);
                if (!f.good())
                   return;
                 
                SomeHeader header;
                f.read((char*)&header, sizeof(header));
                if (f.gcount() != sizeof(header))
                   return;
                 
                if (header.sign != FILE_SIGN)
                   return;
                 
                boost::shared_array<unsigned char> data1(new unsigned char[header.Data1Size]);
                f.read((char*)data1.get(), header.Data1Size);
                if (f.gcount() != header.Data1Size)
                   return;
                 
                boost::shared_array<unsigned char> data2(new unsigned char[header.Data2Size]);
                f.read((char*)data2.get(), header.Data2Size);
                if (f.gcount() != header.Data2Size)
                   return;
                 
                data.data1 = data1.release();
                data.data2 = data2.release();
                }



              Цитата the_Shadow @
              У тебя для C++ нужно что? Правильно -- libg* (в т.ч. и для С++), а оно позволительно использовать только после загрузки системы. Полной. Опосля модулей.

              Покажи мне опции компиляции, с которыми ты обычно копиляешь модуль ядра. Просто интересно стало - смогу ли я хотя бы примитивный cpp-файл с такими опциями скомпилять?

              Добавлено
              Цитата the_Shadow @
              А они (огрехи в части безопасности) у тебя там есть (судя по виду)... ;)

              Ткни пальцем - очень интересно, где.
                Цитата
                Ткни пальцем - очень интересно, где.

                Как минимум (это навскидку):
                ExpandedWrap disabled
                  unsigned char* data1;
                  unsigned char* data2;

                На "срыв кучи" изволим нарываться? ;)

                Цитата
                Покажи мне опции компиляции, с которыми ты обычно копиляешь модуль ядра. Просто интересно стало - смогу ли я хотя бы примитивный cpp-файл с такими опциями скомпилять?

                Возможно, что сможешь, но вот будет ли он работать?
                А опции -- реальный Makefile:
                ExpandedWrap disabled
                  obj-m +=filename.o
                   
                  all:
                      make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
                  clean:
                      make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

                Сам С-модуль. Для теста. Он -- пустой. Т.е., просто модуль ядра для Linux 2.6.x. Для 2.4.х -- не подойдёт. Там несколько иная структура (сам удивлялся).
                ExpandedWrap disabled
                  #include <linux/module.h>
                  #include <linux/kernel.h>
                   
                  #define MODULE_AUTHOR "the_Shadow"
                  #define MODULE_DESC     "The silly module"
                   
                  static int __init init_module( void )
                  {
                   
                  return 0;
                  }
                   
                  static void __exit exit_module( void )
                  {
                  }
                   
                  module_init( init_module );
                  module_exit( exit_module );
                   
                  MODULE_LICENCE( "GPL" );
                  MODULE_AUTHOR( MODULE_AUTHOR );
                  MODULE_DESCRIPTION( MODULE_DESC );

                Хохмы ради рискни вызвать... ну, скажем, printf() в init_module()... :D:D:D
                Кстати, а где в Linux расположена printf()? В какой либе? :D:D:D

                Добавлено
                Все операции, предназначенные для работы с модулем, -- insmod, modprobe, rmmod, modinfo, короче, всё богатство с filename.ko будут работать "на ура". А вот как бы это на С++-то изваять? :D:D:D
                  Цитата the_Shadow @
                  Возможно, что сможешь, но вот будет ли он работать?
                  А опции -- реальный Makefile:

                  Я имел ввиду - что gcc на вход передается?

                  Добавлено
                  Цитата the_Shadow @
                  Хохмы ради рискни вызвать... ну, скажем, printf() в init_module()... :D:D:D

                  А зачем? Я и write спокойно попользовать могу :). Какой такой printf - лесом, лесом...

                  Добавлено
                  Цитата the_Shadow @
                  Как минимум (это навскидку):
                  unsigned char* data1;
                  unsigned char* data2;



                  На "срыв кучи" изволим нарываться? ;)

                  С чего ты взял? Читается не больше, чем было выделено памяти. Так что тут все чисто.
                    Цитата
                    Я имел ввиду - что gcc на вход передается?

                    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
                    :D:D:D
                    Это, извини, не совсем обычная программа. Это -- модуль. По сути дела (как оно и есть во многих UNIX-like системах) это -- разделяемая библиотека. Только несколько (как минимум) нестандартная... :D:D:D

                    А чего я rtlinux приплёл? Дык! В rtlinux все (я подчёркиваю -- все) программы (даже пользовательского уровня), суть "модули ядра". Извините, за приставочку "rt" платить приходится... Я же говорил -- за всё платить надо... :D:D:D
                      Цитата the_Shadow @
                      Это, извини, не совсем обычная программа. Это -- модуль. По сути дела (как оно и есть во многих UNIX-like системах) это -- разделяемая библиотека. Только несколько (как минимум) нестандартная... :D:D:D

                      И что? Ты мне скажи - как этот объектник с помощью gcc из c получить можно.
                        Цитата
                        А зачем? Я и write спокойно попользовать могу :). Какой такой printf - лесом, лесом...

                        Не-а... Не можешь. Поверь -- не можешь. :D:D:D Специально разработали для таких случаев макрос printk( KERN_INFO "Some fucked text!\n" )... :D:D:D

                        Цитата
                        С чего ты взял? Читается не больше, чем было выделено памяти. Так что тут все чисто.

                        А что мешает прочитать больше? :D:D:D
                        Уфффф... Flex, дал я тебе Slack, ещё и весь свой набор по исследованию кода выделю... Уговорил. :D:D:D

                        Добавлено
                        Цитата
                        И что? Ты мне скажи - как этот объектник с помощью gcc из c получить можно.

                        Короче так...
                        0. На машине должны быть сырцы ядра.
                        1. Делаем каталог.
                        2. В каталог кладём Makefile.
                        3. Там же делаем какой-нибудь filename.сc (ты ж его хотел...).
                        4. Делаем make (всё от рута!!!). build вызывается из каталога сырцов ядра.
                        5. Ловим ошибки.
                        6. Удаляем нафиг filename.cc, делаем filename.c, заливаем туда код из примера.
                        7. make.
                        8. Enjoy!
                        :D:D:D
                          Цитата the_Shadow @
                          Не-а... Не можешь. Поверь -- не можешь. :D:D:D Специально разработали для таких случаев макрос printk( KERN_INFO "Some fucked text!\n" )... :D:D:D

                          Да я лишь пример привел, что на crt-шных методах свет клином не сошелся :). Можно и POSIX и любые другие методы поюзать - лишь бы описаны были.

                          Цитата the_Shadow @
                          А что мешает прочитать больше?

                          То, что и для выделения и для чтения используется одно и тоже значение.

                          Добавлено
                          Цитата the_Shadow @
                          Короче так...
                          0. На машине должны быть сырцы ядра.
                          1. Делаем каталог.
                          2. В каталог кладём Makefile.
                          3. Там же делаем какой-нибудь filename.сc (ты ж его хотел...).
                          4. Делаем make (всё от рута!!!). build вызывается из каталога сырцов ядра.
                          5. Ловим ошибки.
                          6. Удаляем нафиг filename.cc, делаем filename.c, заливаем туда код из примера.
                          7. make.
                          8. Enjoy!
                          :D:D:D

                          Значится, не скоро я еще эту фишку смогу проверить... :(

                          Добавлено
                          Цитата the_Shadow @
                          4. Делаем make (всё от рута!!!). build вызывается из каталога сырцов ядра.
                          5. Ловим ошибки.

                          Кстати, выложи ошибки, которые вываливаются. Интересно - на что ругань идет.
                            Цитата
                            Значится, не скоро я еще эту фишку смогу проверить... :(

                            Хе-хе... Ну, как проверишь -- поймёшь.

                            Далее. А вот теперь сравните пустой модуль ядра для Linux с... аналогично пустым драйвером Windows. Кто-нибудь сможет, или мне ещё код запостить? :D:D:D

                            Добавлено
                            Цитата
                            Кстати, выложи ошибки, которые вываливаются. Интересно - на что ругань идет.

                            Ну, накидаю модуль на С++ -- выложу. Сейчас не до того -- к Зёме в Пампасы отправляюсь. Водофку дринкен... :D:D:D

                            Добавлено
                            Так, ладно, пока на другой машине, под M$, дефрага идёт...

                            Взял код (см. пример).
                            Ну, файл.сс вообще не приняла.
                            Переименовал в .с. Взяла. Оххххх! Fuck! Напутал в коде. Короче, код должен выглядеть так:
                            ExpandedWrap disabled
                              #include <linux/module.h>
                              #include <linux/kernel.h>
                               
                              #define MODULE_AUTH "the_Shadow"
                              #define MODULE_DESC "The silly module"
                               
                              static int __init init_test_module( void )
                              {
                               
                              return 0;
                              }
                               
                              static void __exit exit_test_module( void )
                              {
                              }
                               
                              module_init( init_test_module );
                              module_exit( exit_test_module );
                               
                              MODULE_LICENSE( "GPL" );
                              MODULE_AUTHOR( MODULE_AUTH );
                              MODULE_DESCRIPTION( MODULE_DESC );


                            Теперь, задаю в init_my_module() использование printf(). Да-да... Это -- "стандартный С", а ни как не С++... Но нам оно для теста надоть. Что будет в случае с С++ -- додумайте сами. Итак, пишу printf( "Hello world!\n" ); и, ясное дело, подстёгиваю -- #include <stdio.h>.
                            ExpandedWrap disabled
                              /home/owner/Projects/module_filename/filename.c:3:19: stdio.h: No such file or directory
                              /home/owner/Projects/module_filename/filename.c: In function `init_test_module':
                              /home/owner/Projects/module_filename/filename.c:10: warning: implicit declaration of function `printf'

                            Итак, комментарии?
                            Всё просто -- оно при компиляции, даже не ище стандартных библиотек. Ибо не загружаются они во время загрузки модулей. Кто-нибудь эксперименты продолжит?
                              Цитата the_Shadow @
                              Итак, комментарии?
                              Всё просто -- оно при компиляции, даже не ище стандартных библиотек. Ибо не загружаются они во время загрузки модулей. Кто-нибудь эксперименты продолжит?

                              Слухай, а полный вывод make'а можешь привести?
                                А он не многим длиннее... :D:D:D
                                Опущено только несколько строк, вовсе не указывающих на ошибки.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (1182) « Первая ... 49 50 [51] 52 53 ...  1181 1182
                                Закрыто kanes 17-02-2009: Введите причину закрытия темы здесь



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0800 ]   [ 15 queries used ]   [ Generated: 21.12.25, 04:02 GMT ]