![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проф. геймдев на Делфи [Delphi]
Unsigned © (2006-01-13 23:29:00)Доброго времени суток! Сразу оговорюсь что это тема не типа "Делфи вс Си".Хотелось бы услышать мнение знающих людей по-поводу : есть ли профессиональное будущее у программиста игр на Делфи? Или для того чтоб стать проффесионалом в игровой индустрии необходимо рано или поздно переходить на С, а геймдев на Делфи носит любительский характер?
MeF Dei Corvi (2006-11-14 13:36:00) [1]
> а куда ж деваться-то? :)
Брать лыжи и в лес...
Fosgen (2006-11-14 13:36:00) [2]XProger, да он самый от IMP'а....
XProger (2006-11-14 12:08:00) [3]Fosgen, не Titan 2175 в обработке ли это? По скринам очень смахивает...
Ketmar (2006-11-14 02:33:00) [4]>[154] grisme(c) 14-Nov-2006, 02:26
>а куда ж деваться-то? :)
QNX.
%-)
grisme (2006-11-14 02:26:00) [5]>кто ж о нём говорит? более того: замер времени в винде вообще мало смысла имеет, потому что не RTOS.
а куда ж деваться-то? :)
Ketmar (2006-11-14 02:18:00) [6]>[152] MeF Dei Corvi(c) 14-Nov-2006, 01:17
>Либо марсианский компьютер :)
pIII/600. %-)
>GetTickCount
кто ж о нём говорит? более того: замер времени в винде вообще мало смысла имеет, потому что не RTOS.
MeF Dei Corvi (2006-11-14 01:17:00) [7]
> что интересно: у меня результаты прямо противоположные.
> весело и радостно отстаёт D7. то ли тест таки дебильный
> (как и признаётся при запуске %-), то ли у меня марсианские
> Delphi.
Либо марсианский компьютер :) Тест дебильный, ассемблер всё-равно круче ;) GetTickCount - не лучший способ замера времени.
Fosgen (2006-11-11 20:47:00) [8]Возвращаясь к теме ветки - в подтверждение того что на Дельфи можно сделать полноценную игру:
Кибервойны: Прототип 2700 - чел писал в одиночку, на Дельфе. Потом у него перекупила контора Dragon Software и испортила, но издала. Но проект все-таки вышел в свет - это можно засчитать как продукт профессионального геймдева на Дельфи? Или что тогда - "профессиональный"?
Ketmar (2006-11-11 15:03:00) [9]Удалено модератором
Vansss (2006-11-11 14:15:00) [10]Delfhi это только начало!!!!!
потом идут более сложные языки типо С + + и т.д.
Ketmar (2006-11-05 15:01:00) [11]что интересно: у меня результаты прямо противоположные. весело и радостно отстаёт D7. то ли тест таки дебильный (как и признаётся при запуске %-), то ли у меня марсианские Delphi.
MeF Dei Corvi (2006-11-05 13:47:00) [12]
> http://itc.ua/article.phtml?ID=15800&IDw=33&pid=52
гм. Вчитался повнимательнее в это. Жуткий бред.
MeF Dei Corvi (2006-11-05 13:45:00) [13]Согласен, что тест бредовый и вообще подобное тестирование - безусловно глупость.
MeF Dei Corvi (2006-11-05 13:41:00) [14]
> скажи проще: "имел я в виду отвечать за свои слова". ага?
Написать тест, охватывающий всё довольно сложно. Так уж и быть поддамся на твою провокацию и потестю D2006 и D7.
Тест писать не стал. Взял первый попавшийся из гугля.
program DelphiBenchV2;
{$APPTYPE CONSOLE}
uses
SysUtils,
classes,
Windows,
Math;
type
TBenchMarkDelphi = class
private
startTime: Integer;
stopTime: Integer;
elapsedTime: Integer;
function intArithmetic(const IntMax: Integer): Int64;
function doubleArithmetic(const doubleMin, doubleMax: Double): Int64;
function longArithmetic(const longMin, longMax: comp): Int64;
function trig(const trigMax: double): Int64;
function io(const ioMax: Integer): Int64;
procedure Run;
end;
function TBenchMarkDelphi.intArithmetic(const IntMax: Integer): Int64;
var
intResult: Integer;
i: Integer;
begin
startTime := GetTickCount;
intResult := 1;
i := 1;
while (i < intMax) do begin
inc(i);
dec(intResult, i);
inc(i);
inc(intResult, i);
inc(i);
intResult := intResult * i;
inc(i);
intResult := intResult div i;
end;
stopTime := GetTickCount;
elapsedTime := stopTime - startTime;
Writeln('Int arithmetic elapsed time: ' + IntToStr(elapsedTime) +
' ms with max of ' + IntToStr(intMax));
Writeln(' i: ' + IntToStr(i));
Writeln(' intResult: ' + IntToStr(intResult));
Result := Int64(elapsedTime);
end;
function TBenchMarkDelphi.doubleArithmetic(const doubleMin, doubleMax: Double): Int64;
var
doubleResult: double;
i: double;
begin
startTime := GetTickCount;
doubleResult := doubleMin;
i := doubleMin;
while (i < doubleMax) do begin
i := i + 1;
doubleResult := doubleResult - i;
i := i + 1;
doubleResult := doubleResult + i;
i := i + 1;
doubleResult := doubleResult * i;
i := i + 1;
doubleResult := doubleResult / i;
end;
stopTime := GetTickCount;
elapsedTime := stopTime - startTime;
Writeln('Double arithmetic elapsed time: ' + IntToStr(elapsedTime) +
' ms with min of ' + FloatToStr(doubleMin) + ', max of ' + FloatToStr(doubleMax));
Writeln(' i: ' + FloatToStr(i));
Writeln(' doubleResult: ' + FloatToStr(doubleResult));
Result:=Int64(elapsedTime);end;
function TBenchMarkDelphi.longArithmetic(const longMin, longMax: comp): Int64;
var
longResult: comp;
i: comp;
begin
startTime := GetTickCount;
longResult := longMin;
i := longMin;
Set8087CW($133F);
while (i < longMax) do begin
i := i + 1;
longResult := longResult - i;
i := i + 1;
longResult := longResult + i;
i := i + 1;
longResult := longResult * i;
i := i + 1;
longResult := longResult / i;
end;
stopTime := GetTickCount;
elapsedTime := stopTime - startTime;
Writeln('Long arithmetic elapsed time: ' + IntToStr(elapsedTime) +
' ms with min of ' + FloatToStr(longMin) + ', max of ' + FloatToStr(longMax));
Writeln(' i: ' + FloatToStr(i));
Writeln(' longResult: ' + FloatToStr(longResult));
Result := Int64(elapsedTime);
end;
function TBenchMarkDelphi.trig(const trigMax: double): Int64;
var
sine, cosine, tangent, logarithm, squareRoot, i: double;
begin
startTime := GetTickCount;
sine := 0;
cosine := 0;
tangent := 0;
logarithm := 0;
squareRoot := 0;
i := 0;
while (i < trigMax) do begin
i := i + 1;
sine := Sin(i);
cosine := Cos(i);
tangent := Tan(i);
logarithm := Log10(i);
squareRoot := Sqrt(i);
end;
stopTime := GetTickCount;
elapsedTime := stopTime - startTime;
Writeln('Trig elapsed time: ' + IntTostr(elapsedTime) +
' ms with max of ' + FloatToStr(trigMax));
Writeln(' i: ' + FloatToStr(i));
Writeln(' sine: ' + FloatToStr(sine));
Writeln(' cosine: ' + FloatToStr(cosine));
Writeln(' tangent: ' + FloatToStr(tangent));
Writeln(' logarithm: ' + FloatToStr(logarithm));
Writeln(' squareRoot: ' + FloatToStr(squareRoot));
Result := Int64(elapsedTime);
end;
function TBenchMarkDelphi.io(const ioMax: Integer): Int64;
const textLine='abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz12345678 90abcdefgh';
var
myLine: string;
i: integer;
F: textfile;
begin
startTime := GetTickCount;
i := 0;
try
AssignFile(F, 'c:\TestDelphi.txt');
Rewrite(F);
while (i < ioMax) do begin
Writeln(F, textLine);
Inc(i);
end;
CloseFile(F);
i := 0;
AssignFile(F, 'c:\TestDelphi.txt');
Reset(F);
while (i < ioMax) do begin
Readln(F, myLine);
inc(i);
end;
CloseFile(F);
except
on e: exception do Writeln(e.Message);
end;
stopTime := GetTickCount;
elapsedTime := stopTime - startTime;
Writeln('IO elapsed time: ' + IntToStr(elapsedTime) +
' ms with max of ' + IntToStr(ioMax));
Writeln(' i: ' + IntToStr(i));
Writeln(' myLine: ' + myLine);
Result := Int64(elapsedTime);
end;
procedure TBenchMarkDelphi.Run;
var
intArTime, doubleArTime, longArTime, trigTime, ioTime, totalTime: Int64;
begin
Writeln('Start Delphi silly benchmark');
intArTime := intArithmetic(1000000000);
doubleArTime := doubleArithmetic(10000000000, 11000000000);
longArTime := longArithmetic(10000000000, 11000000000);
trigTime := trig(10000000);
ioTime := io(1000000);
totalTime := intArTime + doubleArTime + longArTime + trigTime + ioTime;
Writeln('Total Delphi benchmark time: ' + IntToStr(totalTime) + ' ms');
Writeln('End Delphi benchmark');
end;
var MyBench: TBenchMarkDelphi;
begin
MyBench := TBenchMarkDelphi.Create;
MyBench.Run;
MyBench.Free;
end.
Тест запускался несколько раз. Вот усредненное полное время выполнения тестов для D7 и D2006:
D7: 99836
D206: 103570
Разница около 5%. Разница, конечно, незначительная, но за свои слова я всё же отвечаю.
В D2006 правда стоит FastMM v4.62, а в D7 - стандартный, но сильно повлиять это не должно.
Компилятора ни от D2, D3, ни от D5 у меня нет. Судя по тестам на
http://itc.ua/article.phtml?ID=15800&IDw=33&pid=52
код сгенерированный D2 и D3 работал почти в два раза быстрее аналога на D5-D7.
А вообще, сколько тестов, столько и результатов. Например, по некоторым тестам C# значительно обгонял D7, по моему опыту C# не быстрее D7 (но быстрее D2006). Тесты, которые проводили любители FPC показывали, что FPC быстрее Delphi. Судя по вышеприведенному тесту, FPC вообще курит в сторонке вне зависимости от настроек компиляции, т.к. в лучшем случае FPC проигрывал процентов 20.
Ketmar (2006-11-05 03:54:00) [15]>[143] MeF Dei Corvi(c) 5-Nov-2006, 01:13
>Лично мне лениво ставить D5 и D7, чтобы тестить.
скажи проще: "имел я в виду отвечать за свои слова". ага?
MeF Dei Corvi (2006-11-05 01:13:00) [16]
> слив защитан.
Взаимно. Лично мне лениво ставить D5 и D7, чтобы тестить.
Ketmar (2006-11-04 23:19:00) [17]слив защитан.
MeF Dei Corvi (2006-11-04 21:42:00) [18]
> ты, однако, сам напиши. и выложи. а то трындеть -- это просто.
> а вот как до обоснований доходит -- сразу проблемы начинаются.
Я для себя уже сделал выводы о производительности. Сказанное мною о качестве компиляторов, естественно ИМХО, как и вообще всё, что я говорю. Переубеждать окружающих не собираюсь. Кому надо, тот проверит.
Ketmar (2006-11-04 19:10:00) [19]>[139] MeF Dei Corvi(c) 4-Nov-2006, 16:10
>Если есть желающие потестить, могу им предложить написать
>тесты ;)
ты, однако, сам напиши. и выложи. а то трындеть -- это просто. а вот как до обоснований доходит -- сразу проблемы начинаются.
MeF Dei Corvi (2006-11-04 16:10:00) [20]
> Есть.. Чисто из банального интереса.
Если есть желающие потестить, могу им предложить написать тесты ;)