1. PHP / Говнокод #13323

    +154

    1. 1
    list($V_id, $V_image, $V_title, $V_text, $V_url, $V_link_to, $V_status) = array('','','','','','','');

    множественное присваивание?! не, не слыщал

    Запостил: dead_star, 08 Июля 2013

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

    • Никогда не понимал смысл применения list().
      Никогда не находил его использование удобным. Возможно просто не попадалось таких проектов.
      Ответить
      • иногда бывает необходимо
        например классическая задача поменять местами значения массива без введения новой переменной
        list($list[0], $list[1]) = array($list[1], $list[0]);

        или если хочется оперировать переменными, а не ключами массива
        list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
        Ответить
        • Интересненко. Значит, мне все таки не попадались такие задачи, где можно было юзать list()
          Ответить
        • >list($list[0], $list[1]) = array($list[1], $list[0]);
          Тут, кстати, list и не нужен. :3
          $list = array($list[1], $list[0]);
          Ответить
          • А вот и нужен. Перестановка
            $list = array($list[1], $list[0]);
            перезапишет массив и в нем станет всего два элемента, даже если изначально было больше.
            Ответить
      • Все же в ПХП неудобный синтаксис. Вот зачем было придумывать конструкцию list(), неужели нельзя было определить просто перечисление переменных через запятую?
        Ответить
        • в том то и прикол что можно
          множественное присваивание в PHP:
          $V_id = $V_image = $V_title = $V_text = $V_url = $V_link_to =  $V_status = '';
          Ответить
          • Неее, я не про множественное присваивание, а про распаковку кортежа.
            Приведу пример как это в Питоне сделано:
            size = (100, 500)
            width, height = size
            #то же самое но без промежуточной переменной
            width, height = 100, 500

            Множественное присваивание хорошо ровно до того момента как тебе потербуется изменить одно из значений по умолчанию.
            Ответить
            • Литерал кортежа (неизменяемого списка) в питоне -
              a1,(a2,)+
              . Иногда это нужно окружить скобками.

              // Кэп.
              Ответить
        • Сделали, чтобы не нарушать старую сишную традицию, в которой переменные объявлялись таким образом:
          int i, j, k = 100, l = 500, m, x, y = 9000, z;
          P.S. Хотя зачем, если в PHP сишного перечисления переменных без инициализации не бывает?
          Ответить
        • Под "перечислением переменных" ты, наверно, имеешь в виду питоновский кортеж? Рискну предположить, что пришло оно с перла, где литерал списка выглядел как ($var1(,$var2)+), т.е. поставив лишние скобки вокруг выражения - получали список. Хуйня, да. В пыхе это решили решить list()-ом, в питоне сделали чуть поэлегантнее - кортеж из одной переменной определяется как
          var1,

          Не для всех понятно, но зато на грабли со списком с одним элементом не наступишь.
          Ответить
    • По-моему норм. Но можно немного улучшить:
      list($a, $b, $c, $d, $e, $f) = array_fill(0, 6, '');

      Так даже удобнее читать переменные, чем через =
      Ответить
      • >Так даже удобнее читать переменные, чем через =
        Что такое 6? С первого взгляда видно, что переменных 6? А чтобы добавить еще 1, надо увеличить 6 на 1?
        Ответить
        • да.
          можно, конечно, сразу сто поставить, чтобы не парится с увеличением, если забыть про оптимальность.
          Ответить
          • Вот только нахуя все эти заморочки с list() или $a=$b=$c=$d=''?
            По мне так
            $V_id = '';
            $V_image = '';
            $V_title = '';
            $V_text = '';
            $V_url = '';
            $V_link_to = '';
            $V_status = '';
            легче и читать и править.
            Ответить
            • Если нет гарантии, что они будут одинаковые, то да. А так <$a=$b=$c=$d=''> удобнее, по моему.
              И причем не только я так думаю. К примеру вот знаменитый однострочник xor обмена переменных на сипипи:
              x ^= (y ^= (x ^= y));
              Ответить
              • > знаменитый однострочник xor обмена переменных на сипипи:
                x ^= (y ^= (x ^= y))
                Который, знаменит тем, что это такой же сраный UB, как и i++ + ++i.

                Откуда вообще берется желание упихать все в одну строку? От лени пару раз нажать энтер и дописать еще пару-тройку символов?
                Ответить
                • x ^= (y ^= (x ^= y)) - короткая запись алгоритма.
                  i++ + ++i - головоломка.

                  ;)
                  Ответить
                  • > короткая запись алгоритма
                    Короткая и неправильная запись алгоритма.

                    > головоломка
                    Решение которой зависит от фазы луны и компилятора ;)
                    Ответить
                    • >>Короткая и неправильная запись алгоритма.
                      Разве? Вроде норм. Хотя в шарпе сработает не так.
                      Ответить
                      • > Разве?
                        Да. В крестах это 100% UB из-за того переменную присвоили дважды не разделив присваивания sequence point'ом. Компилятор может взять старое значение x в регистр, затем подсчитать (y ^= (x ^= y) и поксорить со старым значением, получив в результате 0. А может записать результат x^=y сразу, и затем в x ^= (...) поюзать уже новое значение, получив правильный ответ. Вот так от прихоти оптимизатора зависит результат... Скобки тут ничем не помогают, можно их и убрать ;)

                        Сишный стандарт я не особо читал, не помню, упоминаются ли там секвенс поинты, но вот пример на котором эта срань фейлится и на Си: https://ideone.com/3FWzDc
                        Ответить
                        • Питушарский юз volatile. Какраз-таки отсутвие оптимизации её и погубило. Вернее питушарская питушня с дампами переменной на каждую инструкцию.

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

                            P.S. Все равно xorswap говно с точки зрения перфоманса - три последовательных операции, каждой из которых нужен результат предыдущей.
                            Ответить
                • Ну на регистрах я не думаю, что где-то у здравых писальщиков - это уб. Прекрасно ложится на xor. В одну строку удобней - парсить легче.
                  Ответить
                  • Ну если на 3 оператора разбить (a^=b; b^=a; a^=b) - будет норм, без всяких убов. На асме тоже будет норм. Заглючить может именно в одном выражении.

                    Самая жопа в том, что оно глючит очень редко, при достаточно сложных обстоятельствах - код со stackoverflow, в котором чел жаловался на то, что у него xorswap выдает херню, у меня работает как часы... И из-за этого очень сложно кому-то доказать, что оно МОЖЕТ глючить.
                    Ответить
                    • Глючить на amd64 с нормальным конпелятором он не может. 3регистра у конпелятора 100% будет - это rdi, rsi, rax - их хватит. На инлайн нужен один rax, ибо операнды итак в ргистрах( в нормальном коде конечно).
                      Ответить
                      • Если они в регистрах - то обычный свап лучше. Тогда компилятор может дальше по коду просто юзать эти регистры наоборот, и выкинуть свап полностью. А если они где-нибудь в массиве, то один хрен будет 2 записи и 2 чтения, но в ксорсвапе в добавок к этому еще и 3 никому не нужных ксора.
                        Ответить
                        • О5 вы, анскильные питухи меня минуснули. Твой обычный свап говно, не быстрее хорсвапа, если ты этого не понимаешь - уж прости меня. Гцц умеет xchg из хорсвапа. И да, а вот твою питушню, аля "обычный свап" гцц не детектит, и оставляет мувы.
                          Ответить
                          • > Гцц умеет xchg из хорсвапа.
                            Да, проверил, делает.

                            > "обычный свап" гцц не детектит
                            Танунах? Пруф, пожалуйста. У меня задетектил и ксорсвап и обычный. Причем даже xchg не сделал, а вообще выкинул нахер весь свап.
                            Ответить
                            • uint64_t test(void) {
                                uint64_t x = rand(), y = rand(), t; uint64_t i = 1024ul*1024*1024;
                                do {
                                  t = x;x = y;y = t;
                                } while(--i);
                                return x^y;
                              }


                              Такую хренатень с хосвапом у меня xchgиг, а мувы оставляет.
                              Ответить
                      • Вот, к примеру, типичный код, который есть почти в любой сортировке:
                        if (a[i] > a[j])
                            swap(a[i], a[j]);
                        С обычным свапом компилятор поступит примерно так:
                        mov ebx, ... ; загружаем a[i] 
                            mov edx, ... ; загружаем a[j]
                            cmp ebx, edx
                            jle noswap
                            ; от свапа остались всего 2 сохранения
                            mov ..., edx ; пишем a[j] в a[i]
                            mov ..., ebx ; пишем a[i] в a[j]
                        noswap:
                        Ну или так:
                        mov ebx, ... ; загружаем a[i] 
                            cmp ebx, ... ; сравниваем с a[j]
                            jle noswap
                            ; от свапа остались всего 2 сохранения и одна загрузка
                            mov edx, ... ; загружаем a[j]
                            mov ..., edx ; пишем a[j] в a[i]
                            mov ..., ebx ; пишем a[i] в a[j]
                        noswap:
                        В случае с ксорсвапом вдобавок к этому будет питушня с xor'ами, которую компилятор скорее всего не сможет выпилить.
                        Ответить
                        • показать все, что скрытоЯ даже не заметил твою портянку. О5 ты мне тут кукарекаешь. Твой код говно.

                          Ты кукарекаешь про лишние хоры, а чёж ты не кукарекаешь про 2 лишних счётчика? Думаешь конпелятор заменяет эту питушню на нормальный код?

                          Никто не юзают тут свап, только анскильные С++ питушки. Если ты хочешь написать это нормально, то ты напишешь эту руками. И да, 2хора - это последние, что тормазит в твоей сортировке. Ты либо подходи комплексно, как я, либо не кукарекай про оптимизацию вообще.
                          Ответить
                          • > Если ты хочешь написать это нормально, то ты напишешь эту руками.
                            Зачем? В инлайн на swap'е уже не верим?

                            P.S. Ок, царь, напиши любую сортировку массива по-правильному.
                            Ответить
                            • показать все, что скрытоСвап юзают только питухи. Он реально в 99% случаев не нужен.


                              Ты выкати мне своё говно - я перепишу его нормально.
                              Ответить
                              • Ок, я слился. Ни в одной адекватной сортировке свапа нет ;( А искуственно вставлять его я не буду.
                                Ответить
                                • У нормальных пацанов данные и так всегда отсортированы, это только питухам нужны питушиные свопы.
                                  Ответить
                • Я не знаю, что такое UB. Что такое UB?
                  Ответить
                  • Undefined Behaviour - неопределенное поведение.
                    Грубо говоря, когда стандарт языка Си говорит "А хрен его знает, что должно получиться в такой ситуации!"
                    При этом обычно каждый производитель компилятора решает для себя сам, что же все-таки должно получиться.
                    Как результат - один и тот же код, скомпилированный разными компиляторами (или даже одним, но с разными настройками оптимизации), работает по-разному и выдает разный результат.
                    Ответить
                    • показать все, что скрытоНа одной архитектуре у УБ обычно есть одна единственная разумная реализация - её придерживаются все нормальный конпеляторы. Остальные конпеляторы - говно, и за Си-конпелятор не считается.

                      В мире сейчас один единственный Си-конпелятор - ГЦЦ. Сейчас он является почти эталонной реализацией сишки и всех фич. Остальные нормальные конпеляторы, аля icc, питух-шланг берут в основу своего поведения - поведение гцц. В 80% им его даже не надо брать, ибо в нормальных реализациях поведение одинакого.

                      То, что ты описываешь - это миф, рождённый анскильными животными ближе к нулевым годам. Тогда появилось тысячи Си-конпеляторов, 80% из этого говда не держало ни один стандарт, либо еле-еле осиливали с89, без всяких фич. Это время всяких борландев, МКашного говна, майздайского говна, расцвет делфийских говно Си иде.

                      Это конпеляторы писали тотальные животные за еду, а их юзали ещё более анскильные животные за ещё меньше кол-во еды. Ни первые, ни вторые не видели нормальных конпеляторов.

                      Сишку сейчас никто не знает - обычно так кукарекают те самый говнари из поднулевых, которые юзали маздайские говно ИДЕ с их говноконпеляторами.

                      Сейчас же реальность такова, что очень сложно найти УБ, которое работает по разному в основных конпеляторах - GCC и ICC. Максимум это питушарский пример i++ + ++i, которое никто не юзает, ибо операция не имеет смысла.


                      Поэтому сейчас УБ - это пугалка анскильными питухами, которые не знают сишку, ещё более анскильных питухов, что бы не знали сишку, аля: "В сишке везде УБ - нихрена не работает. УБ на УБ" и т.п.
                      Ответить
                      • А власти скрывают...
                        Ответить
                        • показать все, что скрытоНайдёшь мне десяток УБ, которые дают разный результат на icc и gcc - я тебе похвалю, а так ты очередной питух.

                          И заметь лишь десяток, а десяток это даже не 1/10 из всех УБ сишки.

                          И да, питушок, разве я где-то не прав?
                          Ответить
                      • >На одной архитектуре у УБ обычно есть одна единственная разумная реализация - её придерживаются все нормальный конпеляторы. Остальные конпеляторы - говно, и за Си-конпелятор не считается.
                        Блядь, ни дай бог кому-то придется портировать код ПИТУХА.
                        Ответить
                        • показать все, что скрытоКуда портировать? Мой код написан на гнуси и линукс/посикс api - портируется на любую хардварную архитектуру за 5минут.

                          Всякие говноОС для домохозяек меня не интересуют - мой код никогда не будет работать под этим говно - я специально так сделаю. Хочешь писать под это говно - пиши, но мой код не трогай, и не оскверняй свой скверной.
                          Ответить
                          • > я специально так сделаю
                            Ешь котят, еби Саю, юзай UB'ы.
                            Ответить
                          • >портируется на любую хардварную архитектуру за 5минут.
                            >На одной архитектуре у УБ обычно есть одна единственная разумная реализация - её придерживаются все нормальный конпеляторы. Остальные конпеляторы - говно, и за Си-конпелятор не считается.

                            А другие компиляторы не нужны?

                            >Всякие говноОС для домохозяек меня не интересуют - мой код никогда не будет работать под этим говно - я специально так сделаю.
                            Под прошивку для рутеров писать интересней?

                            Вот блядь, что самое интересное, все программисты ядра питона так и думают - очень много вещей под виндой работают как бык поссал, хотя можно было бы сделать и нормально. Осью для домохозяек, питушок, была 9х, которую ты не факт что застал, а NT православна.
                            Ответить
                            • >А другие компиляторы не нужны?
                              Зачем нужно говно, если есть не говно, причем спо?

                              >Под прошивку для рутеров писать интересней?
                              Про какую?

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

                                >Про какую?
                                Под линупс, очевидно же.

                                Питухось - это линупс. Пруф:
                                >Часто, бродя по Интернету, натыкаюсь на очаги гитлерлинукс-пидарасов. Основными постулатами в их тусовках всегда является личный понт, полная безграмотность в предмете IT-бизнеса и предвзятость. Пучеглазые лузеры, обделавшиеся во всём и вся, вербуют дураковатых малолеток, которым объясняют, что предать Родину за Бога-Питуха - очень круто. Петушьём линуксоидов начали называть довольно давно именно за это - за подчёркнутую безграмотность при вопиющем фанатизме на пустом месте. Линуксоид - равнозначный термин с "шестёрка", "придурок", "лузер".
                                Ответить
                                • >А что если у людей проект уже на другой конпелятор завязан? Им ради тебя все менять, питух?
                                  Значит они животные - что я могу сказать. Я тут причем? Пусть юзают говно, но из-за них я не обязан писать говно под каждый недоконпелятор.


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

                                  Что есть у маздайки? Даже на рутере стоять не может - максимум запускалка для игр и офиса. Для игр ОС вообще не нужна. Зачем ещё она нужна?
                                  Ответить
                                  • >Значит они животные - что я могу сказать. Я тут причем? Пусть юзают говно, но из-за них я не обязан писать говно под каждый недоконпелятор.
                                    Это всего лишь значит, что с твоим говном они работать не будут.

                                    >Самая фичастая, понтовая - основана на идеях царского юникса. Топовая ОС. Под ней обрабатывается большенство внятной информации в мире, её камни выдают самый большой перфоманс на земле.
                                    Линупс? Совсем поехавший? Когда ваш линупс поднял харю, НТ уже была в теме. Бздуны вас до 2000-х и после пидорасили во все дыры так, что до сих пор помнят.
                                    Сколько там процентов серваков под линупсом? Под какие оси есть Oracle, не в курсе?

                                    >Что есть у маздайки?
                                    Нет, ну предположим, на самом деле, если с линупсом поебаться, из него можно сделать прошивку для рутеров, прошивку для пылесосов, дорогие платные линупсы от редхата на сервера. Все, кроме десктопа - там как было 1%, так и будет, с таким-то отношением. Так что линупс остается прошивкой для рутеров, с которой надо ебаться.
                                    И пора бы выйти из комы - маздайком была 9х, а NT гораздо лучше.
                                    Ответить
                                    • >Сколько там процентов серваков под линупсом? Под какие оси есть Oracle, не в курсе?
                                      man top500, man интернет трафик. man перфоманс.

                                      >Нет, ну предположим, на самом деле, если с линупсом поебаться, из него можно сделать прошивку для рутеров, прошивку для пылесосов, дорогие платные линупсы от редхата на сервера.
                                      Животное, редхат халявный. Ты несёшь тотальную херню не зная вообще ничего. Линукс из коробки работает на твоей армке.

                                      >И пора бы выйти из комы - маздайком была 9х, а NT гораздо лучше.
                                      То, что было до NT даже было не ОСью, а говном. Сейчас это хоть ОС назвать можно. Всё стырено у полуоси, говно на говне - питушня везде. Нормального апи нет, перфоманс нет - всё говно.
                                      Ответить
                                      • Оракл под какие оси, скатина? Или ты не знаешь, что это такое?

                                        >man интернет трафик
                                        Победит Cisco, который на бзде.

                                        >редхат халявный.
                                        Питушара, на винде поддержка есть, а на твоем редхате поддержка будет стоить дороже винды. Бесплатный линупс дороже платной винды.
                                        >Линукс из коробки работает
                                        Из коробки - это если провайдер рутер с ним пришлет, а так придется еще с кроссконпеляцией поебаться.

                                        >Всё стырено у полуоси,
                                        А ваш линупс все стырил у юнипсов, питух.

                                        >Нормального апи нет, перфоманс нет - всё говно.
                                        Винапи это не апи? Совсем поехавший?

                                        То есть, что ваш линупс на десктопе никому в хуй не упал, ты даже не споришь?
                                        Ответить
                                        • >Оракл под какие оси, скатина? Или ты не знаешь, что это такое?
                                          Говно для анскильных БДешечек, которйы к перфомансу не имеет отношение.

                                          >Победит Cisco, который на бзде.
                                          Не победит - это странспортировка траффика, я говорю о гинерации траффика.

                                          >Из коробки - это если провайдер рутер с ним пришлет, а так придется еще с кроссконпеляцией поебаться.
                                          Упоролся чтоли? Ты даже что такое кросскомпиляция не знаешь, зачем кукарекаешь? Иди осиль crossdev.

                                          >А ваш линупс все стырил у юнипсов, питух.
                                          Не стырил. Ничего не стырил, а вот маздайка стырила, причем в тхую.

                                          >Винапи это не апи? Совсем поехавший?
                                          Говно тотально. Паскальское говно которое нормальный сишник даже видеть не сможет - не то, что юзать. Поэтом обычно пишется код под бздю, линукс на их api, а под питушраскую маздайку на какой-нибудь либе.


                                          >То есть, что ваш линупс на десктопе никому в хуй не упал, ты даже не споришь?
                                          Как запускалка для игрушек? Это не принципально. Юзать мой линукс анскильным животным? Нет не упал.

                                          "Мозг идиотам нахрен не нужен" - я согласен, только это проблема не мозга, а идиотов.
                                          Ответить
                                          • >Solaris, Oracle
                                            >Говно для анскильных БДешечек
                                            >КОКОКО НИНУЖНО КОКОКО
                                            Что еще спязднешь, пидорва?

                                            >Не победит - это странспортировка траффика, я говорю о гинерации траффика.
                                            А, так man сервер? Кукарекай внятнее. Сколько там процентов на линупсе?

                                            >Упоролся чтоли? Ты даже что такое кросскомпиляция не знаешь
                                            Я знаю, что это. Изкаропки - это воткнул диск и поставил, все остальное - это пердолинг.

                                            >Не стырил.
                                            >unix-like
                                            > а вот маздайка стырила
                                            > единственная популярая не-unix-like система
                                            Мухахахахах, вот это ты, сука, пропизделся, я ебал!

                                            >Поэтом обычно пишется код под бздю, линукс на их api, а под питушраскую маздайку на какой-нибудь либе.
                                            В твоих влажных мечтах, прыщавенький.

                                            >Как запускалка для игрушек? Это не принципально. Юзать мой линукс анскильным животным? Нет не упал.
                                            Ну тогда привыкай быть однопроцентным долбоебом, которому в нормальном обществе не место.

                                            >"Мозг идиотам нахрен не нужен"
                                            Для других людей "идиоты" = платежеспособный клиент, а для тебя? Ах да, ты так и не рассказал, чем же ты занимаешься, питушила.
                                            Алсо, мак еще более полон идиотизма, но нет, на нем сидят многие жаваебы.
                                            Ответить
                                        • Ну и да животное, ты не ответило на 70% вопросов.
                                          Ответить
                        • Питушок пишет под маздайку на питушарнем недоконпеляторе? А ок, это сишка и УБ виноваты, а не твой конпелятор говно.
                          Ответить

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