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

    0

    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
    func down(h Interface, i0, n int) bool {
    	i := i0
    	for {
    		j1 := 2*i + 1
    		if j1 >= n || j1 < 0 { // j1 < 0 after int overflow
    			break
    		}
    		j := j1 // left child
    		if j2 := j1 + 1; j2 < n && h.Less(j2, j1) {
    			j = j2 // = 2*i + 2  // right child
    		}
    		if !h.Less(j, i) {
    			break
    		}
    		h.Swap(i, j)
    		i = j
    	}
    	return i > i0
    }

    Какие же интерфейсы в Go скудные, что заставляют разработчиков использовать функции API внутри вспомогательных в пределах одной сущности. Взято из: https://github.com/golang/go/blob/master/src/container/heap/heap.go

    Запостил: JaneBurt, 06 Января 2022

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

    • У меня в Си "интерфейсов" вообще никаких нет, и норм.
      Ответить
      • .h
        Ответить
        • .h это просто некая хренотень, в которой описывают прототипы функций, макросы и прочую питушню. Ключевого слова "interface" там нет.
          Ответить
        • В K&R можно было без интерфейсов: считалось, что у необъявленных функций «резиновое» количество аргументов размером с int. Иногда такие программы даже работали и не падали.

          Ну как работали? Ими пользовались до очередной заметки о «переполнении буферов» и о «выполнении произвольного шеллкода».
          Ответить
          • > у необъявленных функций «резиновое» количество аргументов размером с int

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

              Керниган и Ритчи почему-то решили, что лучше продолжать «anyway».

              Я не знаю, зачем им возможность вызова необъявленных функций. Для экономии строчки исходника?
              Ответить
              • > Я не знаю, зачем им возможность вызова необъявленных функций.
                Мужик хочеть вызвать функцию, значит такая функция есть! Что, мы мужику не доверяем?!
                Ответить
              • > Керниган и Ритчи почему-то решили, что лучше продолжать «anyway».

                Какой PHP)
                Ответить
              • Однопроходность. Чтобы конпелятор совсем без состояния был. Хотя оффсеты полей в структурах и значения енумов один фиг приходится помнить.
                Ответить
                • > Однопроходность

                  backtrack-ащая с семантики на лексер когда нужно узнать что означает "A" в "A(b)" ага.
                  Ответить
                  • Дык мы про древнюю сишку или современные кресты, где парсинг >> зависит от контекста?
                    Ответить
                    • > где парсинг >> зависит от контекста?

                      Вроде не зависит. >> - перегружаемый оператор. Функция перегружаемых операторов не вопрос синтаксиса.

                      А в Сишке есть синтаксическое ambiguity типа "A(b)" - это "вызов функции с именем A и аргументом b" или "декларация переменной b типа A". "A*b" - "A умножить на b" или "b - указатель на данные типа A". Вот тут уже парсинг конструкции зависит от семантики A и b.
                      Ответить
                      • Зависит, ибо шаблон<шаблон< кок >>
                        Ответить
                        • templateTag ::= 'template' . '<' . templateVariadicTag . '>'
                          templateVariadicTag ::= kok | templateTag

                          Синтаксическая неоднозначность тут избегаема благодаря начальному терминалу. А вот что означает выражение "A*b" - произведение A на b или декларацию переменной b типа A* вычислимо только по значению имен, ибо обе конструкции могут встречаться как statements
                          Ответить
                          • > Синтаксическая неоднозначность тут избегаема

                            a<b> c;
                            a<b<c>>d;

                            Что означают эти конструкции? Переменная с шаблонным типом или просто сравнения и сдвиги? На уровне синтаксиса не определить.
                            Ответить
                            • как можно было так обосраться, кстати? Почему для шаблонов было не взять что-тол такое, что однозначно их идентифицирует?
                              Ответить
                              • Там и так все сорта скобочек и кавычек юзаются... Не триграфы же изобретать.
                                Ответить
                                • Почему нет?
                                  Ответить
                                  • Ага. В шаблонизаторах вон "{{", "}}", "{%", "%}" вполне юзаются.
                                    Ответить
                                    • Это наводит на мысль, что программист на stl и boost — тоже оператор шаблонизатора, по сути.
                                      Ответить
                                    • В шаблонизаторах другое. Долбоёбам их долбоёбский бог запретил юзать "<", потому что иначе трудно будет писать невалидный код и забывать закрывать таги.

                                      Но почему не юзать трифграфы и правда не понятно
                                      Ответить
                                • > Не триграфы же изобретать.

                                  Почему бы и нет? Операторы битового сдвига и логических операций состоят из нескольких рун.
                                  Ответить
                                  • Unicode в помощь:
                                    https://old.reddit.com/r/rust/comments/5penft/parallelizing_enjarify_in_go_and_rust/dcsgk7n/
                                    Ответить
                                    • That's just a "template" file, which I use search and replace in order to generate the three monomorphized


                                      да блядь))))) Это не анекдот.

                                      Вот и индейцы пригодились, или, как их называют канадцы, First Nations
                                      Ответить
                      • Внимательнее нужно быть.

                        >> — это не только оператор, а ещё, например, две подряд закрывающие скобки шаблона.
                        Ответить
                      • Именно поэтому в древней сишке все переменные надо было объявить одним блоком вверху?
                        Ответить
                        • Ну в отличие от Паскаля например все равно компилятору не понять, где заканчивается блок с декларацией переменных и начинается блок с инструкциями. "A*b;" сверху функции вполне может быть "A умножить на b" после "C*d;" ("d - указатель на C").
                          Ответить
                        • Или древняя Сишка запрещала использовать выражения в качестве statement-ов (хотя это не разруливает "A(b)" без контекста в таблице имен - вызов функции такой же statement как и объявление переменной)?
                          Ответить
                          • А что такое A (b) в древней сишке?
                            Ответить
                            • a) Вызов функции A с аргументом b;
                              b) Декларация переменной b типа A;
                              Ответить
                              • > b

                                Эээ... это в каком конпеляторе так работает?
                                Ответить
                                • Проверь.
                                  Ответить
                                  • Да сишку крестами собрали, походу. Лень проверять.
                                    Ответить
                                    • Скобочная хуйня в декларации переменных очевидно нужна для говна вида:
                                      char *(a[3]);
                                      char (*b)[3];
                                      char (*(*c)[3])[10];

                                      Если в скобках нет никакого "*" и "[100500]", с чего б это считать ошибкой?
                                      Ответить
                                      • Ну гцц, к примеру, считает, склоняясь к вызову функции.

                                        Ой бля... Он склоняется к вызову функции только если тип не объявлен.
                                        Ответить
                • Там много такой «экономии». Например, тип указывается перед идентификатором переменной тоже ради «однопроходности» (в данном случае для экономии стека компилятора).

                  Хотя в оптимизирующих компиляторах это уже потеряло смысл.
                  Ответить
      • Си - язык программирования от народа. Всякие Йажи, Свифты, Джаваскрипты, Go, Rust-ы, Шарпы - жалкая пародия на него и рядом не стояли...
        Ответить
    • какой пиздкц
      https://arstechnica.com/gadgets/2022/01/google-fixes-nightmare-android-bug-that-stopped-user-from-calling-911/
      Ответить
      • На моем Nokia 3310 такого не было. И кстати он уже 20-ый год работает без зарядки.
        Ответить
        • > 20-ый год работает без зарядки.
          И заодно весь дом электричеством питает?
          Ответить
          • Просто питается от сети т.к. заряжать уже нечего.
            Ответить
            • На телефонах такое не работает, надо подпаиваться вместо батареи.
              Ответить
              • Вместо батареи можно конденсаторов (ионисторов) понавпаивать.
                Ответить
                • Я паяльщик ненастоящий, поэтому не знаю, что это такое.
                  Так-то наверное было бы круто поставить сразу за генератором, но с другой стороны что-то я не видел, что их много где юзают.
                  Ответить
          • Ага. Заодно питает ферму генерирующую колеса...
            Ответить
      • Кста, на BlackBerry 1 января сработала таймбомба и тоже экскремные вызовы отрубила.
        Ответить
    • https://twitter.com/Nekrolm/status/1475524929542139914?t=YNC6uBKnh1G5tsUPMK tp5Q&s=09

      "Соискатель втащил буст, постгрес, левый фреймворк для микросервисов, чтобы руками сериализовать и перемножить две матрицы как vector<vector>... В програме как минимум 4 точки UB. И на некорректном json на вход сервис ложится с сегфолтом. Это победа."

      Бедные плюсовики которым на 2 часа дают тестовые...
      Ответить
      • Очень жаль, что он не использовал Кубернтейтс. Я бы его на работу не взял
        Ответить
    • Игра в слова. Начинаю я.

      PHP
      Ответить
    • Пятиминутка юмора
      https://i.postimg.cc/dVNvZM2M/image.png
      Ответить
      • Наконец-то нашелся человек, который и вправду чекнул свои привилегии
        Ответить
      • > Область, край
        Алтайский

        > Отключение компьютера от стыковочного узла
        Это форум космонавтов?
        Ответить

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