1. C# / Говнокод #17426

    +133

    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
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace nonopt
    {
        class Program
        {
            static void Main(string[] args)
            {
                string h = "h";
                string e = "e";
                string l1 = "l";
                string l2 = "l";
                string o1 = "o";
                string he = h + e;
    			string ll = l1 + l2;
                string hell = he + ll;
                string hello = hell + o1;
                string w = "w";
                string o2 = "o";
                string r = "r";
                string l3 = "l";
                string d = "d";
                string wo = w + o2;
                string rl = r + l3;
                string worl = wo + rl;
                string world = worl + d;
                string empty = " ";
                Console.WriteLine(hello + empty + world);
    			Console.ReadKey();
            }
        }
    }

    Запостил: pewppy, 10 Января 2015

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

    • so what?
      Ответить
    • > hello + empty + world
      Привет, пустой мир.
      Ответить
    • class Trolleybus : Veloсiped, ICostyl
      {
           //...
      }
      Ответить
    • Синтетика, автор, нахуй иди.
      Ответить
    • Компилируем:
      C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe govnokod-17426.cs /debug /debug- /optimize+

      Декомпилируем:
      // Type: nonopt.Program
      // Assembly: govnokod-17426, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
      // Assembly location: d:\Temp\Supertemp\govnokod-17426.exe
      
      using System;
      
      namespace nonopt
      {
        internal class Program
        {
          private static void Main(string[] args)
          {
            string str1 = "h" + "e" + "l" + "l" + "o";
            string str2 = "w" + "o" + "r" + "l" + "d";
            string str3 = " ";
            Console.WriteLine(str1 + str3 + str2);
            Console.ReadKey();
          }
        }
      }

      Тот случай, когда декомпилированный код понятнее :D
      Ответить
      • А почему строки так странно свернулись? Я думал, там должно быть что-то вида
        string str1 = "hello world";

        или сразу подстановка в Console.WriteLine.
        Или в дебаг-версии важен порядок вычисления и заполнения строками каких-нибудь кэшей?
        Ответить
        • Потому что у шарпа оптимизатор уровнем дальше, на jit. Как и у жабы, собственно.
          Ответить
        • > А почему строки так странно свернулись? Я думал, там должно быть что-то вида
          Я вообще-то тоже такого ожидал, но тут всё-таки переменные складываются, а не константы.
          Как вариант, компилятор заводит по переменной на строку в любом случае, а декомпилятор даже не мог подумать, что это можно сделать намеренно.
          По крайней мере, сложение константных строк в VB.NET точно сворачивается в одну строку. В шарпе бы тоже должно.
          UPDATE: Хотя нет, в итоговом коде операции сложения идут не в том порядке, в каком в оригинальном. Где-то тут какая-то магия.

          > Или в дебаг-версии важен порядок вычисления и заполнения строками каких-нибудь кэшей?
          Возможно. Вообще, я хотел не debug, но сейчас вижу, что я передал фигню /debug /debug-, так что не знаю, как это обработалось. В любом случае, оптимизации включены следующим флагом (они независимы).
          Ответить

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