Я уже как-то говорил, что хочу посмотреть насколько скомпиленное в .NET работает быстрее, чем скомпиленное или интерпретированное в старых добрых системах. Собственно я написал версию для Python и С. Немного изменил способ замера времени в IronPython.

Мы с Андреем решили использовать простой алгоритм решета Эратосфена. В функцию передается n, функция возвращает нам массив простых чиселАлгоритм на питоне выглядит так:

def Eratosfen(n):
array = [0, 1]
for i in range(2, n + 1):
array.append(i)
for i in range(2, n + 1):
for x in range(1,n / i):
array[i * x] = -1
if i * i>=n:
return array

На С все тоже самое только под массив, естественно, сразу выделяется небходимая память.
Сишный код:

#include «stdafx.h»
#include «time.h»
char* eratosfen(int n){
char *arr;
arr = new char[n+1];
for(int i = 1; i< n + 1; i++)
arr[i] = i;
for(int i = 2; i < n + 1; i++){
for(int x = 1; x < n / i; x++)
arr[i * x] = -1;
if (i * i>=n)
return arr;
}
}
Вобщем, вот что получилось, при n = 1 000 000:

.NET C 3.5: 0.016000
GCC 3.1: 0.109000
Python 2.5.1: 1.888526
IronPython 1.1: 7.734375 (!)

От железного змея я такого не ожидал. Уступить интерпретируемуму питону очти в 7 раз! Причину надлежит установить. Буду надеяться, что во всем виновата моя криворукость.

Реклама