Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Господи, что за код!
Да одна замена:
for($i=0; $i
Я аж подавился. Давайте выкинем цикл и 2 массива, и заменим их на присвоение значения одной переменной другой.
Хорошо Вы алгоритм оптимизирует - может вообще вместо всего теста $perm = $perm1 написать и все?
Вывод – по производительности PHP и Ruby Core 1.9.0 примерно равны
"Скорость работы массивов/циклов" в предметной области PHP имеет не главенствующее значение.
Each program should
* "Take a permutation of {1,...,n}, for example: {4,2,1,5,3}.
* Take the first element, here 4, and reverse the order of the first 4 elements: {5,1,2,4,3}.
* Repeat this until the first element is a 1, so flipping won't change anything more: {3,4,2,1,5}, {2,4,3,1,5}, {4,2,3,1,5}, {1,3,2,4,5}.
* Count the number of flips, here 5.
* Do this for all n! permutations, and record the maximum number of flips needed for any permutation.
* Write the first 30 permutations and the number of flips.Если оба языка не годятся для определенной задачи (обход Б-дерева, например), но один делает ее чуть быстрее — это не показатель. Показателей, вообще-то, два. Первый: один из языков можно использовать для задачи Икс, а второй - нельзя. Тут относительные отличия не так важны. Второй показатель: оба языка годятся для задачи Игрек и тут важны относительные значения.
Я ни за что бы не стал пользоваться xml-парсером на чистом руби, если его элементарно можно прикрутить на Си без ущерба удобству разработки и деплоя.
Отсюда вывод: Руби на MRI - это не просто руби, а руби+Си, что существенно изменяет мое мнение о тестах.
И в принципе, там особо не разгуляешься, так что разница в производительности интерпретаторов PHP & Ruby всегда будет минимальна и никак это не поменяется.
Но за динамическую структуру всё же приходится платить и тяжёлые вещи переписывать на той же Java
но я как-то сомневаюсь, что будет что-то ещё.
Они подходят для того, чтобы оценить скорость доступа к элементам массива в цикле for. Ну или рекурсивного вызова. Но не подходят для оценки общей производительности языка в его предметной области.
Это главный недостаток подобных языков - они не могут сколько-нибудь далеко уйти от набора встроенных функций, без значительной потери эффективности.И эффективность языка во многом определяется именно набором этих самых функций и то, на сколько правильно он ложится на предметную область. Спорить об абстрактном удобстве синтаксиса и абстрактном быстродействии базовых конструкций в отрыве от набора предопределенных средств здесь не совсем корректно.
С учетом того, что скорость доступа к БД определяется в большинстве случаев особенностями самой БД и драйверов к ней.
Так что же это за предметная область такая - уже который раз пытаюсь выяснить - где скорость работы циклов/массивов/рекурсий не имеет значение?
Да, поэтому разница в скоростях м/у подобными языками уже не несет той остроты, которая была, например, м/у C и паскалем. Гораздо важнее удобство и т.п.
Так что в данных языках важен набор этих самых встроенных средств и его соответствие задачам решаемым в области данного языка.
Для решения круга задач. И одного/двух тестов здесь не придумать.
Вот взять сайт среднего уровня написанный на PHP (нормальный сайт, а не Nuke какой-нибудь) и примерно такой же на Ruby, тогда можно сравнивать скорость работы и скорость разработки.
Часть интерпретатора Руби написана на самом Руби - все классы в Руби открытые
все классы в Руби открытые - то есть добавить в класс массивов свой метод вообще и составляет проблем
И как это сказывается на производительности?
Да, эта фишка достаточно распространена в последнее время во многих языках. К сожалению, нужно признать, в PHP в полной мере её нет.
Ruby медленнее PHP? Уже нет!