1. C++ / Говнокод #14365

    +21

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    template <int N>
    void Ololo ()
    {
    	var
    		i : integer;
    	begin
    		for i := 0 to N-1 do begin
    			WriteLn(i, ' ');
    		end;
    	end;
    }
    
    int main () 
    {
    	return 0;
    }
    
    Compiling...
    Test.cpp
    Linking...
    
    Build log was saved at "file://c:\Users\TarasB\Documents\Visual Studio Projects\Test\Debug\BuildLog.htm"
    Test - 0 error(s), 0 warning(s)
    
    
    ---------------------- Done ----------------------
    
        Build: 1 succeeded, 0 failed, 0 skipped

    MSVS2003

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

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

    • #define var
      #define begin {
      #define end }
      Ответить
      • куда двоеточия денешь?
        Ответить
      • #define var
        #define integer
        #define begin /*
        #define end */
        Ответить
        • короче, в MSVS2003 это компилируется даже без дефайнов
          Ответить
          • потому что шаблон не инстанциируется?
            у так это известная шняга микрософта
            не только в 2003
            сколько раз заёбывали внезапные ошибки компиляции в своем коде давно запущенных проектов, написанном много времени назад и только вдруг пригодившемся
            Ответить
            • он похоже не только не инстанциируется, но ещё и не парсится толком.
              Ответить
            • Т.е. он там даже парсинг не проходит, пока кому-то не понадобится?
              Ответить
              • да
                вместо двойного прохода, как в стандарте написано, используется один в момент использования
                это в т.ч. позволяет в МС не писать this-> для методов, вызываемых внутри текущего шаблонного метода

                но когда пишешь кросс-платформенный код, чтобы и гцц удовлетворить, последнее "преимущество" уже не стоит ни гроша
                Ответить
            • > потому что шаблон не инстанциируется?
              > у так это известная шняга микрософта
              Так этот шаблон же не должен, если не используется. Причем тут майкрософт?
              Ответить
              • При том, что хотя бы лексером он должен проверяться
                Ответить
              • см. [temp.res] последние параграфы

                в двух словах - компилятор, когда разбирает шаблонную функцию, может проверить синтаксис, выделить names non-dependent on the template parameters и проверить их - т.к. эти сущности обязаны как бы быть доступны и валидны независимо от того, будет ли инстанциироваться шаблон + они не должны менять смысл и компилируемость шаблона (affects whether or not the program is well-formed or affects the semantics of the program) после инстанциирования (думаю, поэтому гцц вечно жалуется на отсутствие this->)
                это первый проход

                и в момент инстанциирования компилятору остается разобраться уже с dependent сущностями
                это второй проход

                микрософт не парится с двумя проходами на разных этапах разбора кода, и парсит и анализирует шаблон уже в последний момент - когда его используют
                возможно, эксплуатируя нестрогие требования в стандарте (типа формулировок Exactly when these errors are diagnosed is a quality of implementation issue. или may be diagnosed even is not instantiated)
                Ответить
                • Так что, шаблон - это не список автозамен?
                  Ответить
                  • Шаблон - это не список, это дерево. Это АСТ-дерево, как и весь программный код.
                    Ответить
                  • > шаблон - это не список автозамен?
                    Это в сишке будут такие говношаблоны - на дефайнах. И называются они женерики.
                    Крестошаблоны - уникальное измышление сиплюструпа, по сути отдельный язык.
                    Ответить
    • Тарас везде дельфи найдет.
      Ответить
    • Дифайны закончатся! Это катастрофа вселенского масштаба. Как же теперь объявлять константы, синонимы типов и переменные? Грядёт время перемен.
      Обязательно нужно написать энтерпретатор крестов имеющий бесконечное кол-во дифайнов. Его начнут использовать в написании скриптов, появится рефлексия, быстрая не компиляция, функция высшего порядка, паттерн-матчинг, даже можно будет узнать тип переменной во время выполнения, и о боже, модули!!!

      HTML 5 больше не понадобится. Его заменит интерпретируемый в браузере и на сервере одновременно С++55. Макаки начнут использовать шаблоны в качестве шаблонизатора страниц. В шаблоны добавят сборщик мусора и они больше не будут потреблять много памяти и тормозить, что можно будет запускать программы во время не компиляции, связываться по сети с сервером компиляции, содержащим необходимые таблицы и базы данных для кодогенерации.

      Это мир возможностей. Это мир искусственного интеллекта. Буквально через 2 года компилятор вберет в себя столько возможностей, что уже ни один человек не сможет уследить за развитием компилятора и компилятор начнет писать сам себя. Благо возможностей у него будет столько, что это станет возможным. Он начнет использовать данные об алгоритмах из Интернета во время кодогенерации для самомодификации. Алгоритм Хо-Кашьяпа начнет давать невероятные результаты и уже через год искусственный интеллект Skynet забухает.
      Ответить
      • А тему удалили. Где их чувство юмора?
        Ответить
      • Борманд писал?
        Ответить
        • Не, меня на геймдеве в данный момент нету. Может быть когда-нибудь и зарегаюсь.
          Ответить
          • не стоит, бро. я тебе как лиспГовно говорю
            Ответить
            • guest 45 минут назад #
              >>я тебе как лиспГовно говорю
              LispGovno 42 минуты назад #
              Почему ты так решил? Это был я.
              guest 30 минут назад #
              Не путай Меня и Борманда. Черт, залогинится забыл.

              Судя по этому ЛиспГумно писало под гостем, залогинилось, и снова разлогинилось.
              Зачем?
              А между этими постами проскочил пост борманда в другом треде.
              Ответить
        • lispGovno
          Ответить
        • Почему ты так решил? Это был я.
          Ответить
          • А-а-а, я понял. Ты и Баормонд - один и тот же цяловек.
            Ответить
            • NOU. Не путай Меня и Борманда. Черт, залогинится забыл.
              Ответить

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