1. Куча / Говнокод #14380

    +125

    1. 1
    http://coliru.stacked-crooked.com/a/a5ba510a2075393f

    Под другим ником опубликовал чуть раньше:
    http://govnokod.ru/12937

    Запостил: crastinus, 18 Января 2014

    Комментарии (42) RSS

    • Поясню, раз всем без разницы.
      Сначала думал, что bormand это левша в программировании, раз смог засунуть boost::bind в грамматику boost::spirit. А, судя по комментарию http://govnokod.ru/12937#comment175990, еще и boost::phoenix::arg1 засунул в boost::bind, но затем пришел катарсис, и я чуть пофиксил на то, что должно быть.
      Но главный вопрос: зачем создавать функтор с помощью boost::spirit. Идея, конечно, местами хорошая, но зачем?
      P.S.: Время компиляции примера 40с на моей машине.
      Ответить
      • > зачем создавать функтор с помощью boost::spirit
        А как еще поступить, если эти предикаты описываются в конфиге? Не вкомпиливать же их.

        Спирт был выбран только по одной причине - хотелось попробовать поюзать спирт. С тем же успехом я мог и сабстрингом распарсить строку и собрать по ней функтор ;)
        Ответить
        • >С тем же успехом я мог и сабстрингом распарсить строку и собрать по ней функтор
          Так лучше, раз только конфиг нужно спарсить. Спирит для требовательных по времени задач.
          Можешь сказать, что находится в object?
          Ответить
          • > Спирит для требовательных по времени задач.
            Для нетребовательных?

            > Можешь сказать, что находится в object?
            > В чем суть твоего кода? Можно в конфиге написать функцию на бормандС++?

            object - хрень-со-свойствами, базовая сущность того игрового сервера, на который я давным-давно забил...

            Эти предикаты писались в ресурсных файлах и использовались для переключения картинок и анимашек: например при истинности предиката "hp < 10" ящик показывался треснутым, а анимация горящего костра включалась по предикату "burning". В результате эта херня давала какую-никакую развязку между "моделью" (карта, на которой расставлены object'ы) и "видом" (поток дельта-фреймов для клиента).
            Ответить
            • Описание "класса" объекта в конфигурашке было примерно таким (достойно отдельного ГК):
              [{
                "name": "drying_frame",
                "behaviors": [{
                    "name": "liftable"
                }, {
                    "name": "drawable",
                    "resources": [
                      { "if": "has(any_hide)", "then": "gfx/terobjs/dframe2:2" },
                      { "if": "has(any_raw_hide)", "then": "gfx/terobjs/dframe2:1" },
                      { "if": "", "then": "gfx/terobjs/dframe2" }
                    ]
                }, {
                  "name": "solid",
                  "width": 6,
                  "height": 18
                }, {
                  "name": "container",
                  "width": 2,
                  "height": 2,
                  "allowed": [ "any_raw_hide" ]
                }, {
                  "name": "item_processor"
                }]
              }]
              Ответить
              • Ебать ты гейдевщик.
                Ответить
                • Каюсь, есть за мной такой грех.
                  Ответить
                  • Ты нам стал доверять и решил раскрыть свою сущность? Хорошее было время когда сам себе рассказывал про Хаскель. Небось так и подучил?
                    Ответить
              • я вообще не игродел, но такие вещи, наверное, в скрипты нужно выносить
                Ответить
                • Скрипты мне в тот момент показались медленными... Да и не хотелось цеплять скриптовый двиг ради такой мелочи.
                  Ответить
              • Зачем было писать свой парсер, если можно взять JSON или XML?
                Ответить
                • Они такое не осилят
                  Ответить
                • Ты не поверишь, но JSON парсился boost::property_tree. А парсер только для вон тех выражений после "if".
                  Ответить
              • ебать ты декларативщик

                луа бы лучше завёз
                Ответить
                • лучшеб с черепахой жил
                  Ответить
                  • Я куплю себе змею или черепаху.
                    А тебя я не люблю.
                    Ответить
                • уже у тебя за щекой
                  Ответить
                  • https://i.postimg.cc/d3m2Ptxy/image.png

                    Хорошо бродить по свету.
                    С карамелькой за щекой.
                    А ещё одну для друга.
                    Взять за щёку про запас
                    Ответить
            • > Для нетребовательных?
              Ты точно время выполнения не перепутал с временем компиляции?
              Ответить
              • > точно время выполнения не перепутал с временем компиляции
                Более чем уверен, что bison+flex на мало-мальски сложной грамматике порвут его как тузик грелку даже по скорости исполнения, не говоря уж об удобстве разработки.
                Ответить
                • Это ведь yacc. Если есть грамматика на bison+flex покажи, сравним. Только что-нибудь не сложное.
                  Ответить
                  • > Только что-нибудь не сложное.
                    Несложного нету, к сожалению. Да и на несложных неинтересно тестить, т.к. ты не успеешь сойти с ума от времени компиляции и чтения выхлопов при ошибках в грамматике ;)
                    Ответить
                  • Грамматика JSON устроит? Вроде бы простая.

                    http://www.json.org/fatfree.html

                    Если устроит - напишу к ней бизоний велосипед, давненько не брал я в руки шашек...
                    Ответить
                    • Да, устроит, и писать ничего не надо:
                      https://github.com/sehe/spirit-v2-json/blob/nowide/JSON.cpp
                      Ответить
                      • Ок, тоже не буду писать: https://bitbucket.org/tunnuz/json/src
                        Ответить
                        • лентяи
                          Ответить
                        • Через полчаса посмотрю. На чем будем проверять?
                          Ответить
                          • на ideone
                            Ответить
                          • > Через полчаса
                            перед салуном с двумя пистолетами в кабуре и в ковбойских шляпах
                            Ответить
                        • Spirit на 7-12% быстрее.
                          По 10000 раз парсил эту строку http://pastebin.com/48ENfKdr (оптимизация -O3, компилятор g++ 4.81)
                          Spirit 1.79 - 1.89 с
                          Bison 2.09 - 2.20 с
                          Ответить
        • В чем суть твоего кода? Можно в конфиге написать функцию на бормандС++?
          Ответить
        • >>Cпирт был выбран только по одной причине - хотелось попробовать поюзать спирт

          Подростковый алкоголизм
          Ответить
    • vanished
      Ответить
    • икарус мотри
      https://i.postimg.cc/d1LnK77X/image.png
      Ответить
      • Хорошая табличка. Я это начал раскапывать, когда составлял таблицу модальных глаголов. Их в каждом германском языке шесть, но вот их значение разное.
        Ответить
        • там еще проебано забавное.
          Ich darf похоже на нидерландское "ik durf" (durwen это to dare, причем это модальный глагол с "te", что не обычно: Ik durf te slapen).

          soll похоже на shall (которое 100 лет назад значило первое лицо, а теперь значит обязанность)
          Ответить

    Добавить комментарий