تاريخ لغات البرمجة

يناقش هذا المقال الأحداث الكبرى في تاريخ لغات البرمجة.

البداية المُبَكِّرة

في البداية، كانت لغات البرمجة الأولى السابقة للحاسوب الحديث عبارة عن رُموز بسيطة. وَلمدَّة تسعة أشهر بين 1842 و1843 قامت آدا لوفلايس بترجمة مذكرة العالم في الرياضيات الإيطالي لويجي مينابين على المحرِّك التحليلي، وَقد كانت آخر آلة اقترحها تشارلز بابيج. وأضافت هذا البند إلى مجموعة من الملاحظات وَالَّتي كانت تفصيل طريقةٍ لِحساب أعداد برنولي مع المحرِّك التحليلي. تمَّ التعرف على هذه الملاحظات من قبل بعض المؤرخين كأول برنامج حاسوبيّ في العالَم.[1]

  • لكن مدى مساهمات آدا لوفليس الأصلية مقارنة مع التي قام بها زوجها، لاتزال موضوع جدل بين أصحاب التراجم.

أدرك هيرمان هولليريث أنَّه بِإمكانه ترميز معلوماتٍ على بطاقاتٍ مُثَقَّبة عندما لاحَظ أنَّ ترميز كمسري القطار يظهر على البطاقة المحمولة حسب موقع الثقوب على البطاقة. ثُمَّ قام هولليريث في سنة 1890 بِترميز بيانات التَعداد على البطاقات المُثَقَّبَة.

كانت أوَّل رِمازات(شِفرات/أكواد) حاسوبيَّة مُتَخَصِّصَة بِتطبيقاتها. وَفي العُقود الأولى من القرن العشرين، اعتمدت الحِسابات الرقميَّة على الأعداد العُشْرِيَّة. أُدرِكَ أخيرًا أنَّه يمكن تمثيل المنطق بِالأرقام، وليس بالكلمات فحسب. كَمثال، كان ألونزو تشرتش قادرًا على التعبير عن المُعامِل لَمْدَا كَصيغةٍ. كانت آلة تورنغ خُلاصة عمليَّة آلة التعليم-بالنقر، كَمثال، كالمُستخدم في شركات الهاتف. أسَّسَت آلات تورنغ لِتخزين البرامج كَبيانات في هيكلة فون نيومان لِلحواسيب بِتمثيل الآلة عبر عدد محدود. وَبِعكس المُعامِل لمدا، فإنَّ رِماز تورنغ لا يخدم اللُّغات عالية المُستوى جيِّدًا—استخدامها الأساسيّ هو بِالتحليل الصارِم لِـنظرية التعقيد الحسابي.

مثل العديد من «البدايات» في التاريخ، يَصعُب تحديد أوَّل لغة برمجة مُعاصِرة. منذ البداية، عَرَّفت تقييدات العَتَاد اللُّغة. سمحت البطاقة المُثَقَّبَة بِـ 80 عامودًا، لكن كان من الصعب استخدام بعض الأعمدة لِترتيب رقم على كُلّ بطاقة. تضمَّنت فورتران بعض الكلمات المِفتاحيَّة الشبيهة بالكلمات الإنكليزيَّة، مثل «إذا» "IF"، «إذهب إلى» "GOTO" وهي جمعٌ للأحرف في عبارة (go to) وَ«اسْتَمِر» "CONTINUE". إنَّ استخدام الطبلة المِغناطيسيَّة لِلذاكرة يعني أَنَّ برامج الحاسوب تحتاج أيضًا لِأن تكون مُدخلة مع دَوَران الطبلة. لِهذا كانت البرامج أكثر اعتماديَّة على العَتَاد.

لِبعض الأشخاص، إنَّ أوَّل لغة برمجة مُعاصِرة تعتمد على مَقروئيَّتها بِالنسبة لِلإنسان وَكميَّة الطاقة اللَّازمة قبل إتاحة الحالة المُسمَّاة «لغة برمجة». كان لِـمحرك الاختلاف (محرك التباعد) لِجاكوارد لومز وَكارلس بابّاج لغات بسيطة وَمحدودة للغاية من أجل وصف الأفعال الَّتي يجب أن تقوم بها تلك الآلات. يُمكن لِلشخص اعتبار ثُقَب الحُفَر على طُومار(دَرج) عازِف البيانو  كَـلغة محدَّدة النِطاق، وَلو لم تكن مُصَمَّمَة لِلإستهلاك(الاستفادة) البشريّ.

أوَّل لُغات البرمجة

ظهرت الحواسب الكهربائيّة الأولى في العصر الحديث في السنوات 1940 (الأربَعينيَّات). وَإِنَّ محدوديّة السرعة وَقدرة الذاكرة فرضت كتابة برامج تستغرق وقتًا طويلًا بلغة الأسمبلي (لغة التجميع). وقد كانت تتطلّب الكثير من الجهد الفكريّ، وكانت تؤدي لأخطاء عديدة.

صُمِّمَت أوَّل لغات البرمجة لِإيصال التعليمات إلى الحاسِب في الخمسينيَّات 1950. صُمِّمَت أقدم لغة برمجة عالية المُستوى لِلحاسِب بين عامي 1943 وَ 1945، دُعيت بلان كال كيل، طَوَّرها كونراد زوس من أجل زد3. لكنَّها لم تُنَفَّذ حتَّى 1998 وَ 2000.[2]

عُرضت لغة البرمجة رِمازٌ(شِفرةٌ) قصيرٌ  في عام 1949 من قِبَل جون ماكلي، كانت مِن أوائل مَن اللُّغات عالية المُستوى الَّتي طُوِّرت لِلحاسِب الإلكترونيّ.[3] بعكس لغة الآلة، تُمَثَّل تعابير إفادات statements لغة رِمازٌ قصير الرِّياضيَّاتيَّة بِصيغةٍ مفهومة. لكن، يجب أن يُترجم البرنامج إلى لغة الآلة في كُلِّ مرَّةٍ يُشَغَّل، مِمَّا يجعل العمليَّة أبطأ من تشغيل رِماز(شِفرة) الآلة المكافئة للبرنامج.

يُشَغِّل مانشستر مارك 1 برنامجًا مكتوبًا بِالـأوتوكود في عام 1952.

طُوِّرَت أوتوكود في جامعة مانشستر في أوائل الخمسينيَّات. هي لغة برمجة تستخدم مُجَمِّعًا لِتحويل اللُّغة آليًّا إلى لغة الآلة. طُوِّرَت أوَّل شِفرة(رِماز) وَمُجَمِّع في 1952 لِحاسوب مارك 1 في جامعة مانشستر وَتُعتَبَر أوَّل لغة برمجة مُجَمَّعَة عالية المُستوى.[4][5]

طُوِّرَت ثانِ أوتوكود من أجل مارك 1 من قِبَل رالف أنتوني «طوني» بروكر  في 1954 وَسُمِّيَت «أوتوكود مارك 1»(Mark 1 Autocode). وَأيضًا طَوَّرَ طوني بروكر أوتوكود من أجل فيرَّانتي ميركيوري  في الخمسينيَّات 1950s بالتعاون مع جامعة مانشستر. ابتُكِرَ إصدارٌ من أجل الحاسِبة الآليَّة الإلكترونيَّة متأخِّرة التخزين  2 (EDSAC) من قِبَل دايفيد فيلدينغ هارتلي من مختبر الرِّياضيَّات في جامعة كامبردج  في 1961. عُرفت بِاسم EDSAC 2 Autocode، كانت تطوُّرًا مُباشرًا من ميركيوري أوتوكود مُهيَّئةً لِظروفٍ خاصَّة، وَلوحظت بسبب تمثيل الشِّفرة الكائنيَّة وَتشخيصات اللُّغة المصدريَّة حيثُ كانت مُتَقَدِّمَة في وقتها. تطويرٌ مُعاصِرٌ موازٍ لكن مُنفصل، كانت أطلس أوتوكود تُطَوَّر من أجل آلة أطلس 1 لِجامعة مانشستر.

عام 1954، اخترع جون باكوس لغة الفورتران في آي بي إم؛ كانت أوَّل لغة عالية المُستوى واسعة الاستخدام تمتلك تنفيذات إجرائيَّة functional implementation، بِعَكسِ التَّصميم الورقيّ.[6][7] ماتزال لُغَةً شعبيَّة لِلـحوسَبة عالية الأداء [8] وَتُستَخدم لِلبرامج كمعيار وَترتيب لِـأسرع الحواسيب الفائقة العالميَّة.[9]

لغة برمجة أخرى مبكِّرة ابتُكرت من قِبَل جريس هوبر في الولايات المتحدة، وَدعيت فلو ماتيك . لقد طُوِّرَت من أجل يونيفاك 1 في ريمنغتون راند  خلال الفترة بين 1955 وَ 1959. وجدت هوبر أنَّ عُملاء معالجة بيانات العمل لم يكونوا مرتاحين للترقيم الرِّياضيَّاتيّ، وَفي بداية عام 1955 قامت هي وَفريقها بكتابة تخصيصات للغة برمجة إنكليزيَّة وَنفَّذوا نموذجًا بِدئيًّا.[10] أصبح مجمِّع فلو ماتيك مُتاحًا للعامَّة في بداية عام 1958 وَاكتمل في عام 1959.[11] كان لِـفلو ماتيك تأثير كبير على تصميم كوبول، وَقد انحصر استخدامها في ذلك الحين على إدارة معدات وتجهيزات القوات الجوية الأمريكية .[12]

لغات أخرى ماتزال تستخدم ليومنا هذا مُتضمَّنةً ليسب (1958) الَّتي اخترعت من قِبَل جون مكارثي وَكوبول (1959) الَّتي أنشئت من قِبَل لجنة المجال القصير(Short Range Committee). مَعلَمٌ آخر في آواخر الخمسينيَّات(1950) هو نشر «لغة جديدة للخوارزميَّات» من قِبَل لجنة علماء الحاسوب الأمريكيَّة الأوروبيَّة؛ دعيت ALGOL 60 (أخذ الاسم من ALGOrithmic Language «لغة خوارزميَّاتيَّة»). هذا التَّقرير يُعَزِّز العديد من الأفكار الحائمة في وقتنا هذا وَيُبرِز ثلاثة إبداعات للغة مفتاحيَّة:

  • بنية طوب مُعَشِّشَة: يمكن لسلاسل الشفرات وَالإعلانات(التصريحات) أن تُجَمَّع ضمن طوب (برمجة)  دون الحاجة لأن تُحَوَّل إلى إجراءات منفصلة وَمسمَّية بوضوح؛
  • الحيِّز المُعجميّ: طوب له متغيراته وإجراءاته وَدوالُّه الخاصَّة وَمخفيّ عن الشِّفرات خارجه، وهذا ما يُدعى بإخفاء البيانات.

ابتكار جديد قريب من هذا، كان عن كيفيَّة وصف اللُّغة:

  • استُخدمت صيغة باكوس نور(ترقيم رياضيَّاتيّ مضبوط) لوصف نحويَّة اللُّغات. وتقريبًا، كل لُغات البرمجة اللّاحقة استَخدَمت العديد من صيغ باكوس نور لوصف قواعد حرية السياق في نحويَّاتِها.

كان للغة ألغول 60 تأثيرًا بائِنًا على تصاميم اللُّغات اللَّاحقة، وقد أصبح لبعضها شعبيَّة واسعة. وقد صُمِّمَ نظام بورّوفز الكبير ليكون امتدادًا فرعيًّا لِألغول.

استمرَّت أفكار ألغول المِفتاحيَّة مُنتجةً ألغول 58:

  • أصبحت النَّحَويَّة وَالدلالات أكثر توافقيَّة، وَبِروتينٍ مجهولٍ بزغ نظام الكتابة التَعَاْوُدِيَّة recursive بدوالٍّ أعلى تنظيمًا.
  • لم يُعَرَّف فقط جزء «حريَّة السِّياق» بل أيضًا عُرِّفَت رسميًّا كل نَحَويَّة ودلالات اللُّغة بشروط قواعد فان ويجنجارد ؛ وَهي شكليَّات صُمِّمَت خِصِّيصًا لِهذا الغرض.

إنَّ الاستخدام القليل لِميِّزات لغة ألغول 68 (كمثال، الكُتَل(الطوب) المُتلاقية وَالمُتوازِية) وَنظامها المُعَقَّد من اختصارات الدلالات وَتحديد الأنواع الإجباريّ آليًّا جعلتها لغةً غير شعبيَّة لدى المُستخدمين وَاكتسبت سُمعَةً بِكونها لُغَةً «صعبة». وَقد خرج نيكلاوس ويرث من اللَّجنة لِيُنشِئ لغةً أبسط هي باسكال.

فورتران

بعض اللُّغات البارزة الَّتي طُوِّرت في هذه الحِقبة:

إرساء الأنماط الأساسيّة

سمول توك
مخطط (لغة برمجة)

لقد جلبت الفترة ما بين أواخر الستينات وأواخر السبعينات ازدهارًا رئيسيًّا للغات البرمجة. ومعظم أنماط اللّغات الرئيسيَّة المستخدمة حاليًّا قد اخترعت في هذه الفترة:

كل لغة من هذه اللُّغات تعطي عائلة كاملة من اللُّغات المُتفرّعة عنها، وَأغلب اللُّغات الحديثة يكون لها على الأقل سلف واحد منها.

وأيضًا وُجِدَ في الستينيَّات والسبعينيَّات جدالٌ واسعٌ حول استحقاقات «البرمجة المُهيكلة»، والَّتي أساسًا تعني البرمجة دون استخدام «goto». يعتقد قسم من المبرمجين أنّه حتّى في اللُّغات الَّتي توفّر «goto»، فإنّ استخدامها يُعتبر أسلوب برمجة سيئ إلَّا في حالات نادرة. يتعلّق هذا الجِدال بشدّة بتصميم اللُّغة: فبعض اللُّغات لم تُضمِن «goto» على الإطلاق، وبذلك تجبر المبرمج على البرمجة المُهيكلة.

لتوفير سرعة في التجميع، وفّرت بعض اللُّغات «مجمّعات بمسار واحد»(one-pass compiler) والّتي تتوقَّع أن يتم تعريف الروتينات التابعة أوَّلًا، كما هو الحال في باسكال حيث يكون الروتين الرئيسيّ أو الدالّة القائدة هي القسم الأخير من البرنامج.

بعض اللُّغات الَّتي طُوِّرت في هذه الفترة:

الثمانينات: التصلُّد، الوحدات، الأداء

ماتلاب
إرلانغ
تي سي إل

كانت الثمانينات من القرن العشرين سنوات التصلُّد النسبيّ في اللُّغات الأمريّة أكثر منه اختراع أنماط جديدة، وكلّ هذه الحركات متوسّعة عن أفكار ابتُدِعَت في العقد المُنصرم. فقد دَمجت سي++ بين البرمجة الكائنيَّة وَبرمجة الأنظمة. اعتمدت حكومة الولايات المتّحدة لغة أيدا كلغة برمجة للأنظمة لاستخدامها من قِبَل مُقاولي الأعمال الدفاعيَّة. وَفي اليابان وأَماكن أُخرى، صُرِفَت مبالغ جمّة على اختراع ما دُعِيَ بِلغات برمجة الجيل الخامس الّتي تجمع بين بُنى منطق البرمجة. تحرَّك مُجتمع اللُّغات الوظيفيّة لجعل ليسب وَإم إل لغاتٍ قياسيَّة. وَقد بدأت في هذا العقد أبحاث على لغة ميراندا؛ وَهي لغة برمجة وظيفيّة ذات تثمين كسول.

إحدى النَّزعات الجديدة وَالمُهمّة في تصميم اللُّغات هي التركيز على البرمجة لأنظمة المِقياس الكبير باستخدام «مَكتبات» أو وحدات تتظيميّة كبيرة المِقياس للشِفرة. فقد طَوَّرت كل من مودولا، أيدا، إم إل أنظمة مَكتبات مَرموقة في الثمانينات من القرن العشرين. وَغالبًا ما تَمَسَّكت هذه الأنظمة بِبُنَى البرمجة المُعَمَّمَة.

وَرغم ذلك لم تظهر غالبيَّة الأنماط الجديدة للغات البرمجة الأمريَّة، وقد قام العديد من الباحثين بالتوسُّع في أفكار اللُّغات الأولى وَلائموها مع النهج الجديد. كمثال، لائمت لُغات النظامين أرغوس وَإميرالد البرمجة كائنية التوجه مع الأنظمة الموزَّعة.

جلب العقد 1980 تقدُّمًا في تطبيقات لُغات البرمجة. وَافترضت مجموعة تعليمات بنية الحاسب أنَّه يجب أن تُصَمَّمَ معمارية الحاسوب من أجل المُجمّعات وَليس من أجل مُبرمجي التجميع البشريين. وَبفضل تحسينات سرعة المُعالِج الَّتي مَكَّنَت وجود تقنيَّات تجميع مُتسارعة بِشِدَّة، أثارت مجموعة تعليمات بنية الحاسب اهتمامًا مُتزايدًا بتقنيَّة التجميع للُّغات عالية-المُستوى.

استمرَّت تقنيّات اللُّغات بالتقدُّم في التسعينات من القرن العشرين.

بعض اللُّغات الَّتي طُوِّرت في هذه الفترة:

التسعينات: عصر الشبكة العالميّة

الشبكة العالميّة وتسمّى أيضًا الإنترنت أو الشَّابِكة؛ مأخوذة من العبارة: International Network.

هاسكل
لوا
ريبول
لغة البرمجة دي

كان النمو السريع للشبكة العالمية في أواسط التسعينات هو الحدث التالي الرئيسي للغات البرمجة. فاتحًا وبشكل جذري منصة جديدة لأنظمة الحاسوب، وقد أوجدت الشبكة العالمية فرصة لتبنِّي لغات جديدة. وبتحديدٍ، زادت شعبيَّة لغة البرمجة جافا سكريبت بسبب تكاملها المبكِّر مع مستعرض الشبكة «مستكشف نتسكيب». وحققت العديد من اللُّغات السِكربتيَّة استخدامًا واسعًا في تطوير تطبيقات مُخَصَّصَة لخواديم الشبكة مثل بي إتش بي.

لم تَشهَد التسعينيَّات من القرن العشرين أي تطوُّر أساسيّ في اللُّغات الأمريَّة، لكن حدث العديد من التهجين وَنضوج الأفكار القديمة. وَبدأ في هذه الفترة انتشار اللُّغات الوظيفيَّة. وَبزغت فلسفة عميقة جديدة هي «إنتاجيَّة المُبَرمِج». فبزغت العديد من لُغات «تطوير التطبيقات السريع»(بالإنكليزيَّة: rapid application development؛ اختصارًا: RAD)، وَالَّتي عادةً ما تأتي مع بيئة تطوير متكاملة وَجامع قُمامَة وَتَنحدر من لُغات أقدم. كلّ هذه اللُّغات كانت كائِنيَّة التوجُّه. وَتتضمَّن أوبجكت باسكال وَفيجوال بيسك وَجافا. وَتَلقَّت جافا تحديدًا الكثير من الانتباه. وَكانت لُغات البرمجة النصيَّة أكثر إبداعًا من لُغات «تطوير التطبيقات السريع». وَلم تنحدر هذه مُباشرةً من لُغاتٍ أُخرى وَقد عرضت نحويَّاتٍ جديدة وَمَيِّزات أُخرى أكثر تحرُّريَّة. يعتبر البعض لُغات البرمجة النصيَّة هذه أكثر إنتاجيَّة من لُغات «تطوير التطبيقات السريع»، لكن غالبًا يكون ذلك بسبب الخيارات الَّتي تجعل البرامج الصغيرة أبسط وَلكن قد تكون البرامج الكبيرة أصعب للكتابة وَالتطوير.[بحاجة لمصدر] وَبالرُّغم من ذلك، أصبحت اللُّغات النصيَّة هي الأكثر بُروزًا وَالمُستخدمة في الإتِّصال مع الشَّبكة.

بعض اللُّغات الَّتي طُوِّرت في هذه الفترة:

الإتِّجاهات الحالية

استمر تطور لغات البرمجة، في كل من الصناعة والبحوث. بعض الاتجاهات الحالية:

  1. إضافة السلامة والأمن، لا سيما في اللغة التحقق (تحليل برنامج ثابت)، في السيطرة على تنسيق تدفق المعلومات (الإدخال / الإخراج) والحماية أثناء تنفيذ المواضيع المتزامنة (threadsafe) .
  2. مفاهيم جديدة للنمطية: وMixin الجوية، الوفد، الموجهة نحو الجانب البرمجة.
  3. تطوير مكون المنحى.
  4. الميتابرمجة (بالإنجليزية: metaprogramming)‏، وخاصة الإنعكاسية (بالإنجليزية: Reflection)‏ أو معالجة الشجرة النحوية المجردة (بالإنجليزية: Abstract syntax tree)‏.
  5. التركيز على توزع الموارد المعلوماتية والحركية.
  6. التكامل مع قواعد البيانات، قواعد البيانات المترابطة وخصوصا XML.
  7. التدويل مع دعم اليونيكود (بالإنجليزية: Unicode)‏في الكود المصدري : القدرة على استخدام ترميزات مختلفة في التعليمات البرمجية المصدر (خارج حدود ASCII)
  8. الاستخدامات المعممة للXML، وخاصة بالنسبة اجهات (XUL ،XAML).

شخصيَّات بارِزة

أندرِس هيلسبرغ
يوكيهيرو ماتسوموتو
جريس هوبر
بيارن ستروستروب
نيكلاوس ويرث

بعض الأشخاص المهمِّين الَّذين ساعدوا بِتطوير لُغات البرمجة:

مراجع

  1. J. Fuegi and J. Francis (أكتوبر–ديسمبر 2003)، "Lovelace & Babbage and the creation of the 1843 'notes'"، Annals of the History of Computing، ج. 25، ص. 16, 19, 25، DOI:10.1109/MAHC.2003.1253887
  2. راؤول روجاس (أستاذ جامعي), et al. (2000). "Plankalkül: The First High-Level Programming Language and its Implementation". Institut frame Informatik, Freie Universität Berlin, Technical Report B-3/2000. (full text) نسخة محفوظة 12 مارس 2020 على موقع واي باك مشين.
  3. Sebesta، W.S. (2006). Concepts of Programming Languages. ص. 44. ISBN:0-321-33025-0.
  4. Knuth، Donald E.؛ Pardo، Luis Trabb. "Early development of programming languages". Encyclopedia of Computer Science and Technology. Marcel Dekker. ج. 7: 419–493.
  5. Peter J. Bentley (2012). Digitized: The Science of Computers and how it Shapes Our World. Oxford University Press. ص. 87. مؤرشف من الأصل في 2019-11-29.
  6. "Fortran creator John Backus dies - Tech and gadgets- msnbc.com". MSNBC. 20 مارس 2007. مؤرشف من الأصل في 2012-11-04. اطلع عليه بتاريخ 2010-04-25.
  7. "CSC-302 99S : Class 02: A Brief History of Programming Languages". Math.grin.edu. مؤرشف من الأصل في 2018-05-25. اطلع عليه بتاريخ 2010-04-25.
  8. Eugene Loh (18 يونيو 2010). "The Ideal HPC Programming Language". Queue. Association of Computing Machines. ج. 8 ع. 6. مؤرشف من الأصل في 2019-12-12.
  9. "HPL - A Portable Implementation of the High-Performance Linpack Benchmark for Distributed-Memory Computers". مؤرشف من الأصل في 2018-10-01. اطلع عليه بتاريخ 2015-02-21.
  10. Hopper (1978) p. 16.
  11. Sammet (1969) p. 316
  12. Sammet (1978) p. 204.
  13. Gordon، Michael J. C. (1996). "From LCF to HOL: a short history" (PDF). ص. 3. مؤرشف من الأصل (PDF) في 2017-08-11. اطلع عليه بتاريخ 2015-05-04. Edinburgh LCF, including the ML interpreter, was implemented in Lisp.
  14. Rojas، Raúl؛ Hashagen، Ulf (2002). The First Computers: History and Architectures. MIT Press. ص. 292. ISBN:978-0262681377. مؤرشف من الأصل في 2018-11-30. اطلع عليه بتاريخ 2013-10-25.

طالع أيضاً

قراءة موسَّعة

اسم الكتابالكاتبالناشر وسنة النشر
Programming Systems and Languages
سول روزن ماكجرو-هيل (1967)
Programming Languages: History and Fundamentals
جين ساميت برنتيس-هول (1969)
Programming Languages: History and Future
جين ساميت كومينيكيشن اوف ذا آي سي أم (يوليو 1972)
History of Programming Languages
توماس بيرغن وريتشارد غيبسون أديسون-ويسلي (1996)
History of Programming Languages
ريتشارد ويكسلبلات أكاديميك برس (1981)

وصلات خارجيَّة

  • أيقونة بوابةبوابة التاريخ
  • أيقونة بوابةبوابة برمجة الحاسوب
  • أيقونة بوابةبوابة تقانة المعلومات
  • أيقونة بوابةبوابة علم الحاسوب
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.