powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / PHP vs. Python vs. Ruby vs. Groovy
25 сообщений из 27, страница 1 из 2
PHP vs. Python vs. Ruby vs. Groovy
    #36804899
Холивар на тему лучшего языка для вебдева можно вести бесконечно. Объективных данных в Сети гораздо меньше, чем необоснованных шапкозакидательских постов.

По ссылке находится сравнительный тест свежайших сборок динамических языков: PHP, Python, Ruby, Groovy. Анализируется быстродействие, расход памяти и размер скриптов для решения одной и той же задачи.



Краткий вывод: и все-таки Python круче!


Модератор:
ссылку удалил, цифры выполнения, код и описание компа перенес



автор
Тестовая среда

Все тесты проводились на моем домашнем ноутбуке Intel Core2 Duo T5500 (два ядра по 1.66 GHz) с тремя гигабайтами оперативной памяти и быстрым SSD-диском. Управляет парадом свежая инсталляция 32-битной Windows 7 Home Premium.

Каждый скрипт запускался три раза, через некоторое время после прогона всех языков, выполнялся еще один проход по три раза, в качестве итогового времени взяты усредненные значения.

Теоретически, каждый процесс должен был выполняться на одном из ядер процессора, загружая его под завязку (что косвенно подтверждалось постоянным показателем загрузки двухядерного процессора в 50%), но график Диспетчера Задач почему-то показывал одинаковую загрузку в 50% обоих ядер во время теста.

Во время второго прогона также замерялся расход памяти, согласно показаниям Диспетчера Задач.


авторПроизводительность

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

Точные данные производительности
Код: plaintext
1.
2.
3.
4.
5.
6.
Язык       Время, микросекунд
Groovy 1.7.4                       260
PHP    5.2.14                      1,200
Python 2.6.5                      210
Python 2.6.5 + Psyco 2.0     70
Ruby 1.8.7                        400
Ruby 1.9.2                        300






Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
Java
view source
print?
 01     public class Chain
 02     {
 03         private Person first = null;
 04      
 05         public Chain(int size)
 06         {
 07             Person last = null;
 08             Person current = null;
 09             for (int i =  0  ; i < size ; i++)
 10             {
 11                 current = new Person(i);
 12                 if (first == null) first = current;
 13                 if (last != null)
 14                 {
 15                     last.setNext(current);
 16                     current.setPrev(last);
 17                 }
 18                 last = current;
 19             }
 20             first.setPrev(last);
 21             last.setNext(first);
 22         }
 23      
 24         public Person kill(int nth)
 25         {
 26             Person current = first;
 27             int shout =  1 ;
 28             while(current.getNext() != current)
 29             {
 30                 shout = current.shout(shout, nth);
 31                 current = current.getNext();
 32             }
 33             first = current;
 34             return current;
 35         }
 36      
 37         public Person getFirst()
 38         {
 39             return first;
 40         }
 41         public static void main(String[] args)
 42         {
 43             int ITER =  100000 ;
 44             long start = System.nanoTime();
 45             for (int i =  0  ; i < ITER ; i++)
 46             {
 47                 Chain chain = new Chain( 40 );
 48                 chain.kill( 3 );
 49             }
 50             long end = System.nanoTime();
 51             System.out.println("Time per iteration = " + ((end - start) / (ITER )) + " nanoseconds.");
 52         }
 53     }
 54      
 55     class Person
 56     {
 57         int count;
 58         private Person prev = null;
 59         private Person next = null;
 60      
 61         public Person(int count)
 62         {
 63             this.count = count;
 64         }
 65      
 66         public int shout(int shout, int deadif)
 67         {
 68             if (shout < deadif) return (shout +  1 );
 69             this.getPrev().setNext(this.getNext());
 70             this.getNext().setPrev(this.getPrev());
 71             return  1 ;
 72         }
 73      
 74         public int getCount()
 75         {
 76             return this.count;
 77         }
 78      
 79         public Person getPrev()
 80         {
 81             return prev;
 82         }
 83      
 84         public void setPrev(Person prev)
 85         {
 86             this.prev = prev;
 87         }
 88      
 89         public Person getNext()
 90         {
 91             return next;
 92         }
 93      
 94         public void setNext(Person next)
 95      
 96         {
 97             this.next = next;
 98         }
 99     }

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
C++
view source
print?
 01     [/cpp]
 02     #include <stdio .h>
 03     #include <stdlib .h>
 04     #include <time .h>
 05     #include <sys /time.h>
 06      
 07     class Person
 08     {
 09      
 10         public:
 11      
 12             Person(int count) : _next(NULL), _prev(NULL) { _count = count; }
 13             int shout(int shout, int nth)
 14             {
 15                 if (shout < nth) return (shout +  1 );
 16                 _prev->_next = _next;
 17      
 18                 _next->_prev = _prev;
 19                 return  1 ;
 20             }
 21             int count() { return _count; }
 22             Person* next() { return _next; }
 23             void next(Person* person) { this->_next = person ; }
 24             Person* prev() { return _prev; }
 25             void prev(Person* person) { this->_prev = person; }
 26         private:
 27             int _count;
 28             Person* _next;
 29             Person* _prev;
 30     };
 31      
 32     class Chain
 33     {
 34         public:
 35             Chain(int size) : _first(NULL)
 36             {
 37                 Person* current = NULL;
 38                 Person* last = NULL;
 39                 for(int i =  0  ; i < size ; i++)
 40                 {
 41                     current = new Person(i);
 42                     if (_first == NULL) _first = current;
 43                     if (last != NULL)
 44                     {
 45                         last->next(current);
 46                         current->prev(last);
 47                     }
 48                     last = current;
 49                 }
 50                 _first->prev(last);
 51                 last->next(_first);
 52             }
 53             Person* kill(int nth)
 54             {
 55                 Person* current = _first;
 56                 int shout =  1 ;
 57                 while(current->next() != current)
 58      
 59                 {
 60                     Person* tmp = current;
 61                     shout = current->shout(shout,nth);
 62                     current = current->next();
 63                     if (shout ==  1 )
 64                     {
 65                         delete tmp;
 66                     }
 67                 }
 68                 _first = current;
 69                 return current;
 70             }
 71             Person* first() { return _first; }
 72         private:
 73             Person* _first;
 74     };
 75      
 76     int main(int argc, char** argv)
 77     {
 78         int ITER =  1000000 ;
 79         Chain* chain;
 80         struct timeval start, end;
 81         gettimeofday(&start,NULL);
 82         for(int i =  0  ; i < ITER ; i++)
 83         {
 84             chain = new Chain( 40 );
 85             chain->kill( 3 );
 86      
 87             delete chain;
 88         }
 89         gettimeofday(&end,NULL);
 90         fprintf(stdout,"Time per iteration = %d microseconds ", (((end.tv_sec - start.tv_sec) *  1000000 ) + (end.tv_usec - start.tv_usec)) / ITER);
 91         return  0 ;
 92     }
 93     [cpp]

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
Ruby
view source
print?
 01     class Person
 02         attr_reader :count, :prev, :next
 03         attr_writer :count, :prev, :next
 04      
 05         def initialize(count)
 06             #puts 'Initializing person : ' + count.to_s()
 07             @count = count
 08             @prev = nil
 09             @next = nil
 10         end
 11      
 12         def shout(shout, deadif)
 13             if shout < deadif
 14                 return shout +  1 
 15             end
 16             @prev.next = @next
 17             @next.prev = @prev
 18             return  1 
 19         end
 20     end     
 21      
 22     class Chain
 23         attr_reader :first
 24         attr_writer :first
 25      
 26         def initialize(size)
 27             @first = nil
 28             last = nil
 29             for i in ( 1 ..size)
 30                 current = Person.new(i)
 31                 if @first == nil
 32                     @first = current
 33                 end
 34                 if last != nil
 35                     last.next = current
 36                     current.prev = last
 37                 end
 38                 last = current
 39             end
 40             @first.prev = last
 41             last.next = @first
 42         end
 43      
 44         def kill(nth)
 45             current = @first
 46             shout =  1 
 47             while current.next != current
 48                 shout = current.shout(shout,nth)
 49                 current = current.next
 50             end
 51             @first = current
 52             return current
 53         end
 54     end
 55      
 56     ITER= 100000 
 57     start = Time.now
 58     ITER.times { |i|
 59     chain = Chain.new( 40 )
 60     chain.kill( 3 )
 61     }
 62     ends = Time.now
 63     puts 'Time per iteration = ' + ((ends - start) *  1000000  / ITER).to_s() + " microseconds"



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Python
view source
print?
 01     import psyco
 02     psyco.full()
 03      
 04     class Person(object):
 05         def __init__(self,count):
 06             self.count = count;
 07             self.prev = None
 08      
 09             self.next = None
 10         def shout(self,shout,deadif):
 11             if (shout < deadif): return (shout +  1 )
 12             self.prev.next = self.next
 13             self.next.prev = self.prev
 14             return  1 
 15      
 16     class Chain(object):
 17         def __init__(self,size):
 18             self.first = None
 19             last = None
 20             for i in range(size):
 21                 current = Person(i)
 22                 if self.first == None : self.first = current
 23                 if last != None :
 24                     last.next = current
 25                     current.prev = last
 26                 last = current
 27             self.first.prev = last
 28             last.next = self.first
 29         def kill(self,nth):
 30             current = self.first
 31             shout =  1 
 32             while current.next != current:
 33                 shout = current.shout(shout,nth)
 34                 current = current.next
 35             self.first = current
 36             return current
 37      
 38     import time
 39     ITER =  100000 
 40     start = time.time()
 41     for i in range(ITER):
 42         chain = Chain( 40 )
 43         chain.kill( 3 )
 44     end = time.time()
 45     print 'Time per iteration = %s microseconds ' % ((end - start) *  1000000  / ITER)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
PHP
view source
print?
 01     class Person
 02     {
 03         function __construct($c)
 04         {
 05             $this->count = $c;
 06         }      
 07      
 08         function getPrev()
 09         {
 10             return $this->prev;
 11         }          
 12      
 13         function setPrev($pr)
 14         {
 15             $this->prev = $pr;
 16         }  
 17      
 18         function getNext()
 19         {
 20             return $this->next;
 21         }
 22      
 23         function setNext($nxt)
 24         {
 25             $this->next = $nxt;
 26         }
 27      
 28         function shout($shout, $nth)
 29         {
 30             if ($shout < $nth)
 31             {
 32                 return $shout +  1 ;
 33             }
 34             $this->getPrev()->setNext($this->getNext());
 35             $this->getNext()->setPrev($this->getPrev());
 36             return  1 ;
 37         }
 38     }
 39      
 40     class Chain
 41     {
 42         var $first;
 43      
 44         function __construct($size)
 45         {
 46             $last = null;
 47      
 48             for($i =  0 ; $i < $size ; $i++)
 49             {
 50                 $current = new Person($i);
 51                 if ($this->first == null) $this->first = $current;
 52                 if ($last != null)
 53                 {
 54                     $last->setNext($current);
 55                     $current->setPrev($last);
 56                 }
 57                 $last = $current;
 58             }
 59             $this->first->setPrev($last);
 60             $last->setNext($this->first);
 61         }
 62      
 63         function kill($nth)
 64         {
 65             $current = $this->first;
 66             $shout =  1 ;
 67             while($current->getNext() !== $current)
 68             {
 69                 $shout =  $current->shout($shout,$nth);
 70                 $current = $current->getNext();
 71             }
 72             $this->first = $current;
 73         }
 74     }
 75      
 76     $start = microtime(true);
 77     $ITER =  100000 ;
 78     for($i =  0  ; $i < $ITER ; $i++)
 79     {
 80         $chain = new Chain( 40 );
 81         $chain->kill( 3 );
 82     }
 83     $end = microtime(true);
 84     printf("Time per iteration = %3.2f microseconds ",(($end -  $start) *  1000000  / $ITER));

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
Groovy
view source
print?
 01     class Chain
 02     {
 03         def size
 04         def first
 05      
 06         def init(siz)
 07         {
 08             def last
 09             size = siz
 10             for(def i =  0  ; i < siz ; i++)
 11             {
 12                 def current = new Person()
 13                 current.count = i
 14                 if (i ==  0 ) first = current
 15                 if (last != null)
 16                 {
 17                     last.next = current
 18                 }
 19                 current.prev = last
 20                 last = current
 21             }
 22             first.prev = last
 23             last.next = first
 24         }
 25      
 26         def kill(nth)
 27         {
 28             def current = first
 29             def shout =  1 
 30             while(current.next != current)
 31             {
 32                 shout = current.shout(shout,nth)
 33                 current = current.next
 34             }
 35             first = current
 36         }
 37     }
 38      
 39     class Person
 40     {
 41         def count
 42         def prev
 43         def next
 44      
 45         def shout(shout,deadif)
 46         {
 47             if (shout < deadif)
 48             {
 49                 return (shout +  1 )
 50             }
 51             prev.next = next
 52      
 53             next.prev = prev
 54             return  1 
 55         }
 56     }
 57      
 58     def main(args)
 59     {
 60         println "Starting"
 61         def ITER =  100000 
 62         def start = System.nanoTime()
 63         for(def i =  0  ; i < ITER ; i++)
 64         {
 65             def chain = new Chain()
 66             chain.init( 40 )
 67             chain.kill( 3 )
 68         }
 69         def end = System.nanoTime()
 70         println "Total time = " + ((end - start)/(ITER *  1000 )) + " microseconds"
 71     }
 72      
 73     def ITER =  100000 
 74     def start = System.nanoTime()
 75     for(def i =  0  ; i < ITER ; i++)
 76     {
 77         def chain = new Chain()
 78         chain.init( 40 )
 79         chain.kill( 3 )
 80     }
 81     def end = System.nanoTime()
 82     println "Time per iteration = " + ((end - start)/(ITER *  1000 )) + " microseconds"
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36804912
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты уверен что твоя методика замера памяти - состоятельная? Откуда цифры брал?
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36804915
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гоцуляк,

1. не надо пиарить так нагло свой сайт,
2. нафига, простите, свежайшие сборки, если вы используете нотацию PHP 4? Боюсь во всех языках кроме Питона (который вы, вероятно, немного знаете) дело обстоит также,
3. реализации на php и остальных языках не эквивалентны, ибо огромный оверхед от рукотворных геттеров и сеттеров,
4. сборка PHP старая, нет мусоросборщика,
5. в итоге PHP представлен сильно хуже, чем должен быть.

Правильно вот так Time per iteration = 3.873240E-4 seconds, memory used max = 3932160 bytes
Время исполнения колеблется от 3.5E-4 до 4.15E-4.

И это я еще оптимизацией не занимался, а просто написал адекватно на PHP, а не как человек, вчера услышавший это слово.

Если скомпилировать в байт код, боюсь результаты будут еще лучше.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
<?php
class Person {
	function __construct($c) {
		$this->count = $c;
	}

	function shout($shout, $nth) {
		if ($shout < $nth) {
			return $shout +  1 ;
		}
		$this->prev->next = $this->next;
		$this->next->prev = $this->prev;
		return  1 ;
	}
}

class Chain {
	function __construct($size) {
		$last = null;
		for ($i =  0 ; $i < $size; $i++) {
			$current = new Person($i);
			if (!$i) $this->first = $current;
			if ($last) {
				$last->next = $current;
				$current->prev = $last;
			}
			$last = $current;
		}
		$this->first->prev = $last;
		$last->next = $this->first;
	}

	function kill($nth) {
		$current = $this->first;
		$shout =  1 ;
		while ($current->next != $current) {
			$shout = $current->shout($shout, $nth);
			$current = $current->next;
		}
		$this->first = $current;
	}
}

ini_set("display_errors", true);
error_reporting(PHP_INT_MAX);
set_time_limit( 0 );

$ITER =  100000 ;
$memory_start = memory_get_peak_usage(true);
$start = microtime(true);
for ($i =  0 ; $i < $ITER; $i++) {
	$chain = new Chain( 40 );
	$chain->kill( 3 );
}
$end = microtime(true);
$memory_end = memory_get_peak_usage(true);
printf("Time per iteration = %E seconds, memory used max = %d bytes", ($end - $start) / $ITER, $memory_end - $memory_start);
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36804916
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P. S. Такое огромное потребление памяти - это из-за того что сборщик мусора ждёт, пока объектов станет 10000 (по умолчанию).

Например, если запускать всего 1000 итераций, то скрипт потребляет ВСЕГО 262 кб... это много? А ведь в реальных, не синтетических тестах, именно так и будет - будет сравнительно мало объектов.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36804918
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P. S. #2. Мой код не показывает, что PHP лучше всех. Он показывает лишь то, что автор теста - еще один хомячок. Тот, у кого он своровал идею теста для своего бложика, даже специально написал о таких: http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/Update (README CAREFULLY) : I am starting to see hyperlinks to his post with only some of the findings being treated as the link title (eg. X is 100 times faster than Y, X faster than Z). I emphasise once again that I have carefully indicated in the original post that this is but one of many possible microbenchmarks and that you should treat the results as one of many data points. Given the comments I’ve received and some of the links I’ve seen to this post, if I was to make this posting anew, I would choose to assign the title of this post as “Implementing an identical object oriented solution to the Josephus Problem in Java / C++ / Ruby / JRuby / Python / Jython / Groovy and measuring the performance results thereof.”
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36804984
an0nym
5. в итоге PHP представлен сильно хуже, чем должен быть.


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

Я только за то, чтобы собрать оптимальные реализации и протестировать еще раз, скорее всего разрыв между языками станет не таким большим, и среднее время итерации будет стремиться к 50-70 мкс (т.е. к результату Python + Psyco) на той же аппаратной платформе.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36804993
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гоцуляк,

нет, в других скриптах "почему-то" нет, например, оверхеда для геттеров и сеттеров - как минимум в том же Питоне, а в Ruby эти геттеры и сеттеры реализованы через встроенные генераторы, которые в любом случае создадут более производительный код, так как встроены в язык, а не запрограммированы на нём.

То что я сделал - это не оптимизация, это постановка скриптов в равные условия.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36804994
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ГоцулякДанное утверждение относится ко всем скриптам, представленным в выборке :-) То есть, взяв любой код под прицел, помедитировав пару часов над оптимизацией, поработав над тюнингом среды, можно значительно улучшить результаты.
Над оптимизацие чего? Теста?
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36804996
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гоцуляк50-70 мкс (т.е. к результату Python + Psyco)
Скомпилируйте мой вариант PHP HipHopом и посмотрите. Это Питону надо приближаться - хотя бы к PHP, а лучше к более близким собратьям - Java и, возможно, C#.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805002
junior  idiot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, почему бы не поступить по старинке и не посчитать 100000!, как здесь?
(шутка юмора)
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805013
an0nym
Время исполнения колеблется от 3.5E-4 до 4.15E-4.

Сделал апдейт записи:

UPD2: Оптимизированный PHP-скрипт с форума SQL.ru (без сеттеров-геттеров), показывает более чем в два раза лучшее быстродействие. Среднее время выполнения подскочило до 500 микросекунд на итерацию. Потребление памяти, к сожалению, осталось на прежнем уровне.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805017
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гоцуляк,

еще раз повторяю: у вас не свежая сборка PHP.
Потребление памяти на 100 000 итераций ~4 Мб и выше не поднимется, скорее всего, даже при 1000000000000000000000000000000000000 итераций.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805018
Gys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gys
Гость
Почему в тест не включён perl?
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805020
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GysПочему в тест не включён perl?
Потому что автор даже с включенным не справился. :)
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805038
an0nymСергей Гоцуляк50-70 мкс (т.е. к результату Python + Psyco)
Скомпилируйте мой вариант PHP HipHopом и посмотрите. Это Питону надо приближаться - хотя бы к PHP, а лучше к более близким собратьям - Java и, возможно, C#.

Поверхностное гугленье дает цитату с хабра:

авторHipHop был создан для улучшения производительности Facebook. Он преобразует PHP код в C++ код и комплирует его с помощью g++. HipHop доступен под opensource лицензией.

Интересная штучка, но технологически уже слишком далеко отстоит от методики тестирования. Хотя, возможно, чуть позже прогоню через этот... ммм... трансформатор.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805044
an0nym
еще раз повторяю: у вас не свежая сборка PHP.

Что значит не свежая? Взята последняя версия ветки PHP 5.2, имеющей широкое хождение в массах. Питон, если замечаете, тоже взят не из edge-ветки 2.7 или 3, а наиболее популярный 2.6.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805053
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гоцулякan0nym
еще раз повторяю: у вас не свежая сборка PHP.

Что значит не свежая? Взята последняя версия ветки PHP 5.2, имеющей широкое хождение в массах. Питон, если замечаете, тоже взят не из edge-ветки 2.7 или 3, а наиболее популярный 2.6.
То что ветка py 2.7 вышла в продакшн всего 1.5 месяца назад, а php 5.3 - более года назад.
Код: plaintext
This release marks the end of the active support for PHP  5 . 2 . Following this release the PHP  5 . 2  series will receive no further active bug maintenance. Security fixes for PHP  5 . 2  might be published on a case by cases basis. All users of PHP  5 . 2  are encouraged to upgrade to PHP  5 . 3 .
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805054
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модераторы, поправьте, пожалуйста src -> quot.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805058
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ГоцулякИнтересная штучка, но технологически уже слишком далеко отстоит от методики тестирования. Хотя, возможно, чуть позже прогоню через этот... ммм... трансформатор.
Тогда всякое упоминание Psyco выкиньте, пожалуйста, из тестирования.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805060
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гоцуляк,

это утверждение тоже вранье: Можно спорить о субьективных показателях, но с цифрами не поспоришь: программа на Python в два раза короче, чем аналогичный код на Groovy, PHP, C++ или Java. Ruby где-то посередине: программа в полтора раза длинее, чем питонный аналог, но все еще значительно короче, чем остальные скрипты.

В общем удалите статью, не позорьтесь.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805078
an0nymТогда всякое упоминание Psyco выкиньте, пожалуйста, из тестирования.

Вы разницу между акселераторами и трансформерами понимаете? Я же не пытался прогонять питонные тесты через трансформер Python -> C++ (http://shed-skin.blogspot.com)

Если подскажете акселератор PHP, аналогичный Psyco, я не против его протестировать. Стандартный eAccelerator не дал никакого прироста производительности.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805081
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гоцуляк,

When speed is a problem, Python programmers tend to try using a JIT compiler such as Psyco, rewriting the time-critical functions in "closer to the metal" languages such as C, or by translating (a dialect of) Python code to C code using tools like Cython.[20]
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805431
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Сергей Гоцуляк,
Совершенно бесмысленной работой занимаешься.
Те кто знают PHP будут писать на PHP как им не рекламируй более умные языки.
Те кто знают Python будут писать на нем как им не рекламируй более умные языки.
Те кто знают .... дальше понял:
А те кто знают все выше-перечисленное одновременно плюют на все бенчмарки и пишут на том, на чем удобно писать конкретную задачу в конкретный промежуток времени.

У меня очень часто в одном проекте собирается по пять-шесть разных языков. Потому что удобно и быстро писать. А как быстро они работают - никого не волнует. Сервер большой у него памяти много. Будет одна страничка на пхп другая на руби - серверу до лампочки, обе сгенерируются за миллисекунды.
А гигантские массивы обрабатывать внутри скриптового языка - полный идиотизм. Базы данных придуманы уже много лет тому назад.
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805811
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl...А те кто знают все выше-перечисленное одновременно плюют на все бенчмарки и пишут на том, на чем удобно писать конкретную задачу в конкретный промежуток времени...
Или как начальство (заказчик) прикажет... .
...
Рейтинг: 0 / 0
PHP vs. Python vs. Ruby vs. Groovy
    #36805951
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гоцуляк wrote:
>
>
> Краткий вывод: и все-таки Python круче!

Кто бы сомневался !

Но ты изначально неправильно людей ориентируешь.
Язык программирования надо выбирать сердцем.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / PHP vs. Python vs. Ruby vs. Groovy
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]