На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (37) « Первая ... 3 4 [5] 6 7 ...  36 37  ( Перейти к последнему сообщению )  
> C vs C++ , Не опять а снова
    Цитата Qraizer @
    Я не представляю, почему классным специалистам, разбирающимся в ОС, соответствующих алгоритмах и пр., может захотеться в драйвере файловой системы, имея там одно-, двух-, и трёхмерные массивы указателей на файловые ноды, все их объявлять одного типа, и постоянно кастить.

    Я тоже не представляю. Возможно, так сложилось и никто просто не парится над этим. Возможно, это им зачем-то понадобилось, возможно эта часть кода была вообще сгенерирована и так было проще. Я же не знаю, о каком коде речь.
    Ты так говоришь, как будто на С++ говнокода меньше создают.

    Цитата
    Знаешь, я не знаю даже Cшников, которые хотя бы не поморщились, если б это увидели.

    Тем более не ясно, зачем ты это приводишь. Если сишникам не нравится твой пример, то непонятно, зачем ты его приводишь в качестве аргумента против языка?

    Цитата
    Если бы этот Cшный код писал плюсник...

    А может быть плюсник бы еще к этому говнокоду накрутил многоэтажных шаблонов, с кучей специализаций, чтоб не только отладчик сломать, но и сделать невменяемыми сообщения об ошибках? Скажешь, не видел такого ;) ? Если рассматриваешь говнокод одного языка, то рассматривай говнокод и другого.
    А вот еще посмотри, как гугл рекомендует использовать С++, посмотри на код хромиума и пр. Не думаю, что тебе понравится. Но это такое же следствие неоправданной чрезмерной сложности С++, как и полный отказ от С++.

    Добавлено
    Цитата UncleBob @
    Цитата D_KEY @
    Это не часть сишного рантайма

    Ну просто когда предлагают сишную конструкцию switch заменить на что-то не сишное, это странно, нет?

    Я не знаю, о чем ты. Но хэш-таблица - это структура данных такая.
      Цитата korvin @
      Ничего полезного.

      В том проекте, который я описал использование ООП как раз таки много чего даст.

      Цитата korvin @
      Почему бы не заюзать хеш-таблицу тип->процедура?

      Ну это явно дороже чем текущая реализация. И зачем если все типы известны в compile-time?
        Цитата korvin @
        Ничего полезного.

        Что же такого плохого в динамическом субтипировании? Опять вспомнишь про переопределение методов? :)
        И вообще, что предлагается взамен?
        Цитата korvin @
        Почему бы не заюзать хеш-таблицу тип->процедура?

        switch чаще всего заменяется на иерархию с виртуальными функциями. Аналогичная поделка на сишечке будет ужасна.
        Цитата D_KEY @
        На С++ он не пишет. Как он пишет на сях, ты можешь посмотреть, например, в сырцах git'а.

        А ты уверен, что там его код ещё остался?
          Цитата D_KEY @
          Но хэш-таблица - это структура данных такая.

          Я про ее имплементацию. Она ложится на плечи С программиста?
            Цитата D_KEY @
            А вот еще посмотри, как гугл рекомендует использовать С++

            Да дебилы они.
              Цитата MyNameIsIgor @
              Цитата D_KEY @
              А вот еще посмотри, как гугл рекомендует использовать С++

              Да дебилы они.

              Они просто хотят иметь возможность развивать проекты без длительного поиска/обучения людей, знающих кучу нюансов С++, которые для решения задачи, в общем-то, не нужны(если несколько подрезать язык). Это практично.
              А есть, например, Facebook с Александреску, где С++ юзается во всей красе, насколько я понимаю. Это мне нравится больше, но и гугл я не осуждаю... Тем более, что не только гугл вводит подобные ограничения.

              Добавлено
              Цитата UncleBob @
              Я про ее имплементацию. Она ложится на плечи С программиста?

              Да. Ты не поверишь, но и связный список нужно делать руками(как и поступают большинство сишных открытых проектов). Библиотеки есть(glib, например) или просто набор макросов из sys/queue.h, но многие проекты используют свои велосипеды. Но это вполне может быт оправдано, поскольку знание специфики проекта позволяет сделать более оптимальную реализацию, без изучения сложных правил специализации поведения в обобщенных библиотеках. Тут немного другая философия. И да, в С++ до нового стандарта тоже не было хэш-таблиц в стандартной библиотеке.
                Цитата D_KEY @
                Да. Ты не поверишь, но и связный список нужно делать руками(как и поступают большинство сишных открытых проектов). Библиотеки есть(glib, например) или просто набор макросов из sys/queue.h, но многие проекты используют свои велосипеды. Но это вполне может быт оправдано, поскольку знание специфики проекта позволяет сделать более оптимальную реализацию, без изучения сложных правил специализации поведения в обобщенных библиотеках. Тут немного другая философия. И да, в С++ до нового стандарта тоже не было хэш-таблиц в стандартной библиотеке.

                То есть мы садимся и торжественно пишем, пишем, пишем... И на выходе получаем приложение и... какое-то подобие STL? зато все на С.
                  Цитата UncleBob @
                  То есть мы садимся и торжественно пишем, пишем, пишем... И на выходе получаем приложение и... какое-то подобие STL? зато все на С.

                  Если тебе нужно какое-то подобие STL, ты берешь готовую библиотеку(в том числе просто gnu libc, там много что есть, хэши тоже вроде были).
                  А так у тебя будут зависимые от задачи структуры данных. Такие, например.

                  Добавлено
                  А вот там и хэши :D
                    А вот в nginx

                    Скрытый текст
                    ExpandedWrap disabled
                      /*
                       * Copyright (C) Igor Sysoev
                       * Copyright (C) Nginx, Inc.
                       */
                       
                       
                      #ifndef _NGX_HASH_H_INCLUDED_
                      #define _NGX_HASH_H_INCLUDED_
                       
                       
                      #include <ngx_config.h>
                      #include <ngx_core.h>
                       
                       
                      typedef struct {
                          void             *value;
                          u_short           len;
                          u_char            name[1];
                      } ngx_hash_elt_t;
                       
                       
                      typedef struct {
                          ngx_hash_elt_t  **buckets;
                          ngx_uint_t        size;
                      } ngx_hash_t;
                       
                       
                      typedef struct {
                          ngx_hash_t        hash;
                          void             *value;
                      } ngx_hash_wildcard_t;
                       
                       
                      typedef struct {
                          ngx_str_t         key;
                          ngx_uint_t        key_hash;
                          void             *value;
                      } ngx_hash_key_t;
                       
                       
                      typedef ngx_uint_t (*ngx_hash_key_pt) (u_char *data, size_t len);
                       
                       
                      typedef struct {
                          ngx_hash_t            hash;
                          ngx_hash_wildcard_t  *wc_head;
                          ngx_hash_wildcard_t  *wc_tail;
                      } ngx_hash_combined_t;
                       
                       
                      typedef struct {
                          ngx_hash_t       *hash;
                          ngx_hash_key_pt   key;
                       
                          ngx_uint_t        max_size;
                          ngx_uint_t        bucket_size;
                       
                          char             *name;
                          ngx_pool_t       *pool;
                          ngx_pool_t       *temp_pool;
                      } ngx_hash_init_t;
                       
                       
                      #define NGX_HASH_SMALL            1
                      #define NGX_HASH_LARGE            2
                       
                      #define NGX_HASH_LARGE_ASIZE      16384
                      #define NGX_HASH_LARGE_HSIZE      10007
                       
                      #define NGX_HASH_WILDCARD_KEY     1
                      #define NGX_HASH_READONLY_KEY     2
                       
                       
                      typedef struct {
                          ngx_uint_t        hsize;
                       
                          ngx_pool_t       *pool;
                          ngx_pool_t       *temp_pool;
                       
                          ngx_array_t       keys;
                          ngx_array_t      *keys_hash;
                       
                          ngx_array_t       dns_wc_head;
                          ngx_array_t      *dns_wc_head_hash;
                       
                          ngx_array_t       dns_wc_tail;
                          ngx_array_t      *dns_wc_tail_hash;
                      } ngx_hash_keys_arrays_t;
                       
                       
                      typedef struct {
                          ngx_uint_t        hash;
                          ngx_str_t         key;
                          ngx_str_t         value;
                          u_char           *lowcase_key;
                      } ngx_table_elt_t;
                       
                       
                      void *ngx_hash_find(ngx_hash_t *hash, ngx_uint_t key, u_char *name, size_t len);
                      void *ngx_hash_find_wc_head(ngx_hash_wildcard_t *hwc, u_char *name, size_t len);
                      void *ngx_hash_find_wc_tail(ngx_hash_wildcard_t *hwc, u_char *name, size_t len);
                      void *ngx_hash_find_combined(ngx_hash_combined_t *hash, ngx_uint_t key,
                          u_char *name, size_t len);
                       
                      ngx_int_t ngx_hash_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names,
                          ngx_uint_t nelts);
                      ngx_int_t ngx_hash_wildcard_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names,
                          ngx_uint_t nelts);
                       
                      #define ngx_hash(key, c)   ((ngx_uint_t) key * 31 + c)
                      ngx_uint_t ngx_hash_key(u_char *data, size_t len);
                      ngx_uint_t ngx_hash_key_lc(u_char *data, size_t len);
                      ngx_uint_t ngx_hash_strlow(u_char *dst, u_char *src, size_t n);
                       
                       
                      ngx_int_t ngx_hash_keys_array_init(ngx_hash_keys_arrays_t *ha, ngx_uint_t type);
                      ngx_int_t ngx_hash_add_key(ngx_hash_keys_arrays_t *ha, ngx_str_t *key,
                          void *value, ngx_uint_t flags);
                       
                       
                      #endif /* _NGX_HASH_H_INCLUDED_ */
                      Теперь я спокоен за С разработчиков :good:
                        Ну у меня тоже своя есть thread-safe хэш таблица. Велосипед короче.
                          Цитата UncleBob @
                          Теперь я спокоен за С разработчиков :good:

                          Ну вот смотри, в nginx-реализации есть пул для выделения памяти(что для nginx достаточно важно, ибо благодаря разумной системы пулов памяти он кушает очень мало), еще какие-то wildcard'ы и пр. Начнешь это делать с использованием std::unordered_map, сильно меньше ли кода получишь? А насколько код будет менее запутанным? И самое главное - много ли тебе unordered_map даст?
                            D_KEY, да я чо, спорю?
                              Цитата D_KEY @
                              Они просто хотят иметь возможность развивать проекты без длительного поиска/обучения людей, знающих кучу нюансов С++, которые для решения задачи, в общем-то, не нужны

                              Ты это придумал и пруфа не покажешь.
                                Цитата MyNameIsIgor @
                                Ты это придумал и пруфа не покажешь.

                                Хм. Ну да, "дебилы" - лучшее объяснение :D
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (37) « Первая ... 3 4 [5] 6 7 ...  36 37


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0432 ]   [ 14 queries used ]   [ Generated: 18.05.24, 08:01 GMT ]