ЙажаСценарий / Говнокод #27882 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
// @strict: true
interface IFace {
    cond0: boolean;
    cond1?: boolean;
}

function main() {

    const a : IFace = { cond0: true };

    print (a.cond0);
    print (a.cond1 == undefined);
    print (a.cond1);

	// a.cond1?.value

    print("done.");
}

я вам принес новую фичу. называется опциональные поля в interface-ах. а твой с++ умеет так?

Запостил: ASD_77 ASD_77, (Updated )

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

  • и результат работы -

    C:\temp\MLIR_to_exe>1.exe
    true
    true
    false
    done.
    Ответить
      • анука забацай пример как у меня с интерфейсом... хочу глянуть на дичь
        Ответить
        • > с интерфейсом
          у меня в С++ никаких интерфейсов нет.
          Можно конечно концепт забабахать, чтобы cond1 было булом или его вообще не было.
          Ответить
  • Ё-моё, было б о чём говорить…
    struct IFace {
        bool cond0;
        std::optional<bool> cond1 = std::nullopt;
    };
    
    int main()
    {
        const IFace a = { true, };
    
        std::cout << std::boolalpha
            << a.cond0 << std::endl
            << !a.cond1.has_value() << std::endl
            << static_cast<bool>(a.cond1) << std::endl;
    
        return EXIT_SUCCESS;
    }
    Ответить
    • это все хаки... хакерские проделки... начнем с того что размер моей структуры 1 байт.. а твоей :)?
      Ответить
        • вот строка которая создает
          { cond0: true }
          store { i1 } { i1 true }, { i1 }* %3, align 1, !dbg !9

          i1 это 1 бит... ну там выравнивание еще будет 1 байт макс
          Ответить
          • А в С++ было бы 0 байт, потому что структуры нахрен бы выоптимизировались.

            Что будет, если условно создавать IFace и передавать её так, чтобы компилятор не мог предсказать ещё использование? Тебе же придётся хранить информацию о наличии и/или значении cond1.

            Если компилятор не норкоман и не умеет упаковывать кучу булов в 1 байт. Тогда да, для хранения состояния всей структуры понадобится 3 бита, но пирфоманс начнёт присасывать.
            Ответить
            • Совершенно верно.
              https://gcc.godbolt.org/z/1GYMh9T3Y (для наглядности говноcout заменён на православный «printf»):
              .LC0:
                      .string "%d\n%d\n%d\n"
              main:
                      sub     rsp, 8
                      xor     ecx, ecx
                      mov     edx, 1
                      mov     esi, 1
                      mov     edi, OFFSET FLAT:.LC0
                      xor     eax, eax
                      call    printf
                      xor     eax, eax
                      add     rsp, 8
                      ret

              «C++» успешно соптимизировал структуру в 0 байт.
              Ответить
              • > для наглядности говноcout заменён на православный «printf»

                Вот сразу бы так. Въебал плюс за использование тьюринг-полных операторов.
                Ответить
            • Ладно, если не совсем читерить, то можно сделать специализацию для була, которая весит один байт...
              Ответить
            • > пирфоманс

              А по-моему норм будет: позиции битов фиксированные, and, or да test. Это же не вектор булов, где всё динамичное.
              Ответить
            • А можно, чтобы по размеру структуры определялось, какие поля определены, а какие нет.
              Ответить
              • нельзя потому что размер структуры не гарантирует наличие поля. всегда можно подобрать комбинацию из полей которое будет давать нужный размер
                Ответить
      • > начнем с того что размер моей структуры 1 байт.. а твоей :)?

        Просто здесь, как обычно, пацан возьмет Сишку.
        В которой есть волшебное слово struct. И привычно сольет тупоскрипт питуха.
        typedef struct
        {
            unsigned cond0 : 1;
              signed cond1 : 2;
        } s;


        «Сишка» — язык для белых людей.
        Ответить
        • Всего 1 байт, ха!

          Какая жалкая, никчёмная структура. То ли дело "Nim", здесь структура весит целых 16 мегабайт! Не то, что ваши дистрофичные-булимичные целочки-структурочки.
          type Koko = object
            cond0: uint
            cond1: int
          
          echo sizeof(Koko(cond0: 1, cond1: 2)) # out: 16
          Ответить
      • > начнем с того что размер моей структуры 1 байт.. а твоей :)?

        Тут люди говорят, что «в 2021 веке воевать за сохранение 1 байта данных - это супер круто... а главное только сумасшедшие будут это делать :)»
        Ответить
  • > я вам принес новую фичу

    Сишке почти 50 лет, но все эти т.н. «новые фичи» там уже давно реализованы )))
    #include <stdio.h>
    
    #define TRUE  -1
    #define FALSE -2
    #define undefined(x) !!(x>=0)
    #define print(bool) printf("false\n\0true\n" + 7 * (bool&1));
    typedef struct
    {
        unsigned cond0 : 1;
          signed cond1 : 2;
    } iAss;
    
    int main(void) 
    {
        iAss a = {cond0:TRUE};
        print(a.cond0);
        print(undefined(a.cond1));
        print(a.cond1);
        puts("done");
        return 0;
    }

    https://ideone.com/yp2bry
    Ответить
    • Как-то вербозно и длинно получилось. Переписал на Jawa, чтобы было покороче:
      class Koko {
          public Boolean cond0;
          public Boolean cond1;
      };
      
      public static void main(String []args) {
          Koko kok = new Koko();
          kok.cond0 = null;
          kok.cond1 = new Boolean(true)
      };
      Ответить
      • log4j забыл подключить — программа ничего не напечатала.

        Edit: Ахаха. Или это для безопасности? В любом случае йажа обосралась — код ничего не выводит.
        Ответить
  • > const a : IFace = { cond0: true };

    print (a.cond0);
    print (a.cond1 == undefined);
    print (a.cond1);

    // a.cond1?.value

    print("done.");
    }

    >я вам принес новую фичу. называется опциональные поля в interface-ах. а твой с++ умеет так?

    Пальнем-ка пулею в святую Русь!
    В избяную, кондовую, толстозадую!

    Эх, эх, без креста!
    Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8