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

هل تستطيع لغة البرمجة المفضلة لديك أن تفعل ذلك ؟!

بدأه Khaled.Alshaya في 30 أبريل 2009 · 17 رد · 5,057 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته...

أعلم أن عنوان الموضوع مستفز قليلاً و لكنه صحيح نسبياً!

دائماً ما يتردد على مسامعنا, أن لغات البرمجة متساوية, و هذا كلام صحيح و غير صحيح في الوقت نفسه. لغات البرمجة متساوية من ناحية أن أي عملية منطقية أو حسابية يمكن أن يتم إعادة كتابتها بلغة البرمجة الأخرى بشكل كامل. الموضوع يدخل في علم الحاسوب البحت, فمثلاً ما يمكن كتابته بـ ++C يمكن كتابته بـ Java و العكس صحيح! علماء الحاسوب يستطيعون إثبات ذلك لك. لغات البرمجة تسمى Turing Complete.. ببساطة شديدة, الحاسوب الوهمي الذي اخترعه Alan Turing و الذي كان يضم عمليات بسيطة جداً جداً يمكنه محاكاة أعقد الحواسيب الحالية.

و لغات البرمجة أصلاً ماهي إلا حواسيب وهمية.... علماء الحاسوب أثبتوا بأن ما يمكن فعله بأعقد تلك الحواسيب يمكن محاكاته بآخر... و بالتالي فإن لغات البرمجة سواء كانت عالية المستوى أو منخفضة متماثلة تماماً في قدراتها.

بالطبع لغة كـ SQL أو الـ Macros الموجود في C ليست Turing Complete و بالتالي لا يمكنها محاكاة كل شيء...

لغات البرمجة تعطيك أدوات, سواء لعمليات التكرار أو العمليات المنطقية و هكذا, و تختلف كل لغة عن الأخرى سواء كان اختلافاً في المظاهر كما في اللغات الـ Imperative كـ C و JAVA و #C .... أو أن يكون هذا الاختلاف جذرياً كما في الـ Functional Paradigm و لغاته الشهيرة كـ Lisp و Haskell.. و هلم جرا :) و ما يمكنك فعله بإحداها يمكن فعله بالأخرى و لكن بطريقة أخرى ربما لا توفرها الأولى...

المهم...

منذ أكثر من عقد من الزمان, تم إدخال ما يسمى بالـ Meta programming لتصبح جزءاً من تقاليد و صلب ++C, و لكنها بقيت غامضة و غريبة, و اعتبرت كالشعوذة حقيقة!

الـ Meta programming تتضمن الـ Templates الشبيهة بالـ Generics في لغات البرمجة الأخرى, و لكنها مختلفة من حيث المبدأ قليلاً,

معظم اللغات يتم التعامل مع الـ Generics فيها وقت الـ Runtime بينما الـ Templates يتم التعامل معها وقت الـ Compile Time.. الفكرة مشوشة حتى الآن صحيح!

الـ Templates في ++C ليست فقط أنواع مجهولة كالـ Generics و لكنها تتضمن أدوات كالـ Macros الخاصة بـ C,

يقال! و لكن ليس لدي مصدر مثبت و إنما كلام مبرمجين :lol: أن أول مرة يتم إكتشاف حقيقة الـ Templates في مؤتمر كان منعقداً في التسعينات, و كان المؤتمر قبل أن يتم توحيد مواصفات ++C في عام 98 حيث كان العمل جارياً لتوحيد تلك المواصفات.

ظهر أحد المبرمجين بقطعة من الكود, و طلب تجربتها, و حين تمت تجربتها أصدر المترجم المستخدم أخطاء عديدة!

يقال أن الحاضرين أصابتهم الدهشة ليس لأن البرنامج أصدر بعض الأخطاء و لكن لأن قائمة ببعض الأعداد الأولية ظهرت ضمن الأخطاء :lol:

و كانت تلك هي البداية......

بكل بساطة, الـ Templates في ++C هي لغة برمجة كاملة Turing Complete و لكن هذه اللغة يتم تنفيذها وقت ترجمة البرنامج! و لا يتنج عنها كود بالمعنى المعروف.... الـ Templates لغة Functional و ليست Imperative بالمناسبة :)

إن كنت لاتعرف, فإن أشهر مكتبات ++C المساة STL و Boost هما مكتبتان تعتمدان على الـ Templates بشكل أساسي جداً, أكثر من مفاهيم البرمجة الكائنية حقيقة....

سأعطيك مثالاً على قوة الـ Meta programming, من المكتبة الشهيرة Boost, و بالتحديد من أروع ما رأيت Spirit :)

مكتبة Spirit كتبها أحد المهندسين الخبراء لتقوم بمهمة محددة, ببساطة هي LL Praser Generator, شبيهة بـ Yacc الغني عن الوصف, Yacc بالطبع يعتبر مدفعية ثقيلة بالمقارنة مع spirit...

Yacc يقوم بانتاج LR Parsers, بالتالي يعتبر ذا امكانيات أكبر من Spirit...

لا يوجد كتاب عن لغات البرمجة, إلا و يتضمن في بدايته شرحأً عن كيفية إنشاء Expression Evaluator بسيط,

و موضوعنا لا يختلف عن ذلك,

فمثلاً الـ EBNF Grammar قد تبدو قريبة للتالي :

post-89451-1241101178_thumb.png

و كمثال على العبارات الصحيحة تبعاً لقواعدنا :

post-89451-1241101186_thumb.png

الآن :) هل تستطيع لغة البرمجة المفضلة لديك فعل التالي ؟

post-89451-1241101194_thumb.png

هذا كود ++C حقيقي! و هو Parser كامل للقواعد الذي ذكرناها في البداية!

الحقيقة أني أشرت في موضوع سابق إلى أن ++C تمكنك من إنشاء Domain Specific Languages ضمنها, تحديداً في هذا الموضوع, و أتى الموضوع اليوم على بالي و أحببت المشاركة بهذه اللمحة.

Meta Programming - يا أيها الزمن القديم عد من جديد! مناقشة لعملية إنتاج الكود عن طريق كود آخر!

كما ترى استطعنا محاكاة EBNF بسهولة بالغة و اصبحت عملية إنشاء parser عن طريق spirit مجرد كتابة القواعد ضمن ++C بالطبع مع بعض التعديلات الطفيفة ...

حتى لو استطاعت لغتك فعل ذلك, فلابد أن تعرف شيئاً مهماً, هو أن تلك الأسطر من الكود لا يتم تنفيذها وقت تشغيل البرنامج و هذا ما أقصده بأن الـ Templates هي لغة برمجة للـ Compile Time.

ببساطة, أسطر الكود ستستخدم في بناء قطعة أخرى من الكود وقت "الترجمة" و قطعة الكود تلك قد تكون كائناً كما في حالتنا هذه, بحيث أن الكائن الجديد "مفصل" تماماً على قدر المهمة التي احتجناها فقط :)

بمعنى أن Parser للغتنا هو ما سيكون ضمن الملف التنفيذ للكود و الذي نتعامل معه من مكان آخر في الكود و ليس أسطر الكود التي رأيتها!

الأمثلة الذكورة بالطبع تجدها في الوثائق الخاصة بالمكتبة الرائعة على العنوان التالي:

Spirit User's Guide

تحياتي....

1
#2

شكرا خالد على معلوماتك الجميلة ..

دائما تأتي بكل ماهو مفيد ..

ولكن عندي ملاحظات ..

اولا .. هل هذه العمليات او عملية المحاكاة لل EFBN تمت من مترجم السي++ نفسه .؟

ثانيا .. لو كانت من مترجم .. هل كل المترجمات تنفع لهذه الوظيفة .؟

ثالثا .. تتم باستدعاء مكتبة ام عملية مباشرة .؟

اخيرا.. لو تم طرح الموضوع في قسم السي++ .. افضل .؟

تحياتي العطرة خالد ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#3

أهلاً سنان :)

اقتباس
اولا .. هل هذه العمليات او عملية المحاكاة لل EFBN تمت من مترجم السي++ نفسه .؟

ثانيا .. لو كانت من مترجم .. هل كل المترجمات تنفع لهذه الوظيفة .؟

ثالثا .. تتم باستدعاء مكتبة ام عملية مباشرة .؟

حسناً أعترف أنها شبيهة بالشعوذة بدل أن تشبه أكواد ++C التي اعتدنا عليها,

و لكن ما تراه هو كود عادي :) أي مترجم يستطيع ترجمة ++C يمكنك ترجمة الكود بواسطته.....

المترجمات القديمة ربما لن تنفع, لأنها لاتدعم الكثير من الأمور المتقدمة في الـ Templates كالـ Specializationو غيره....

و لكن بكل تأكيد كل المترجمات الحديثة يمكنها ترجمة الكود بلا مشاكل.. هذه مكتبة Boost أشهر مكاتب ++C :wink:

post-89451-1241113049_thumb.png

في الصورة هل ترى شيئاً غريباً :)

إعادة تعريف المعامل = و المعامل << و المعامل | و هكذا... و لكن العجيب حقاً هو استخدام مفهوم متقدم جداً هو الـ Expression Templates, للأسف معلوماتي ضئيلة جداً لإعطاء فكرة جيدة عن الموضوع...

بعد عملية الإسناد في term مثلاً فإن هذه العبارة يقوم المترجم بحسابها وقت "الترجمة" و إسناد الناتج إلى term. يمكنك تخيل العملية على أن الكائن يتم تحديد متغيراته و دواله بناءً على العبارة التي تليه.. بشكل مبسط..

أتمنى أن يكون هذا واضحاً....

اللغة الوحيدة التي أتوقع أنه يمكن فعل هذا و أكثر بها هي Lisp, و لكن ليس لدي الكثير حولها, في lisp يمكنك تعريف معاملات جديدة, حسب إرادة المبرمج,

بينما في ++C فإن المبرمج لا يسمح له إلا بإعادة تعريف "معاملات معينة" فقط, لو لاحظت أن في القواعد الأصلية فإن النجمة * تأتي بعد القاعدة كدليل على إمكانية تكرار القاعدة أو تجاهلها تماماً

بينما في ++C فإن * هي في الأصل للمؤشرات و تأتي قبل الاسم, و بالتالي لايمكن إعادة تعريفها بحيث تأتي بعد الاسم! لهذا أقول بتعديلات طفيفة...

عموماً برأيي أن اللغات التي لا تمتلك ميزة الـ Operators Overloading كـ Java هي لغات ناقصة,

و #C بالمناسبة لم ترث خطأ Java و سمحت بإعادة تعريف بعض المعاملات كما في ++C...

تحياتي :)

#4

السلام عليكم

اعتقد انه بالامكان عمل ذلك باي لغة برمجة Imperative حتى وان لم يتوفر فيها ال templates فهو بحد ذاته عبارة عن برنامج ويمكن كتابته .

<_<

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#5
اقتباس
اعتقد انه بالامكان عمل ذلك باي لغة برمجة Imperative حتى وان لم يتوفر فيها ال templates فهو بحد ذاته عبارة عن برنامج ويمكن كتابته .

و عليكم السلام....

تفضل أعطنا نبذة باللغة التي تختارها -_-

اللغة الوحيدة التي "أعتقد" أن لديها قدرة أكبر هي Lisp :) و هي Functional كما ترى بسبب وجود الـ Macros فيها ...

لا تخلط الـ Macros مع الـ C Macros :)

---------------------

عذراً و لكن لا تنسى السؤال الأصلي, الـ Parser يجب أن ينتج وقت "الترجمة" و ليس وقت تشغيل البرنامج,

اختر اللغة التي تريدها!

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 30 أبريل 2009 في 23:47

#6

اكيد بايثون تستطيع ذلك .. و بسهولة اكثر من السي بلص بلص

سؤال لجماعة السي بلص بلص: هل يمكن كتابة ORM بالسي بلص بلص؟؟

#7

موضوع رائع جداً

على الرغم من توافر هذه الادوات منذ أكثر من 7 سنوات ، الا انها الى الان لم تستخدم الاستخدام الامثل، ولم تنتشر بشكل كبير بين مجتمع مبرمجى ++C

فمنذ فترة طويله قراءة مثال Monad examples فى تقرير منشور فى 2003 حول هذه الاستخدامات ومقارناتها: ص 38 فى http://www.fz-juelich.de/jsc/files/docs/ib.../ib-2003-11.pdf

ويوجد كثير من ال Paper منشوره حول هذا الموضوع، ناهيك عن الكتب والمصادر، ومع ذلك لم يلاقى الانتشار الواسع

قد يكون السبب ظهور لغات net. وغزارة مكتباتها التى أصبحت الآن توفر العديد من هذه المكتبات (فى 2003 عند صدور هذا التقرير، لم تكن متوفره فى لغات net. مثل الآن)

شكراً على الموضوع

ib_2003_11.pdf

تم تعديل هذه المشاركة بواسطة NawalyZuma في 1 مايو 2009 في 07:35

#8

أهلاً أخي حسن :)

اقتباس
اكيد بايثون تستطيع ذلك .. و بسهولة اكثر من السي بلص بلص

ماذا يسمى هذا الشيء في Python ؟

أعلم أن Python لغة رائعة, و لكن للأسف لا أعرف عنها الكثير..

هل تدعم الـ Meta Programming و ليس فقط الـ Generics كما في Java و NET. إضافة إلى الـ operators overloading ؟

اقتباس
سؤال لجماعة السي بلص بلص: هل يمكن كتابة ORM بالسي بلص بلص؟؟

:S :S :S :S

باختصار لا يمكنك :)

كما تعلم ++C ليس فيها ميكانيكية متفق عليه للـ Reflection ... صحيح أنه يمكن التحايل باستخدام بعض المكتبات, و لكن ليس Reflection حقيقي....

++C لا تمتلك ABI موحدة.... 1-0 :lol: لبايثون

أهلاً أخي NawalyZuma

شكراً على الورقة الجميلة,

اقتباس
على الرغم من توافر هذه الادوات منذ أكثر من 7 سنوات ، الا انها الى الان لم تستخدم الاستخدام الامثل، ولم تنتشر بشكل كبير بين مجتمع مبرمجى ++C

الـ functional paradigm سيتم دعمه بصورة جيدة في المواصفات القادمة, المسودة النهائية ظهرت و بقي الإصدرا الرسمي, و ربما يحتاج مبرمجو المترجمات بعض الوقت,

VC سيدعم الـ Lambda Expressions في إصدار 2010

أما أن مجتمع ++C لا يستخدم الـ Meta Programming فهذا غير صحيح,,,, هذا الأسلوب من البرمجة يستخدم بشكل رئيسي جداً في كتابة الخوارزميات,

مكتبة ++C الرئيسية STL هي أكبر دليل, جميع الـ Containers و جميع خوارميات المكتبة كلها مبرمجة بالـ Templates,

لا تخلط الأوراق و تطلب من المبرمجين, كتابة برامجهم بالـ Templates فهذا غير منطقي, الـ Templates مثالية في كتابة المكتبات, و ليست لكل شيء,

عموماً أرى أن العكس هو الذي يحصل, أجزاء من مكتبة Boost ستصبح جزءاً من ++C, و هي تعتمد على الـ Templates بشكل أساسي,

إضافة إلى أن نظرة على المكتبات المستخدمة بشكل حقيقي, تعطيك فكرة عن مدى تبني الـ Meta Programming في في مجتمع ++C

Generic Image Library من Adobe, و يدعي مبرمجوها بأنك تحصل على كفاءة موازية للـ Hand Coded Algorithms :)

مكتبة Boost و STL بالطبع,

مكتبة ++Blitz التي تضاهي المكتبات المكتوبة بـ FORTRAN حسب مبرمجها, و غيرها الكثير و الكثير,

و لكن جميعها تتفق في أن الخوارزمية المكتوبة بالـ Meta Programming يجب أن تكون موازية في كفاءتها للخوارزمية المكتوبة يدوياً :)

الحقيقة أن كتابة خوازمية للاستخدام العام في ++C أفضل من كتابته في C, قارن بين الـ qsort في C و بين STL sort و ستعرف بأن STL sort أكثر كفاءة منها و أفضل بكثير :)

عموماً كما يقول أخي وجدي :) ++C تجعل البرمجة أسهل لمستخدمي الـ classes و أصعب لمن يكتبونها ....

و نحن في انتظار اعتماد cpp0x بإذن الله :)

تحياتي ....

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 1 مايو 2009 في 10:10

#9

السلام عليكم ....

الأخ حسن أثار فضولي حول python....

قرأت صفحتها في wikipedia و عدة صفحات أخرى, و لكني لم أرى الـ operators overloading و لا الـ meta programming اللذان أخبرنا الأخ حسن عن وجودهما..

هل هناك مبرمجو python في المنتدى يخبروني أين أجد أمثلة على الموضوعين ؟

لا أريد عن الـ generic types, أريد موضوعاً عن الـ meta programming في python بالطبع إضافة للموضوع الآخر... أقصد استعمال الـ operators overloading ضمن الـ meta programming :)

تحياتي ...

#10

موضوع جميل اخي خالد , كماهي العادة :) ..

لي ملاحظه وهي انه توجد لغات يمكنها تطبيق Metaprogramming وبمرونه عاليه قد تضاهي مرونة السي , ولكن من منظور مبرمجي تلك اللغات وبطرق اخرى غير طريقة إعاده تعريف المعاملات (operators overloading)

فعلى ذكر البايثون , وجدت انه توجد طرق عديده لتطبيق اليه الميتا من خلال الـmetaclasses , والاصدار 2.4 قد اضاف مفهوم الـ decorator والذي يستخدم لعمل نماذج برمجية على طريقة الميتا بطريقة تشبه نوعاً ما إعاده تعريف العاملات , وربما الذي يساعد البايثون اكثر هو كونه لغه تمتلك خصائص اللغات الوظيفية ايضاً .

لا إله الإ الله وحده لا شريك له الملك وله الحمد يحي ويميت وهو على كل شئ قدير

------------------------------------------------------------------------------------------------

gazabigBanner.jpg

------------------------------------------------------------------------------------------------

#11

Operator Overloading

http://docs.python.org/3.0/reference/datam...g-numeric-types

بخصوص ال introspection ففى امثلة تعرضتلها فى كتاب البايثون وفى جزئية ممتازة http://diveintopython.org/power_of_introspection/index.html

بايثون بتقدم حلول جميلة زى pyparsing, ply (فيها شبه من حيث الإستخدام بأمثلتك)

ناقصلنا شبيه ب Parsec الموجود فى haskell (يمكن اشتغل على بورت ليها ببايثون او jParsec لما افضى من الإمتحانات)

scala

http://www.ibm.com/developerworks/java/lib...scala08268.html

http://www.ibm.com/developerworks/java/lib...scala10248.html

تم تعديل هذه المشاركة بواسطة ahmed_youssef في 3 مايو 2009 في 17:39

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#12

موضوع ممتاز لم أكن أعرف بصراحة عن تلك الامكانية

شيء آخر دعاية ممتازة وعملية جدا للسي ++

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#13
اقتباس
موضوع جميل اخي خالد , كماهي العادة ..

لي ملاحظه وهي انه توجد لغات يمكنها تطبيق Metaprogramming وبمرونه عاليه قد تضاهي مرونة السي , ولكن من منظور مبرمجي تلك اللغات وبطرق اخرى غير طريقة إعاده تعريف المعاملات (operators overloading)

فعلى ذكر البايثون , وجدت انه توجد طرق عديده لتطبيق اليه الميتا من خلال الـmetaclasses , والاصدار 2.4 قد اضاف مفهوم الـ decorator والذي يستخدم لعمل نماذج برمجية على طريقة الميتا بطريقة تشبه نوعاً ما إعاده تعريف العاملات , وربما الذي يساعد البايثون اكثر هو كونه لغه تمتلك خصائص اللغات الوظيفية ايضاً .

أهلاً أخي محمد :)

و شكراً على المجاملة :P

رجاءً لا تخلط بين الـ C و ++C :P

python لغة رائعة جداً, و أنا بعد هذا الموضوع الحقيقة أريد تعلمها مهما كلف الثمن :D

الـ syntax جميييييييييل جداً و مفهوم رغم أني لم أكتب سطر واحد من الكود بها :)

لكن, إلى الآن لم أرى ما سألت عنه :) ربما لأنني لم أفهم ما قرأته .....

ربما python تمكنك من الـ meta programming و لكنه حسبما "قرأت" يعتمد على الـ reflection, و الذي بدوره يعتمد على الـ run-time system ....

حسناً الأكواد المعروضة حول spirit لاتنفذ أصلاً وقت التشغيل و لا وجود لها في "الذاكرة", و هذا لا يتم في python كما قرأت.

أهلاً أخي أحمد, أمسكنا بالزعيم :lol:

حسناً نفس الكلام, الكود الذي ينتج كود لا يتم تنفيذه وقت الترجمة صحيح ؟! لم أجد من يتحدث عن هذه النقطة!

مثلاً في pyparse :

from pyparsing import Word, alphas
greet = Word( alphas ) + "," + Word( alphas ) + "!" # <-- grammar defined here
hello = "Hello, World!"
print hello, "->", greet.parseString( hello )

هذا السطر:

greet = Word( alphas ) + "," + Word( alphas ) + "!" # <-- grammar defined here

يتم تنفيذه وقت تشغيل البرنامج!

حسناً ربما python لغة scripting و بالتالي لا يوجد ما يسمى بالـ compile-time فيها :) هنا أكون أنا الذي أريد شيئاً غير منطقي....

هذا مختلف في ++C, الـ templates لا وجود لها على الإطلاق في الـ binary code.. كل ما تحصل عليه هو الكود الذي تنتجه الـ templates

اقتباس
موضوع ممتاز لم أكن أعرف بصراحة عن تلك الامكانية

شيء آخر دعاية ممتازة وعملية جدا للسي ++

هذا الموضوع هو دعاية بالفعل كما ذكر أخي عادل, أتمنى أن نكون وفقنا, و شكراً على مجاملتك :) لأن هذه اللغة مظلومة جداَ في العالم العربي ...

عذراً على الإطالة في الموضوع, و إن شاء الله آتيكم المرة القادمة من python لأنها أفضل بكثير من Java التي كرهتها يوماً بعد يوم :angry:

تحياتي ... :)

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 3 مايو 2009 في 18:44

#14
Khaled.Alshaya كتب:

رجاءً لا تخلط بين الـ C و ++C :P

معذرة , حقك علينا :lol:

اقتباس
ربما python تمكنك من الـ meta programming و لكنه حسبما "قرأت" يعتمد على الـ reflection, و الذي بدوره يعتمد على الـ run-time system ....

حسناً الأكواد المعروضة حول spirit لاتنفذ أصلاً وقت التشغيل و لا وجود لها في "الذاكرة", و هذا لا يتم في python كما قرأت.

صحيح , وهذه قد تكون ميزه :) ..

انا اعتبر هذه الخاصيه عباره عن "ماكرو ماقبل الترجمة" بغض النظر عن الاليه المتقدمة له . ببساطه البايثون لاتحتوي على طريقة رسمية لبناء ماكروات , ولكن هذا لايمنع من تطوير parser بالبايثون نفسها بحيث يقوم بعملية إعادة قراءة الشفره المصدرية الاصليه , وينتج شفرة اخرى بحسب قواعد معينة , بنفس طريقة عمل spirit , يعني بإختصار نظام قوالب templates .

لا إله الإ الله وحده لا شريك له الملك وله الحمد يحي ويميت وهو على كل شئ قدير

------------------------------------------------------------------------------------------------

gazabigBanner.jpg

------------------------------------------------------------------------------------------------

#15

جميل جدا اخي خالد..

طولت قليلا لكي افهم الموضوع... محسوبك جاهل في سي++ لكن حسب علمي يمكن ان تقوم بنفس العمل بسي شارب ايضا فهي تقبل القوالب و اعادة تعريف المعاملات..

اختيار جيد ان تقرر ان تتعلم بيثون لن تندم عليه .. فاللغات الديناميكية هي الاحسن في حالة كتابة prototype او unit test

للاسف مازلت اعاني من مشاكل تعود معها بسبب اني اميل كثيرا الى static type :lol:

بارك الله فيك

العمل كثير و الوقت قليل أعاننا الله

seo zen SEO Enlightment amazon danbo

#16

لست أدرى لماذا لم أتعلم CPP :(

لم أخرج من الدوت نت إلا

() Form1.Show

:lol:

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#17

لا تقلق فحتى انا و لا اعرف منه الا الاسم :lol:

لا ادري لماذا لم استطع ان احترفه على الرغم من التعب الكبير الذي بذلته لدراسته :( ربما لان تفكيري مازال لم يصل لمرحلة النضوج لفهم تعقيد سي++... المهم مادام هناك سي القحة فهته تكفي :D

pure C rocks

العمل كثير و الوقت قليل أعاننا الله

seo zen SEO Enlightment amazon danbo

#18

طبعا السي بلس بلس لغة المواقف الصعبة

لكن مادا عن دلفي أم أن دلك يقتصر عليها فقط

ولي سؤال هل تكفيني دلفي الى جانب السي بلس بلس أم هنالك أشياء تنفرد بها البايثون

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