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

    Они будут на самом верхнем уровне. А теперь представляем, что у нас там дерево.
      Цитата MyNameIsIgor @
      Цитата applegame @
      Низкое потребление памяти - следствие потокового парсинга с обработкой данных на лету, без запоминания результатов парсинга. Обработчики не имеют к этому прямого отношения. Аналогичное поведение можно сделать с помощью ленивых итераторов или ренджей.

      Они будут на самом верхнем уровне. А теперь представляем, что у нас там дерево.

      Если дерево, то обработчики в том или ином виде будут присутствовать, это да. Но деревья как правило парсятся целиком, а в этом случае проще создать структуру с нужными полями и метаданными задать особые случаи (опциональность и т.п.), чем городить обработчики токенов.
        Цитата applegame @
        Если дерево, то обработчики в том или ином виде будут присутствовать, это да. Но деревья как правило парсятся целиком

        Как правило вообще всё парсят целиком и не имеют проблем. Я говорю о тех случаях, когда проблемы возникнуть могут.
        Цитата applegame @
        чем городить обработчики токенов

        Я и не хочу обрабатывать токены. Я хочу реагировать на свойства так же, как внутри себя реагирует этот парсер на D, только делать это по событийной модели с обратными вызовами.
          Цитата MyNameIsIgor @
          Цитата applegame @
          чем городить обработчики токенов

          Я и не хочу обрабатывать токены. Я хочу реагировать на свойства так же, как внутри себя реагирует этот парсер на D, только делать это по событийной модели с обратными вызовами.

          А зачем событийная модель? Просто нравится такой подход, и/или потому что на плюсах иначе не сделаешь?
          Сообщение отредактировано: applegame -
            Цитата applegame @
            А зачем событийная модель?

            Говорю же - из-за потребления памяти. Если уж мы в сотых долях секунды соревнуемся, то сотнями мегабайт раскидываться некрасиво.
            Цитата applegame @
            Просто нравится такой подход, и/или потому что на плюсах иначе не сделаешь?

            На C++ не сделать просто так рефлексию. А так ничего не мешает сделать, например, так
            ExpandedWrap disabled
              auto coords = json["coordinates"].read<Coord[]>({"x", &Coord::x}, {"y", &Coord::y}, {"z", &Coord::z});
            Сообщение отредактировано: MyNameIsIgor -
              Цитата applegame @
              Если не можем обогнать, скажем, что это просто не нужно :lool:

              "Если не можем привлечь чем-то полезным, будем кричать о размере." :lool:

              Цитата applegame @
              На самом деле другим еще как упало, народ возбудился и начал реагировать, например тот самый С++ RapidJSON SAX бенчмарк пояаился буквально вчера.

              Да-да, мужики любят меряться, а толку? Никто не станет из-за этого менять язык, парсинг JSON далеко не самое узкое место в вебсервисе.

              Цитата applegame @
              Ну это явная ложь. DMD ставится на линупс, макось и винду не сложнее чем Go. Качается бинарный пакет и устанавливается стандартными средствами OS. Для винды это обычный exe-установщик. GDC и LDC - это да на винду поставить еще тот гемор.

              Вот только в этом супер-пупер бенчмарке победил GDC, а DMD выдаёт обычный тормозной код. Ты ж читал тему на ЛОРе.
                Цитата korvin @
                "Если не можем привлечь чем-то полезным, будем кричать о размере." :lool:
                Полезность вопрос спорный, кому полезно, кому нет, а вот размер - вопрос бесспорный. :P
                Цитата korvin @
                Да-да, мужики любят меряться, а толку? Никто не станет из-за этого менять язык, парсинг JSON далеко не самое узкое место в вебсервисе.
                Да-да толку нет, поэтому бенчмарки по любому поводу встречаются на каждом углу. Факт, по существу тебе сказать-то и нечего.
                Кроме того, писькомерство часто заставляет мужиков совершенствоваться. Вон глядишь MyNameIsIgor напишет свой парсер JSON, который переможет всех, попутно исследовав интересные технологии программирования.
                Цитата korvin @
                Вот только в этом супер-пупер бенчмарке победил GDC, а DMD выдаёт обычный тормозной код. Ты ж читал тему на ЛОРе.
                Дык и бенч победил в линупсе, а не в винде. В бубунте gdc - один из стандартных пакетов и устанавливается не сложнее g++. Но какое это имеет отношение к этому
                Цитата korvin @
                Зато компилятор Go установить на винду (и, возможно, на осх) значительно проще, чем любой из трёх D'шных. =)

                ошибочному высказыванию? Или ты один из тех, у кого не хватает смелости признаться в своей ошибке?
                Кстати, моя инфа тоже устарела, на данный момент GDC на базе mingw работает и под Win, также как и LDC на базе MSVC. Бинарные уже скомпилированные пакеты доступны к загрузке на соответствующих сайтах.
                У DMD кодеген говно, но зато он быстро компилирует. Самое смешное, что у Go, который ты тут привел в качестве примера, ситуация ровно такая же. Родной компилятор Go от гугла сильно уступает по качеству сгенеренного кода компилятору gccgo, который, на винду ставится еще геморнее, чем gdc. Но при этом также как и DMD является референсным компилятором и компилирует гораздо быстрее, чем мощные оптимизирующие собратья.

                Не, korvin, троллинг у тебя явно на этот раз не удался, слишком толстый. Брось ты это дело.
                Сообщение отредактировано: applegame -
                  Там перемога за счёт языковых фич или за счёт каких-то особенностей реализации парсера? Если последнее, то хз при чем тут язык и холивар.
                    Цитата D_KEY @
                    Там перемога за счёт языковых фич или за счёт каких-то особенностей реализации парсера? Если последнее, то хз при чем тут язык и холивар.
                    И то и другое.
                    Но сам твой вопрос несовсем корректен, поэтому мой ответ неточен.
                    Вот что автор сам немного пишет об особенностях реализации - https://github.com/kostya/benchmarks/pull/4...mment-147932489
                    Читай и сам решай.
                    Сообщение отредактировано: applegame -
                      applegame, а ты прочёл? На C++ можно реализовать так же?
                        Цитата D_KEY @
                        applegame, а ты прочёл? На C++ можно реализовать так же?

                        Там используется рефлексия и CTFE, первое в C++ отсутствует, а второе сильно ограничено. Кроме того там используются некоторые возможности шаблонов, отсутствующие в C++, для реализации удобного API.
                        Поэтому так же не получится, но похожим образом, полагаю, можно.
                        Ассемблерные вставки, на которые тыкают некоторые на лоре, на самом деле всего лишь работа с SSE. Причем они завернуты в условную компиляцию, поэтому на платформах не поддерживающих SSE, парсер работать будет, но не так быстро.
                          Цитата applegame @
                          Поэтому так же не получится, но похожим образом, полагаю, можно.

                          Т.е. похоливарить-то не о чем?
                            Цитата applegame @
                            CTFE, первое в C++ отсутствует, а второе сильно ограничено. Кроме того там используются некоторые возможности шаблонов, отсутствующие в C++, для реализации удобного API

                            Подробнее - что такого дало CTFE, и что за отсутствующие возможности шаблонов?
                            Сообщение отредактировано: MyNameIsIgor -
                              Цитата D_KEY @
                              Т.е. похоливарить-то не о чем?
                              Ну а как ты хотел? Все что угодно реализованное на языке X можно похожим образом сделать на языке Y. Но, похоливарить действительно особо не о чем. Просто для информации, как можно с пользой применить некоторые особенности D.
                              Цитата MyNameIsIgor @
                              Подробнее - что такого дало CTFE, и что за отсутствующие возможности шаблонов?
                              Например передача строки в качестве параметра шаблона (название поля) или уже упомянутый форвардинг функций через opDispatch. Насчет CTFE, я похоже погорячился, buildRemapTable, которая по сути и занимается рефлексией (разбором структуры), все же не обычная функция (хотя и могла бы быть таковой), а шаблон, но тем не менее она возвращает CT-константу - список строк, что опять же невозможно в C++. Или возможно?
                                Цитата applegame @
                                Например передача строки в качестве параметра шаблона (название поля)

                                И почему её надо передавать именно параметром шаблона?
                                Цитата applegame @
                                Насчет CTFE, я похоже погорячился, buildRemapTable, которая по сути и занимается рефлексией (разбором структуры), все же не обычная функция (хотя и могла бы быть таковой), а шаблон, но тем не менее она возвращает CT-константу - список строк, что опять же невозможно в C++. Или возможно?

                                Ну, с constexpr функция есть такая сложность, что динамическое выделение памяти невозможно, потому нельзя приемлемым способом вернуть список, который по длине и хранимым значениям будет зависеть от переданного в функцию аргумента. Но это можно сделать в зависимости от шаблонного аргумента constexpr функции. Потому камнем преткновения остаётся рефлексия. Если пофантазировать, что предложение комитету уже где-то реализовано, то там такое возможно.
                                Цитата applegame @
                                форвардинг функций через opDispatch

                                Ценность это фичи вообще не могу оценить. В чём смысл, если компилятор всё равно ничего проверить не в состоянии? И что делать, если мне надо обратиться по имени свойства, полученному во время исполнения?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (56) « Первая ... 22 23 [24] 25 26 ...  55 56


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0698 ]   [ 15 queries used ]   [ Generated: 19.06.25, 17:49 GMT ]