PDA

View Full Version : سرعت در دات نت و 32 بیتی.



brians2000
چهارشنبه 15 تیر 1384, 03:47 صبح
http://www.programmersheaven.com/2/Art_CSharp_8

برخی از دوستان گفتند که سرعت دات نت و کد نیتیو یکی است... ضمن مطالعه لینک بالا کد زیر رو به صورت مشابه در وی سی ال دات نت و وی سی ال عادی کامپایل کنید و اگر دوست داشتید مشابهش رو بنویسید در سی شارپ حتما از نوع لانگ به جای اینتجر استفاده کنید و از فرمان تیک کاونت در نیم اسپیس انوایرونمنت برای گرفتن مقادیر اولیه و ثانویه و قیاس آنها و به دست آوردن جواب در میلی سکند استفاده کنید...

این کد ساده کاری که می کند اجرای یک حلقه به مدت دو بیلیون بار و بعد نشان دادن تفاوت زمانی به ثانیه است...


procedure TForm1.BitBtn1Click(Sender: TObject);
var
t,a,b,c:integer;
begin
a:=gettickcount;
for t:=0 to 2000000000 do begin
c:=c+1;
c:=c+1;
c:=c+1;
c:=c+1;
c:=c+1;
end;
caption:=inttostr(gettickcount-a);
end;

نتیجه :‌ 9.3 ثانیه زمان اجرا در دات نت و 1.56 در دلفی 32 بیتی ... در مقایسه فوق به هیچ وجه فاکتور یا فرمان ای پی آی که تاثیر گذار در زمان باشد استفاده نشده و در ضمن هم در صورتی که آنسیف و سیف مد باشد نتیجه فرقی ندارد... البته موضوع تفاوت سرعت چیز واضحی است ولی چون دوستان قانع نشدند بنده این مطلب را نوشتم.. خوب! با ویژوال بیسیک 6 نتیجه فوق چیزی در حدود دقیقه!!!! و با جاوا در حدود نیم دقیقه!!!


*Unsafe code will not pass PEVerify, nor will any assembly or Delphi module that calls an unsafe procedure or function.

brians2000
چهارشنبه 15 تیر 1384, 04:06 صبح
نکته مهم اینکه دات نت مسائل حفاظتی و بسیاری از مسائل کدهای عادی را حل کرده است ولی این به معنی برتر بودن آن برای مثلا یک سرور با حجم میزبانی بالا نیست...
در هر وضع: ای اس پی دات نت فوق العاده است .... اما .... :)) من در مقاله بعدی یک نمونه از پروژه ای به نام پاور اف تی پی که یک سرور حرفه ای برای میزبانی تعداد بی نهایت بالای یوزر است را می گذارم و در حقیقت بخشی از دیکودر مایم که اگر دوستان دقت کنند این کد به طور خاصی برای سرعت بهینه سازی شده! خوب...
من فردا این کد رو اینجا می گذارم ! یک توضیح رو هم می دهم:

این کد مربوط به بخش وب سرور است که باید به شدت آپتیمایز شده باشد (برای سرعت در حد امکان ) .. زمانی که شما یک فرمان مالتی پارت را به وب سرور می فرستید وب سرور وظیفه تقسیم و ارسال آن به مرحله بعدی که یک کد اکتیو (از هر نوع) می باشد را دارد ... کلا زمانی که شما یک فایل ارسال می کنید طریقه ارسال از نوع مایم است و ... :) توضیح این موضوع طولانی است ولی این فایل باید به صورت استریم یک طرفه خوانده شود و بدون بافر خواندن آن و اراسل پارامتر ها به مرحله بعدی بسیار وقت گیر است... بخصوص زمانی که کلاینت یک فایل 10 مگابایتی را هم از وب بروزر فرستاده باشد... از طرف دیگر اصل مالتی تریدینگ بودن کد اجازه خواندن کل فایل به حافظه و مدیریت کد را نمی دهد و خواندن مرحله ای از دیسک در یک کد درست می تواند سیستم را متوقف کند و یا کند... چون تقسیم مقادیر باید به سرعت صورت بگیرد به همین دلیل من این کد رو به صورتی که برای دوستان عجیب میاید نوشتم (این نسخه تجاری این کد نیست و من نسخه ای را که در کامپیوتر خودم دارم برایتان پابلیش می کنم...) اگر دقت کنید هدف واضح بوده:
سرعت : خواندن یک طرفه و تفسیر سریع... اشغال حافظه کمتر... عملکرد سریع! عدم مقایسه های زمانگیر...

به کد دقت کنید.

brians2000
چهارشنبه 15 تیر 1384, 04:09 صبح
readmimecode=class
protected
isfirst,content,bufsize,absposition,buffertop,buff erposition:integer;
datalength:integer;
reader:pbytearray;
textbuffer:pchar;
fstream:tstream;
bundry:string;
procedure readcontents;
published
function eof:boolean;
constructor create(stream:tstream);
function first:integer;
function next:fieldsfromstream;
function copytostream(strX:tstream):int64;
function copytofile(filename:string):int64;
end;


function readmimecode.copytofile(filename:string):int64;
var
ss:tfilestream;
begin
try
ss:=tfilestream.create(filename,fmcreate or fmopenreadwrite);
copytostream(ss);
finally
ss.free;
end;
end;
function readmimecode.eof:boolean;
begin
;
end;
procedure readmimecode.readcontents;
begin
buffertop:=round(int(absposition/bufsize))*bufsize;
if content<>buffertop then begin
datalength:=bufsize;
if buffertop+bufsize>fstream.size then begin
datalength:=fstream.Size-buffertop;
end;
fstream.Position:=absposition;
fstream.Read(reader^,datalength);
content:=buffertop;
bufferposition:=absposition-(round(int(absposition/bufsize))*bufsize);
end;
end;
constructor readmimecode.create(stream:tstream);
begin
inherited create;
fstream:=stream;
getmem(reader,32767);
getmem(textbuffer,1024);
zeromemory(textbuffer,1024);
textbuffer[0]:=#0;
bufsize:=32767;
first;
content:=-1;
end;
function readmimecode.first:integer;
begin
isfirst:=1;
absposition:=0;
buffertop:=0;
bufferposition:=0;
readcontents;
end;
function readmimecode.next:fieldsfromstream;
var
_first,currently,ssize:integer;
function interpret(datatointerpret:String):integer;
var
t:integer;
s1,s2,s3,s4:string[255];
begin
s1:=trim(copy(datatointerpret,1,pos(';',datatointe rpret)-1));
s2:=trim(copy(s1,1,pos(':',s1)-1));
s3:=trim(copy(s1,pos(':',s1)+1,65535));
if s2='Content-Disposition' then
next.maintype:=s3
else
exit;

s1:=trim(copy(datatointerpret,pos(';',datatointerp ret)+1,65535));
if pos(';',s1)=0 then
s2:=trim(copy(s1,1,65535))
else
s2:=trim(copy(s1,1,pos(';',s1)-1));
s3:=trim(copy(s2,1,pos('=',s1)-1));
s4:=trim(copy(s2,pos('=',s1)+1,65536));
if s1<>'' then begin
next.name:=s3;
next.value:=copy(s4,2,length(s4)-2);
end;
if pos(';',s1)=0 then exit;
s1:=trim(copy(s1,pos(';',s1)+1,65535));
next.fieldtype:='SUBMIT';
if s1='' then begin
exit;
end;
if pos(';',s1)<>0 then
s1:=trim(copy(s1,1,pos(';',s1)-1));
s3:=trim(copy(s1,1,pos('=',s1)-1));
s4:=trim(copy(s1,pos('=',s1)+1,65536));
if s3='filename' then
next.fieldtype:='FILE';
next.fname:=copy(s4,2,length(s4)-2);
end;
begin
result.maintype:='';
result.fieldtype:='';
result.name:='';
result.value:='';
result.content:='';
ssize:=fstream.size;
currently:=0;
readcontents;
_first:=0;
while not (absposition>=ssize) do begin
if (bufferposition>=bufsize) then
readcontents;
if (reader[bufferposition]=13) and (reader[bufferposition]=10) then begin
end;
if reader[bufferposition]=13 then begin
textbuffer[currently]:=#0;
if (_first=1) then begin
interpret(textbuffer);
end;
if (isfirst<>-1) and (_first>3) and (result.fieldtype<>'FILE')then begin
if result.content='' then
result.content:=textbuffer
else
result.content:=result.content+#13#10+textbuffer;
end;
if isfirst=1 then begin

bundry:=textbuffer;
_first:=0;
end;
if (textbuffer=bundry) and (_first<>0) then begin
//_first:=0;
exit;
end;
inc(_first);
inc(absposition,2);
inc(bufferposition,2);
inc(currently,2);
if (isfirst<>-1) and (_first>3) and (result.fieldtype='FILE')then begin
exit;
end;
isfirst:=2;
currently:=0;
continue;
end;
if currently>1000 then begin
exit;
end;
textbuffer[currently]:=chr(reader[bufferposition]) ;
inc(absposition);
inc(bufferposition);
inc(currently);
end;
end;
function readmimecode.copytostream(strX:tstream):int64;
var
lbundry,bundryflag:byte;
i,outputsize,ssize:integer;
buffer:pbytearray;
begin
try
getmem(buffer,bufsize);
bundryflag:=0;
lbundry:=length(bundry);
ssize:=fstream.size;
outputsize:=0;
while not (absposition>=ssize) do begin
if (bufferposition>=bufsize) then
readcontents;
if (reader^[bufferposition]=ord('-')) and (bundryflag=0) then begin
bundryflag:=1;
end;
if bundryflag<>0 then begin
if bundry[bundryflag]=chr(reader^[bufferposition]) then begin
if bundryflag=lbundry then begin
outputsize:=outputsize-length(bundry);
exit;
end;
inc(bundryflag);
end
else begin
bundryflag:=0;
end;
end;
buffer[outputsize]:=reader[bufferposition];
if outputsize=bufsize-1 then begin
i:=ioresult;
strx.Write(buffer^,outputsize+1);
outputsize:=-1;
end;
inc(absposition);
inc(bufferposition);
inc(outputsize);
end;
finally
strx.Write(buffer^,outputsize-1);
end;
end;

brians2000
چهارشنبه 15 تیر 1384, 04:17 صبح
خوب... در کد بالا می بینید که کارهای غیر ضروری حذف شدند! چون حجم کار بالاست و یک خط اشتباه می تواند سرعت کل سیستم را بر هم بزند (این نسخه تصحیح نشده در کامپیوتر خودم است و نسخه داکیومنت شده شرکت قابل انتشار نیست‌)‌ ...! خوب... شما شاید این موضوع کم به کارتان بیاید که یک فایل چاق و چله چند مگابایتی که با دیلیمتر محدود به چند بخش شده را تفسیر !!!!‌کنید! بعد آن هم روی یک سرور!‌ خوب... پس تا اینجا مشخص شد دات نت چیز عالی است ولی برای چه کاری؟ بحث زیادی شده بخصوص در فورام های کمپانی بورلند که چرا 32 بیتی؟‌چرا جاوا؟ چرا دات نت! خب.... چرا مایکروسافت پروژه های اصلی و مهم خود ماند آفیس را روی دات نت نیاورده (ساپورت دات نت موجود است)‌طبیعی است.... یا فتوشاپ؟‌این ها نیاز به حداکثر سرعت ممکن دارند... به عبارت بهتر... کدهای مدیریت نشده طبیعتا سرعت بهتر دارند ... توانایی های بیشتر و در عین حال بحث کاربردی آنها جداست! :))‌اینجاست که دلیل ظهور دلفی نیتیو 64 بیتی به صورت اتوماتیک بیان می شود...! البته توجه کنید که :‌ کایلیکس توسط بورلند دیباگ نشد! در حقیقت این سایرین بودند که جور بورلند را کشیدند و باگهای کایلیکس را گرفتند ... کایلیکس شکست تجاری مطلقی نخورد ولی کلا لینوکس هنوز خیلی تجاری نیست ! یکی از جالبترین کاربردهای کایلیکس استفاده اون به صورت یک سرور تولز است که بسیار بیشتر از کاربردهای دیتابیس اون است!‌البته اونقدر این نرم افزار کپی شده و دست به دست گشته بخصوص با باگهای اولیه که بورلند تصحیح نکرد و دیگران تصحیح کردند.

brians2000
چهارشنبه 15 تیر 1384, 04:35 صبح
و یک نکته مهم دیگر.... دات نت بی نهایت مهم است! ولی هرچیز در جای خودش... در جاهایی دات نت و محیط نیتیو سرعت نزدیکی دارند ولی در یک عملکرد خاص مثلا تفسیر یک فایل یا یک روتر که با دیسک کاری ندارد دات نت کندتر است... اما در یک کاربرد مستقیم از دیسک سرعت کد طبیعی و کد دات نت بسیار نزدیک می شوند ... نکته زیر ازیکی از اعضای تیم طراحی اکو است :

http://blogs.borland.com/jesperhogstrom


می توانید به وضوح ببینید که دات نت در بعضی کاربردهای سرعت نزدیکی دارد ولی در یک کاربرد استریم .... :) !!! مثلا یک مفسر برای کدهای مایم............................!!! :» طبیعی است که نه!
در بعضی جاها سرعت تا 1.2 برابر به نفع 32 بیتی تا 7 برابر تغییر می کند... اما :

این به معنی نادیده گرفتن دات نت نیست! دات نت یک انقلاب مهم در صنعت نرم افزار است!

brians2000
چهارشنبه 15 تیر 1384, 04:45 صبح
در یک مقایسه عادی... سرعت اضافه کردن و مقدار دهی در محیط 32 بیتی و دات نت تفاوت کمی دارد (نامحسوس) ولی در مقایسه ها و در این حال برخی دیگر از کاربردها تفاوت ها زیاد می شود... :)

پس : شما هنوز دلایل زیادی برای انتخاب دات نت دارید! باید ببینید کاربرد شما چیست..! دات نت یک انتخاب ایده آل برای بسیاری از سیستم ها و سیستم 32 بیتی هم در نوع خود ایده آلی دیگر برای سیستم های دیگر است.. !!!

brians2000
چهارشنبه 15 تیر 1384, 05:08 صبح
خوب!!!!!!!!!!!!!!!!!!!!!! :).... چرا وی سی ال ؟؟ ببینید... در دنیای هرکس شکلها فرق می کند! مثلا یک نفر طراح اپلیکیشن است یک نفر طراح گیم و یا گیم انژین است مثلا برای طراحی گیم جدیدا آنقدر روتین بروی دلفی آمده که شما توجیهی دارید! اما دست نگهدارید! می خواهید ضرر کنید!!!! چرراااا! :)) ببینید... سی ++ بسیار پورتیبل تر است... از طرفی چون طراحی گیم های حرفه ای هزینه بر است کنسول های گیم مهم تر از پی سی ها هستند! پس ... انژین در پشت سر طوری طراحی شده که کل کد قابل انتقال باشد... قطعا دلفی و سی شارپ در دنیاهای دیگر (کنسول ها مین فریم ها ) یافت نمی شوند و یا کم کاربردند! پس شما باید از سی ++ استفاده کنید چون باید کارتان ساخت یافته طراحی شده باشد و ثانیا قابل انتقال باشد و باید حتما دقت کنید که : انسی سی ++ بنویسید نه مثلا با اکتنژن های مایکروسافت یا بورلند که بتوانید فردا آن را به جایی منتقل کنید!

مثال خوبی است! یک انژین گیم باید از چند بخش اصلی طراحی شده باشد و کلا پلاتفرم ایندیپندنت باشد ! هیچوقت بخشهای رندرینگ خودتان را طوری طراحی نکنید که فردا مثلا موقع پورت روی پی اس 2 گریه کنید! رندرینگ جدا... انژین جدا... متریال الوکیتینگ جدا! مثلا مهم است که مدیریت متریال ها حتما جدا باشد و رندر ها هم همینطور که با کد واحد و تغییر در مغز سیستم همه چیز را عوض کنید...در عین حال باید حتی بخشهای 32 بیتی را نیز اصولی بنویسید... مثلا برای نمایش اجزا روی صفحه یک کد مشخص داشته باشید و از ارث رسانی های متناوبی استفاده کنید طوری که خروجی از یک منبع و ورودی از یک منبع بیاید و بخش رویین انزین شما تغییر ناپذیر باشد!
اینجا جایی است که وی سی ال برای کاربردهای تجاری حرفه ای در دنیای سرور های پی سی بیس سلام و علیکم عرض می کند! :)) خوب...! ویندوز... لینوکس و 32 بیتی ! یک کد در سه جا... در عین حال بر خلاف جاوا مشکل لزوم نصب جاوا را ندارد!!!! :) ؟؟؟ این یک کاربرد تجاری است... باید تارگت را حدس بزنید و بر اساس آن اقدام کنید! مثلا اگر دقت کنید نرم افزارهای حرفه ای مسنجر یا با وِیژوال سی نوشته شده اند و یا با دلفی (نمونه آن اسکایپی) ! چون یک فایل کوچک همه کارهارا می کند و نیاز نیست 3 ساعت مشتری کم انگیزه را نگه دارید.... بطور کلی صحیح است هر نرم افزاری را به چند لایه تقسیم کنید به خصوص اگر مالتی تارگت هستند.. .جاوا بد نیست اما برای اپلیکیشن ها....

خوب... :) حتما دابی اف سی مایکروسافت رو خاطرتون هست. ویژوال جاوا!!!!!!!!!!!! ... :)) خوب یا بد؟ در دنیایی که زبانی مثل (بیسیک) کاربرد دارد شما توقع دارید که یک تیم بزرگ جاوا کار بیاید و نرم افزاری را برای یک هدف طراحی کند که می داند در بخش اعظم آن جاوا مورد تبعیض است و مایکروسافت آن را در بسیاری از نسخ ویندوز حذف کرده؟ :)) خوب!!!!!!!!!!!!!!!!!!!!!!! اگر یک برنامه را در لایه های مشخص و با آنالیز صحیح بنویسید و هدفتان را هم بدانید: آِینده خوب است! :)) دات نت تارگت عالی ای است : برای اپلیکیشن ها :)) ...ممم! توضیح می دهم که چرا باید کاربردها را جدا کرد!

brians2000
چهارشنبه 15 تیر 1384, 05:22 صبح
در یک مقایسه دیگر: دات نت تا 3 بار سریعتر است! در حقیقت در رشته ها دات نت از دلفی عمکلرد به مراتب بهتری دارد /// (این نکته در دلفی دات نت وجود ندارد و برای حل این مشکل روتین دیگری که جایگزین استاندارد بورلند شده به اسمم فست ام ام ارایه شده که موجب می شود دلفی تا 2 بار از دات نت سریعتر باشد)

var
t,a,b,c:integer;
data:string;
begin
a:=gettickcount;
datA:=' ';
// showmessage(inttostr(sizeof(data)));
for t:=0 to 5000000 do begin
data:='ryanryan';
data:=data+'ryanryan';
end;
caption:=inttostr(gettickcount-a);
end;

brians2000
چهارشنبه 15 تیر 1384, 05:52 صبح
var
t,a,b,c:integer;
data:string;
begin
a:=gettickcount;
datA:=' ';
// showmessage(inttostr(sizeof(data)));
// data:=nil;
for t:=0 to 500000 do begin
data:='Ryananananan fjk;jlqwkjrlkqwr kl;wejrlkqwej;rklqwejrlqwjrlkejr;lqwjkrwelrjw;elrj qwelrjqwerljqwelrqj;we'+
'Ryananananan fjk;jlqwkjrlkqwr kl;wejrlkqwej;rklqwejrlqwjrlkejr;lqwjkrwelrjw;elrj qwelrjqwerljqwelrqj;we'+
'Ryananananan fjk;jlqwkjrlkqwr kl;wejrlkqwej;rklqwejrlqwjrlkejr;lqwjkrwelrjw;elrj qwelrjqwerljqwelrqj;we'+
'Ryananananan fjk;jlqwkjrlkqwr kl;wejrlkqwej;rklqwejrlqwjrlkejr;lqwjkrwelrjw;elrj qwelrjqwerljqwelrqj;we'+
'Ryananananan fjk;jlqwkjrlkqwr kl;wejrlkqwej;rklqwejrlqwjrlkejr;lqwjkrwelrjw;elrj qwelrjqwerljqwelrqj;we'+
'Ryananananan fjk;jlqwkjrlkqwr kl;wejrlkqwej;rklqwejrlqwjrlkejr;lqwjkrwelrjw;elrj qwelrjqwerljqwelrqj;we'+
'Ryananananan fjk;jlqwkjrlkqwr kl;wejrlkqwej;rklqwejrlqwjrlkejr;lqwjkrwelrjw;elrj qwelrjqwerljqwelrqj;we';
data:=data+';jrlkjrlktj;lkrjtwklertjlerjtwertj;wer ltkjrweltkjerwtklwerjteklrjw;tjerltkejr';
data:=data+';jrlkjrlktj;lkrjtwklertjlerjtwertj;wer ltkjrweltkjerwtklwerjteklrjw;tjerltkejr';
data:=data+';jrlkjrlktj;lkrjtwklertjlerjtwertj;wer ltkjrweltkjerwtklwerjteklrjw;tjerltkejr';
// data:=data+pansichar('ryanryan');
// data:=data;
end;
caption:=data+' '+inttostr(gettickcount-a);
caption:=' '+inttostr(gettickcount-a);
end;

این یک مقایسه دیگر.........!!!!! بله! اینجا دات نت تا 5 بار کندتر است ! مشکل از کجاست؟

دات نت مدیریت داینامیک تری دارد : نکته مهمی را توضیح بدهم... در دلفی تمامی رشته ها گاربچ کالکتد هستند و در صورتی که آپتیمایزشن را هم فعال کرده باشید به طور کلی مدیریت رشته ها داینامیک می شود :
مثلا اگر شما یکبار اصغر را مقداردهی کرده باشید ولی بعدا اصغر استفاده نشده باشد این اصغر اصلا کامپیل نمی شود و البته در سی شارپ هم اگر مقدار اولیه نداشته باشید اصلا نمی توانید کامپایل کنید (نفس کد مدیریت شده! ) پس: دلفی چرا یکجایی سریعتر است یکجا نیست؟ !!!! گاربژ کالکتر در دات نت در بک گراوند کار کچل کردن حافظه ای که فاقد کد است را انجام می دهد (یک ثرید دیگر !!! ) پس شما هرزمان که کدی را از چیزی بگیرید برادر گاربژ کالکتور کچلش می کند! در عین حال ... :) ببینید من اینجا مقدار دهی کرده ام و به آن چیزی اضافه کردم... به طور کلی در زمانی که کد این مدلی در یک سرور ران می شود جریان فرق می کند! من یک چیزی دارم یک چیزی هم به آن اضافه کرده ام (رشته اول له علاوه رشته دوم) پس رشته دوم کپی می شود و رشته جدیدی می سازد در مدیریت حافظه سرورها بخصوص درلود بالا این باعث کند شدن تدریجی سیستم (به صورت وحشتناک! ) می شود! چون تکه پاره های حافظه را نمی شود جمع کرد! پس یک سرور باید حتی الامکان رم بیشتری داشته باشد و در دات نت این موضوع تا حدی مدیریت شده ! جالب نیست؟ تکه پاره های کمتر در حافظه! این نقص در دلفی نیست... در حقیقت نسخه دات نت دلفی هم تابع کاملی از دات نت است... :) نسخه دیگر چطور؟ ببینید اگر رم کم باشد زمان لود بالا موجب کند شدن سیستم می شود ... ولی اگر رم بالا باشد بطور کلی مشکل مربوط به تکه پاره های حافظه (مثلا من 500 تا تکه 500 بایتی دارم ولی وقتی 32 کیلیوبایت می خواهم به چه درد می خورد؟ :) در عین حال باید مدیریت حافظه اینجور چیزهارا درست بنویسید.

هرچیز آپتیمایز شده بهتر...می دانید اگر در دایرکت ایکس مثلا بخواهید یک متریال روی یک شعی بندازید باید سایز تصویر مربوطه که روی جسم سه بعدی می نشیند حتما از توان 2 باشد؟ 2 در 2 ... 4 در 4 8 در 8 16 در 16 32 در 32... 64 در 64! چرااااا؟ :)) خوب ! بخاطر اینکه باعث سریعتر شدن کار رندر سخت افزاری می شود! ماهیت این موضوع اینطوری است! حتی در زمان اختصاص رکورد ها هم همینطور است! یکجا حافظه مهم است یکجاسرعت!

خوب... بازهم می نویسم در این مورد: و می رویم : اصلا وی س ال دات نت! چرااااااااااااااااااااااا اااااااااااااااااا! مگر سیستم قحطه.........................! ولی من می گویم : نه! خیلی چیز خوبی است! و دست آخر چرا سورس باز! چند تا مثال واقعی می زنم ...

brians2000
چهارشنبه 15 تیر 1384, 06:06 صبح
یک مقایسه عملی:

در یک تست... 3500 یوزر از سروری که در حقیقت نوعی تکنولوژی برای فایل شیرینگ است و بیس آن بر اساس پرتکل های اف تی پی و اچ تی تی پی و با ساپورت 436 فرمان اضافه ویژه که امکانات مانند سکیورتی و .... را بروی سرور اجرا می کنند استفاده کردیم ...

کد دلفی طبیعی بود و بیس اصلی کدها بر اساس ایندی کامپوننت ها (تغییرات عمده ای در آنها داده شده است) :

نسخه دات نت در اینجا گاهی در خواب می رفت! :)) در حقیقت سرعت پاسخگویی دات نت کمتر از نسخه لینوکس و ویندوز 32 بیتی بود! :)

در بخش وب سرور (این نرم افزار به هیچ وجه به آی آی اس و آپاچی ارتباطی ندارد و دارای سیستم مستقلی است که تقریبا تمامی اسکریپت های موجود را پشتیبانی می کند) !!! پاسخدهی 32 بیتی هم در لینوکس هم 32 بیتی ویندوز به مراتب بهتراز دات نت بود!!! در بخش فایلینگ! :) ! ویندوز تا نصف سرعت لینکوس را داشت! ! در حقیقت ویندوز در فایلینگ ضعیفتر نشان داد... در بخش مالتی پارت فرم پرسسینگ وب 32 بیتی عالی بود و دات نت کمی کندتر (میشود گفت نصف سرعت ) !!!! ... خوب! سور یکی... کد یکی و کامپایلر یکی! تنها تغییر بخش حفاظتی بود که آنهم سهم زیادی از کل ترافیک نداشت!

نتیجه: لینوکس راکز! :)) ماشالله به لینوکس! دات نت راه می رود و 32 بیتی هم می دود!

نکته: کد ها در تمامی نسخ به شدت به شدت تصحیح شده و برای سرعت هستند و سرور یک سرور بسیار تجاری خاص شرکتهای بسیار بزرگ است و در حال حاضر در کلیه نسخ در شرکتهای بزرگ استفاده و تست می شود.

brians2000
چهارشنبه 15 تیر 1384, 07:21 صبح
نکته بسیار مهم : در دلفی 2005 بطور کلی رشته ها بصورت پیش فرض واید استرینگ تعریف شده اند که کل محیط با یو تی اف سازگار باشد یعنی هر کاراکتر حالا دوبایت شده! برای آنکه رشته های قدیمی یک بایتی را داشته باشید باید انسی استرینگ را جایگزین استرینگ کنید... هم در 32بیتی هم وی سی ال....

ست ها در دلفی دات نت بایتی و در دلفی قدیم بیتی هستند .

در نسخه آتی دلفی که تا به حال مشخص شده که نامش تغییر خواهد کرد سی ++ بیلدر هم مهمان دلفی شده است! نسخه آتی دلفی بطور قطع موفق ترین نسخه دلفی خواهد بود...

brians2000
چهارشنبه 15 تیر 1384, 07:34 صبح
اگر دوستان سوالی دارند بپرسند: در مقاله بعدی در مورد کاربرد بی نهایت زیاد اینلاین فانکشن ها که به نوعی همان تمپلیت خودمون هستند و صحیح نوشتن اونها طوری که باعث سرعت دادن به یک کد بشوند می نویسم.

brians2000
چهارشنبه 15 تیر 1384, 07:54 صبح
یک مقایسه عملی بین دو کد تولید شده!


[quote]procedure ryan(var t:integer);inline;
begin
t:=t+1;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
t,a,c:integer;
begin
a:=gettickcount;
for T:=0 to 1000000000 do begin
ryan(c);
end;
caption:=inttostr(gettickcount-a);
end;[/quote]


در پنجره دیباگ دو طرف را می بینید که راستی خروجی اسمبلی مطلق از دات نت آی ال (نسخه نهایی در حال اجرا به صورت کد ماشین) و چپی دلفی خودمان است! حالا دلیل کندی دات نت در بعضی از کدهارا تا حدی می فهمید : دات نت و کد مدیریت شده تقریبا تمامی چیزهارا به پوینتر تبدیل می کنند دقت کنید به لاین ها که به دقت مقایسه شده اند (یک به یک) ... در خطی که جی ان زد داریم مفهوم این است که بپر اگر صفر نبود و حلقه رو ادامه بده! خط بالایی رو دقت کنید : در دات نت اشاره به پوینتر است و در دلفی عادی به رجیستر!!!!!!!!!!!!!!!!!!1 :)) خوب/............................................ مفهومش چیه این؟

نکته مهم اینه که رجیستر حافظه داخلی پرسسور است و پوینتر اکسترنال ! پس ماهیتا دلفی 32 بیتی حلقه های سریعتری داره! این موضوع در بعضی از موارد باعث سریعتر شدن کد میشه! (نکته اینها که هرچه کش در سی پی یو بیشتر باشه ثرید ها بهتر اجرا می شوند و این در سرور ها مهم است! در حقیقت صف کمتری ایجاد می شود پس این دلیلی بر سرعت بیشتر یک زیون و یا آتلون ام پی است! کش بیشتر در مالتی تریدینگ بهتر عمل می کند و چون در هر سرور ترید های زیادی ایجاد می شوند جواب بدهی بهتر است! )

پس دوزاری ماافتاد که سرعت دلفی 32 بیتی در حلقه ها از کجا میاد ولی سی ال آر در نهایتا چی میشه؟ دات نت در نهایت : لینک میشه و میشه کد ماشین! پس سریعه! جاوا هم کامپایلرهایی داره ولی.... در دات نت و لینکر اون آپتیمایز برای اینتل بی نهایت عالی است! واقعا عالی... :) همینو بگم که ام ام اکس و سایر ایکتژن ها کاملا صحیح تبدیل می شوند در زمان تبدیل به کد ماشین)

خوببببببببببببببببببببببب ! پس دات نت تا اینجا خوبه! این خاصیت حلقه های دلفی است که این وضع رو پیش آورده! حالا می رویم سراغ بحث بعدی :
این این لاینه چرا اون وسطه! چرا کال نداریم و پاش و پاپ هممم.... خوب ساده است! این اینلاین فانکشن اون وسط تبدیل به کد میشه و مقدار ورودی اش یه مقدار لوکال! ... اگر اینرو تمی گذاشتید قطعا فراخوانی انجام می شد و پاش و پاپ ضروری بود... اما اینجا کد همون وسط میچسبه : نتیجه سرعت زیاد میشه کد بزرگتر! خوب....

brians2000
چهارشنبه 15 تیر 1384, 07:58 صبح
اگر دوستان علاقه دارند ادامه بدهم .

brians2000
چهارشنبه 15 تیر 1384, 08:04 صبح
جمع بندی :

دات نت راکز! :) مزیت 32 بیتی قابلیت آپتیمایز بیشتر است! مثلا در ایمیج پرسسینگ های سنگین ما مستقیما اسمبلی می نویسیم.... ولی دات نت راکز! ... :)) فوق العاده است! :) ...............................

اینطور نیست؟

brians2000
چهارشنبه 15 تیر 1384, 09:25 صبح
یک بحث جالب:‌

برای اکثر شما سرعت در اون حدی که مثلا برای من و یا شرکت ما مهم هست مهم نیست چون برای ما حداکثر سرعت مهمه!‌ در حال حاصر به شدت پیگیر یک مشکل در بد معرفی کردن مقادیر فلوتینگ پوینت در دلفی دات نت هستیم!!!! مسخره است ولی ببینید مشکل ما چیه و چی برای ما مهم شده!
دز زمانی که از مقادیر فلوتینگ پوینت استفاده می کنید دلفی یک کد بیخود آی ال رو اضافه می کنه که در حقیقت جایگزین روشی منطقی شده! ببینید CKFINITE توی دات نت کارش اینتگریتی چک کردنه مثلا اگر چیزی مقدار دهی نشده بود بیاد یه اروری بکاره اون وسط!!!! خوب مشکلی نیست که! ولی وقتی اینو به یک وریبل فسقلی فلوتینگ اضافه کنید کلی کد چرت و پرت اضافه می شه از جمله یه تغییر مقدار و یه اند و یه سی ام پی و یه جی ان زد اضافه تو کد 32 بیتی ایضا همین توی 64 بیتی (زمانی که آى ال به کد ماشین تبدیل شده)‌و این سرعت رو میگیره!‌ خوب این یه وریبله نه یه کیلو چیز‌! توی سی شارپ فقط یه اضافه کردن و یه سری کاربردای لازم انجام میشه و بعد اف اس تی پی مقادیر رو میگیره! توی دلفی معمولی هم همینطور ولی توی این دات نت گند زدند! این سی کی اف اینیت مال اینجا نیست باید اگر مقدار دهی اولیه نشده یا ارور بگیره مثل سی شارپ بگه داداش! این که مقدار نداره! خالیه! یا خیلی خوب... اگر مقدار دهی نشده بود خودش بیاد سر کد یه مقدار دهی اولیه بچسبونه که این سی کی اف اینیت مزخرف که فقط مال آبجکت های دیگه است نیاد و یه فلوتینگ پوینت را باهاش مثل یه آبجکت رفتار کنه! مسخره است این چیزایی که میگم ولی برای من که خیلی مهمه! این چیه آخه : ببینید :‌ این 4 تا مقایسه چند تا سیکل رو میگیرند و حالا بیایید یه سرور ایمیج پرسسینگ که من بدبخت روش کار کردم رو در نظر بگیرید و یا ویس پرسسینگ که ما باید دات نت هم داشته باشیم !‌البته قراره حل بشه من تعجب کردم یه دایرکتیو نداره مثلا بگه خود اضافه کن! این خیلی عجیبه دلفی کاربردش خیلی زیاده و میلیونها نفر این مشکل رو خواهند داشت یعنی یه کد بیخود و سربار اضافی برای یه فلوتینگ پوینت بدبخت که درست تعریف نشده! البته این مشکل رو ما حل کردیم ولی فکر می کنم که جالب باشه براتون که چقدر گاهی این چیزا یه ذره سرعت مهم میشه!‌


ckfinite در آى ال یکی از فرمان های خاص برای تشخیص خطاهای مقدار دهی مقادیر کنترل شده است در صورت آنساین و یا آردر داده نشدن و یا مقدار نداشتن ایجاد خطا می کنه!


نکته : مشکل فوق مشکلی برای دلفی 32 بیتی نیست و اصلا مشکلی نیست که بهش بر بخورید... پرفورمانس شما زیاد تغییر نمی کنه و کلا حتی کد مطمئن تریه! شاید اصلا کاربردی برای شما نداشته باشه چون در هر وضع ویژوال بیسیک دقیقا برای هرچیزی اینکارو می کنه! ولی توی دلفی برای من عجیب بود که توی دات نت چنین اشتباهی انجام بشه! البته اگر مهم باشه و برای شما تاثیری داشته باشه که نداره

نکته: مشکل فوق رو با تیم کامپایلر دلفی در میون گذاشتیم! منتظر جواب هستیم که ببینیم چی میشه! البته اصلا این مشکلی نیست چون همونطور که گفتم کد در بیسیک طوری تولید میشه که اصلا آپتیمایزی درش نیست! ولی دلفی یه خطم یه خطه! البته اینقدر جاهای مختلف بهت تعریف شده دلفی که جای حرفی نداره!

brians2000
چهارشنبه 15 تیر 1384, 10:07 صبح
خوب.... بهرصورت اینطور...در ضمن: اینطور توضیح بدم که سرعت دلفی در اکثر موارد از سی شارپ بیشتر بوده و سرعت دات نت در نهایت در خیلی از موارد مشابه هم بوده ولی بطور کلی 20 درصد تا 55 به طور متوسط کندتر اما توجیه استفاده اونقدر داره که نمیشه ازش گذشت...


و شاید بشه گفت: دلفی دات نت بدون شک بهترین کامپایلر دات نت است! نکته ای که در بالا گفتم تاثیری در سرعت دلفی نداره! بلکه باعث میشه در صورت اضافه کردن این موضوع 30 درصد سرعت کد دلفی اضافه بشه! البته این اضافه بر سرعت سی شارپ و گرنه همینجوری سرعت هردوتا یکیه فقط دلفی توی بعضی از موارد مثل حلقه ها و موارد خاص دیگه سرعتش خوبه! گو دلفی! دلفی راکز! :)) وی بی دات نت....!! خوب... این دیگه اسمش روشه! آی ال وی بی دات نت افتضاح ترین آی ال توی دنیاست! در حقیقت کامپایلر وی بی نمونه طراحی افتضاح است که به دلیل ساختار زبان است! آنقدر چیزهای اضافه دارد که نمی شود تکرار کرد!

Delphi Skyline
چهارشنبه 15 تیر 1384, 10:16 صبح
آفرین . خیلی باحال بود :تشویق:

Delphi Skyline
چهارشنبه 15 تیر 1384, 10:18 صبح
دلفی دات نت بدون شک بهترین کامپایلر دات نت است
اینو قبول ندارم . چون دلفی دات نت به قول بعضی ها به بیراهه رفته .
سی شارپ بهتره (فقط در دات نت) :wink:

Delphi-Clinic
چهارشنبه 15 تیر 1384, 10:23 صبح
رایان جان ادامه بده :)

brians2000
چهارشنبه 15 تیر 1384, 10:33 صبح
دوستان....

اگر علاقه دارید من مباحث دیگرو مثل طریقه طراحی کردن وب سرور و یا هرچیزی که براتون جالبه بنویسم مثلا یه نمونه از یه بچه مفسر (مفسر کوچیک! ) که حالا چجوری میشه یه مفسر رو طراحی کرد... و................ :)‌منطق نه کد البته چون وقت میگیره مثلا چجوری یه دیباگر بنویسیم؟؟؟‌ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!1

ممم... :)‌‌‌ خوبببب! به نظر من دلفی کم نظیره و دوست داشتنی... نظر شمارو نمی دونم! بخصوص این دات نتش رو با وی سی ال توصیه می کنم چون واقعا این وی سی ال هنوز یه چیزایی داره که :))‌ براتون دلایل واضح می نویسم نه دلایل بورلندی چون همه بورلندیا چه مشتریا چه پرسنل عاشقشن! دیگه عشق چشمای آدمو کورمی کنه و............ :))‌‌ با بورلند بمانید و همیشه بمانید و با دات نت هم بمانید که این دات نت بدجوری قوی است!

brians2000
چهارشنبه 15 تیر 1384, 10:42 صبح
اسکای لاین عزیز! اشتباه شما دقیقا همینه... ببین دوست من... دلفی دات نت نه تنها بیراهه نرفته خوب جاییم رفته! به نظر من همین که در بسیاری از موارد از جمله حلقه ها و بسیاری چیزهای دیگه سینتاکس نه که هیچ کم نداره از سی شارپ برتری هم داره و در عین حال 5 جا هم تشریف داره و همه چیز رو هم ساپورت می کنه... زبون ساده تره! وی سی ال دات نت (به نظر من ضرورت است!‌ نه به خاطر قبل به خاطر آینده! )‌ و ....


کلا باهات مخالفم! دلفی همیشه زنده است ... این حرفهارو نشنیده بگیر!‌کی گفته دلفی بیراهه رفته؟‌ باگ داره دلفی؟‌ برید آپدیتش رو نصب کنید من که لینک مجانی گذاشتم... دیگه از این بهتر؟‌
از نظر من و به دلیل اینکه روی اسمبلی تسلط دارم کامپایلر دلفی بی نهایت عالی طراحی شده... فوق العاده است کد تولید شده و خروجی و آپتیمایزی که داره! تقریبا کار راحت کنه! سینتاکسش بی نهایت قویه و تمامی نکاتی که در سی شارپ هست حتی دیلیگیت ها هم توش هست! اصلا این حرفارو نزن که دلخور میشم! هنوز وی سی ال مزیت هایی داره که نمیشه نادیده گرفت... توی محیط جدید بی استودیو ادین های مایکروسافت هم قابل اجرا هستند و شما به قول یکی از بچه ها اصلا ساپورت دیتابیس ایندوتارو نمی تونی قیاس کنی!‌مایکروسافت کار رو سخت کرده اینور یه دنیای آزاد و راحت با کلی گل و بته و دار و درخت و اینتراوب و اکسپرس وب فریم ورک و چند صدهزار کامپوننت مفتی و هزاران پروژه اپن سورس و ... ! اینور دنیاییه! با این سی ++‌بیلدر گلهای اینور بیشتر در میان!‌ در ضمن:‌سی شارپ بیلدر رو واقعا به محیط مایکروسافت ترجیه می دهم البته :))‌این دلفی تا کم باگ شد کشت مارو ولی واقعا یک سری چیزاش هست که مایکروسافت نمی تونه کاری بکنه براشون! ... :))‌ وی بی کاران عزیز! در نسخه آینده میهمان ما خواهید بود وی بی شما کاملا ایتگریت شده دیگه چی می خواهید از یک محیط؟‌

اسکای لاین:‌تو کارتو با دلفی ادامه بده و به این کارا کاریت نباشه!‌

hr110
چهارشنبه 15 تیر 1384, 11:03 صبح
عالیه، لطفاً ادامه بدید :flower:

brians2000
چهارشنبه 15 تیر 1384, 21:28 عصر
http://66.249.93.104/search?q=cache:3tRxpVSJEjIJ:excastle.com/blog/archive/2004/09/11/265.aspx+DANNY+THORPE+LEFT+BORLAND&hl=fa


ملاحظه بفرمایید! ... وی سی ال دات نت دارای مشکل در اجرا در محیط 64 بیتی است! ولی آیا بورلند مشکل را حل نکرده؟‌ چرا... مشکل حل شده و وی سی ال دات نت دارای یک دایرکتیو جدید است!

آیا دانی ثورپ از بورلند رفته! من هم این شایعات را شنیده ام... خیر... ایشان هنوز تشریف دارد!

آیا بورلند فقط یک طراح کامپایلر دارد؟‌ خیر در جمع تیم از 9 نفر تشکیل می شود سه نفر دلفی 3 نفر سی ++ و سه نفر جاوا...

حقوق اینها چقدر است ؟‌ !!!‌نمی شود دقیق گفت: بین 350 تا 700 هزاردلار در سال ...

کارهای بورلند چیست؟‌ بورلند به دلیل ضرری که از کپی چی ها (تبلیغات بالای همین سایت رو نگاه کنید!‌) به او وارد می شود از شرکتهای جانبی و پروژه ها دولتی روزی خود را می گذراند! میلیونها برنامه نویس وابسته به بورلند وجود دارند که بخش مهمی از کپی استفاده می کنند و دلیل آن ساده است : دلفی خیلی بسته بزرگ و گرانقیمتی است!

وضع بورلند خراب است؟‌ در خاورمیانه؟‌ در خاورمیانه دو بخش اصلی بورلند وجود دارد ... یک بخش یک نوع بخش توسعه و فرع شرکت اصلی و دیگری نماینده است که کار زیادی باهم ندارند.

در سال 2004 درآمد سالیانه بورلند به 800 میلیون دلار و در سال جاری به 560 میلیون دلار سقوط کرده و البته باید گفت که حد پایین این قیمت 420میلیون دلار بوده که در حال رشد است (توجه بفرمایید که که منظور حدس در آمد احتمالی با توجه به میانگین رشد درآمد سالیانه حساب می شود نه پولی که در حال حاضر نیامده چون سال تمام نشده؟!)‌

دلفی یکی از پرفروش ترین و گاو شیرده بورلند است! به دلیل آپتیامایز بودن فوق العاده این کامپایلر طرفداران متعصب آن در همه جا یافت می شوند پس بورلند زنده می ماند!!!!!!!!!!!!!!!

GO DELPHI! RUN BORLAND!

brians2000
چهارشنبه 15 تیر 1384, 21:40 عصر
خوب... در مقاله های بعدی دلایل اینکه : چرا دلفی بکاریم (بکاریم اصطلاحی جدید برای کار کردن است یعنی کار کنیم)‌!!!!!!!!!!!!!!! ......................................!!! این دلفی چه کارها که نمی کند! من مقایسه های زیادی بین کد سی شارپ و دلفی در نسخه نهایی کرده ام! دلفی راکز! واقعا آقای دانی ثورپ به شما بخاطر طراح چنین چیزی تبریک می گویم!‌آپتیمایزشن....

دوست دارم یکجا طریق طراجی یک کامپایلر (نه به روش دانشگاهی!‌به روش عملی به قول معروف :‌ ناصر قصابی! ما اینجا آزمایش روی گوشت ها نمی کنیم سر گوسفند را می بریم و شقه شقه می کنیم و بعدش هم می پزیم! ) رو بنویسم... بخصوص برای دات نت!‌اینروزها دیگه هرکسی از خونش در میاد یه کامپایلر می نویسه! یکجا داشتم مقایسه سرعت کامپایل دلفی و بقیه را می خواندم : نوشته بود 350000 خط در دقیقه! ... البته بستگی دارد ولی این گزارش متعلق به 1996 است و سرعت فعلی بسیار بالاتر است ! در هر وضع: کامپایلر دلفی سریعترین کامپایلر موجود است که سرعت کامپایل آن در حدود 2 تا سه برابر برادر سی شارپ است!
دلیلش هم واضح است :‌ساختار زبان برنامه نویسی! البته این موضوع در برنامه های خیلی چاق کمک می کند مثلا :‌ ده میلیون خط سورس!


در مورد کروم پرسیده بودید:‌من خیلی جدیش نگرفتم (پاسکال برای وی استودیو)‌ کد تولید شده آن افتضاح است (به مراتب بهتر از کامپایلر افتضاح وی بیسیک اما غیر قابل قیاس با سی شارپ و دلفی‌) کمااینکه هنوز معتقدم مایکروسافت برای کارهای خیلی بزرگ در ویژوال استودیو هیچ مدیریتی در نظر نگرفته در حقیقت محیطهای بورلندی ایده آل پروژه های چاق و چله هستند! پرسیدند یو ام ال :‌ واقعا بدرد می خوره! خوب شما کد رو که باید بنویسی ولی موقعی که سرخط مقاله تو می نویسی و تیترش می کنی راحتتر نیستی؟‌:))‌من توی محیطهای بورلند خیلی راحتم چون دستم بازه و راحت به هدفم می رسم!

راستی : موضوع قدیمی !‌مقایسه بدترین کامپایلر تاریخ بنا به شهادت بسیاری از مردم در اینترنت! :))‌‌ و خواندن لیست فحشهایی که به طراح ویژوال بیسیک 6.00 کامپایلر کند ضعیف و پردردسر مایکروسافت در نسخه قدیمی داده شده و مقایسه کد تولید شده این کامپایلر در نسخه دات نت (هیچ ربطی به نسخه 32 بیتی ندارد! )‌با دلفی و سی شارپ!!!

brians2000
چهارشنبه 15 تیر 1384, 22:03 عصر
چرا بیسیک نه؟ مشکل امثال من با بیسیک در سینتاکس بی معنی و نامفهومی است که کار را سخت می کند.. در حقیقت کد ژنریک بیسیک هیچ سنخیتی با ساخت یافتگی ندارد! البته در نسخه جدید ساخت یافتگی رعایت شده ولی منطق آن اینطور نیست! مثلا برای شکستن خط باید از _ استفاده کنید! بهرصورت استفاده از سی شارپ و دلفی راحتتر است و ساختار ژنریک ساخت یافته این دوزبان کار را راحت می کند و در عین حال آپتیمایز دلفی بسیار بهتر از بیسیک است! کد ژنریک دلفی بالقوه ساخت یافته است. در عین حال دلفی کار را راحت کرده و به دلیل اینکه نگاهی به پشت سر دارد بیشترین سورس ممکنه را در اختیار دارد و در عین حال نکته ایده آل دلفی داشتن وی سی ال و سازگاری با آن است!× یک کد می نویسید و چند جا استفاده می کنید.

brians2000
چهارشنبه 15 تیر 1384, 23:47 عصر
http://www.itwriting.com/borlandsdo3.php

:) !!! دلفی 64! به نظر من ایمپلمنتیشن وی سی ال می توانست تغییر کند!!!!!!!!!!!!!! :) چرا بورلند همه چیز را بر اساس دات نت بنا نکرد (کار ساده تر؟> ) !!! این کار انجام شده... :) دیباگر 64 بیتی تمام شده ... البته این مهم است!

تغییرات مهمی در وی سی ال دات نت جدید داده شده! :) و این ها باعث استقلال کامل از محیط 32 بیتی خواهد شد!


شرایط عضویت در تیم بی :
باید فعال باشید... در پرسش ها شرکت کنید... مقالات شما فعال باشد ... :) آنوقت جزئی از تیم بی هستید.

brians2000
پنج شنبه 16 تیر 1384, 00:09 صبح
XCOM CODENAME ...

طراحی شده : بوسیله دلفی نیتیو 32 بیتی با قابلیت پورت روی لینوکس.

توضیح: این تنها بخشی از فریم ورک مربوطه است .

این فریم ورک قابلیت های مختلفی به عنوان تنها سوپر مسنجر جهان دارد از جمله سیف اسکریپت و ساپورت به عنوان یه دیویلاپمنت انوایرونمنت و دهها کامپوننت خاص طراحی شده برای انتقال اطلاعات.

این فریم ورک می تواند تحمل صدها هزار یوزر رو به صورت همزمان داشته باشد و 12 سرور مختلف برای آن طراحی شده. :)‌

امکان استفاده از :سه زبان پی اچ پی و ایزی بیسیک و فری پاسکال و اضافه کردن ادین ها بوسیله دات نت 32 بیتی و جاوا و همینطور آی اسکریپت.

brians2000
پنج شنبه 16 تیر 1384, 00:14 صبح
نظر دوستان رو می خواهم در مورد پروژه بالا بدونم...

brians2000
پنج شنبه 16 تیر 1384, 00:33 صبح
دوستان... می خواهم یک پروژه اپن سورس باهم تعریف کنیم! :))‌ بر اساس دلفی 32........................


یک وب سرور! کمک من روتینهای لازمه و توضیحات لازمه است! بقیه کارها با شما !!!!!!!!!!!


:))‌ اسم وب سرور معروف آپاچی رو که شنیدید ما هم اسمشو می گذاریم لر چی چی!!!

ولی جدی ! یکم وقت بگذارید منهم هستم! روتینهاشو من می دم... روزی دو سه ساعت وقت بگذارید... :)‌

نکته:‌فقط ساخت یافته باشه بالام جان!

:)‌ بیسش هم وی سی ال... نگران آینده وی سی ال نباشید 64 بیتی و... :)‌ دلفی همیشه در کنار شماست!

من از کسانی که جدی پایه هستند دعوت می کنم دمب این مطلب بنویسند: اگر دوست داشتید.
اگر ببینم زیاد شدید و پی می گیرید سورسهاشو بهتون می دم و راهنمایی می کنم...

نکته مهم اینکه باید پورتیبل روی لینوکس باشد :‌ اصولی نوشته شده باشد :

brians2000
پنج شنبه 16 تیر 1384, 00:48 صبح
من از چند تا از دوستام که برنامه نویسای خیلی قوی ای هستند دعوت کردم که به این تیم بیان اونهاهم شرطشون اینه که حداقل 10 نفر عضو بشن... اونها ایرانی نیستند و نمی تونن اینجارو بخونند برنامه حسابی میشه گذاشت برای اینکارها............................. ! فکر کنم فرصت خوبی باشه هم برای من هم برای شما... من درگیر یک پروژه مشابهم که البته سورساش رو می تونم تا حدودی بیارم مثلا ما سورسهای عالی ای برای تفسیر اطلاعات و فورم ها داریم

راستی اینهم یک نمونه از یک کد ساده مفسر (خیلی ساده ) ! این رو اون زمان برای دوستم نوشته بودم :!!!
تو ضمیمه کاملش هست. در هر وضع : دو تا ممو باکس اضافه کنید و یه بیت بی تی ان و بقیه اش با شما.................... ! این خیلی کار داره تا کامل باشه ولی نمونه یک برنامه نویسی اصولیه.

<span dir=ltr>
[quote]
unit NEDA;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//the CHAIN LIST
myvariable=class
typeof,name,value:string;
current,last,next:myvariable;
function find(name:string):myvariable; //FIND THE VARIABLE
function GOLAST:myvariable; //GOLAST
function GoNEXT:myvariable; //GONEXT
function findlast:myvariable; //GOTO FIRST CHAIN
function findfirst:myvariable; //GOTO FIRST CHAIN
destructor destroy;
constructor create(icurrent:myvariable;myname:string;Ivalue:st ring;thetype:string);
//CREATE OR SET THE VARIABLE
end;
ireply=record
name:string;
mode:integer;//=1 for command 2=Variable
end;
myinterpreter=class
myobject:array [0..100] of record
nextlink:integer; //manage the next link for the priority interpretion
value,name:string; //value and its name
variablelink:integer; //link to the variable
myvar:myvariable; //variable class link
operator:integer; //operator for the numbers
end;
current:myvariable;
last:myvariable;
first:myvariable;

procedure add(name,value:string); ///not active //add a value and its name
procedure findfirst(level:string); //find the first group
function interpret(s:string):ireply; //interpret a line
procedure reset; //reset the values , internal usage there for this, it reset interpretion temp values
constructor create; //create the class
end;
var
Form1: TForm1;

implementation
var
interpret:myinterpreter;
destructor myvariable.destroy;
begin
if last<>nil then //made Chain two cross to point together
last.next:=next;
if next<>nil then
next.last:=last;
inherited destroy;
end;
function myvariable.find(name:string):myvariable;
var
temp:myvariable;
begin
result:=nil;
temp:=findfirst;
if current<>nil then begin
if current.name=name then begin
result:=current;
exit;
end;
repeat
if current.name=name then begin
result:=current;
exit;
end;
until gonext=nil;
end;
end;
function myvariable.GOLAST:myvariable;
begin
if not (current.last=nil) then begin
current:=current.last;
exit;
end;
if (current.last=nil) then
result:=nil;
end;
function myvariable.GONEXT:myvariable;
begin
if not (current.next=nil) then begin
current:=current.next;
exit;
end;
if (current.next=nil) then
result:=nil;
end;
function myvariable.findlast:myvariable; //GOTO LAST CHAIN
begin
result:=nil;
while GONEXT<>nil do
;
result:=current;
end;
function myvariable.findfirst:myvariable;
begin
result:=nil;
while GOLAST<>nil do
;
result:=current;
end;
constructor myvariable.create(icurrent:myvariable;myname:strin g;Ivalue:string;thetype:string);
var
temp:myvariable;
myvalue,valuetest:integer;
begin
if icurrent<>nil then begin
temp:=icurrent.find(myname);
if (temp<>nil) and (temp.name=myname) then begin
if (thetype<>'') and (TEMP.typeof<>thetype) then begin
raise ERangeError.CreateFmt('Invalide type reference',[]);
exit;
end;
val(value,myvalue,valuetest);
if (TEMP.typeof='NUMERIC') and (valuetest>0) then begin
raise ERangeError.CreateFmt('Invalide value for numeric data',[]);
exit;
end;
end;
if temp<>nil then begin
self:=temp;
temp.value:=ivalue;
exit;
end;
end;
inherited create;
// if icurrent<>nil then begin
if icurrent<>nil then
icurrent.findlast.next:=self;
last:=icurrent;
current:=self;
next:=nil;
name:=myname;
value:=ivalue;
end;
procedure myinterpreter.add(name,value:string);
begin
end;
procedure myinterpreter.findfirst(level:string);
begin
end;
function myinterpreter.interpret(s:string):ireply;
var
last,I:integer;
function findfirstfree:integer;
var
t:integer;
begin
result:=-1;
for T:=0 to 100 do begin
if myobject[t].name='' then begin
result:=t;
exit;
end;
end;
end;
function findnext:string;
begin
result:='';
last:=i;
while (i<=length(s)) and not(s[i] in ['=','(',')','+','-','"']) do
inc(i);
result:=copy(s,last,i-last);
end;
var
myc:char;
valuetemp,THESTR:string;
t,start,Ccurrent:integer;
cnext:myvariable;

begin
result.mode:=-1;
i:=1;
start:=-1;
Ccurrent:=-1;
while true do begin
thestr:=findnext;
if (i>=length(s)) then begin
if start=1 then
myc:='"'
else
myc:=')';
end
else
myc:=s[i];
case myc of
')','+': begin
if ccurrent=-1 then begin
Ccurrent:=findfirstfree;
cnexT:=current.find(thestr);
if thestr='input' then begin
valuetemp:=inputbox('Please enter the value for '+result.name,'','');
myobject[Ccurrent].value:=valuetemp;
myobject[Ccurrent].name:=thestr;
end;
if cnext<>nil then begin
valuetemp:=cnext.value;
myobject[Ccurrent].value:=valuetemp;
myobject[Ccurrent].name:=thestr;
end;
inc(i);
ccurrent:=-1;
if (i>length(s)) then break;
continue;
end;
if ccurrent<>-1 then begin
end;
if s[i]=')' then break;
end;
'"': begin
if start=1 then begin
thestr:=trim(thestr);
Ccurrent:=findfirstfree;
myobject[Ccurrent].name:='AC';
myobject[Ccurrent].value:=thestr;
inc(i);
start:=-1;
if (i>length(s)) then break;
Ccurrent:=-1;
continue;
end;
start:=1;
end;
'(': begin
if result.mode=-1 then begin
result.name:='COMMAND.'+thestr;
result.mode:=1;
inc(i);
continue;
end;
end;
'=': begin
if result.mode=1 then begin
raise ERangeError.CreateFmt('SYNTAX ERROR',[]);
exit;
end;
if result.mode=-1 then begin
result.name:=thestr;
result.mode:=2;
end;
end;
end;
inc(i);
if (i>length(s)) then break;
end;
thestr:='';
for T:=0 to 100 do begin
if myobject[t].name<>'' then
thestr:=thestr+myobject[t].value;
end;
cnext:=myvariable.create(current,result.name,thest r,'');
reset;
end;
procedure myinterpreter.reset;
var
t:integer;
begin
for t:=0 to 100 do begin
myobject[t].nextlink:=-1;
myobject[t].name:='';
myobject[t].variablelink:=-1;
myobject[t].operator:=-1;
end;
end;
constructor myinterpreter.create;
var
t:integer;
begin
inherited create;
current:=myvariable.create(nil,'ROOT','ROOTOFSYSTE M','');
reset;
end;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
t:myvariable;
begin
interpret:=myinterpreter.create;
if interpret.current.find('ROOT')<>nil then begin
end;
{ with myvariable.create(interpret.current,'RYAN','RYAN1' ,'') do
memo2.lines.Add(find('ROOT').value);
with myvariable.create(interpret.current,'RYAN','RYAN12 3123','') do
memo2.lines.Add(find('RYAN').value);
if interpret.current.find('RYAN')<>nil then
memo2.lines.Add(interpret.current.find('RYAN').val ue);
memo2.lines.add(interpret.interpret('RYAN="RYAN1"').name);
memo2.lines.add(interpret.interpret('RYAN=RYAN+"RYAN2"').name);}
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
t:integer;
reply:ireply;
variable:myvariable;
begin
memo2.Lines.Add('');
memo2.Lines.Add('');
memo2.Lines.Add('SCRIPTING SAMPLE -----------------------');
for T:=0 to memo1.Lines.count-1 do begin
reply:=interpret.interpret(memo1.lines[t]);
if trim(memo1.lines[t])='' then continue;
if (reply.name='COMMAND.printf') and (reply.mode=1) then begin
variable:=interpret.current.find(reply.name);
if variable<>nil then
memo2.Lines.Add(variable.value);
end;
end;
memo2.Lines.Add('END -----------------------');
end;

end.&#91;/quote&#93;&lt;span dir=ltr>&lt;/span></span>

brians2000
پنج شنبه 16 تیر 1384, 03:37 صبح
نکته مهم :
توی design کامپایلر برای هر کدی یکجور تمپلیت داریم که باید مقادیرش پر بشه. من توی کدی که توی آخرین پروژه ام نوشتم اینهارو طوری تعریف کردم که در زمان برگردوندن به اسمبلی یا مثلا آی ال یا کد اینترنالی که داره یه بانک اطلاعاتی ساده خارجی لود میشه و تمپلیت ها اینترنال نیستند... بحث آپتیمازشن ها بر می گرده به پروفایل اونها مثلا :‌یه جایی وریبل استفاده نشده باید دراپش کنید که خوب یه پروفایله... یه جا دیگه یه پروفایل دارید مثلا این وریبل تاحالا اینیشیالایز نشده !!! خوب... هرچیزی باید به فلاگ داشته باشه مثلا می تونید تعریف کنید که خطا بگیره... تو تمپلیت ها باید کدهارو پر کنید بعد از تفسیر مقادیر می دید و مقادیر برگشتی رو به صورت استریم توی فایل خروجی (آبجکت یا هرچیز دیگه )‌ می نویسید. البته توی دانشگاه بحث ها فرق می کنه ولی توی کار عملی کار بسیار پیچیده است!‌ الان آقایان دلفی یه غول کامپایلر درست کردند که واقعا از لحاظ سینتاکس و آپتیمازشن پروفایل کم نظیره. فکر کنم 22 ساله این کد داره چاق میشه و چاق! از این لحاظ سی شارپ هنوز کار داره! واقعا بعضی جاها کامپایلر کد رو درک می کنه و وریبل هارو دراپ می کنه! ... مثلا شما یه وریبل رو توی یه حلقه استفاده کردید این برادر همون وسط جا میگیره!‌ اگر بیرون استفاده کرده باشید و توی حلقه اون میره بالای حلقه!‌ فکر کنم پروفایل های آپتیمازشن دلفی در حدود 150 تا باشه که خیلی خیلی عظیمه! دوستانی که کامپایلر کار کردن می فهمن چه کار می کنه این دلفی به قول فردوسی پور! بیسیک هم :)))‌ چیزی که نداره همینه! خیلی کدهاش توی دات نت خوب شده ولی هنوز کامپایلر جدید جوان است!

brians2000
پنج شنبه 16 تیر 1384, 05:18 صبح
!!! جواب دانی به نامه من در مورد اشکالی که پیدا کرده بودم جان خودم!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! آبروریزی کردمها! :))‌ می خندید بهمممممم؟‌ هاها! فکر کردیم دیگه کارمون درست شده! آخه راستشو بخواهید این یه مدل چیز رو یکم باید ریفرنس کنند!!!!!!!
ماهم!!!! :))‌ نخندید بهم این رو بر نخورده بودم بهش تو ریفرنس های دلفی من که کامپایلر دلفی رو ننوشتم!



راستی کیا حاضرند برای کمک به بورلند آستین بالا بزنند؟ توجه کنید... سودی که داره حفظ شرکت مورد علاقه تونه! در ضمن:‌نظراتتون رو اگر بگید می شه بصورت مستقیم برای دوستان معرفی کرد... خیلی دوست دارم که عشاق بورلند ... به این میگن ساپورت! :))‌‌‌ !!!!!!!!!!!! یاد آوری می کنم دلفی 1 میلیون و 990 هزار نفر مشتری (و 4 میلیون و 900 هزار یوزر)‌داره که حالا اکثرا مفتی استفاده می کنند... کمپانی بورلند خیلی کمپانی دوست داشتنی ای است! باور کنید این بورلند با ماها زنده است!


Ryan

&#91;list&#93;&lt;span dir=ltr>,

Ryan,
To turn off finite floating point checks, compile your code with
&#123;$FINITEFLOAT OFF&#125;. The Delphi language has historically implemented
implicit checks for floating point overflows, by the nature of the Intel FPU
exception flags register. CLR does not check floating point overflows
implicitly, so we have to generate the chkinfinite instruction explicitly in
order to enforce the semantics of strict floating point arithmetic. You can
turn that off if your code does not require strict finite arithmetic.

Have a nice day.

-Danny



Danny Thorpe

Chief Scientist

Borland Software Corporation &lt;/span>&#91;/list&#93;

brians2000
پنج شنبه 16 تیر 1384, 05:30 صبح
!!!!!!!!!!!!!!!!!!!!! ببینید این کدی که 22 ساله توسعه پیدا کرده چقدر سوراخ سمبه داره! ... کد خروجی دلفی واقعا در خروجی (فوق العاده فوق العاده )‌است! جدا ! وحشتناک ! حالا فری پاسکالی ها و سی شارپی ها می خواهند یک آپتیمایز عظیم که من اون رو شاهکار هوش مصنوعی می دونم رو در 5 سال با هر تعداد پرسنل معرفی کنند؟‌ چنین چیزی ممکن نیست! این دلفی دات نت راکز! راکز راکز!... :)‌

کد من داره پرواززززززززززززززز می کنه! پرواز ! بال بال می زنه! :))‌ اعصابمو بهم ریخته بود (تاثیرش برای کاربردهای عادی صفره! برای کار ما بدبختا مهمه!‌)‌