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

    +2

    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
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdalign.h>
    #include <inttypes.h>
    #include <string.h>
    
    float sum_f(const float arr[], const size_t len);
    int32_t sum_i32t(const int32_t arr[], const size_t len);
    
    #define sum(a, b) _Generic((a), float*:   sum_f, \
                                 const float*:   sum_f, \
                                 int32_t*: sum_i32t,\
                                 const int32_t*: sum_i32t)(a, b)
    
    
    // foldl (+) 0 arr
    float sum_f(const float arr[], const size_t len)
    {
      return (len != 0) ? ( sum(arr+1, len-1) + arr[0] ) : 0;
    }
    
    int32_t sum_i32t(const int32_t arr[], const size_t len)
    {
      return (len != 0) ? ( sum(arr+1, len-1) + arr[0] ) : 0;
    }
    
    enum { we_want_int, we_want_float } what_we_want;
    
    void test(int www)
    {
      void *a;
      if (www == we_want_int)
      {
        uint8_t buf[sizeof(int32_t[10])] __attribute__ ((aligned (alignof(int32_t[10]))));
        a = (void *) buf;
        memcpy ( a, (int32_t[10]){1,2,3,4,5,6,7,8,9,10},
                 sizeof((int32_t[10]){1,2,3,4,5,6,7,8,9,10})
                );
        printf("%" PRIi32 "\n", sum((int32_t *)a, 10));
      }
      else if (www == we_want_float)
      {
        uint8_t buf[sizeof(float[10])] __attribute__ ((aligned (alignof(float[10]))));
        a = (void *) buf;
        memcpy ( a, (float[10]){1,2,3,4,5,6,7,8,9,10},
                 sizeof((float[10]){1,2,3,4,5,6,7,8,9,10})
                );
        printf("%f\n", sum((float *)a, 10));    
      }
    }
    
    int main(void)
    {
      test(we_want_int);
      test(we_want_float);
      return EXIT_SUCCESS;
    }

    https://wandbox.org/permlink/TwbKHE8l7ZJc6PNI
    https://govnokod.ru/25005#comment436646
    https://i.imgur.com/yFYfuED.jpg

    Запостил: j123123, 23 Октября 2018

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

    • больше повторений богу повторений
      константны придумали трусы
      Ответить
      • Нельзя повторять: в одном примере это инты, в другом — флоаты.

        Хотя можно было бы объявить константы хотя бы ради sizeof. Но вот беда: в "Plain C" констант не было. Придётся либо переходить на кресты, либо использовать макросы.
        Ответить
        • нельзя
          особенно тут

          memcpy ( a, (float[10]){1,2,3,4,5,6,7,8,9,10},
          sizeof((float[10]){1,2,3,4,5,6,7,8,9,10})
          Ответить
        • https://ideone.com/KXbjNk
          
          #include <stdio.h>
          #include <stdbool.h> //буль-буль
          
          enum { //константы
              PEETOOH, PEETOOSHARA, PEETOOSHOK, neTyx = 42
          };
          
          const char const * TY_PETYX = "ТЫ ПЕТУХ!"; //тоже константа
          
          bool is_petyx(int petyx)
          {
              if (petyx == PEETOOH || petyx == PEETOOSHARA || petyx == PEETOOSHOK || petyx == neTyx)
                  return true;
              return true;
          }
          
          int guest;
          
          int main(void)
          {
              if (is_petyx(guest))
                  puts(TY_PETYX);
              return 0;
          }
          Ответить
          • Чо-ьо я непонял, и в сях и в крестах TY_PETYX это просто переменная, ей млжно присвоить значение (в паскале с типиздирорваными констанциями та же хунйя), только в крестах нельзя 2 const.
            Ответить
            • Я понял, я поставил второй const не с той стороны от звёздочки, и он тоже относился к char. Си позволяет 2 модефекатора const, а плюсы - нет. Как-то это ебануто.

              Вот теперь всё работает, а точнее не работает:
              https://ideone.com/u9pCcj
              https://ideone.com/eWxpwe
              Ответить
          • Точно! Я про енумы забыл.

            В Си енумы — это просто числовые константы, причём только целые.
            Ответить
            • Причем енумы -- compile-time (aka constexpr) даже в сишке:
              enum { TWENTY = 20 };
              int array1[TWENTY]; // oк
              
              const int THIRTY = 20;
              //int array2[THIRTY]; // не ок
              
              int main() { /* whatever */ }


              https://wandbox.org/permlink/SgYTY1Tdwk6Ya4kd
              Ответить
              • То есть enum — это настоящая константа, а const — это нечто вроде переменной, которой временно запретили изменять значение?
                Ответить
                • Фактически да. Переменную const можно скастовать и переприсвоить.

                  Хотя в ELF (например) попытка изменения глобальных констант влечет неминуемый и неизбежный segfault.
                  Ответить
                  • >> Переменную const можно скастовать и переприсвоить.
                    копелятор имеет право разместить ее в такой памяти что
                    >> неминуемый и неизбежный segfault.

                    То ли дело борланд с++ 3.1 под дос
                    там вся память была изменяемая
                    Ответить
                • > То есть enum — это настоящая константа, а const — это нечто вроде переменной, которой временно запретили изменять значение?

                  Ага, попробуй сделать константу для float или double через этот enum (не говоря уж о всяких структурах, юнионах).

                  Тогда уж делайте константы через inline функции, типа
                  static inline __attribute__((always_inline)) long double pi(void)
                  {
                    return 3.1415926535897932384626433832795028841971693993751058209749445923L;
                    // надеюсь тут достаточно знаков для максимально точного представления для такого типа
                  }
                  Ответить
                  • static inline __attribute__((always_inline, const)) long double pi(void)

                    Даже вот так

                    https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html

                    pure

                    Many functions have no effects except the return value and their return value depends only on the parameters and/or global variables. Calls to such functions can be subject to common subexpression elimination and loop optimization just as an arithmetic operator would be. These functions should be declared with the attribute pure. For example,

                    int square (int) __attribute__ ((pure));


                    says that the hypothetical function square is safe to call fewer times than the program says.

                    Some common examples of pure functions are strlen or memcmp. Interesting non-pure functions are functions with infinite loops or those depending on volatile memory or other system resource, that may change between two consecutive calls (such as feof in a multithreading environment).

                    The pure attribute imposes similar but looser restrictions on a function’s defintion than the const attribute: it allows the function to read global variables. Decorating the same function with both the pure and the const attribute is diagnosed. Because a pure function cannot have any side effects it does not make sense for such a function to return void. Declaring such a function is diagnosed.
                    Ответить
                    • const

                      Many functions do not examine any values except their arguments, and have no effects except to return a value. Calls to such functions lend themselves to optimization such as common subexpression elimination. The const attribute imposes greater restrictions on a function’s definition than the similar pure attribute below because it prohibits the function from reading global variables. Consequently, the presence of the attribute on a function declaration allows GCC to emit more efficient code for some calls to the function. Decorating the same function with both the const and the pure attribute is diagnosed.

                      Note that a function that has pointer arguments and examines the data pointed to must not be declared const. Likewise, a function that calls a non-const function usually must not be const. Because a const function cannot have any side effects it does not make sense for such a function to return void. Declaring such a function is diagnosed.
                      Ответить
                      • >>Note that a function that has pointer arguments and examines the data pointed to must not be declared const.

                        Почему? Я не обязан ничего менять по поинтеру же, це может быть const char*
                        Ответить
                        • Но ты можешь в const char* кастануть какую-то не-const фигню. И вообще, у тебя нет никакой инфы о том, сколько ты там памяти прочитаешь по указателю этому. Если так надо, делай структуру с массивом известного конечного размера внутри, и передавай ее по значению
                          Ответить
                          • Ну если я царь то могу конечно.
                            С другой стороны если я царь я могу кастануть интеджер к поинтеру и взъебать всю память так, что мало не покажется
                            никаокй const не спасет
                            Ответить
                      • j123123, заебал срать цитатами из сишной доки
                        Ответить
                        • Это не сишная дока, это дока к компилятору GCC. В стандарте Си такой фигни нет
                          Ответить
                          • Он разницы не понимает, для него это все "ненужное низкауровневое говно"
                            Ответить
                            • Не понимаю, о чём идёт речь, но с появлением "PHP" всё это говно действительно стало ненужным.
                              Ответить
          • >> TY_PETYX

            Замечено что в большинстве материалов в качестве имен переменных используются foo, bar, buz, qx.

            В питоне же spam, ham, eggs

            И только на ГК это PITOOH, PETUX, Koorochka, koko, итд
            Ответить
        • >>в "Plain C" констант не было.
          так бекпортнули же из плюсов
          Ответить
          • Я против констант. Если программист не дебил, он не перезапишет переменную, значение которой должно быть фиксированным.
            Ответить
            • Я против переменных.
              Ответить
              • На всякий случай напоминаю что копелятор может соптимизировать константу ОВЕНу за щеку, например инлайнуть

                Так же напоминаю что мутабельность это зло

                И наконец напоминаю что в руби, единственном из скриптовых, ВОТ_ТАКИЕ_КОСТАНТЫ действительно неизменяемы (без варнинга)
                Ответить
                • Изменяемые, но с ворнингом

                  https://ideone.com/Horidq
                  Ответить
              • Именно поэтому я за «Кукарачу» из «Роботландии»: его можно запрограммировать, не используя переменных.

                http://www.botik.ru/~robot/sale/robot.htm
                http://www.botik.ru/~robot/sale/az.htm
                http://www.botik.ru/~robot/sale/coc.htm
                Ответить
                • На странице истории Олег Какаулин реконструировал программу Тараканчик-84.

                  зы: я вижу дельфи 4 и win3.11, а вы?
                  Ответить
                  • Где? Если речь о Кукараче для Windows, то там на скриншоте Windows 98 (в Windows 95 не было градиента у заголовка окна). Win 3.11 я вообще ни на одной картинке не увидел (там на всех картинках либо DOS, либо Windows новее, чем 3.x).
                    Ответить
                • свежие отзывы
                  http://www.botik.ru/~robot/ru/10opin.htm
                  Ответить
                  • >> 1992
                    >> Программа курса информатики для начальной школы

                    вот просто интересно: в какой это начальной школе в 1992 году были компьютеры?
                    Ответить
              • > Я против переменных.
                Наверное ты за Rust?
                Ответить
                • Нет, он за кобенаторную логику.
                  Ответить
                • Я за чистую фунциональщину без побочных эффектов
                  Ответить
                  • А я за Forth*

                    * Побочные эффекты: головная боль, тошнота, судороги, нарушения логического аппарата.
                    Ответить
                    • А ты знаешь фортран, нидлес? Не хочешь выучить?
                      Ответить
                      • А что прикольного есть в Фротране?
                        Ответить
                        • Математика, много математики.
                          Ответить
                          • Скорее "массивы, много массивов".

                            Язык, в котором можно смешивать древнее говно c тучей неявных переменных F77 с ООП из F2003 и встроенной параллелизацией F2008.
                            Ответить
                            • И чем он лучше "J"?
                              Ответить
                            • >>Скорее "массивы, много массивов".

                              В компьютерах есть единственный тип данных, и это массив (с) Царь Суперхаккиллер1997 Первый
                              Ответить
                              • Но ведь он прав.
                                Ответить
                                • Строго говоря к комптюетре есть только байт, или даже бит
                                  Просто в ISA многих процессоров есть удобности для работы с массивами, потому что референс локалити учит нас что байт редко приходит один
                                  Ответить
                                  • Да и не тока ISA, там все заточено под чтение линеечками
                                    и префетчер и котроллер кеша и котроллер мапяти
                                    Ответить
                        • В силу примитивности языка компиляторы могут генерить крайне эффективный код, поэтому это, внезапно, самый быстрый язык для числодробилок. Сколько бы крестоблядь не пыталась перехитрить фортраноида, у неё скорее всего ничего не выйдет. (По крайне мере, пока не вмешаются окамлобоги)
                          Ответить
                          • > примитивности языка

                            Ну я бы не сказал, что современный фортран примитивен. Интересно, а окамлобоги пробовали генерить фортран вместо сишки?
                            Ответить
                        • Фортран это профессор
                          Ответить
                      • Я знаю Алгол-68, он очень крут для своего времени,в нём даже лямды и срезы есть.
                        Ответить
          • const ещё в C89 был.
            Ответить
      • > трусы́
        ?
        Ответить
    • А еще есть https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html: Built-in Function: void *__builtin_alloca_with_align (size_t size, size_t alignment)
      Ответить
    • Интересно, что скажет "гость", когда увидит свою мамку спящей с открытым ртом?
      Ответить
    • Ты только что перегрузку функций.
      Ответить
      • Он только что шаблоны

        Кстати, а как такое решается в плейнсишечке? кококодогенерацией?
        Ответить
        • Намакроёбить можно:
          https://ideone.com/8a3flh
          
          #include <stdio.h>
          
          #define def_add(T) \
          T add_##T(T a, T b)\
          {\
              return a + b;\
          }
          
          #define add(T) add_##T
          
          def_add(int);
          def_add(float);
          
          int main(void)
          {
              printf("%d%.0f\n", add(int)(2, 2), add(float)(5., -3.));
              return 0;
          }
          Ответить
          • Ты макрособог просто, а за такой код не побьют?
            Ответить
            • > не побьют?
              Я хз, вообще-то я малышка-скриптомартышка.
              Ответить
    • Hello, 
      buy cialis online! 
      http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
      Ответить
      • Hi
        Ответить
        • Hello, 
          buy cialis online! 
          
          http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
          Ответить
          • Hello, 
            buy cialis online! 
            
            http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
            Ответить
            • Hello, 
              buy cialis online! 
              
              http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
              Ответить
              • Hello, 
                buy cialis online! 
                
                http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
                Ответить
          • Боты умеют в ббкоды? Нихуя себе.
            Ответить
            • Да это кто-нибудь из местных решил в спамера поиграть...
              Ответить
              • Hello, 
                buy cialis online! 
                
                http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
                Ответить
              • Ну вообще этот спам легко нагугливается, например тут http://www.shigejee.jp/bbs.php
                Ответить
                • Этот спам и на ГК легко нагугливается. Только вчера он был чёрно-белый.
                  Ответить
    • Hello, 
      buy cialis online! 
      
      http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
      Ответить
      • Hello, 
        buy cialis online! 
        
        http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
        Ответить
        • Hello, 
          buy cialis online! 
          
          http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
          Ответить
      • Ты не бот!
        Ответить
        • Hello, 
          buy cialis online! 
          
          http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
          Ответить
          • Hello,
            buy cialis online!

            http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
            Ответить
            • Hello,
              buy cialis online!

              http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,



              Hello,
              buy cialis online!

              http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
              Ответить
        • На этом сайте ещё и боты бывают? А как, тут апишка есть?
          Ответить
          • Парсят хтмл.

            З.Ы. Тут еще и 2 зеркала есть...
            Ответить
            • Ага.

              — Какой API у твоего сервиса?
              — HTTP+HTML.
              Ответить
              • и немного жабюаскрипт
                и клиент на selenium
                Ответить
            • Hello,
              buy cialis online!

              http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie
              Ответить
              • Где зарождался раньше новый мир,
                Там старая мерзость правит бал.
                «Надеждам нашим не сбыться никогда» —
                Так нас убеждают господа.

                Не говори так, пока ты жив!
                Ведь то, что сегодня – оно не на века,
                Что было прочным, уже гниёт.
                Раз в этом мире ты никто,
                Зачем тебе нужно держаться за него?
                Пора отправить его на слом.
                Ответить
    • Hello,
      buy cialis online!
      http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
      Ответить
      • Hello,
        buy cialis online!

        http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
        Ответить
        • Hello,
          buy cialis online!

          http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
          Ответить
    • Hello,
      buy cialis online!
      http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
      Ответить
    • Hello,
      buy cialis online!

      http://onlinecialisurw.com/ , , http://viagraaqwe.com/ , , http://viagraaloq.com/ , , http://viagrapoie.com/ , , http://cialisrxss.com/ , ,
      Ответить
    • Инью, каптча
      рекаптча же, ну

      у нормальных пацанов она всегда будет автоматической, а бота заебет
      Ответить
      • Мы, Овны, настолько тупые, что нас она никогда не заебёт. Почитай отзывы на любом сайте гороскопов - в шоке будешь.
        Ответить
    • Хуепроебиньо, введи SMS-верификацию.
      Ответить
      • Нахуй. Просто фильтр на слова "cialis" и "viagra". Этого будет достаточно.
        Ответить
      • Есть ещё варианты, как отфильтровать ботов:

        1. Плохие боты не умеют выполнять JS.

        По событию oninput вычисляем длину текста в textarea и записываем результат в скрытое поле формы. На сервере сравниваем длину пришедшего текста со значением этого поля.

        2. Совсем плохие боты не отправляют cookies.

        Создаём сессии для всех, даже для гуестов. Если запрос на добавление комментария пришёл без cookies, игнорируем его.
        Ответить
        • События "oninput" не существует.
          Ответить
          • Загугли.
            Ответить
          • https://developer.mozilla.org/ru/docs/Web/API/GlobalEventHandlers/oninput

            Это событие пузырится. Если он поддерживается в окне, он поддерживается и в <input>.
            Ответить
        • Просто скрытого поля не хватит? Или оно там и так есть?
          Ответить
        • > пришёл без cookies
          Не, боты скорее всего читают страничку перед отправкой чтобы всякие csrf защиты пробивать. Т.е. куки у них тоже будут.

          З.Ы. Ну разве что создавать куку из скрипта.
          Ответить
    • Иньо, блядь, заебал.
      Иньо, заебал, блядь.
      Блядь, Иньо, заебал.
      Блядь, заебал, Иньо.
      Заебал, Иньо, блядь.
      Заебал, блядь, Иньо.
      Ответить
      • Иньо заебал блядь.
        Блядь заебала Иньо.
        Ответить
        • Да это же батхёрт!
          Ответить
          • ДА НЕ БОМБИТ У МЕНЯ!!!111 СУКА!!
            Ответить
            • — Я задавал вопрос! Сессия, то что вы говорите, это сейчас не интересует, я говорю, то что до ноября прошлого года… ДА ВЫ ЗНАЕТЕ МОЙ ВОПРОС! До апреля двадцать… э… 2008 года, 26 апреля, НЕ БЫЛО НИ ЕДИНОГО РАЗРЫВА! С чем это могло быть вызвано? Я говорю, ни единого разрыва! А сейчас есть разрывы!
              Ответить
              • Вы не отвечаете на мой ответ!
                Ответить
                • Я не отвечаю на ваш ответ
                  Как можно на ответ ответить?
                  Ответить
                  • Вопосил на прой отврос. Твоверь.
                    Ответить
                    • Ах вы не отвечаааааете на ваш вопрос, да вы вообще не операторы, да вы вообще, суки, бляди, понимаете, что вы относитесь к клиентам как к свиньям тогда, если вы не можете отвечать на этот вопрос…
                      Ответить
    • Кстати, почему в C++ не завезли _Generic? Это ведь открыло бы новые горизонты для написания читабельного, качественного и высокооптипизированного кода. Можно было бы через смесь макросов с шаблонами, темплейтами, перегруженными функциями, constexpr-ами, лямбдами и _Generic делать настолько офигительно крутой и читабельный код...
      Ответить
      • вот этот https://en.cppreference.com/w/c/language/generic ?

        Зачем в С++ мкросы если есть inline, шаблоны и const ?
        Ответить
        • Зачем в C++ лямбды, если есть обычные функции, в т.ч. inline? Зачем в C++ классы, если есть структуры и массивы из указателей на функции? Зачем в C++ std::cin std:cout если есть printf scanf? Зачем в C++ std::vector, std::string и std::array если есть malloc realloc free calloc alloca и обычные массивы? Зачем в C++ обработка исключений, если есть return и setjmp/longjmp?
          Ответить
          • >>Зачем в C++ лямбды, если есть обычные функции, в т.ч. inline?
            а лямбды кложить умеют? а функции?


            >> Зачем в C++ классы, если есть структуры
            алиас, не?

            >>и массивы из указателей на функции
            полиморфизм, vtbl, не?

            >>ачем в C++ std::cin std:cout если есть printf scanf?
            абстракция стрима же с удобно перегруженым оператором левагосдвига?

            >>Зачем в C++ std::vector
            чтобы палучитьи тератор

            >>td::string
            ты каданито в сишечке строчки кокотенировал? приятно тебе было?
            >> malloc realloc
            канструктор не вызываеца же, RAII, не?

            >>Зачем в C++ обработка исключений,
            Потому что 30 лет назад люди думали что это хорошая идея
            Ответить
            • > удобно перегруженым оператором левагосдвига?
              говно же
              Ответить
              • Не знаю, некоторым нравится, вот в groovy так же сделали например

                На самом деле я понимаю идею: типа объект стрим, сегодня тут у тебя cout, завтра буферизирующий какой-нить
                Ответить
                • И в ruby тоже (там им же реализуется наследованне, ха!)

                  в DSLях часто юзают
                  Ответить
                  • зачем нужны груви и руби если есть пехапе?
                    Ответить
                  • > И в ruby тоже (там им же реализуется наследованне, ха!)
                    Там всего-то при объявлении класса знак "<" используется.
                    Ответить
                    • В "PHP" всей этой хуйни нет. Поэтому я за "PHP".
                      Ответить
                      • В "PHP" вместо него юзается целое слово "extends".
                        Ответить
                        • совершенно идиотское слово кстати

                          вообще за разницу extends / implements (привет, жава) надол убивать
                          Ответить
                    • но почему не двоеточие?
                      Ответить
                    • << там тоже есть, он исползуется для доступа к eigenclass, например для создания статических методов например
                      Ответить
            • > а лямбды кложить умеют? а функции?

              Передавай всю фигню через указатель в inline функцию - компилятор сам закложит как надо

              > полиморфизм, vtbl, не?

              Массив из указателей на функции, *void.

              > абстракция стрима же с удобно перегруженым оператором левагосдвига?

              Нет, мне неудобно.

              > чтобы палучитьи тератор

              Зачем он?

              > ты каданито в сишечке строчки кокотенировал? приятно тебе было?

              Да. Да.

              > канструктор не вызываеца же, RAII, не?

              Конструкторы - нинужно. malloc - всему голова. RAII - говно
              Ответить
              • фу, да ты тсарь

                >>Передавай всю фигню через указатель в inline функцию -
                много буков

                >>Массив из указателей на функции, *void.
                наследование и полиморфизм реализовывать многобуквенно, хотя оно и не надо обычно

                >>Зачем он?
                чтобы делать обобобобщенные алгоритмы!

                Кстати, в сишечке тоже есть итератор. Называется поинтер;) Операторы инкремента и ра3ыменовывания у него отлично работают.

                >>Да. Да.
                char* petix(const char* name) {
                //сделай чтобы функция вернула name + "проткнутый" 
                }


                >>Конструкторы - нинужно.
                но
                но
                но как же внутренне состояние абъекта, которое должно быть инициализировано?

                зы: если честно то я на плюсах ничего сложнее арканоида не писал, так что мне все ок
                Ответить
            • > RAII

              https://govnokod.ru/24517
              Ответить
              • Хороший код. Немного сложнее конструкторов, зато с99
                Ответить
                • > Хороший код

                  >> * 1. Do not use `return` from within `raii_with`, but only `safe_return`, because otherwise the destructors will not be run.
                  >> * 2. Do not perform pointer-swaps with `var_decl`; the destructor will still be run on the original structure, because `raii` keeps its own reference to the resource.

                  Обсракции текут из всех щелей. В жопу это говно, уж лучше через goto вручную пердолится.
                  Ответить
      • > не завезли _Generic?

        Потому что перегрузка уже есть с незапамятных времён. Которая делает тоже самое, только лучше.

        Такой убогий костыль, как сишный _Generic, ещё поискать надо. Это как strtok, только _Generic.
        Ответить
        • > Потому что перегрузка уже есть с незапамятных времён. Которая делает тоже самое, только лучше.

          Особенно учитывая что в разных компиляторах разный манглинг, который еще иногда умудряются ломать https://developers.redhat.com/blog/2015/02/05/gcc5-and-the-c11-abi/

          И учитывая то, что если надо вызвать замангленное крестоговно из какого-нибудь другого языка, приходится использовать разные костыли или руками эту парашу выписывать (для разных компиляторов разную)
          Ответить
          • >>другого яз
            extern "C" ?
            Ответить
            • https://wiki.haskell.org/CPlusPlus_from_Haskell
              Ответить
              • >>foreign import ccall "_ZN7QObject7connectEPKS_PKcS1_S3_"
                едрить манглить
                Ответить
                • и ты сыграешь симфонию глюка на клавиатуре

                  альтавистааа
                  Ответить
            • Если объявишь extern "C", то ты не сможешь перегружать эту функцию.
              Ответить
              • потому что в си нету перегрузок функций, угадал?
                Ответить
                • Потому что директива «extern "C"» задаёт для функции внешнее имя, совпадающее со внутренним (ну почти; может добавляться знак подчёркивания). Ты не сможешь в одном модуле объявить int myfunc(int) и int myfunc(float, float), потому что у них будут одинаковые внешние имена.

                  Без этой директивы включится манглинг и к myfunc добавится абракадабра, описывающая аргументы (типа как _ZN7QObject7connectEPKS_PKcS1_S3_ в примере выше).

                  В Си нет перегрузки, потому что нет манглинга. В Си нет манглинга, потому что нет перегрузки.
                  Ответить
                  • > в си нет манглинга
                    Есть же - strtol, strtoll, strtoull, strtod, strtof.

                    _snwprintf_s_l
                    Ответить
          • > вызывать замангленное крестоговно
            Манглинг - это самая тривиальная из проблем, возникающих при вызове крестоговна из других языков.
            Ответить
            • Ну да, есть еще разные ABI и соглашения вызова, например thiscall в мокрософтовском говнокомпиляторе, есть еще таблицы виртуальных методов (которые в разных компиляторах могут через разную жопу делаться), и вообще хер поймешь как эти классы с виртуальными методами, манглингом и множественным наследованием из крестоговна завернуть для вызова из какого-нибудь другого языка. Разве что обернуть всю эту крестопарашу сишечкой. Поэтому я за Си.
              Ответить
              • ABI виртуальных методов, к слову, довольно стабильно и даже юзается для COM. В отличие от шаблонятины.
                Ответить
                • Кстати интересно, каким образом будут замангливаться смесь шаблона и перегруженной функции? Как вообще можно было дойти до такого ебанутого говна?
                  Ответить
                  • https://govnokod.ru/23666#comment396643

                    > roman-kashitsyn 22.01.2018 11:50

                    > Перегрузка — говно, я предпочитаю пользоваться специализацией шаблонов с дополнительной функцией-обёрткой. Жизнь слишком коротка, чтобы разобраться, как перегрузка функций работает с шаблонами функций.
                    Ответить
                    • > Перегрузка — говно

                      Именно. Про lattice слышал?

                      _Generic ≤ overloading ≤ template specialization
                      Ответить
                      • На гоатсе как-то смахивает...
                        Ответить
                      • _Generic ≤ overloading ≤ template specialization ≤ гомоиконность
                        Ответить
                        • Много ты там в своём микроконтроллере гомоикосятины написал?
                          Ответить
                          • Может он в машинных кодах пишет?
                            Ответить
                          • На микроконтроллере только FORTH для этого годен, а я его не изучал.
                            Ответить
                  • Дык шаблонная функция во время конпеляции тупо раскрывается в пачку обычных. Поэтому манглинг там самый обычный.
                    Ответить
                    • А, ну да, я иногда забываю что крестошаблоны изначально задумывались как улучшенный препроцессор, предназначенный для генерирования разнотипного говна для однообразных функций. Метапрограммирование на шаблонах - вот где настоящее говно. А еще метапрограммирование с шаблонами с сишным препроцессором _Generic(если их добавить), лямбдами, констэкспрами и инклудами из ебеней прямо внутрь кода, ммм...
                      Ответить
                    • Жиголо, тебя забанят скоро.
                      Ответить
              • >>есть еще разные ABI и соглашения вызова,

                в си тоже
                Ответить
    • Какой еблан зарегал Pohuinho?
      Ответить

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