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

    Не вижу особой перемоги в замене <> на []. Кстати, если в скалке стали использовать функций для массивов, в плюсах можно сделать так же
    ExpandedWrap disabled
      map<int (unsigned short, char, std::string)>

    Реализация
    ExpandedWrap disabled
      namespace detail
      {
          template<class T>
          struct meta_map;
       
          template<class V, class K>
          struct meta_map<V (K)>
          {
              using type = std::map<K, V>;
          };
       
          template<class V, class K, class... Keys>
          struct meta_map<V (K, Keys...)>
          {
              using type = std::map<K, typename meta_map<V (Keys...)>::type>;
          };
      }
       
      template<class T>
      using map = typename detail::meta_map<T>::type;
      Цитата D_KEY @
      Иначе так и неясно кто на ком стоял и зачем.
      В D все прозрачно: все что слева стоит на том что справа. Ну и при желании можно сделать так:
      ExpandedWrap disabled
        Map!(int, string, char, ushort) data;
        data[a, b, c] = 10;
        Цитата MyNameIsIgor @
        Не вижу особой перемоги в замене <> на [].

        Ну на мой взгляд [] читаются легче. Это же субъективно все.

        Цитата
        Кстати, если в скалке стали использовать функций для массивов, в плюсах можно сделать так же
        ExpandedWrap disabled
          map<int (unsigned short, char, std::string)>


        Неплохо. Но тут все будет именно map'ом. А в общем случае можно хотеть мапу на деревьях, а можно на каком-то уровне захотеть хеш.
          Цитата D_KEY @
          Но тут все будет именно map'ом. А в общем случае можно хотеть мапу на деревьях, а можно на каком-то уровне захотеть хеш.

          Так делов то?
          ExpandedWrap disabled
            namespace detail
            {
                template<class T, template<class...> class M>
                struct meta_map;
             
                template<class V, template<class...> class M>
                struct meta_map<V (), M>
                {
                    using type = V;
                };
             
                template<class V, class K, class... Keys, template<class...> class M>
                struct meta_map<V (K, Keys...), M>
                {
                    using type = M<K, typename meta_map<V (Keys...), M>::type>;
                };
            }
             
            template<template<class...> class M, class T>
            using map = typename detail::meta_map<T, M>::type;
             
            map<std::unordered_map, int (unsigned short, char, std::string)> m;
            Не, я хочу на разных уровнях разные контейнеры.

            Добавлено
            Цитата applegame @
            Цитата D_KEY @
            Иначе так и неясно кто на ком стоял и зачем.
            В D все прозрачно: все что слева стоит на том что справа

            А зачем он там стоит и какая логика за этим? Тайпдефы не только сокращают объявления, они ещё и позволяют уточнять смысл.
              Цитата D_KEY @
              Не, я хочу на разных уровнях разные контейнеры.

              Ну, сам сделаешь? :D
                Цитата D_KEY @
                А зачем он там стоит и какая логика за этим? Тайпдефы не только сокращают объявления, они ещё и позволяют уточнять смысл.
                Он нужен если ты этот тип используешь много раз, а городить тайпдеф ради одного объявления - маразм.
                  Цитата applegame @
                  Цитата D_KEY @
                  А зачем он там стоит и какая логика за этим? Тайпдефы не только сокращают объявления, они ещё и позволяют уточнять смысл.
                  Он нужен если ты этот тип используешь много раз, а городить тайпдеф ради одного объявления - маразм.

                  А вот это вот в реальном коде не маразм?
                  ExpandedWrap disabled
                    int[string][char][ushort] data;


                  Добавлено
                  Цитата MyNameIsIgor @
                  Цитата D_KEY @
                  Не, я хочу на разных уровнях разные контейнеры.

                  Ну, сам сделаешь? :D

                  Ну вот чтоб синтаксис нормальным был не сделаю :(

                  Мне вариант с вложенными типами нравится больше. И [] нравится больше <>.

                  Вкусовщину обсуждаем, дожили.
                    Ну, отец-основатель рассказывал, что [] тоже рассматривались, но в конечном итоге были отвергнуты из-за высокой вероятности синтаксических коллизий. Поэтому был выбран новый тип скобок <> вместо придания новой роли []. К слову, с [] возникли бы сложности со специализациями, хотя когда рассматривался вопрос о виде скобок, о специализациях ещё не думали, до них было ещё далеко.

                    Добавлено
                    Или это был не отец-основатель, а кто-то из EDG?.. Что-то подзабыл уже.
                      Цитата D_KEY @
                      А вот это вот в реальном коде не маразм?
                      ExpandedWrap disabled
                        int[string][char][ushort] data;

                      Нет, а в чем проблема?
                      Какой-нибудь int[][] тебе тоже кажется маразмом, или int[5][5]?
                      В D можно и так
                      ExpandedWrap disabled
                        int[5][string][] data;

                      И тут тоже все понятно. Массив ассоциативных массивов содержащих статические массивы по пять элементов типа int каждый.
                      Сообщение отредактировано: applegame -
                        Цитата applegame @
                        Цитата D_KEY @
                        А вот это вот в реальном коде не маразм?
                        ExpandedWrap disabled
                          int[string][char][ushort] data;

                        Нет, а в чем проблема?

                        Да не, все прекрасно, начиная от великолепного и понятного названия переменной, заканчивая говорящим описанием типа.

                        Добавлено
                        Цитата applegame @
                        В D можно и так
                        ExpandedWrap disabled
                          int[5][string][] data;

                        Ну все, перехожу на D.

                        Цитата
                        И тут тоже все понятно.

                        Оно может и понятно, но смотрится и читается плохо. Сишные определения тоже понятны, если правила знаешь.

                        Цитата
                        Массив ассоциативных массивов содержащих статические массивы по пять элементов типа int каждый.

                        Мне это очевидным не было.

                        Добавлено
                        Цитата applegame @
                        Массив ассоциативных массивов содержащих статические массивы по пять элементов типа int каждый.

                        ExpandedWrap disabled
                          vector[map[string, array[int, 5]]]


                        А если совсем пофантазировать, то это можно было бы как-то так записать:
                        ExpandedWrap disabled
                          [string->[int:5]]
                          Цитата D_KEY @
                          Его проблема в том, скорее всего, придётся отказаться от оператора [](как и пришлось в scala), а это тоже неудобно.

                          Я почти не знаком со Scala, поэтому не могу с ходу вообразить ситуацию, когда оператор [] будет конфликтовать с использованием [] для параметризации типа. Вот в D же параметры типа задаются в () и это не конфликтует с оператором () вызова процедуры. Да и в C++ же решили проблему >>? Т.е., ИМХО, это чисто скалопроблемы.

                          Добавлено
                          Цитата applegame @
                          И тут тоже все понятно. Массив ассоциативных массивов содержащих статические массивы по пять элементов типа int каждый.

                          А смысловая нагрузка у этого массива? Ассоциаци там чего с чем? Рандомных строк с рандомными наборами из пяти рандомных чисел? Почему пяти, а не трёх, не восьми?
                            Цитата D_KEY @
                            Да не, все прекрасно, начиная от великолепного и понятного названия переменной, заканчивая говорящим описанием типа.
                            Ой, давай еще к шрифту и цвету придерись. название переменной ему не понравилось... Давай еще поговорим о понятности наших ников. Тип вполне говорящий, описывается очень легко: V[K].
                            Цитата D_KEY @
                            Оно может и понятно, но смотрится и читается плохо. Сишные определения тоже понятны, если правила знаешь.
                            В D правил особых нет. Все следует одно из другого. Если тип значения тоже ассоциативный массив, то просто подставь его описание вместо V: V[K1][K2] - или просто двумерный ассоциативный массив.
                            Цитата D_KEY @
                            ExpandedWrap disabled
                              vector[map[string, array[int, 5]]]
                            О да, тут все читабельно, сразу видно где тут типы ключей, а где типы значений.
                            map[A, B] - двумерный массив? Неее, это ассоциативный массив, у которого ключ - это A, а B - значение.
                            А если мне нужен ассоциативный массив по двум ключам, это будет map[A1, A2, B]? Нее, map[A1, map[A2, B]].
                            А обращаться к элементам, значит нужно вот так - var[A1[A2]]? Неее - var[A1][A2].
                            А почему при объявлении скобки вложены, а при обращении нет? Потому что гладиолус.

                            array[int, 5] - двумерный массив? Неее, это одномерный массив фиксированного размера 5.
                            А как будет двумерный массив, array[int, 5, 5]? Неее, вот так - array[array[int, 5], 5].
                            А обращаться к его элментам, значит нужно вот так - var[2[2]]? Неее - var[2][2].
                            А почему при объявлении скобки вложены, а при обращении нет? Потому что гладиолус.

                            Цитата D_KEY @
                            [string->[int:5]]
                            Тут вообще все сразу понятно: массив функций с одним параметром типа string и возвращаемым значением... эм... какого-то типа.

                            Добавлено
                            Цитата korvin @
                            А смысловая нагрузка у этого массива? Ассоциаци там чего с чем? Рандомных строк с рандомными наборами из пяти рандомных чисел? Почему пяти, а не трёх, не восьми?
                            ИМХО, не об этом речь.

                            Если хочется сделай так:
                            ExpandedWrap disabled
                              alias Chapter = string;
                              alias Part = uint;
                              alias Line = ushort;
                              struct Words {
                              ...
                              }
                              Words[Line][Part][Chapter] content;
                              auto w = content["Main"][2][10];
                              Цитата applegame @
                              Цитата D_KEY @
                              Да не, все прекрасно, начиная от великолепного и понятного названия переменной, заканчивая говорящим описанием типа.
                              Ой, давай еще к шрифту и цвету придерись.

                              Каким боком тут шрифт и цвет? Я же специально уточнил про реальный код. Тут смысловую нагрузку не несут ни тип, ни переменная.

                              Цитата
                              Тип вполне говорящий, описывается очень легко: V[K].

                              Ну мапишь ты K на V. А зачем?

                              Цитата
                              Если тип значения тоже ассоциативный массив, то просто подставь его описание вместо V: V[K1][K2] - или просто двумерный ассоциативный массив.

                              Ну а мне это не нравится. Я привык, чтобы сначала был ключ, а потом значение. Так удобнее читать.

                              Цитата
                              Цитата D_KEY @
                              ExpandedWrap disabled
                                vector[map[string, array[int, 5]]]
                              О да, тут все читабельно

                              Да. Все прямо как ты сказал:
                              Цитата
                              Массив ассоциативных массивов со строковым ключем содержащих статические массивы по пять элементов типа int каждый.

                              Ну дословно же.

                              Цитата
                              map[A, B] - двумерный массив?

                              С какой стати это должен быть двумерный массив? Если ты не понял, то [] тут вместо плюсовых <>.

                              Цитата
                              А если мне нужен ассоциативный массив по двум ключам

                              Что это такое? Я думаю, что ты понимаешь, что у тебя ассоциативный массив с K1 и значениями в виде других ассоциативных массивов с ключем K2 и значением V.

                              Цитата
                              это будет map[A1, A2, B]? Нее, map[A1, map[A2, B]].

                              :crazy:

                              Цитата
                              А обращаться к элементам, значит нужно вот так - var[A1[A2]]? Неее - var[A1][A2].

                              Скорее всего var(A1)(A2). По крайней мере в Scala пришлось сделать так. Не уверен, что это лучший вариант. Но [] для дженериков мне нравятся больше <>.

                              Цитата
                              А почему при объявлении скобки вложены, а при обращении нет? Потому что гладиолус.

                              Что? А почему тут вообще должна быть какая-то связь? Есть описание типов, а есть разные операторы.
                              Цитата

                              Если хочется сделай так:
                              ExpandedWrap disabled
                                alias Chapter = string;
                                alias Part = uint;
                                alias Line = ushort;
                                struct Words {
                                ...
                                }
                                Words[Line][Part][Chapter] content;

                              Ну мне вот не хочется :) Тем более, что на самом деле все наоборот. Мы же не на арабском пишем, почему я должен читать справа налево?

                              Цитата
                              ExpandedWrap disabled
                                auto w = content["Main"][2][10];

                              А вот это вполне годно.
                                В сишных объявлениях и то больше логики, там по крайней мере как пишем, так и используем. А тут все наоборот:

                                Объявляем
                                ExpandedWrap disabled
                                  Words[Line][Part][Chapter] content

                                А используем:
                                ExpandedWrap disabled
                                  content[chapter_n][part_n][line_n]

                                Все логично и понятно :D
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (56) « Первая ... 36 37 [38] 39 40 ...  55 56


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0887 ]   [ 15 queries used ]   [ Generated: 7.05.24, 18:18 GMT ]