1. Go / Говнокод #28342

    +1

    1. 1
    Конструктор по умолчанию?

    Не, не слышали.
    Рефлексией итерируемся по свойствам и вызываем функцию инициализации полей ))))))))))))))

    Запостил: 3_dar, 22 Августа 2022

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

    • Это ёбаный пиздец какой-то, блядь
      Ответить
    • каой багор ))

      а что за яп?
      Ответить
      • Goвно
        Ответить
        • тогда я ничего не понял, покажи код

          в говне нет конструкторов, там можно присвоить значения полям по умолчанию, либо сделать функцию, которая заполняет нужную тебе херню
          Ответить
          • type Musor struct {
                Detali []int
            }
            type Pomoika struct {
               M1 Musor
               M2 Musor
               M3 Musor
               …
               M20 Musor
            }


            Я хочу проинициализировать все Detali по умолчанию = []int{1,2,3}, как мне это сделать?
            Ответить
            • а что за ебанутая такая структура, почему там не массив мусоров?

              и кстати я напиздел, значения по умолчанию присвоить нельзя
              Ответить
              • Ну такая нужна структура. Чтобы обращаться к полям по имени. Можно, конечно, сделать массив мусоров, и обращаться к ним по enum. Но я не обязан прогибаться под Goвняные ограничения и пилить так, как я не хотел.
                Ответить
                • тогда делай конструктор явно
                  type Musor interface {
                  	Detail() []int
                  }
                  type musor struct {
                  	Detali []int
                  }
                  
                  func (m *musor) Detail() []int {
                  	return m.Detali
                  }
                  
                  func NewMusor() Musor { //<---вот твой конструктор
                  	musor := new(musor)
                  	musor.Detali[0] = 1
                  	musor.Detali[1] = 1
                  	return musor
                  }
                  Ответить
                  • Потом питух добавит новый мусор, а в конструкторе забудет. И я получу NilPointerException. Поэтому я и написал цикл по рефлекции.
                    Ответить
                    • написий генератор кода
                      Ответить
                    • я только понял твой коммент наконец

                      ты бугуртишь от отсутствия коснтрукторов по умолчанию в Го, и рефлексия это единственное решение
                      Ответить
                    • У меня в Си никаких конструкторов нет. Но я могу написать т.н. функцию, которая проинцициализирует некую структуру некоторой хуйней. Нахуя для этого какие-то специальные "конструкторы"?
                      Ответить
                      • struct Pitux
                        {
                            signed char x; //Should always be 42 if used as another structure member
                        };
                        
                        struct MegaPitux
                        {
                            long long aligned_member;
                            Pitux p1;
                            Pitux p2;
                        };
                        Напиши функцию, которая проинициализирует всех питухов в мегапитухе числом 42, и в случае добавления третьего питуха в мегапитуха позже либо проинициализирует его тоже, либо сломает копуляцию.
                        Ответить
                        • Могу только кодогенератор под это написать, который сгенерит такую функцию (но мне лень).

                          А вообще, для подобного рода хуйни нужен говномеханизм для инспекции структур, т.е. чтобы тип структуры можно было обходить как дерево, который бы можно было в компилтайме использовать и через него делать синтез неких функций. Чтоб такую хуйню не только для каких-то "конструкторов" использовать, а вообще хуй пойми для чего. Короче, надо чтоб гомоиконность.
                          Ответить
                          • >тобы тип структуры можно было обходить как дерево

                            гомоиконность нужна
                            Ответить
                          • // MegaPitux is handled by MegaPitux*** functions
                            // Check those functions when MegaPitux is being modified
                            struct MegaPitux
                            {
                                long long aligned_member;
                                Pitux p1;
                                Pitux p2;
                            };


                            close enough.
                            Ответить
                          • Как ты пишешь кодогенераторы?
                            Ответить
                        • он тебе сейчас намакароебит
                          Ответить
                        • > Напиши функцию, которая проинициализирует всех питухов в мегапитухе числом 42, и в случае добавления третьего питуха в мегапитуха позже либо проинициализирует его тоже, либо сломает копуляцию.

                          А в крестах можно написать нечто для автоматического печатанья хуйни, если для вложенной хуйни определены методы печатанья хуйни?

                          Ну допустим есть класс для точки в декартовых координатах:
                          class point{
                               float x, y;
                            public:
                              void print_shit(ofstream f)
                              {
                                f << "x = " << x << "; y =" <<  y << "\n";
                              }
                          };


                          Я например хочу чтобы если я напишу класс с кучей точек
                          class someshit{
                               point a, b, c, d, e, f;
                            public:
                              void print_shit(ofstream f)
                              {
                                // то вот что мне тут такое написать,
                                // чтобы оно мне позвало a.print_shit(); b.print_shit(); c.print_shit(); ....
                                // и чтобы если я насру в этот класс еще каких-то там переменных типа point
                                // то чтобы оно само там дописало print_shit() для них ?
                              }
                          };

                          И чтобы если у переменных внутри класса нет метода print_shit(), то тогда пусть компиляция ломается
                          Ответить
                          • Крестоговно как обычно содержит в себе какие-то частные хуйни (типа того же вызова конструкторов для всех вложенных хуйней в хуйни), но на произвольную питушню это уже не натягивается
                            Ответить
                            • ну завези в C++25 std::is_hujna_has_method_point, положи рядом с Бесселем:)


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

                                    Если пистон компилируется 0 секунд и падает в рантайме а кресты компилсяются 30 секунд и падают во время компиляции, то кажется что питон с точки зрения продуктивности оптимальнее
                                    Ответить
                                    • Выбор между "компиляция упала на машине разработчика" и "программа упала на проде" довольно очевиден, не?

                                      Кроме того, проверка в рантайме тоже занимает время
                                      Ответить
                                      • Выбор будет между "программа упала на проде" и "программист успевает скомпилировать код один раз за день"

                                        Во втором случае неочевидно, будет ли программа написана в принципе
                                        Ответить
                                        • Зависит от сферы еще

                                          Если это софт для авионики, то я предпочел бы второй вариант:)
                                          Ответить
                                  • Более широкий вопрос, чего именно будет стоит хуйня которую хочет j123123 и готовы ли мы платить эту цену

                                    На коке или идрисе никто особо не пишет
                                    Ответить
                                    • Выбор мейнстримного языка обычно продиктован рынком и поддержкой крупными вендорами, так что популярность не всегда однозначно говорит о качестве решения)

                                      Но у j123, насколько я понимаю, горит от половинчатости решения: в С++ завезли какую-то метушню, которой можно решить несколько задач. Потом начали добавлять костыли, по костылю на каждый кейс (std::is_хуе_мое).

                                      j123 предлагает решить проблему на корню, а не ставить костыли.


                                      Но конечно это всё не бесплатно: статическеий анализ такого кода всегда будет тюринг полным и IDE будут сосать
                                      Ответить
                                      • > Но конечно это всё не бесплатно: статическеий анализ такого кода всегда будет тюринг полным и IDE будут сосать

                                        Статический анализ крестоговна и так тьюринг-полный т.к. шаблонопарашное метапрограммирование уже есть, и оно тьюринг-полное. И constexpr-ы кстати тоже тьюринг-полные
                                        Ответить
                                        • да, но шаблоны можно не раскрывать, например, в IDE. Или раскрывать частично

                                          Тут более-ли-менее четкая граница между метаговном, и говном. А в случае полной гомоиконности её же не будет
                                          Ответить
                                • Чтоб не было оверхеда и чтоб ловить ошибку на этапе компиляции, а не в рантайме (как уже было замечено)
                                  Ответить
                            • он хочет в компайл тайме

                              Грубо гря так (птичий язык)
                              fun petushok(kurka:Kurka) where: checkKurka(kurka) 
                              {
                              
                              }
                              /////////
                              compileTime fun checkKurka(obj:struct): boolean {
                              // выполняется в компайл тайме
                              // вернет фолс -- не скомпилица
                              if (obj.fields.length != 4) ...
                              }
                              Ответить
                          • Detection idiom. Через requires выражение ищешь метод с именем, сверяешь сигнатуру. И вызываешь его. Или что-то еще делаешь. С С++20 появилась адекватная минимальная интроспекция.
                            Ответить
                            • Реальный пример будет? Каким образом изнутри метода класса можно пробежаться по всем переменным этого класса и проверить, есть ли у них такой-то метод, и если есть, вызвать его?
                              Ответить
                              • Detection idiom это хак (вроде как на сфинае) чтобы в компайл тайме отловить отсутствие нужного поля/метода и по этому строить логику



                                Пробежаться по всем полям, и проверить их по случайному условию вроде бы никак нельзя?
                                Ответить
                                • Вообще, у меня легкое дежавю

                                  Еще десять лет назад по говнокоду бегал петух, и говорил, что дескать в С++ два разных языка (для комплайт тайма и для рантайма) и что он вынужден два раза писать одно и тоже, как сраных ПХПшник, который пишет бизнес-логику один раз на ПХП, второй раз на джаваскрипте, и потом еще в mysql тоже самое пишет, и что не плохо бы в С++ как-то унякфицировать всё

                                  Слово "Гомоиконность" еще тогда не было тут зафорщено
                                  Ответить
                      • Именно пожтому ваши языки - говно. Я написал в комменты зачем мне.
                        Ответить
                        • Как ни крути, а все едино: все языки сосут буй у С++. Так что прекращай валять ваньку, и пиши опять на плюсах. Там у тебя и шаблоны и конструкторы по умолчанию и стопицот способ решить задачу
                          Ответить
                          • > все языки сосут буй у С++

                            Покажи-ка мне, как C++ решает задачу из https://govnokod.ru/27403#comment626280
                            Ответить
                            • Этим должен дебагер заниматься, а не язык

                              Я уж молчу о том, что компилятор может твои локлаьные переменные и вовсе уконтропупить
                              Ответить
                              • Какой нахуй дебагер? Если тебе надо логи вести, то ты тоже дебагером цепляешься к хуйне?
                                Ответить
                                • Если тебе надо логи вести, то ты и пиши логи. Если тебе хочется не писать это вручную, то используй генератор кода.
                                  А какой язык (кроме гомоиконных типа лиспа) это решает?
                                  Ответить
                                  • > А какой язык (кроме гомоиконных типа лиспа) это решает?

                                    В языке D это можно было б легко решить, если там через рефлекшен можно каким-то образом получить список локальных переменных
                                    https://dlang.org/phobos/std_traits.html - но подобной хуйни я что-то не вижу. Там есть какие-то блядь isAbstractClass, isAbstractFunction, isCallable, isDelegate и прочие "isPituz", но способа получить локальные переменные, доступные в таком-то там месте какой-то функции там похоже что нет.
                                    Т.е. в D это простым способом не решается, но кое-как черезжопно это все ж можно решить, через миксины и написание парсера
                                    Ответить
                                  • Так-то в целом да, чтобы всякие такие говноязычки типа C++ это решали, надо будет добавлять какое-то говно, типа "std::get_list_of_local_variables"
                                    Но сам ты такого говна написать не можешь, не влазя в кишки компилятора. А если б была гомоиконность, ты б что угодно мог нахуевертить. Поэтому я за гомоиконность
                                    Ответить
                                    • Я против. У меня в ПХП ничего этого нет и не нужно.
                                      Ответить
                                    • а что ты думаешь про мудифицкацию AST, как в некоторой скриптопараше
                                      https://jmusacchio.github.io/blog/2016/groovy-ast-transformations/
                                      Ответить
                                      • Зависит от того, насколько близок AST к синтаксису. Если синтаксис это скобочная хуита как в LISP-подобной хуйне, это норм. Если синтаксис это что-то сильно заебанное, то тогда AST-трансформации это неудобная хуйня т.к. неясно каким хреном какая нода какой синтаксиальной хуйне соответствует, и с такой хуйней будет неудобно работать т.к. хер разберешь, какая конструкция в какой AST высирается
                                        Ответить
    • After reading some posts on r/programming I started to ask myself why do people outside r/golang hate Go so much? It kind of discourages me to learn the language and just makes me feel like I should be learning Rust because it will be better for me in the future.
      Ответить
    • Напитон, тридар!
      Ответить
    • что это за порода?
      https://twitter.com/microrjomba/status/1559878324582862851
      Ответить

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