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

    +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
    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
    58. 58
    59. 59
    60. 60
    61. 61
    // https://godbolt.org/z/QAR_nT
    // https://govnokod.ru/26701#comment550329
    #include <cstddef>
    #include <string>
    #include <cassert>
    
    
    struct assert_failure
    {
        explicit assert_failure(const char *sz)
        {
            std::fprintf(stderr, "Assertion failure: %s\n", sz);
            std::quick_exit(EXIT_FAILURE);
        }
    };
    
    // эта херня не совсем корректно будет обрабатывать всякую хрень вроде ", , , " - оно это посчитает за 4 аргумента,
    // и если считать " скобочки, тогда еще надо запилить обработку эскейп-последовательности, для хуйни типа "pidor\" govno"
    // но мне лень эту хуйню допиливать.
    constexpr std::size_t count_args(const char *s, std::size_t depth = 0, std::size_t pos = 0, std::size_t count = 0)
    {
      if (s[pos] == '\0'){
        if(depth != 0)
          throw assert_failure("kakoi bagor)))\n");
        if(pos == 0)
          return 0;
        return count+1;
      }
      else if(s[pos] == '{')
      {
        return count_args(s, depth + 1, pos + 1, count);
      }
      else if(s[pos] == '}')
      {
        if(depth == 0)
          throw assert_failure("kakoi bagor)))\n");
        return count_args(s, depth - 1, pos + 1, count);
      }
      else if(depth == 0)
      {
        if(s[pos] == ',')
        {
          return count_args(s, depth, pos + 1,  count + 1);
        }
      }
      return count_args(s, depth, pos+1,  count); 
    }
    
    #define TO_STR(...) #__VA_ARGS__
    #define ARGNUM(...) count_args(TO_STR(__VA_ARGS__))
    
    #define krestogovnotypeof(a) std::remove_reference<a>::type
    
    #define FOR_RANGE(type, varname, ...) for(struct {size_t cnt; krestogovnotypeof(type) arr[ ARGNUM(__VA_ARGS__)  ];  } varname = {0, {__VA_ARGS__}}; varname.cnt < sizeof(varname.arr)/sizeof(type); ++varname.cnt )
    
    int main(void)
    {
      FOR_RANGE(int[2], k, {1,2}, {3,4}, {5,6}, {7,8})
        printf("{%d %d},\n", k.arr[k.cnt][0], k.arr[k.cnt][1]);
      return EXIT_SUCCESS;
    }

    Какая крестопараша((( В вижуальхуюдии вроде собирается, но проверить корректность работы не могу. Как вы этим днищекомпилятором вообще пользуетесь?

    Было б круто, если бы были такие constexpr функции, которые в компилтайме могут куски исходного кода высирать как бы прямо в исходник, и потом уже чтоб это компилировалось

    Запостил: j123123, 29 Мая 2020

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

    • Кто-нибудь пробовал на этих констэкспрах парсер крестокода писать вообще?
      Ответить
    • А D умеет код высерать в компайлтайме прямо в исходник.
      Ответить
      • Вот да, надо с сишки на D в режиме better-C переходить (чтоб без GC и жирного рантайма). И через это компилтайм-высирание запилить всю хуйню, которая нужна. А крестоговно закопать нахуй
        Ответить
        • > с сишки на D переходить
          >чтоб без GC и жирного рантайма
          >>на D переходить
          >>без GC

          Ха-ха-ха.

          >D has built-in types that may be difficult to use without the GC: exceptions, strings, dynamic arrays, associative arrays, and delegate closures.

          Вот потому D не взлетел и люди до сих пор пишут на крестах.

          https://wiki.dlang.org/Memory_Management
          Ответить
          • Мы уже обсуждали атрибут @nogc:
            https://govnokod.ru/26609#comment545801

            @nogc void foo()
            {
                auto a = ['a']; // это не скомпилируется, т. к. литерал массива выделяется в памяти, контролируемой gc
                auto aa = ["x":1]; // см. выше
                a.length = 1; // это не скомпилируется, т. к. ресайз может позвать мусоросборщик
                a = a ~ a; // это не скомпилируется, потому что конкатенация вызывает реаллокацию
                a ~= 'c'; // см. выше
            
                aa["abc"] = 0; // это не скомпилируется, потому что добавление ключа в ассоциативный массив вызовет реаллокацию
            
                auto p = new int;  // нью тоже нельзя
            }

            Итого: массивы через литерал создавать нельзя; new нельзя; конкатенацию нельзя; добавить ключ в ассоциативный массив нельзя; вообще всё, что изменяет размер массива, нельзя.
            Ответить
            • Спасибо за линк.
              Примерно как я и думал: превращает все базовые вещи в неюзабельное говно.
              Типа, хуле вы тут со своими умными указателями, RAII — назад в каменный век.
              Ответить
              • RAII и в better C есть
                https://dlang.org/spec/betterc.html
                > RAII (yes, it can work without exceptions)

                Умные указатели это вообще тупая херня с рефкаунтером, которую можно и на сишке реализовать какими-то костылями, а на D так тем более.
                Ответить
                • Да, только половина стандартной либы (строки, массивы, мапы) нахуй сломалась.

                  Всё хорошо прекрасная маркиза.
                  Ответить
                  • «writeln» в «D» тоже без gc не работает. Нужно импортировать сишный «printf» или использовать ещё какую-нибудь стороннюю библиотеку.
                    Ответить
                    • Какой импорт )))
                      Ответить
                    • Они ещё особо хвастаются этими тремя фичами.

                      D offers several capabilities built in to the core language that are implemented as libraries in other languages such as C++:

                      * Dynamic Arrays
                      * Strings
                      * Associative Arrays


                      Только вот в С++ всё работает без ГЦушни.

                      https://dlang.org/articles/builtin.html

                      Сама ссылка достаточно забавна.
                      Поскольку полностью повторят тезис Царя об универсальной, минимальной необходимой и достаточной структуре данных — массиве.

                      Strings

                      C++ has, of course, builtin string support in the form of string literals and char arrays. It's just that they suffer from all the weaknesses of C++ builtin arrays.

                      But after all, what is a string if not an array of characters? If the builtin array problems are fixed, doesn't that resolve the string problems as well? It does. It seems odd at first that D doesn't have a string class, but since manipulating strings is nothing more than manipulating arrays of characters, if arrays work, there's nothing a class adds to it.
                      Ответить
                      • Интересно, можно ли переписать стандартную библиотеку на обычный аллокатор без gc. Правда, поскольку поддержки RAII нет, придётся по коду аккуратно рассовывать вызовы деаллокатора.
                        Ответить
                        • В теории можно написать код без референс циклов: тогда он будет совместим и с референс каунтингом, и с вонючим анскильным ненужным говном ГЦ.

                          Но тогда придется делать слабые ссылки, и тупые гцбляди не смогут своим одноклеточным мозгоМ понять: зачем
                          Ответить
          • > D has built-in types that may be difficult to use without the GC: exceptions, strings, dynamic arrays, associative arrays, and delegate closures.

            В режиме better c этой хуйни нет. https://dlang.org/spec/betterc.html
            Эксепшены вообще говно, ассоциативные массивы, строки и динамические массивы - это вообще и на Си можно сделать, значит можно и в better C режиме на D. А что такое "delegate closures" - вообще хуй знает, похоже что какая-то питушня ненужная, так что нахуй ее.

            Ну и еще как вариант есть Rust, в котором изначально нет никакого GC, только RAII
            Ответить
            • >Ну ассоциативные массивы, строки и динамические массивы - это вообще и на Си можно сделать
              Нахуй тогда супер-навороченный язык чтобы потом изобретать свои велосипеды?
              В 2к20 такое должно быть из коробки.

              >как вариант есть Rust, в котором изначально нет никакого GC, только RAII
              Царь мало сектантов разъёбывал?
              Ответить
              • > Нахуй тогда супер-навороченный язык чтобы потом изобретать свои велосипеды?

                Ну а в чем проблема-то? Напишешь один раз свои велосипеды, выложишь в гитхаб - если велосипеды получатся качественными - будут твоими велосипедами еще пользоваться другие.
                Ответить
                • Почему на Сишке за триллион лет так и не были написаны качественные макросные велосипеды для FOR_EACH, std::tie, std::array и прочих ништяков доступных в крестах?
                  Ответить
                  • > Почему на Сишке за триллион лет так и не были написаны качественные макросные велосипеды для FOR_EACH, std::tie, std::array и прочих ништяков доступных в крестах?

                    Потому что макроговном эта хуйня нормально не решается.
                    Ответить
                • Если ЯВУ существует более 10 лет и ещё не оброс инфраструктурой, мясом из годных либ и стандартной библиотекой.
                  А ради элементарных, базовых вещей нужно городить велосипеды и собирать говняшки по гитхабу.
                  Тогда вопрос: нахуя такой язык вообще нужен?
                  Ответить
                  • > Если ЯВУ существует более 10 лет и ещё не оброс инфраструктурой, мясом из годных либ и стандартной библиотекой.
                    > А ради элементарных, базовых вещей нужно городить велосипеды и собирать говняшки по гитхабу.

                    Вот да, почему мне надо собирать говняшки по гитхабу, чтобы в крестоговне кроссплатформенно создать банальное окошко и отобразить в нем какой-нибудь jpg файл? Или кроссплатформенно отправить UDP пакет? Или воспроизвести такой-то звук из wav файла? Распарсить XML? Работать с UTF8?
                    Почему? Почему?
                    Ответить
              • Как будто на плюсах драйверописатели не переизобретают stl. Им видите ли эксепшоны не нравятся. Так что плюсы тоже пованивают
                Ответить
            • Это не режим «better C», это режим «питушня».

              В попытках примазаться к тренду отбросами был сделан «режим как Сишка», но лучше.

              Очевидно, что сваять на Dовне ничего нельзя - поэтому приходится воровать.

              Что потом отребье могло всем сообщить «дак я же как Сишка».

              Nearly the full language remains available. Highlights include:

              Unrestricted use of compile-time features
              Full metaprogramming facilities
              Nested functions, nested structs, delegates and lambdas
              Member functions, constructors, destructors, operating overloading, etc.
              The full module system
              Array slicing, and array bounds checking
              RAII (yes, it can work without exceptions)
              scope(exit)
              Memory safety protections
              Interfacing with C++
              COM classes and C++ classes

              То есть опять оглядка на Сишку и С++.
              Ответить
              • Приведи реальный пример языка, претендующего на замену C и/или C++, но при этом чтоб там было без оглядки на C и/или C++.

                Сделан ли автомобиль с оглядкой на карету? Нужно ли делать автомобили без оглядки на кареты? Зачем?
                Ответить
                • Но подожди, обезьяна бездарная. Ты ведь родила именно что валидную карету. И тут мы приходим к тому, о чём я уже говорил. Автомобиле-сектант это в 95% мразь, а в 5% просто обманутый/неразобравшийся человек. Почему же? Что такое говноавтомобильное колесо? Это ворованное каретное колесо, которое приделано к оси. Обезьяна просто насрала на чертеж рандомными линиями, которые она спастила из каких-то чертежей. Хотя до сих пор не выяснено откуда именно было паста. Концепция явно ворована из кареты(потому как там всё воровано из кареты).

                  Очевидно, тут мы замечает то, что дизайн этого говна бездарного - типичная хуита. Потому обезьяны начнут прикручивать к этому говну электродвинатель и прочее. Но, очевидно, что в нормальном транспорте кони быть должны.
                  Ответить
                  • Девиации на фоне паники? Не нужно прикручивать к говну электродвигателей, смойте его в канализацию.
                    Ответить
                • Эволюция хипстерских недоязычков
                  1. Мы сделали новый модный %lang_name.
                  2. Давайте все программировать на %lang_name!
                  3. Вы ещё не используете %lang_name? Только %lang_name. Пишите на %lang_name. Смотрите как удобно.
                  4. Настало время %lang_name. %lang_name сам себя не напишет. Напиши на %lang_name, напиши ещё раз.
                  5. У нас есть привязки к интерфейсам и классам С++.
                  6. Почему никто по-прежнему не хочет писать на %lang_name?
                  7. У нас есть режим «как в Сишке».
                  8. ...
                  9. Сектанты забыли про %lang_name и форсят новый баззворд (питуха).
                  10. Про %lang_name при случае вспоминают только олдфаги и маргиналы.
                  Ответить
                  • Очень жду, когда js и python отправятся в пункт 9, к руби и пр
                    Ответить
                    • Я тоже верю, что останется только один язык. И что это будут мутировавшие плюсы, куда стащят фичи из всех языков. И без докторской степени в пердолинге в разрабы брать не будут
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Толсто. На чём тогда прототипировать и реализовывать небольшие проекты?
                          Ответить
                          • На C#-скрипте:
                            https://govnokod.ru/25353#comment457685
                            Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • А в питоне разве не референс каунтинг
                              Ответить
                            • > На свифте
                              - а главное - кроссплатформенно!

                              Языку всего 6 лет в продакшене, уже кстати нормально хуевертят, через пару годков тоже можно будет фрактал плохого дизайна писать.
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • А что так? Где винда? Да даже если и была винда (и вроде как в обозримом будущем будет), то кроссплатформенный гуй не попишешь. Рантайма ObjC, насколько я знаю, в свифте за пределами мака нет, поправь, если пизжу. В качестве IDE предлагают VS Code. SPM дикая трешевая херня.

                                  > расскажи плохое про свифт, кстати
                                  - ок, вот из недавно прочитанного. Не так давно в язык завезли property wrapper, которые можно охарактеризовать как весьма куцую реализацию паттерна декоратор.

                                  Правда, выяснилось, что с коллекциями они работают не очень.

                                  https://www.donnywals.com/why-your-atomic-property-wrapper-doesnt-work-for-collection-types/

                                  То, что людям надо велосипедить свои atomic, это фейспалм само по себе. Напомню, что в обжективе эта фича была доступна из коробки!

                                  При этом яббл придумал семантическое разделение на value types и reference types, но, чтобы тебе было удобно, в замыкание по умолчанию и те и другие захватываются по ссылке.
                                  Ответить
                                • Сорян, чот вторую ссылку не так сначала прочитал.

                                  Но это в любом случае какое-то говно, которое уже два года не обновлялось, плюс сам Яббл не имеет никакого отношения к этому проекту. Там исходники надо в какой-то недотулзе компилировать, лол
                                  Ответить
              • показать все, что скрытоvanished
                Ответить
    • Вот пример либы для парсинга и генерации кода для Protobuf https://code.dlang.org/packages/dproto
      Ответить
    • > куски исходного кода высирать как бы прямо в исходник

      Есть пропозал про метаклассы, там как раз предлагались компайл-тайм рефлексия и компайл-тайм оператор для высирания блоков кода.
      Ответить
    • тебе в джаву, подключаться к annotation processing
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • А вообще, почему работа с типами в крестах это такое говно? std::add_const, add_cv, add_volatile, add_lvalue_reference, add_ещекакаятохрень, потом еще remove_const, remove_cv ... что это за поебень вообще? Почему б не сделать, чтобы эту типохерню можно было обходить как некое дерево, и произвольным образом его читать-переписывать, конструируя новые типы через какое-то constexpr-подобное говно?
      Ответить
      • А зачем?
        Ответить
        • Например, чтоб проверить в компилтайме, что какая-то херня (структура) содержит или не содержит какие-то константные или volatile поля, чтоб на основании этого отказаться эту херню компилировать. Например, чтоб проверить, что некая структура не содержит внутри переменных с типом "указатель" и опять таки на основе этого отказаться это компилировать. Можно и другие применения придумать.
          Ответить
          • Ну так это рефлексия, к перечисленным std:: она имеет весьма опосредственное отношение. «Обходом этой типохерни» ты поля структуры никак не получишь.
            И что такого плохого в <add/remove>_const/volatile/<lvalue/rvalue>_reference? По-моему, весьма очевидные метафункции. Разве что «cv» — менее понятный сахарок для «const, volatile».
            Ответить
            • > И что такого плохого в <add/remove>_const/volatile/<lvalue/rvalue>_reference? По-моему, весьма очевидные метафункции. Разве что «cv» — менее понятный сахарок для «const, volatile».

              Проблема в их ограниченности. Например, могу ли я этой хуйней взять тип такой-то структуры, и на основе нее слепить новый тип струкутры, где все const элементы внутри сделать уже не-const (в т.ч. если в той структуре есть вложенная структура, то в эту структуру тоже влезть и там сделать не-const всё, что является const, и если там тоже структура, то там тоже пройтись с заменой, пока всё дерево не обошли)?
              Ответить
        • Можно проверять некий класс на соответствие неким спецификациям, что в нем есть такие-то публичные методы, принимающие такие-то аргументы на вход. Можно сконструировать класс, который точно такой же, как и вот тот, но только вот этого публичного метода там нет. И тому подобное
          Ответить
          • > Можно проверять некий класс на соответствие неким спецификациям, что в нем есть такие-то публичные методы, принимающие такие-то аргументы на вход.
            «Концепты» уже завезли, там в точности это и можно делать.

            > Можно сконструировать класс, который точно такой же, как и вот тот, но только вот этого публичного метода там нет.
            Звучит как какая-то генератушня.
            Ответить
            • > «Концепты» уже завезли, там в точности это и можно делать.

              А нахуя это делать этими ко-ко-концептами? Почему б не сделать компилтайм обход типов структур как дерева, с возможностью синтеза нового типа таким образом?
              Ответить
              • А нахуя это делать обходом типов структур как дерева с возможностью синтеза, когда можно просто написать «requires { hui.getLength(); } -> int» и потечь*?
                Это же примерно как предложение принимать Object и лезть ручками лезть в дерево наследования, проверяя, реализует ли переданный объект нужный интерфейсу.

                Ну ладно, ладно, крестокомитет как всегда сделал говно; представим, что мы можем написать «requires has_method(hui, getLength, int)»
                Ответить
                • > А нахуя это делать обходом типов структур как дерева с возможностью синтеза, когда можно просто написать «requires { hui.getLength(); } -> int» и потечь*?

                  Это слишком органиченная петушня, но даже она, как ты правильно заметил в примечании, в крестоговне не реализована.
                  Ответить
                  • У концептов очень прозаичная суть на самом деле. Всех заебала утиная типизация в шаблонах и километровые портянки ошибок. Вот и решили добавить немного типизации чтобы ты получал "a - не контейнер" вместо "вот тебе 100500 вариантов всякой хуйни и причины почему они не подошли". Всё, больше никаких задач они не решают.
                    Ответить
        • Например, в сетевой либе на D можно отдать в шаблонную функцию класс, где она прочитает все его методы, создав роуты для хттп сервера с проверкой аргументов https://vibed.org/api/vibe.web.web/registerWebInterface

          Либо создать привязку структуры из кода к результату запроса из базы одним вызовом функции https://code.dlang.org/packages/sqlite3

          Зато в плюсах как и в джаве придется писать тонны бойлерплейта и позориться с макросами
          Ответить
          • И сколько http-траффика за последние 10 лет вызвано кодом, написанным на плюсах и жабе?
            А сколько кодом на D?
            Ответить
          • > // automatically mapped to: POST /logout
            > void postLogout()
            Такое говнище и на джаве можно написать.
            Обойти все методы рефлектором и подвязать нужные к нужным ссылкам.
            Возможно в некоторых rest-фреймворках так и реализовано.
            Автовайринг параметров (https://www.baeldung.com/spring-request-param) вон работает по именам переменных.

            > // automatically mapped to: GET /profile
            > void getProfile()
            Кстати неявная магическая питушня, не слишком неочевидная.
            Ответить
            • > Такое говнище и на джаве можно написать.
              А на крестопарашном дерьме это написать можно?
              Ответить
            • Что в ней неявного, анскилябр? Открой код и почитай. Или доку.
              Ответить
              • То, что можно залететь как в том же PHP случайно опубликовав то, что не надо было публиковать.

                Именно поэтому я против getProfile().
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • У жабоёбов многие аннотации работают хитро, написал:
                    @WebPituz 
                    class Bagor
                    Процессор аннотаций неявно возьмёт имя класса, но всегда можно написать явно:
                    @WebPituz (name="anotherBagor")
                    class Bagor


                    Или допустим @RequestParam
                    getKoko(@RequestParam int pituzId) //name берётся из имени аргумента
                    // аналогично такому:
                    getKoko(@RequestParam(name="pituzId") int pituzId)

                    https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html
                    Ответить
                  • > у жабоебов есть аннотации, почему не использовать их?

                    Это всё полумеры. Никакие жабовские питухации не заменят нормальной гомоиконности, где код как данные, который можно в компилтайме анализировать как дерево и переписывать.
                    Ответить
                    • Кстати а что такое эти аннотации в джаве? Вот в D они называются атрибутами и это просто структуры, значения которых видны в компайлтайме.
                      Ответить
                    • Ну вот кстати джава гомоиконна получается? Ты можешь на джаве написать плагин к конпелятору джавы, который бегает по дереву, читает аннотации, переписывает что-то, срёт байткодом и т.п.
                      Ответить
                      • Плагин к компилятору? В D можно только создавать новый код, но не модифицировать текущий.
                        Ответить
                        • Annotation Processor - это просто класс, который подгружается в конпелятор на определенной фазе конпеляции и имеет доступ к AST.

                          Та самая гомоиконщина, о которой мечтает j123123.

                          К сожалению я их не писал ни разу, поэтому не знаю что они реально могут с этим AST сделать.
                          Ответить
                          • > Та самая гомоиконщина, о которой мечтает j123123.

                            В самой жабе синтаксис негомоиконен (не является фактически человекочитаемым представлением AST) - будет скорее всего хуйня какая-то с его чтением-редактированием.

                            Да и там же еще GC с жирным рантаймом, так что по любому это говно в пролете
                            Ответить
                            • Именно по этому я за XSLT.
                              Любую программу на XSLT можно представить как данные для программы на XSLT
                              Ответить
                      • показать все, что скрытоvanished
                        Ответить
                • Ну это зависит от рукожопства. Сделай отдельный интерфейс с нужными публичными методами, реализацию в WebService и вызови registerWebInterface на этом интерфейсе.
                  router.registerWebInterface!MyInterface( new WebService);
                  Ответить
                  • > сделай

                    Ну вот именно - надо предвидеть такую ситуацию и явно защищаться от нее. Иначе яйца отстреливаются только так. Хуйня полная, а не архитектура.
                    Ответить
                    • Твой вариант на плюсах в какой-нибудь либе, где нельзя ничего отстрелить?
                      Ответить
                      • Причём здесь плюсы? На них маппинг явно перечислять придётся (например в конструкторе).

                        А вот в D же всяко есть какие-нибудь аннотации чтобы явно пометить метод как доступный по хттп. А не по скриптушиному угадывать это из имён.
                        Ответить
                        • Конечно есть. Да и простую регистрацию в роутере никто не отменял.
                          Но да, можно опубликовать чего лишнего случайно.
                          Ответить
                      • показать все, что скрытоvanished
                        Ответить
                  • >Сделай отдельный интерфейс с нужными публичными методами, реализацию в WebService и вызови registerWebInterface на этом интерфейсе.

                    Кто-то рассказывал про борьбу с бойлерплейтом.
                    А в итоге предлагается бойлерплейт куда больший, чем явная расстановка аннотаций или ручная подвязка кобенаций http-метод+путь к указателям на нужные функции.
                    Ответить
                • >То, что можно залететь как в том же PHP случайно опубликовав то, что не надо было публиковать.

                  А приватной питушнёй это не фиксится?
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • На самом деле задумка не такая плохая. Просто скриптушиная до мозга костей.

                      > у меня случайно в контроллере оказался метод getFoo()
                      Я и предлагаю: бубликовать в вёб только бубличные методы, а приватами не светитить.
                      Ответить
                      • Предлагаю добавить в язык http public
                        Ответить
                      • А доки мы читаем жопой. Первая строчка "Each public method of the given class instance will be mapped to a HTTP route."
                        Ответить
                        • Дык один чел унаследовал, второй опубликовал, а третий getFoo() добавил. Доку читал только второй по очевидной причине.

                          Архитектура - хуйня. Хрупкая очень. Не хотите учиться на опыте ПХП - ну ваше право, только не жалуйтесь потом что поломали.
                          Ответить
                          • Архитектура чего? Одной функции? Напиши свою, она простая.
                            В данном случае лучший вариант - это описать интерфейс, который потом будет зареган.
                            И вообще это хорошая практика даже в плюсах - разные интерфейсы разным пользователям.
                            Ответить
                            • Архитектура которая "все паблик методы класса" отправляет в хттп блин. Сколько на этом уже пхпшных cms'ок погорело.
                              Ответить
                            • З.Ы. Говно остаётся говном, как ты не обмазывай его хорошими практиками.

                              Разложили грабли на ровном месте и выдумываете как их обойти.
                              Ответить
                          • показать все, что скрытоvanished
                            Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Написать отдельный интерфейс, чтобы лишнее не попало
                          Ответить
    • Кстати на хабре свежее мясо подвезли для нелюбителя раста и systemd:
      "Долгое время Rust позиционировался исключительно как язык для системного программирования." https://habr.com/ru/post/504622/
      "Десять лет назад был анонсирован systemd, который устроил революцию в управлении системой..." https://habr.com/ru/post/503816/
      Ответить
      • systemd переписывают на rust?
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • > сильно ты страдал

            Да нет, это лучшие годы были. Более простых и понятных скриптов я со времён слаки не видел.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Я кстати знаю в чём Проблема.

                Прозвучит довольно нелогично, но корень оверинжинирного зла был посажен когда в Линукс начали приходить корпорации.

                Сначала все радовались: «смотрите, швабодка подебила», мы заставили крупные конторы и энтерпрайз комитить для пользы сообщества.

                Однако посоны не учли момента, что корпорации будут писать то что выгодно и полезно для них.

                >Настройку сервиса systemctl делает через d-bus.
                Какие проблемы? В Линуксе всё энтырпрайзненько.

                >Чтобы включить/выключить сервис на прыщах нужен демон с сетевым протоколом.
                Ынтырпрайз решал свои задачи анального контроля.

                90% ненужной простому юзеру питушни в линукс-мире форсит Шапка.
                Красношапочники не комитят крутые алгоримты в ffmpeg, и не пилят годноту в ядро, они просто ебошат какие-то геттеры/сеттеры, обёрточки, изменения ради изменений.

                Именно поэтому dbus, именно поэтому Network.Minetger, именно поэтому сетевые питухи, именно поэтому PulseAudio со звуком через сеть, итд.

                >Теперь у нас питушня уровня если не винды, так Solaris SMF точно по сложности.
                Enjoy your Enterprise Linux.
                Ответить
                • Какой багор )))
                  Ответить
                  • Линус даёт красношапочнику по шапке.
                    Вот это багор.
                    On Sun, Dec 23, 2012 at 6:08 AM, Mauro Carvalho Chehab
                    <[email protected]> wrote:
                    >
                    > Are you saying that pulseaudio is entering on some weird loop if the
                    > returned value is not -EINVAL? That seems a bug at pulseaudio.
                    
                    Mauro, SHUT THE FUCK UP!
                    
                    It's a bug alright - in the kernel. How long have you been a
                    maintainer? And you *still* haven't learnt the first rule of kernel
                    maintenance?
                    
                    If a change results in user programs breaking, it's a bug in the
                    kernel. We never EVER blame the user programs. How hard can this be to
                    understand?
                    
                    To make matters worse, commit f0ed2ce840b3 is clearly total and utter
                    CRAP even if it didn't break applications. ENOENT is not a valid error
                    return from an ioctl. Never has been, never will be. ENOENT means "No
                    such file and directory", and is for path operations. ioctl's are done
                    on files that have already been opened, there's no way in hell that
                    ENOENT would ever be valid.
                    
                    > So, on a first glance, this doesn't sound like a regression
                    
                    Shut up, Mauro. And I don't _ever_ want to hear that kind of obvious
                    garbage and idiocy from a kernel maintainer again. Seriously.
                    [...]
                    
                    WE DO NOT BREAK USERSPACE!
                    
                    Seriously. How hard is this rule to understand? We particularly don't
                    break user space with TOTAL CRAP. I'm angry, because your whole email
                    was so _horribly_ wrong, and the patch that broke things was so
                    obviously crap. The whole patch is incredibly broken shit. It adds an
                    insane error code (ENOENT), and then because it's so insane, it adds a
                    few places to fix it up ("ret == -ENOENT ? -EINVAL : ret").
                    
                    The fact that you then try to make *excuses* for breaking user space,
                    and blaming some external program that *used* to work, is just
                    shameful. It's not how we work.
                    
                    Fix your f*cking "compliance tool", because it is obviously broken.
                    And fix your approach to kernel programming.
                    
                    Linus

                    https://lkml.org/lkml/2012/12/23/75
                    Ответить
                    • Прелесть. Очень приятно читать.

                      Без сарказма: с питухами, которые ломают юзерспейс, только так и надо!
                      Ответить
                      • Политкорректные выблядки джва года назад загнобили Линуса.
                        Теперь он так не жжёт.
                        Ответить
                        • А политкорректные крестопарашники когда-нибудь попробуют загнобить меня на говнокоде?
                          Ответить
                          • Очередная сводка в лживой газете, замалчивающей мои успехи?
                            Ответить
                  • Или вот, шедевр эпистолярного жанра.
                    Опять шапка тянет каку в ядро.
                    Guys, this is not a dick-sucking contest.
                    
                    If you want to parse PE binaries, go right ahead.
                    
                    If Red Hat wants to deep-throat Microsoft, that's *your* issue.  That
                    has nothing what-so-ever to do with the kernel I maintain. It's
                    trivial for you guys to have a signing machine that parses the PE
                    binary, verifies the signatures, and signs the resulting keys with
                    your own key. You already wrote the code, for chissake, it's in that
                    f*cking pull request.
                    
                    Why should *I* care? Why should the kernel care about some idiotic "we
                    only sign PE binaries" stupidity? We support X.509, which is the
                    standard for signing.
                    
                    Do this in user land on a trusted machine. There is zero excuse for
                    doing it in the kernel.
                    
                                   Linus

                    https://lkml.org/lkml/2013/2/21/228

                    Если бы не Линус, редхатовцы и прочий ынтыпрайзный скам давно бы уже натянули в ядро ненужной дряни, превратив его в очередной systemd.
                    Ответить
                    • >соревнование членососов
                      >отсосать у Microsoft
                      Линус прекрасен
                      Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Сейчас для Линукса больше всего делает... Valve.
                    Вот там видно что люди делом заняты. Сейчас переписывают directX на вулкан (https://github.com/doitsujin/dxvk)
                    Разработка Wine в последнее время ускорилась просто колоссально, бежит семимильными скачками.
                    Игры работают гораздо быстрее/стабильнее.

                    >без корпораций прыщ бы не выстрелил. Именно они сделали его популярным
                    Google Android, внезапно.
                    Ответить
                    • Кстати, а зачем им это? Вторая попытка раскрутить steam machine, только на этот раз не привлекая разрабов игр?
                      Ответить
                      • > Вторая попытка раскрутить steam machine, только на этот раз не привлекая разрабов игр?
                        Да.
                        Чтобы потом в теории стричь профиты с приставки, ОС и софт для которой не требует лицензий.

                        А пока что +12% рынка в Steam. (10% Mac+2% Linux)
                        Они же поставляют вместе с играми собранный, пропатченный wine.
                        Называется сиё https://en.wikipedia.org/wiki/Valve_Proton
                        Ответить
                        • > 2% linux

                          Ну т.е. реально линуксоидов даже больше, чем эти 2% т.к. часть из них по второму разу за винду в дуалбуте посчитана?
                          Ответить
                      • Щас немного привлекли к себе внимание новой халвой, можно и на линупсе снова попытаться бабки попилить.
                        Ответить
                      • А зачем этот steam machine, учитывая что современные производительные (/me неодобрительно посмотрел на Nintendo Switch) приставки сейчас и так на x86-64 крутятся?
                        Ответить
                        • В стиме игры вдвое дешевле приставочных. Ну и на ПК много всяких эксклюзивов которых никогда не будет на приставках, а на паровых машинах они пойдут.
                          Ответить
                          • Тогда проблему надо решать через взлом этих x86-64 приставок и накатывание туда прошивки для steam machine. Притом на PS4 со старой уязвимой прошивкой как раз так и сделали

                            Правда там железо в приставках особое, под него специально затачивают игры, а всякая обычная ширпотребная хрень из стима может там работать не так хорошо, как хотелось бы.
                            Ответить
                            • Ну вот это кстати минус стим машин.

                              На обычных приставках ты можешь 10 лет без апгрейда смотреть мыльцо в 30 фпс. И это реально тестируется.

                              А здесь, как и на ПК, не будет гарантий что новая игра нормально взлетит. Тем более, что стим машины будут делать разные вендоры, да ещё и с разной мощностью.
                              Ответить
                              • после выхода киберпанка комментарий выглядит забавно
                                Ответить
                          • случилось странное: Dishonored 2 на плойку щас дешевле, чем у габена
                            Ответить
                      • > 01.06.2020
                        > Вторая попытка раскрутить steam machine

                        https://www.phoronix.com/scan.php?page=news_item&px=Steam-Deck

                        15 July 2021

                        Following months of rumors about new gaming hardware from Valve, today they announced Steam Deck as a new handheld PC gaming device starting at $399.

                        The Steam Deck is an all-in-one portable PC with a custom AMD SoC and, of course, running SteamOS. Steam Deck is focused, of course, for running Steam but also advertised as an "open PC" that can run other software too.
                        Ответить
                        • а с этой хуйни можно транслировать на нормальный экран?
                          Ответить
                          • Вроде да. А зачем, там же обычные игры из стима?
                            Ответить
                            • именно поэтому

                              как играть на этом миллипиздрическом экране в обычные игры из стима?
                              Ответить
                              • Да он не такой уж миллипиздрический по сравнению с мобилами или тем же свичом... Я бы даже сказала, что он великоват и тяжеловат для портативки.
                                Ответить
                                • ну вот

                                  ни то ни сё

                                  и экран маловат, и при этом форм-фактор странный

                                  одинаково устанут глаза и руки

                                  учитывая, что вальв обосралась с куда более удачным в теории продуктом, кому нужно это, ума не приложу
                                  Ответить
                              • У тебя зрение хорошее?
                                Ответить
                    • vanished
                      Ответить
        • >systemd переписывают на rust
          Говно говна?
          Ура! Ура!
          Ответить
          • предлагаю systemd переписать на javascript, и сделать nodejs неотъемлемой частью линуксовых дистров.

            а управление сделать через телеграм бот. Да. Куда удобнее управлять системой с айфона через телеграм.
            Ответить
      • > systemd, который устроил революцию в управлении системой

        Теперь хосты через openvpn сами не отрезолвятся в ipшники.
        Ответить
      • Тупая пропаганда как обычно врёт:
        >systemd нестабилен и забагован

        >Вовсе нет. Мейнтейнеры, по мнению Леннарта, внимательно относятся к issues на GitHub, мониторят багтрекеры дистрибутивов Linux и, надо сказать, число багов довольно мало для такого ключевого компонента ОС.

        >Разработчики вполне справляются с блокирующими разработку и использование багами, также помогает относительно быстрый цикл разработки с инкрементальными нововведениями с целью качества и стабильности.


        В маркетинговом женерик-спиче ключевая фраза: «по мнению Леннарта».
        Ответить
      • Про openvpn я уже писал.

        Однако же дадим слово Линусу, когда он разъёбывал Kay Sievers (один из ключевых авторов systemd)
        https://www.reddit.com/r/linux/comments/221irz/linus_blocks_all_code_from_kay_sievers_f rom_linux/

        And by "their" you mean Kay Sievers.

        Key, I'm f*cking tired of the fact that you don't fix problems in the
        code *you* write, so that the kernel then has to work around the
        problems you cause.

        Greg - just for your information, I will *not* be merging any code
        from Kay into the kernel until this constant pattern is fixed.

        This has been going on for *years*, and doesn't seem to be getting any
        better. This is relevant to you because I have seen you talk about the
        kdbus patches, and this is a heads-up that you need to keep them
        separate from other work. Let distributions merge it as they need to
        and maybe we can merge it once it has been proven to be stable by
        whatever distro that was willing to play games with the developers.

        But I'm not willing to merge something where the maintainer is known
        to not care about bugs and regressions and then forces people in other
        projects to fix their project. Because I am *not* willing to take
        patches from people who don't clean up after their problems, and don't
        admit that it's their problem to fix.

        Kay - one more time: you caused the problem, you need to fix it. None
        of this "I can do whatever I want, others have to clean up after me"
        crap.

        Linus
        --
        Ответить
        • Уверен, нубы не контрибьютят в ядро линукс

          https://govnokod.ru/27509#comment664750
          Ответить
    • Лицензионное соглашение

      Общие положения.

      Данный сайт Говнокод.ру (в дальнейшем именуется Сайт) является информационным сайтом, незарегистрированным как СМИ в Российской Федерации;
      Сайт является сайтом с открытой системой регистрации. Любой пользователь с соответствующими учётными записями на других проектах может зарегистрироваться на Сайте и публиковать материалы, изменяя таким образом главную и другие страницы сайта;
      Участники сообщества Сайта могут размещать как части исходных кодов разнообразных программ, являются ли они их авторами или нет с собственным комментарием к данному коду, так и комментарии к каждому конкретному исходному коду;
      Участники сообщества Сайта могут оценивать исходные коды, а также комментарии других пользователей положительно и отрицательно. Данная оценка является полностью информативной и отображает мнение пользователей Сайта, а не мнение авторов проекта (в дальнейшем именуемых Администрацией);
      Участникам сообщества Сайта запрещается публикация материалов, содержащих ненормативную лексику, а также материалы, запрещённые к публикации Законодательством Российской Федерации;
      Участникам сообщества Сайта запрещается публикация материалов, которые являются интеллектуальной собственностью третьих лиц: участникам запрещается публиковать части исходных кодов тех проектов, исходные коды которых защищены законом об интеллектуальной собственности.
      Данные правила всегда находятся по следующему адресу: http://govnokod.ru/page/license.
      Ответить
      • а твой сайт использует куки? а почему не сообщает? Может, мне подать на тебя в суд? Ты нарушил мое прайваси!
        Ответить
        • а ты что, гражданин ЕС?
          Ответить
          • а разве только гражданин ЕС может подать на Инюё в евроейский суд?
            Ответить
            • ну вроде вся эта канитель про gdpr и куки касается только граждан ЕС. gdpr точно, про куки могу и напиздеть
              Ответить
              • Вообще грусть, конечно

                Куча бессмысленных мудаков выдумывают ненужное говно, а люди потом тратят человекогоды на реализацию ненужного говна.

                Хорошо бы блядь правительства вообще не говорили бы программистам и админам, что им делать
                Ответить
                • ну gdpr как идея неплох + очередной легальный способ отжима денег у населения копрораций

                  а с куки полная чушь, согласен. ещё и согласиться или отказаться обычно невозможно, не включив жабаскрипт. с чем боролись-то?
                  Ответить
                  • а какой смысл в gdpr? можешь привести реальный кейс, когда он был бы полезен?

                    Меня вот раздражает, что каждый пидорский сервис хочет мой номер телефона. Но против этого законов нет. Зато не дай бог мне куку поставят, блядь
                    Ответить
                    • типа ты можешь попросить удалить свои личные данные
                      Ответить
                      • право на забвение, которое? А зачем оно?
                        Ответить
                        • что за право на забвение?

                          лучше сам почитай gdpr, чтобы не было испорченного телефона
                          Ответить
                          • ну ты можешь сказать компании, что она забыла всё, что о тебе знает

                            да я читал когда-то и помню, что ничего интересного не нашел

                            Просто есть такой тренд в обществе (довольно тупой имхо): все боятся крупных корпораций, которые за тобой следят.

                            То есть ты сначала всю инфу вываливаешь компаниям, а потом ссыш, что они про тебя слишком много знают


                            В общем я пиздец конечно не репрезентативен. Меня не ебет то, что ебет 89% населения

                            И ебет то, что не ебет 89% населения

                            эх((
                            Ответить
                            • идея действительно в том, чтобы сказать компании "забудь меня"

                              только она ж всё равно не забудет. по крайней мере до тех пор, пока штрафы за утечки данных не будут выше, чем бабло за их продажу
                              Ответить
                              • кроме того, данные уже утекут к этому моменту, их продадут в даркнете.

                                А еще у долбоёбов могут спиздить базу логинов с паролями, и пароли там плейнтекстом. И за это никаких санкицй нету.
                                Ответить
                                • ну шо ж

                                  подумай ещё, сколько раз ты попадаешь на камеру, пока просто за молоком в магазин выходишь
                                  Ответить
                                  • именно поэтому я за <<Камерун>>, где на камеры денег нет
                                    Ответить
        • потому что gdpr поебать если ты не занимаешься обработкой personal data по серьезке

          When the regulation does not apply

          Your company is service provider based outside the EU. It provides services to customers outside the EU. Its clients can use its services when they travel to other countries, including within the EU. Provided your company doesn't specifically target its services at individuals in the EU, it is not subject to the rules of the GDPR.

          во-вторых какой долбоеб будет оставлять на говнокоде настоящие личные данные?
          Ответить
          • Роману и Тарасу щас обидно было
            Ответить
          • Вообще люди пишут под гостем или с фейковых аккаунтов потому, что стесняются той хуйни, что они тут пишут.

            Нормальный человек не стесняется назвать свое имя
            Ответить
            • я не стесняюсь хуйни

              я стесняюсь камерунских хуйцов

              но я вообще давно уже на каждом сайте стараюсь новый ник заводить. При том, что я и регаюсь раз в пятилетку
              Ответить
              • А, я понял. Типа ты делаешь себе ник из настоящего ФИО с настоящей фотографией, а потом осетин деает его файку, и пишет про камерун
                Ответить
                • например
                  Ответить
                • Типа как hormand? Ну от всего не защитишься, это не повод прятаться. Любой твой знакомый может взять фотки с вконтактика и пошутить над тобой. Или написать тебе от имени фейковой тян. Что теперь, не регаться ни в одной соцсети?
                  Ответить
                  • >пошутить
                    очень оригинальная, остроумная, и тонкая шутка.
                    Ответить
                • > деает его файку

                  Сначала прочитал как «даёт его Файку» (Fike).
                  Ответить
              • иди на хуй
                Ответить
            • звучит как копипаста про альфа-самцов, которые не стесняются передернуть на трапа
              Ответить
            • > Нормальный человек не стесняется назвать свое имя

              Сказал guest6.
              Ответить
    • > #define krestogovnotypeof(a) std::remove_reference<a>::type
      – какая экономия )))
      Ответить
      • Зато понятно. Я, например, не знал что такое remove_reference, но теперь догадался.
        Ответить
        • > теперь догадался

          И что оно делает? ;)

          Вообще, крестоговнотайпоф это просто деклтайп. Ремув референс делает немного больше.
          Ответить
          • В крестоговне вообще нет полного аналога гнутого typeof()
            https://govnokod.ru/26703#comment550481
            крестоговно опять обосралось
            Ответить
          • Возвращает тип говна? Если говно по ссылке, то тип этого говна. Но я не проверял.
            Ответить
          • Это же очевидно что он делает

            Суваешь в него тип ссылка-на-петуха а получаеш тип питух
            Ответить
      • можно было написать std::remove_reference_t<a> и сэкономить ещё четыре символа.
        Ответить

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