LINUX.ORG.RU

PHP vs RoR vs Django


0

0

Опубликованы результаты сравнительных испытаний производительности трёх различных веб-фреймворков: Symphony(PHP), Ruby on Rails и Django(Python).

Вкратце: Rails оказался гораздо быстрее, чем Symphony, а Django - гораздо быстрее, чем Rails.

>>> Подробности

★★

Проверено: Shaman007 ()

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

Желающим - прошу что-нибудь провякать по поводу системы на PHP, которую я написал в ноябре, и которая: а) снаружи никогда не догадаешься, что она на PHP. Люди просто уверены, что это статика, пока не откроют форум :) б) Выдержал 20000 юзеров в день на одном сервере.

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

Далее, приведу пример полноценной CMS системы на Parser, писанной два года назад за две недели ровно. Слабо? Думаю нет. А слабо сделать это же, первый раз в жизни увидев язык? :) Это по поводу порогов вхождения.

Aceler ★★★★★
()
Ответ на: комментарий от lefsha

> Переменная в тексте программы это одно. переменная пришедшая через соединение это другое. Просто не надо путать.

registerglobals можно (нужно) отключить и пользоваться $HHTP_GET_VARS[]. Вуаля.

Aceler ★★★★★
()
Ответ на: комментарий от annonymous

уй да
шаред мемори, дедикейтед семафоры я же просил без етого

мне работать надо а не думать как объект подвесить через какой костыль. напесал и забыл

gigabitto
()
Ответ на: комментарий от anonymous

Конкретно я (автор цитируемого поста) с этим и не спорил =) Наоборот, привёл подтверждающий пример (16.07.2006 18:12:48)

Тяжело быть анонимом, да.

anonymous
()
Ответ на: комментарий от Aceler

> "не бывает быдлоязыков, бывают быдлопрограммеры".

Очень даже бывают ;( Visual Basic (да и вообще любой Basic, наверное). Ранние Фортраны (ОК, это было от недостатка опыта). И я слышал много плохого об ABAP/4 8) (ничего против PHP не имею - не пользовался).

tailgunner ★★★★★
()
Ответ на: комментарий от Aceler

> а) снаружи никогда не догадаешься, что она на PHP. Люди просто уверены, что это статика, пока не откроют форум

а чо скрывать? стыдно?

> Выдержал 20000 юзеров в день на одном сервере.

20к юзеров в день? та ты герой просто. посмотрим шоб твой сервер сказал если б у тебя там два ляма было.

кстате ещо один гвоздь в гроб пхп вспомнил - тредов нет и не будет. в результате для консольных приложений приходится юзать чойто другое и переписывать половину функций на нормальных языках. специально для быдлокодеров: форки и вызов 1.php & 1.php & 1.php не предлагать. надо шоб треды общались между собой красиво а не через искуственно выданную шаред мемори или мой-екслюел. кроме того иногда приходится массивы по 800 метров держать в памяти. три раза форкнул - машине кирдык

gigabitto
()
Ответ на: комментарий от anonymous

Какая-то имхо путаница с этими блоками в руби. Блок - это конструкция типа {|a| foo(a)}. Но сама по себе такая конструкция не имеет смысла! Для того, чтоб создать из неё функцию, надо к ней зачем-то присобачить ключевое слово proc или lambda (синонимы): proc {|a| foo(a)}. Но хрен с ним. Создали мы какую-то функцию: hello = proc {|name| "Hello, #{name}!"}. Теперь пытаемся вызвать её: hello('Piotr Ivanovitch'). А фигу! Не получится, ибо это ни разу не функция, а невнятный объект типа Proc. Надо, почему-то, так: hello.call('Piotr Ivanovitch'). Уссаться и сдохнуть.

Казалось бы, простая конструкция типа {|a| blabla(a)} должна возвращать объект типа "функция", и всё было бы в шоколаде. Но нет. Пдозреваю, из-за того, что фигурные скобки используются ещё и для ассоциативных массивов, типа {'a' => 'b', 'aa' => 'bb'}, и без ключевого слова proc возникла бы двусмысленность.

Резюме: Мацумото бездумно нахватал конструкций из разных языков, и получилась лажа. Те же фигурные скобки обозначают и ассоциативные массивы, и блоки кода. Писать парсер для такого чудо-языка я бы не взялся ни за какие коврижки. Ну оставили бы вместо скобок begin и end, гораздо проще было бы всё, так нет же, погнались за быдлофичами. Ну и сами ЗБ, млин. Про седовские регекспы уже сказали. К версии 3.0 это будет чучело небесное похлеще перла. Ещё попомните моё слово.

anonymous
()
Ответ на: комментарий от anonymous

> Пдозреваю, из-за того, что фигурные скобки используются ещё и для ассоциативных массивов, типа {'a' => 'b', 'aa' => 'bb'}, и без ключевого слова proc возникла бы двусмысленность.

Вряд ли. Заглядываешь на 1 токен вперед, и если он '|', то это блок кода.

Но логичности Руби не хватает, это да. Впрочем, автор это признает.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Вряд ли. Заглядываешь на 1 токен вперед, и если он '|', то это блок кода.

Нифига, | может и не быть, если функция без параметров. Например, proc {1} просто возвращает единицу.

anonymous
()
Ответ на: комментарий от gigabitto

> а чо скрывать? стыдно?

Контракт.

> 20к юзеров в день? та ты герой просто. посмотрим шоб твой сервер сказал если б у тебя там два ляма было.

Грохнулся бы. Ты можешь сделать 2 лимона на одном сервере на Ruby/Python/Perl/C++? Вперед и с песней.

Aceler ★★★★★
()
Ответ на: комментарий от anonymous

>> Вряд ли. Заглядываешь на 1 токен вперед, и если он '|', то это блок кода.

> Нифига, | может и не быть, если функция без параметров.

Тогда конечно... М-да, забыл я синтаксис Ruby :/ Уж сколько лет не пользовался.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

> П-дец. Нет слов.

Ладно. Я лох. Объясните мне, почему {|a| foo(a)} не возвращает объект типа "функция". Я внемлю.

anonymous
()
Ответ на: комментарий от gigabitto

А еще расскажи, где взять 2 миллиона пользователей в день.

Для сравнения: forum.ixbt.com. 9 миллионов пользователей. 10000 в день в среднем.

Aceler ★★★★★
()
Ответ на: комментарий от anonymous

> Ты хотя бы Intro по ruby читал?

Я пытался, друк. Но после фразы "First, some general observations. Ruby syntax is clean." меня пробило на такое дикое ха-ха, что дальше продолжать физически не мог. :)))))

anonymous
()
Ответ на: комментарий от anonymous

Да, на всякий случай крупными буквами повторю: ОБЪЕКТ.

anonymous
()
Ответ на: комментарий от anonymous

> Потому, что он возвращает объект типа Proc.

Неправда. Конструкция {|a| foo(a)} вообще ничего не возвращает, кроме синтаксической ошибки.

А вот proc {|a| foo(a)}, как мы ежу заметили, действительно возвращает объект типа Proc. Внимание, вопрос. Какого хрена он не может просто вернуть объект типа "функция", как делают все нормальные языки.

anonymous
()
Ответ на: комментарий от anonymous

Потому, что он возвращает объект типа Proc, как делают нормальные объектно-ориентированные языки. Ключевое слово - объект. Его тип - дело десятое.

Интересует, почему нужно говорить a.call, а не просто a() ?

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

anonymous
()
Ответ на: комментарий от anonymous

> А слабо привести нагрузку не в абстрактых попугаях в день, а в запросах в секунду?

Очень смешно.

Aceler ★★★★★
()
Ответ на: комментарий от anonymous

> Его тип

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

anonymous
()
Ответ на: комментарий от anonymous

Тьфу ты. Класс. Сбили совсем.

anonymous
()
Ответ на: комментарий от anonymous

> А ну марш основы объектно-ориентированного программирования штудировать, в целях леквидации безграмотности.

Да уж. Объяснил как по полкам разложил. Не возвращает объект типа "функция", потому что возвращает объект типа Proc. Вместо a() надо говорить a.call, потому что это круто. Жду от Вас внятных объяснений или засчитываю слив.

И да, что в питоне, что во всяком хаскеле лямбда-нотация используется для создания нормальных полноценных функций, а не всякого кала типа Proc "потамушто ОБЪЕКТ и ни$%ёт".

anonymous
()
Ответ на: комментарий от anonymous

> Потому, что он возвращает объект типа Proc, как делают нормальные объектно-ориентированные языки. Ключевое слово - объект. Его тип - дело десятое.

Вы бы так не подставлялись, молодой человек. Во всех полноценных объектно-ориентированных языках всё - объект, и функция тоже. И ничто не мешает вызывать её как a(), разве что странная мазохистская религия.

anonymous
()
Ответ на: комментарий от anonymous

Пардон, но "слив" засчитанный вами, это не просто смешно, это уморительно =)

> всяком хаскеле лямбда-нотация используется для создания нормальных полноценных функций

Сколько раз мне ещё написать, что ruby - не функциональный язык, чтобы до вас это наконец дошло? И никогда им не был, что характерно.

Не знаете, в чём разница между функциональным и объектно-ориентированным? Засчитывайте "слив", у меня нет желания устраивать ликбез.

anonymous
()
Ответ на: комментарий от anonymous

> Во всех полноценных объектно-ориентированных языках всё - объект, и функция тоже. И ничто не мешает вызывать её как a(), разве что странная мазохистская религия.

А, вот даже так. Хехе. Ну и как вы _вызовите_ _объект_? И сообщение ему отсылать не надо? Или вы хотите, чтобы () был забинден на метод call? Круто, круто.

anonymous
()
Ответ на: комментарий от anonymous

> Я пытался, друк. Но после фразы "First, some general observations. Ruby syntax is clean." меня пробило на такое дикое ха-ха, что дальше продолжать физически не мог.

Какого ... же ты тогда лезешь спорить о Ruby? :)

Hjorn
()
Ответ на: комментарий от anonymous

Не, ну можно, конечно. Но это уже syntactic sugar. Ruby и так надо урезать, а не ещё больим хламом забивать.

anonymous
()
Ответ на: комментарий от anonymous

> Сколько раз мне ещё написать, что ruby - не функциональный язык, чтобы до вас это наконец дошло?

То есть, вся эта чехарда придумана лишь для того, чтоб руби можно было называть объектно-ориентированным языком? И пофиг на удобство программирования? Так испей же яду, анонимус, ибо тот же питон - ну офигенно объектно-ориентированный язык, но никаких левых сущностей "типа Proc" там нет. Есть лишь объект типа function, и вызов функции выглядит как f(). Ибо питон писался для работы, а не для кривых форумных понтов.

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

anonymous
()
Ответ на: комментарий от anonymous

Да, и мне таки очень хочется выслушать, как _вызвать_ _объект_ аки функцию. Которая тоже объект. Который как функция.

Жажду просто. Желательно порциями, боюсь от смеха помереть.

anonymous
()
Ответ на: комментарий от anonymous

> А вот proc {|a| foo(a)}, как мы ежу заметили, действительно возвращает объект типа Proc. Внимание, вопрос. Какого хрена он не может просто вернуть объект типа "функция", как делают все нормальные языки.

А написать proc перед блоком, чтобы получить объект Proc (что может быть логичнее...) - это тебя так напрягает? Кстати, если в определении метода, с которым связан блок, указать последний параметр в виде &param, то метод получит блок как объект Proc через этот параметр. В обычных случаях и этого не надо, потому что блок вызывается через yield.

Hjorn
()
Ответ на: комментарий от anonymous

Он и есть ОО-язык. Причём pure oo. Таким и задумывался.

> питон - ну офигенно объектно-ориентированный язык

Угу. Он _мультипарадигменный_ язык. Разницу видим?

anonymous
()
Ответ на: комментарий от anonymous

> А, вот даже так. Хехе. Ну и как вы _вызовите_ _объект_? И сообщение ему отсылать не надо?

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

> Или вы хотите, чтобы () был забинден на метод call? Круто, круто.

В питоне примерно так и сделано, кстати, только метод называется __call__. И что, От этого Питон перестал быть объектно-ориентированным? Или синтаксис его стал грязнее, чем у руби?

anonymous
()
Ответ на: комментарий от anonymous

> Угу. Он _мультипарадигменный_ язык. Разницу видим?

Боюсь, что разница только на бумаге. :D А чисто ОО-язык есть только один - Smalltalk.

anonymous
()
Ответ на: комментарий от anonymous

>Во всех полноценных объектно-ориентированных языках всё - объект, и функция тоже. И ничто не мешает вызывать её как a(), разве что странная мазохистская религия.

Ну да, по твоей логике () - это метод? :) Подумай, прежде чем глупости писать.

Hjorn
()
Ответ на: комментарий от anonymous

> смолток ради того, чтоб было похоже на смолток

С этим я как раз не спорю. Но вот захотелось Матцу закосить под смолтолк. Взял и закосил. И требования, чтобы ruby работал как python выглядят по мешьшей мере странно.

> В питоне примерно так и сделано, кстати

Кстати, я в курсе.

anonymous
()
Ответ на: комментарий от anonymous

>> питон - ну офигенно объектно-ориентированный язык

>Угу. Он _мультипарадигменный_ язык. Разницу видим?

Видим. Спешите узнать: руби такой же мультипарадигменный. Тут хотя бы гляньте: http://en.wikipedia.org/wiki/Ruby_language.

anonymous
()
Ответ на: комментарий от anonymous

> Боюсь, что разница только на бумаге. :D А чисто ОО-язык есть только один - Smalltalk.

Ну да. Так и есть. В ruby всякого говна навалом. Но это не значит, что нужно туда класть новое (Матц вроде и сам догнал, что херню сделал, но поздно. Рельсы уже тютю. Ему не дадуд).

anonymous
()
Ответ на: комментарий от anonymous

> С этим я как раз не спорю. Но вот захотелось Матцу закосить под смолтолк. Взял и закосил.

Ладно бы только под смолток. Он одновременно закосил и под перл, и под руби, и под лисп, и под аду, да и без питона не обошлось. Так что требовать, чтоб это чучельце работало как смолток по меньшей мере смешно.

anonymous
()
Ответ на: комментарий от anonymous

Я ж говорю - говна хватает. Я полагаю, он изначально хотел скрестить смолтолк с перлом. А потом ему понравилось и он не смог остановиться.

anonymous
()
Ответ на: комментарий от anonymous

> В ruby всякого говна навалом. Но это не значит, что нужно туда класть новое

Так итить, надо сначала башкой думать, а потом уже ваять мегаязыки. А не как чукча: что вижу, то пою. А не можешь сам - так хоть у Гвидо совета спроси. :D

anonymous
()
Ответ на: комментарий от Hjorn

О, до меня начинает доходить. В объектно-ориентированом языке руби функция - это не объект. ТАК, РУБИСТЫ??

anonymous
()
Ответ на: комментарий от anonymous

И как тут не вспомнить мудрого Страуса. Он же костьми ложится, прежде чем комитет нововведение в Си++ добавит. Есть и обратная сторона. Но главное - есть стабильность. Я Матц всё в бирюльки играется.

anonymous
()
Ответ на: комментарий от anonymous

> костьми ложится, прежде чем комитет нововведение в Си++ добавит

Дополнение: _если_ добавит. Скорее всего Страус не даст. И будет прав в долгосрочной перспективе, что характерно.

anonymous
()
Ответ на: комментарий от anonymous

Объект, объект. Просто ruby косит под смолтолк, как правильно заметили. То есть: раз это объект, ему _надо_ слать сообщения, иначе никак.

Кстати, не удивлюсь, если Матц таки забудет про закос и добавит () (забиндит на :call). Тогда про ruby можно точно будет забыть.

anonymous
()
Ответ на: комментарий от anonymous

> Объект, объект. Просто ruby косит под смолтолк, как правильно заметили. То есть: раз это объект, ему _надо_ слать сообщения, иначе никак.

Я про те функции, которые создаются с помощью ключевого слова def. Если это не объект, то что? Методы, принадлежащие одному-единственному невидимому и неназываемому объекту? Кто этот объект? (Ктулху что ли??)

anonymous
()

Кстати о птичках. Почему Seaside в тестировании не участвовал?

Не в той весовой категории? Слишком круто для тестеров? =)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.