PDA

View Full Version : مونیت - برنامه نویسی شی گرا در اسمبلی



Delphi Skyline
یک شنبه 10 شهریور 1387, 01:29 صبح
مونیت نام برنامه ای متن باز است که به تازگی منتشر شده . بوسیله Monate شما می توانید در اسمبلی شی گرا برنامه بنویسید و آنرا توسط NASM کامپایل کنید .
برای اطلاعات بیشتر و دانلود مونیت به لینک زیر مراجعه کنید :
http://www.codeplex.com/monate

همه چیز امکان پذیر می شود . موفق باشید :چشمک: .

Delphi Skyline
دوشنبه 11 شهریور 1387, 16:47 عصر
نگارش جدید (Build 5171) امروز منتشر شد .
ویژگی اضافه شده به این نگارش سازنده کلاس می باشد .
v0.01 Beta - Build 5171 - Sep 1 2008 (http://www.codeplex.com/monate/Release/ProjectReleases.aspx?ReleaseId=16900)

Delphi Skyline
جمعه 05 مهر 1387, 13:38 عصر
نگارش جدید (Build 5172) امروز منتشر شد .
در این نسخه امکان برنامه نویسی شی گرا علاوه برای NASM برای FASM نیز میسر شده است .
v0.01 Beta - Build 5172 + Source Code (http://www.codeplex.com/monate/Release/ProjectReleases.aspx?ReleaseId=17639)

vcldeveloper
جمعه 05 مهر 1387, 18:16 عصر
کار جالبی کردی، ولی باید روی Optimize کردن سورس کدش بیشتر کار کرد. من یک نگاه سریع به کد انداختم، سراغ منطقش نرفتم که بگم مثلا پیاده سازی Parser را تغییر بده، ولی توی کد چندتا مشکل وجود داره:

1- string را بصورت const به توابع انتقال بده.
2- اصلا از try-finally استفاده نکردی، این موجب میشه که در صورت بروز خطا در یک تابع، Memory Leak بگیری.
3- بجای تابع Show Error کلاس های Exception خودت را بساز و آنها را raise کن.
4- متن خطاها را در داخل سورس به اون شکل ننویس، بلکه از ثابت های رشته ایی استفاده کن تا اگر کسی خواست برنامه را به زبان خودش ترجمه کنه، مجبور نباشه در سورس بگرده.
5- از FastMM4 به عنوان Memory Manager استفاده کن.
6- از توابع FastCode برای افزایش کارایی استفاده کن.
7- وقتی Object ایی به یک تابع پاس داده میشه، خوب هست که تابع قبل از آنکه ازش استفاده کنه، از وجود Object با استفاده از Assigned مطمئن بشه.
8- در بعضی از توابع مثل is_class بارها تابع LowerCase برای یک عبارت ثابت مثل temp_list[0] فراخوانی شده، در حالی که بهتر بود بجای آن، یک متغیر لوکال تعریف می شد و فقط یک بار تابع فراخوانی میشد و در دفعات بعدی فقط مقدار اون متغیر خوانده میشد.
9- برای مقایسه رشته ها بهتر بود بجای اینکه دائما آنها را با LowerCase به حروف کوچک تبدیل و سپس مقایسه کنی، از توابع مقایسه رشته دلفی، مثل CompareText استفاده میشد که سرعت بیشتری هم دارند.
10- بجای اینکه یک تابع برای جایگزینی یک رشته با رشته ایی دیگر در داخل یک رشته بزرگتر بنویسی (word_finder_replacer)، بهتر بود از StringReplace خود دلفی استفاده میشد.
11- در صورتی که FASM مقداری یا خطایی برگرداند، کد نوشته شده کاربر را متوجه خطا یا پیام نوشته شده نمی کند!
12- علت استفاده از تابع strPos و به ناچار TypeCast کردن stringها به PChar، در شرایطی که برای string تابع Pos وجود داشت، مشخص نیست.
13- هیچ وقت نباید TStrings مستقیما Create شود، چون یک کلاس Abstract هست، باید بجاش TStringList را Create میکردی.
14- فذاخوانی exit سورس get_class_text بی تاثیر هست هست.
15- به Hintها و Warningهایی که کامپایلر داد، توجه نکردی!

موفق باشی

Delphi Skyline
جمعه 05 مهر 1387, 21:55 عصر
واقعا ممونوم از اینکه اینقدر قشنگ به کد نگاه کردید و اشکالاتم رو گفتید .
10-این تابع اصلا هیچ فراخوانی ای ندارد (امتحانی بود)
13-همین کار را که کرده بودم !!!
یک توصیه به تمامی کاربران سایت :: طرز نگاه کردن و اپتیمایز کردن کد اینطوریه !!!
تمامی نکات بالا در ساخت بعدی حل خواهد شد .
باز هم ممنون بسیار ممنون .

vcldeveloper
شنبه 06 مهر 1387, 06:19 صبح
13-همین کار را که کرده بودم !!!

procedure culon_space_spliter2(Text : String;List : TStrings);
var tmp_list,tmp_list1 : TStrings;count : integer;
begin
tmp_list := TStringlist.Create;
tmp_list1 := TStrings.Create;
Internal_Culon_spliter2(tmp_list,text);
for count := 0 to tmp_list.Count - 1 do
begin
list.AddStrings(Internal_space_spliter2(tmp_list[count]));
end;
end;
*البته در این کد اصلا از tmp_list1 استفاده نشده و باید کلا حذف بشه.

پیغام های Warningایی که کامپایلر میده را در حد Error در نظر بگیر!