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

    +144

    1. 1
    http://wiki.php.net/rfc/functionarraydereferencing

    На днях наткнулся вот такую ночную вазу с хорошо выдержанным содержимым.
    Копипастить не буду, просто загляни под крышку.
    Речь идет о том чтобы спустя 10 лет наконец пропатчить невозможность обращения к элементу массива без использования промежуточной переменной, если массив возвращается функцией (коих функций в Personal Home Page сотни).
    Также обратите внимание на даты.

    Запостил: bugmenot, 30 Июня 2010

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

    • Помнится, когда я после JS начал раскуривать PHP, мне здорово не хватало этой штуки. Ещё вот такую хотелось бы:
      (new SomeObject())->someMethod();

      Также хочу заметить, что всё-таки, имхо, обсуждать недоработки и костыли в ПО, а не конкретный код - это немного оффтоп.
      Ответить
      • На мой взгляд, язык программирования, в который спешно добавили поддержку классов, но не хотят добавить поддержу выражений уже сам по себе символизирует. Безусловно, спойлер, раскрывающий секрет бешеной популярности PHP на ГК. Однако, согласен, возможно лучше было бы наложить это в кучу.
        Ответить
        • ничего тут символичного нету. если обсуждения по линку почитаешь, увидишь что отклонялось ранее по тому что: (1) пхп разработчики были заняты чем то более важным, (2) были проблемы с гарбадж коллекшн, (3) полноценную поддержку (не только для массивов но и для других типов) на скорую руку сделать бы не получилось.
          Ответить
          • Мде, в серьёзных пороектах такие "проблемы" фиксят за пару часов. Видимо, сам ПХП написан с применинем жуткого количества ГК, так что там парсер весь надо переписывать, чтобы подключить эту фичу. Хорошая кстати идея - поищу-ка говно в исходниках их.
            Ответить
            • ага. за пару часов. попробуй сам язык написать, который поддерживает хотя бы половину того что умеет пхп.

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

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

                > и проблем там с парсером даже не упоминалось...

                Тогда в чём проблема? Я, может, плохо знаю пхп (свят-свят), но здесь ведь проблема только синтаксическая. Или в пхп всё езё хуже, и он не может делать автоматические временные переменные?
                Ответить
                • Лол, зыкаю исходники php, буквально первая же попавшаяся строчка на си:

                  filespec = (char *)malloc(strlen(dir) + 2 + 1);


                  Накаких комментариев, почему 2 + 1, конечно же нету.. (их там вообще нету)
                  Ответить
                  • пыхапэ вообще отличный.

                    var_unserializer.c

                    if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
                    	yych = *YYCURSOR;
                    	switch (yych) {
                    	case 'C':
                    	case 'O':	goto yy13;
                    	case 'N':	goto yy5;
                    	case 'R':	goto yy2;
                    	case 'S':	goto yy10;
                    	case 'a':	goto yy11;
                    	case 'b':	goto yy6;
                    	case 'd':	goto yy8;
                    	case 'i':	goto yy7;
                    	case 'o':	goto yy12;
                    	case 'r':	goto yy4;
                    	case 's':	goto yy9;
                    	case '}':	goto yy14;
                    	default:	goto yy16;
                    	}
                    Ответить
                    • префикс yy/YY подсказывает что это код автоматически сгенерированый yacc/bison.
                      Ответить
                      • В таком случае его бы не плохо вынести в отдельный модуль, нет?
                        Ответить
                        • ну оно уже как бы есть отдельный файл. там как бы сверху прям так и написано:

                          /* Generated by re2c 0.13.5 on Mon Jun 28 13:40:53 2010 */

                          http://svn.php.net/viewvc/php/php-src/trunk/ext/standard/var_unserializer.c?revision=300843&view= markup
                          Ответить
                • > Тогда в чём проблема?

                  лень по линку сходить? читать не умеешь? цитирую (самого себя) для идиотов еще раз причины:

                  "(1) пхп разработчики были заняты чем то более важным, (2) были проблемы с гарбадж коллекшн, (3) полноценную поддержку (не только для массивов но и для других типов) на скорую руку сделать бы не получилось."
                  Ответить
                  • > (1) пхп разработчики были заняты чем то более важным

                    Чем?

                    > (2) были проблемы с гарбадж коллекшн

                    А "гарбадж коллекшн" какого рода в ПХП?

                    > (3) полноценную поддержку (не только для массивов но и для других типов) на скорую руку сделать бы не получилось.

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

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

                        ничёсе..
                        Ответить
                  • >были проблемы с гарбадж коллекшн
                    Использовать готовый и проверенный что-ли не могли? Говнокодеры...
                    Ответить
              • http://lurkmore.ru/Сперва_Добейся
                Ответить
    • вердикт: жуткие говнокодеры
      Ответить
    • Ну наконецтож, особенно бесила невозможность if (in_array(parse_url($url)['host'], $blacklist)) сделать
      Ответить
      • за такую возможность мне в какой то мере нравился перл, хотя там много неоправданных сложностей
        Ответить
        • Да-да, в мэйллисте есть доставляющие возражения, что, мол, "не хотим, слишком перлово!" :-)
          Ответить
          • вот почему пхп язык это сборище костылей: в погоне за двумя зайцами язык собирался
            Ответить
            • Предлагаю ещё php переписать под моно.
              Я-то думал Boehm GC, юзаемый в моно (кстати, в транке уже есть mono-sgen.exe, но только под линукс), - то ещё говнецо, но прочитав немного о "модели" памяти в PHP, я понял, что моно - прямо-таки state of the art в рантаймостроении, а Мигель де Иказа - гений.
              Ответить
              • не желаете взяться за создание "нью-пхп"?
                Ответить
                • уже сделали
                  руби и петон
                  Ответить
                  • Всё-таки как ни крути, но опенсорсники не умеют продумывать архитектуры и вообще не имеют вкуса. Руби - каша пубертатных хвастовств, питон - неопрятный, почти как пхп.
                    Ответить
                    • orly?
                      а что тогда опрятное?
                      Ответить
                      • Опрятно это когда имена функций следуют определённой конвенции. В питоне функции тоже могут иметь то андерскор, то обходиться без него, классов могут быть с большой буквы, с маленькой...

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

                        Я вообще не люблю андерскоры, лично мне они кажутся неопрятными.
                        Ответить
                        • и все?
                          смешно во второй раз
                          Ответить
                          • Это общее впечатление, не буду же я здесь каждую мелочь описывать.
                            Ответить
                            • канеш не надо ничего описывать, лучше сесть и наваять труЪ язык с запретом андерскоров =)
                              Ответить
                              • Такие уже есть =\

                                И ввообще, серьёзный бизнес делает только CamelCase =/
                                Ответить
                                • >Такие уже есть =\
                                  например?
                                  Ответить
                                  • Я согласный по крайней мере на запрет андерскоров в публичных интерфейсах, а сюда подходят сишарп и жаба.
                                    Ответить
                        • >кучей взятых для понта отовсюду парадигм.

                          C#, нэ?
                          Ответить
                          • В C# всё цельно свели в единую систему.

                            Смори: ООП расширен до компонентной системы. C# это компонентно-ориентированный язык. Компонентная система использует события, чтобы можно было замыкать обработчик (делегат) события компонента на текущий контекст. Делегаты для простоты записи могут быть лямбдами. А отсюда и функциональщины недалеко.

                            Всё пронизано одной идей. Что там ещё в C# есть? Указатели, ref, signed целые -- для простоты p/invoke'а. И т. д.

                            Вот только LINQ, имхо, не в кассу.
                            Ответить
                            • ну так и есть - все в куче
                              Ответить
                              • Да нет, не в куче. Я хотел сравнить, да не закончил. Компонентность не мыслима без замыканий, то бишь лямбд. А вот теперь скажите, зачем лямбды в питоне? Он совершенно не компонентный по духу язык и события там не являются примитивным конструктом... И в то же время он далеко не функциональный... Т.е. чисто для понта ("какой крутой язык не обходится без лямбд?") и в кучу. Список можно продолжать.
                                Ответить
                              • Я ничё не имею против питона, и лямбды это всегда крута, но со стороны питон, руби, пхп, пёрл - действительно менее опрятные и продуманные, чем жаба, сишарп и даже дельфи (все первые придумывались пацанами в свитерах, все последние - компаниями, и тенденция налицо).
                                Ответить
                                • http://www.felix-colibri.com/papers/compilers/delphi_5_grammar/delphi_5_grammar.html
                                  vs
                                  http://web.njit.edu/all_topics/Prog_Lang_Docs/html/ruby/yacc.html

                                  в случае делфи, говно видно невооруженным взглядом уже на уровне грамматики
                                  Ответить
                                  • Вы любитель опрятных языков? Ценитель? Не часто встретишь людей со вкусом и собственным мнением относительно синтаксической и семантической составляющей языка.
                                    А кому-то важно рубить бобло.
                                    Интересно, что важнее?
                                    Ответить
                                    • на правах кэпа:
                                      бобло важнее в коммерческих проектах
                                      в JFF важнее фан
                                      Ответить
                                  • А какой язык, по вашему мнению, наиболее синтаксически и семантически чист?
                                    Ответить
                  • > руби и петон
                    почему гении всегда такие извращенцы?
                    *ворчит* нет, что бы попроще и поэлегантней, что-то в стиле явы....
                    Ответить
    • Может оно и к лучшему
      Не хочу потом отлаживать типа такого $foo->bar()[2]->baz()[0]->buzz($arg)[0] (и ни одного коммента) за очередными сказочными долбоебами. один фиг все в итоге раскладывается на составляющие.
      Ответить
    • Закончу ка я этот бесполезный спор:
      http://antonov-andrey.ucoz.ru/news/rejting_jazykov_programmirovanija_na_201 1_goda/2010-12-23-88
      Ответить
    • у меня мозилко на ссылку ругаетсо
      Ответить

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