الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حجوم ملفات لغة دلفيDelphi . خطأ لغة ام خطأ مبرمج

مغلق
بدأه ORWA في 15 مارس 2005 · 6 رد · 1,408 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كانت مقالة متواضعه فكرت بكتابتها.

لكن بعد مشاركة أيكوسان , وحصولها على بعض الإستحسان وجدت انه من الأنسب لفت النظر لها لتكرار السؤال معي كثيرا مؤخرا

http://www.orwah.net/modules/news/article.php?storyid=32

:(

الرابط الأصلي في المنتدى والذي يحوي الأمثلة هنا :

http://www.orwah.net/modules/newbb/viewtopic.php?topic_id=37

#2

الشكر كله لك أخي عروة.. والله ما استفدت قدر ما استفدت من المعلومات الغزيرة الموجودة في المنتدى..

يجب أن لا نلوم على تطبيقات ديلفي أنها ضخمة من بدايتها ولو أن التطبيق لا يضم سوى فورم فارغة... فديلفي نجحت في ان تجمع بساطة التصميم للواجهات الرسومية التي ظهرت مع ظهور VisualBasic و بين قوة و سرعة تطبيقات سي و سي++ و التاج الذهبي الذي يرصع رأس ديلفي هو قدرتها النفاذية في أخفض المستويات البرمجة للنظام سواء بالستعمال لغة الباسكال أو لغة التجميع..

يمكننا أن نقوم ببرمجة تطبيقات بلغة الديلفي كأي مبرمج لغة سي دون أن نحتاج أصلا لمنصة المحرر IDE.

هذا مثال لكود يقوم بعرض فورم فارغة, لن نستعمل فيه إلا دول API و سنكتبه فقط في محرر للنص مثل notepad.exe.

program Project1;

uses
  Windows;

const
  {$EXTERNALSYM WM_DESTROY}
  WM_DESTROY          = $0002;

var
wClass: TWndClass;
Msg: TMsg;

function WindowProc(hWnd,Msg,wParam,lParam:Integer):Integer; stdcall;
begin
if Msg = WM_DESTROY then PostQuitMessage(0);
Result := DefWindowProc(hWnd,Msg,wParam,lParam);
end;

begin
wClass.lpszClassName:= 'CN';
wClass.lpfnWndProc :=  @WindowProc;
{CreateWindow( ) will not work without setting the 
2 wClass parameters above}

wClass.hInstance := hInstance;
wClass.hbrBackground:= 1;
{CreateWindow( ) will still create a window without the
2 wClass parameters above, but they shoud be included}

// wClass.hIcon := LoadIcon(hInstance,'MAINICON');
// wClass.hCursor := LoadCursor(0,IDC_ARROW);

RegisterClass(wClass);

CreateWindow(wClass.lpszClassName,'ArabTeam2000',
             WS_OVERLAPPEDWINDOW or WS_VISIBLE,
             10,10,340,220,0,0,hInstance,nil);

while GetMessage(Msg,0,0,0) do
DispatchMessage(Msg);

end.

هذا الكود هو أصغر برنامج يمكنك كتابته لفورم فارغة..

حسنا عند تحرير في محرر لنص من اختيارك قم بتسجيله بإسم Project1.dpr في مسار كمثال في C:\projects.

قم بفتح نافذة الدوس ثم غير المجلد إلى المجلد الذي سجلنا به الكود اللذي هو C:\projects.

سنقوم بعملية التجميع للهذه الشيفرة باستعمال CommandLine بواسطة برنامج المجمع لديلفي DCC32.EXE.

قم بكتابة هذه الأمر في نافذه الدوس

C:\projects>dcc32 project1.dpr

ستلحظ أن المصرف قام بتجميع الكود وأنشأ الملف التنفيذي Project1.exe, المفاجأة أن هذا الملف لا يتعدى حجمه 15kb بالضبط (14.5kb) على عكس ما قد ستحصل عليه لو أنك قمت بتصميم نفس التطبيق بواسطة IDE لديلفي حوالي 386Kb.

بل حتى أصغر من نفس التطبيق لو انجزته بلغة سي ++ في برنامج VisualC++ الذي سيكون حجمه هو 28.6kb

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#3

السلام عليكم ،،،

مشكور أخي مراد على المعلومات الرائعة . فعلا انك مكسب رائع لمنتدى الدلفي

من وجهة نظري أن أفضل لغة برمجة تحت نظام الوندوز هي الدلفي فهي تجمع بين القوة والسهولة .

أما في الدوت نت فلا يزال ينقصها الكثير . وأتمنى أن لا تتأخر في ذلك .

#4

ولكن أخي الكريم مراد لاتنسى أنا الفيجوال بيزك دائما يجب إرفاق ملفات معه إذن حجمه يبقى دائما كبير وهذا في حالة أنه يستعمل فورم واحده لكن الدلفي العكس حجمه الإبتدائي 386 كيلو بس لو حطينا عليه 100 زر لن يزيد إلا ب2 كيلو أو 3

بعكس لغات البرمجة الأخرى زي الفيجوال بيسك

تحياتي

أحمد صقر

#5

لهاذا حاولت أن أوضح انه لا مجال لمقارنة ديلفي, كمصرف حقيقي ينتج ملفات جاهزة تعمل في الزمن الحقيقي دون الحاجة لأية مكتبات RunTime, مع VisualBasic الذي ينتج كود مترجم وليس مجمع Interpreted Code and Not Compiled رغم أن تطبيق المنجز بالبازيك يحمل إمتداد EXE!!.

لا يمكنك تنفيذ ملف بازيك في حاسوب آخر ما لم تدلرج معه مكتبات VBRunTime

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#6

موضوع جيد جدا من الاخوة لكن لفت نظري بعض المفاهيم مثل Interpreted Code and Not Compiled ماذا تعني ؟

وهنالك الكثير من هذه المفاهيم التي تدرج ضمن المنتديات والتي قد لا يفهمها البعض مثل ارجو ان يكون هناك موضوع خاص لمثل هذه المفاهيم

#7

في الرابط بموقع الأخ عروة أعطيت رسوم توضيحية للمراحل التي تمر منها الشيفرة المصدرية من نص الكود إلى البرنامج التنفيذي بامتداد exe.

المصرف the compiler هو برنامج خاص يقوم بترجمة الكود المكتوب بلغة برمجة متطورة إلى أوامر تنفيذية يقوم بها المعالج.لكن المصرف وحده لا يستطيع أن ينتج ملف تنفيذي, بل هناك مرحلة تتوسط هذه العملية قبل إنتاج ملف exe: وهو المجمع أو الرابط the Linker, محرر الربط يحل كل إشارة إلا دوال أو إجرائيات خارجية كودها موجود في ملفات أخرى كملفات الموارد(أيقون التطبيق’ نسخته, ملفات الصور, صناديق الحوار...) أو على شكل كود جاهزة مخزنة في مكتبات LIbraries أو Objects files. هذه العمليات هي التي تنتج لنا في الأخير ملف المشروع مكتوب بلغة الآلة الصرفة وهو ما نسميه Compiled Code.

مثال على لغات البرمجة بمصرف حقيقي: Pascal, C, C++, ADA, Fortran, Cobol ...

vc-flow.PNG

على عكس لغات المصرفة الحقيقية هناك لغات غير مصرفة ولكن مترجمة تنتج ملفات تطبيقية تسمى بInterpreted Code. عوضا أن تنتج في النهاية ملف مكتوب بلغة الآلة ك real compiler languge, تقوم بترجمة الأوامر التي في الكود سطرا سطرا, فيقوم بتحليل كل أمر بعد أمر ثم يقوم بتنفيذه .. هذه الملفات التنفيذية تحتاج لمترجم يترجم كودها كلما أردت تنفيذه على الحاسوب, غالبا ما يكون هذا المترجم صغير الحجم مقارنة مع منصة التطوير نفسها.

غير ان عملية التنفيذ تتطلب وقتا طويلا لحاجتها لمترجم مقارنة مع ملف مصرف Compiled. مثال لهذه اللغات التي تعتمد على المترجم: qbasic,Perl, lisp, prolog ...

لكن هناك لغات برمجة أخرى تعتمد على عملية وسطى ما بين التصريف الحقيقي و الترجمة السطرية لنص الشيفرة, نسميها بلغات p-code (pseudo-code) أو parsing-code أو Byte-code. يمر نص الكود من عملية ااتجميع لكنه لا ينتج كود بلغة الآلة و إنما شبه-كود Pseudo-Code غير صالحة للمعالج , يحتوي علىتعليمات خاصة موجهة لمترجم. هذا المترجم هو مجموعة من الإجرائيات الجاهزة مسبقا توفرها لغة البرمجة على شكل ملفات مرفقة مع تطبيق المشروع كملفات الربط الديناميكي DLL. تقوم هذه اللغة بخلق ملف ذو امتداد EXE يحتوي بداخله على نص الكود الشبه مصرف Pcode. ; هذه العملية تكون مرة واحدة, لكن عملية ترجمة الكود المزروع داخل التطبيق النهائي تتم في كل مرة تنفذ فيها الملف التنفيذي, وهو يقوم بدوره باستدعاء ملفات المترجم التي ستقوم بترجمة Pcode إلى Native Code الذي يفهمه المعالج. مثال علا هذا النوع من اللغات:

- لغة الجافا التي تنتج كود يعرف كثيرا بإسم ByteCode وهو ملفات ذات امتداد classes. والمترجم هو منصة الجافا الإفتراضية Java Virtual machine.

g1.gif

- Visual Basic تقوم هذه اللغة بإنشاء ملف بامتداد EXE. يضم بداخله نص الكود الشبه مجمع الذي تتم ترجمته باستخدام مكتبت الربط VBRUNXXX.DLL أو ما تسمى ب Visual Basic Run-Time Libraries.

(تستطيع إصدارات VB الإحترافية Professional إنتاج ملفات تنفيذة مصرفة و مجمعة حقيقيا مثلها مثل باقي التطبيقات ذون الحاجة لهذه المكتبات).

تم تعديل هذه المشاركة بواسطة ikossan في 21 مارس 2005 في 02:01

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

هذا الموضوع مغلق.

مواضيع مشابهة