1. Си / Говнокод #25440

    +1

    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
    36. 36
    37. 37
    // https://patents.google.com/patent/US20160357533A1/en
    // Generating code in statically typed programming languages for dynamically typed array-based language 
    /*
    Example 2
    
    The cell array is classified as heterogeneous and translated into a C structure. Source code includes the following array, which is classified as belonging to a heterogeneous class.
    	
    x = {‘add’, d1, ‘multiply’, d2, ‘add’, 1, ‘add’, 1};
    ...
    function y = process (x)
     ...
     y = 0;
     for i = 1:2:numel(x)
      if ~strcmp(x{i}, ‘add’)
       y = y + x{i+ 1};
      elseif ~strcmp(x{i}, ‘multiply’)
       y = y * x{i+1};
      end
     end
    end
    
    C code generated in the STPL contains a C structure type that is used for the variable “x”:
    */
    typedef struct {
        char f1[3];
        double f2;
        char f3[8];
        double f4;
        char f5[3];
        double f6;
        char f7[3];
        double f8;
      } cell_0;
    static double process(const cell_0 x)
    {
      ...
    }

    Сраные софтерные патенты. Блядь, вдумайтесь в эту хуйню. Вам дан динамически-типизированный язык, вот типа есть такой "массив" в котором элементы могут быть произвольной поеботой, например строками, флоатами. Как нам это оттранслировать? Да запросто, вот допустим есть такое говно: x = {‘add’, d1, ‘multiply’, d2, ‘add’, 1, ‘add’, 1}; - хуйнуть структуру надо
    typedef struct {
      char f1[3]; // тут сука 3 буквы потому что слово "add" из трех букв
      double f2;
      char f3[8]; // тут сука 8 букв потому что слово "multiply" из 8 букв
      double f4;
      char f5[3]; // тут сука 3 буквы потому что слово "add" из трех букв
      double f6;
      char f7[3]; // тут сука 3 буквы потому что слово "add" из трех букв
      double f8;
    } cell_0;

    А нахуй? Ну т.е. вот потом там будет сгенерен в сишке код, который будет через memcmp проверять этот char f1[3] что там "add", и потом будет еще код, который проверит что char f3[8] это "multiply", да? Ну т.е. у вас структура специализирована под конкретную поебень x = {‘add’, d1, ‘multiply’, d2, ‘add’, 1, ‘add’, 1}; и там блядь и так понятно, что вот там будет add, там будет multiply, и что вот такое количество элементов, это ясно из самого определения структуры, нахуй это говно вообще? И это говно еще запатентовали

    Запостил: j123123, 10 Марта 2019

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

    • И вообще, это все говно, для динамической типизации надо вообще хуярить структуру с указателем на массив из void *. Бегом пиздуйте в патентное бюро
      Ответить
    • > Current Assignee MathWorks Inc
      Интересно, код в патенте взят прямиком из «Матлаба»?
      Ответить
      • > Интересно, код в патенте взят прямиком из «Матлаба»?

        Такая хуйня генерируется матлабовской поебенью под названием "MATLAB Coder"
        https://www.mathworks.com/products/matlab-coder.html
        Они там разумеется пиздят, когда пишут херню вроде "It supports most of the MATLAB language and a wide range of toolboxes.". Хотя вообще понятие "most" растяжимое, может быть "most" это когда больше чем 51%, вот например если в коде какое-то преобразование Фурье используется, то эта хуйня ничего не сделает с этим, скажет что "%%поебеньнейм%% not supported" и иди ты лесом со своим Фурье. Что в таком случае делать - берешь FFT либу (например FFTW) и пишешь немного сишкокода, чтоб хуйню из матлаба пробрасывать в нее, а потом https://www.mathworks.com/help/simulink/slref/coder.ceval.html

        "The generated code is readable and portable." это конечно тоже пиздеж. Не очень-то он и readable, да и про portable могу поспорить. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65077 вон в багзилле есть баг из-за которого мискомпилилось говно сгенеренное из матлаба потому что оно указатели в плавучие питухи засовывало


        (In reply to Richard Biener from comment #7)
        >        * tree-ssa-structalias.c (find_func_aliases): Assume that
        >        floating-point values are not used to transfer pointers.
        
        Assume nothing (except the worst) when dealing with MathWorks code :-(
        Ответить
        • Кстати, засовывания указателей в даблы надо тоже запатентовать, это инновационная идея ж!
          Ответить
          • > указателей в даблы
            Лучше во флоаты. Компактно и может работать с любым объёмом памяти - чем дальше блок от нуля, тем больше его alignment. Если аллокатор будет выделять большие куски ближе к концу, а мелкие - к началу, то флоат идеален.
            Ответить
        • (In reply to Richard Biener from comment #6)
          > (In reply to anders.blomdell from comment #5)
          > > No, but my users insists on using Matlab/Simulink, and the testcase is a
          > > heavily downsized version of what is done in their S-functions.
          > 
          > I mean - seriously storing a pointer as FP values of the upper/lower word
          > of the pointer?  So I suppose this is what Matlab/Simulink generate
          > internally
          > and what gets compiled - thus this is machine generated?
          Nope, part of C-code that users should include in their S-functions.
          Code used to work with gcc-4.8.3. This will become a major problem :-(

          Т.е. это даже не сгенерированная хрень, а какая-то херня из самого матлаба, которая на Си написана, которая пихает указатели в плавучку!
          Ответить
    • Вижу высер на "C" - даже не смотрю автора.
      Ответить
    • Говно запатентовали, чтобы его никто не повторял.

      Предлагаю запатентовать все антипаттерны.
      Ответить

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