تاريخ لغات البرمجة
يناقش هذا المقال الأحداث الكبرى في تاريخ لغات البرمجة.
في البداية، كانت لغات البرمجة الأولى السابقة للحاسوب الحديث عبارة عن رُموز بسيطة.
وَلمدَّة تسعة أشهر بين 1842 و 1843 قامت آدا لوفلايس بترجمة مذكرة العالم في الرياضيات الإيطالي لويجي مينابين على المحرِّك التحليلي، وَقد كانت آخر آلة اقترحها تشارلز بابيج. وأضافت هذا البند إلى مجموعة من الملاحظات وَالَّتي كانت تفصيل طريقةٍ لِحساب أعداد برنولي مع المحرِّك التحليلي. تمَّ التعرف على هذه الملاحظات من قبل بعض المؤرخين كأول برنامج حاسوبيّ في العالَم.أدرك هيرمان هولليريث أنَّه بِإمكانه ترميز معلوماتٍ على بطاقاتٍ مُثَقَّبة عندما لاحَظ أنَّ ترميز كمسري القطار يظهر على البطاقة المحمولة حسب موقع الثقوب على البطاقة. ثُمَّ قام هولليريث في عام 1890 بِترميز بيانات التَعداد على البطاقات المُثَقَّبَة.
كانت أوَّل رِمازات(شِفرات/أكواد) حاسوبيَّة مُتَخَصِّصَة بِتطبيقاتها. وَفي العُقود الأولى من القرن العشرين، اعتمدت الحِسابات الرقميَّة على الأعداد العُشْرِيَّة. أُدرِكَ أخيرًا أنَّه يمكن تمثيل المنطق بِالأرقام، وليس بالكلمات فحسب. كَمثال، كان ألونزو تشرتش قادرًا على التعبير عن المُعامِل لَمْدَا كَصيغةٍ. كانت آلة تورنغ خُلاصة عمليَّة آلة التعليم-بالنقر، كَمثال، كالمُستخدم في شركات الهاتف. أسَّسَت آلات تورنغ لِتخزين البرامج كَبيانات في هيكلة فون نيومان لِلحواسيب بِتمثيل الآلة عبر عدد محدود. وَبِعكس المُعامِل لمدا، فإنَّ رِماز تورنغ لا يخدم اللُّغات عالية المُستوى جيِّدًا—استخدامها الأساسيّ هو بِالتحليل الصارِم لِـنظرية التعقيد الحسابي.
مثل العديد من «البدايات» في التاريخ، يَصعُب تحديد أوَّل لغة برمجة مُعاصِرة. منذ البداية، عَرَّفت تقييدات العَتَاد اللُّغة. سمحت البطاقة المُثَقَّبَة بِـ 80 عامودًا، لكن كان من الصعب استخدام بعض الأعمدة لِترتيب رقم على كُلّ بطاقة. تضمَّنت فورتران بعض الكلمات المِفتاحيَّة الشبيهة بالكلمات الإنكليزيَّة، مثل «إذا» "IF"، «إذهب إلى» "GOTO" وهي جمعٌ للأحرف في عبارة (go to) وَ«اسْتَمِر» "CONTINUE". إنَّ استخدام الطبلة المِغناطيسيَّة لِلذاكرة يعني أَنَّ برامج الحاسوب تحتاج أيضًا لِأن تكون مُدخلة مع دَوَران الطبلة. لِهذا كانت البرامج أكثر اعتماديَّة على العَتَاد.
لِبعض الأشخاص، إنَّ أوَّل لغة برمجة مُعاصِرة تعتمد على مَقروئيَّتها بِالنسبة لِلإنسان وَكميَّة الطاقة اللَّازمة قبل إتاحة الحالة المُسمَّاة «لغة برمجة». كان لِـمحرك الاختلاف(محرك التباعد) لِجاكوارد لومز وَكارلس بابّاج لغات بسيطة وَمحدودة للغاية من أجل وصف الأفعال الَّتي يجب أن تقوم بها تلك الآلات. يُمكن لِلشخص اعتبار ثُقَب الحُفَر على طُومار(دَرج) عازِف البيانو كَـلغة محدَّدة النِطاق، وَلو لم تكن مُصَمَّمَة لِلإستهلاك(الإستفادة) البشريّ.
ظهرت الحواسب الكهربائيّة الأولى في العصر الحديث في السنوات 1940 (الأربَعينيَّات). وَإِنَّ محدوديّة السرعة وَقدرة الذاكرة فرضت كتابة برامج تستغرق وقتًا طويلًا بلغة الأسمبلي(لغة الآلة). وقد كانت تتطلّب الكثير من الجهد الفكريّ، وكانت تؤدي لأخطاء عديدة.
صُمِّمَت أوَّل لغات البرمجة لِإيصال التعليمات إلى الحاسِب في الخمسينيَّات 1950. صُمِّمَت أقدم لغة برمجة عالية المُستوى لِلحاسِب بين عامي 1943 وَ 1945، دُعيت بلان كال كيل، طَوَّرها كونراد زوس من أجل زد3. لكنَّها لم تُنَفَّذ حتَّى 1998 وَ 2000.
عُرضت لغة البرمجة رِمازٌ(شِفرةٌ) قصيرٌ في عام 1949 من قِبَل جون ماكلي، كانت مِن أوائل مَن اللُّغات عالية المُستوى الَّتي طُوِّرت لِلحاسِب الإلكترونيّ. بعكس لغة الآلة، تُمَثَّل تعابير إفادات statements لغة رِمازٌ قصير الرِّياضيَّاتيَّة بِصيغةٍ مفهومة. لكن، يجب أن يُترجم البرنامج إلى لغة الآلة في كُلِّ مرَّةٍ يُشَغَّل، مِمَّا يجعل العمليَّة أبطأ من تشغيل رِماز(شِفرة) الآلة المكافئة للبرنامج.
طُوِّرَت أوتوكود في جامعة مانشستر في أوائل الخمسينيَّات. هي لغة برمجة تستخدم مُجَمِّعًا لِتحويل اللُّغة آليًّا إلى لغة الآلة. طُوِّرَت أوَّل شِفرة(رِماز) وَمُجَمِّع في 1952 لِحاسوب مارك 1 في جامعة مانشستر وَتُعتَبَر أوَّل لغة برمجة مُجَمَّعَة عالية المُستوى.
طُوِّرَت ثانِ أوتوكود من أجل مارك 1 من قِبَل رالف أنتوني «طوني» بروكر في 1954 وَسُمِّيَت «أوتوكود مارك 1»(Mark 1 Autocode). وَأيضًا طَوَّرَ طوني بروكر أوتوكود من أجل فيرَّانتي ميركيوري في الخمسينيَّات 1950s بالتعاون مع جامعة مانشستر. ابتُكِرَ إصدارٌ من أجل الحاسِبة الآليَّة الإلكترونيَّة متأخِّرة التخزين 2 (EDSAC) من قِبَل دايفيد فيلدينغ هارتلي من مختبر الرِّياضيَّات في جامعة كامبردج في 1961. عُرفت بِاسم EDSAC 2 Autocode، كانت تطوُّرًا مُباشرًا من ميركيوري أوتوكود مُهيَّئةً لِظروفٍ خاصَّة، وَلوحظت بسبب تمثيل الشِّفرة الكائنيَّة وَتشخيصات اللُّغة المصدريَّة حيثُ كانت مُتَقَدِّمَة في وقتها. تطويرٌ مُعاصِرٌ موازٍ لكن مُنفصل، كانت أطلس أوتوكود تُطَوَّر من أجل آلة أطلس 1 لِجامعة مانشستر.
عام 1954، اخترع جون باكوس لغة الفورتران في آي بي إم؛ كانت أوَّل لغة عالية المُستوى واسعة الاستخدام تمتلك تنفيذات إجرائيَّة functional implementation، بِعَكسِ التَّصميم الورقيّ. ماتزال لُغَةً شعبيَّة لِلـحوسَبة عالية الأداء وَتُستَخدم لِلبرامج كمعيار وَترتيب لِـأسرع الحواسيب الفائقة العالميَّة.
لغة برمجة أخرى مبكِّرة ابتُكرت من قِبَل جريس هوبر في الولايات المتحدة، وَدعيت فلو ماتيك. لقد طُوِّرَت من أجل يونيفاك 1 في ريمنغتون راند خلال الفترة بين 1955 وَ 1959. وجدت هوبر أنَّ عُملاء معالجة بيانات العمل لم يكونوا مرتاحين للترقيم الرِّياضيَّاتيّ، وَفي بداية عام 1955 قامت هي وَفريقها بكتابة تخصيصات للغة برمجة إنكليزيَّة وَنفَّذوا نموذجًا بِدئيًّا. أصبح مجمِّع فلو ماتيك مُتاحًا للعامَّة في بداية عام 1958 وَاكتمل في عام 1959. كان لِـفلو ماتيك تأثير كبير على تصميم كوبول، وَقد انحصر استخدامها في ذلك الحين على إدارة معدات وتجهيزات القوات الجوية الأمريكية.
لغات أخرى ماتزال تستخدم ليومنا هذا مُتضمَّنةً ليسب (1958) الَّتي اخترعت من قِبَل جون مكارثي وَكوبول (1959) الَّتي أنشئت من قِبَل لجنة المجال القصير(Short Range Committee). مَعلَمٌ آخر في آواخر الخمسينيَّات(1950) هو نشر «لغة جديدة للخوارزميَّات» من قِبَل لجنة علماء الحاسوب الأمريكيَّة الأوروبيَّة؛ دعيت ALGOL 60 (أخذ الاسم من ALGOrithmic Language «لغة خوارزميَّاتيَّة»). هذا التَّقرير يُعَزِّز العديد من الأفكار الحائمة في وقتنا هذا وَيُبرِز ثلاثة إبداعات للغة مفتاحيَّة:
ابتكار جديد قريب من هذا، كان عن كيفيَّة وصف اللُّغة:
كان للغة ألغول 60 تأثيرًا بائِنًا على تصاميم اللُّغات اللَّاحقة، وقد أصبح لبعضها شعبيَّة واسعة. وقد صُمِّمَ نظام بورّوفز الكبير ليكون امتدادًا فرعيًّا لِألغول.
استمرَّت أفكار ألغول المِفتاحيَّة مُنتجةً ألغول 58:
إنَّ الاستخدام القليل لِميِّزات لغة ألغول 68 (كمثال، الكُتَل(الطوب) المُتلاقية وَالمُتوازِية) وَنظامها المُعَقَّد من اختصارات الدلالات وَتحديد الأنواع الإجباريّ آليًّا جعلتها لغةً غير شعبيَّة لدى المُستخدمين وَاكتسبت سُمعَةً بِكونها لُغَةً «صعبة». وَقد خرج نيكلاوس ويرث من اللَّجنة لِيُنشِئ لغةً أبسط هي باسكال.
بعض اللُّغات البارزة الَّتي طُوِّرت في هذه الحِقبة:
لقد جلبت الفترة ما بين أواخر الستينات وأواخر السبعينات ازدهارًا رئيسيًّا للغات البرمجة. ومعظم أنماط اللّغات الرئيسيَّة المستخدمة حاليًّا قد اخترعت في هذه الفترة:
كل لغة من هذه اللُّغات تعطي عائلة كاملة من اللُّغات المُتفرّعة عنها، وَأغلب اللُّغات الحديثة يكون لها على الأقل سلف واحد منها.
وأيضًا وُجِدَ في الستينيَّات والسبعينيَّات جدالٌ واسعٌ حول استحقاقات «البرمجة المُهيكلة»، والَّتي أساسًا تعني البرمجة دون استخدام «goto». يعتقد قسم من المبرمجين أنّه حتّى في اللُّغات الَّتي توفّر «goto»، فإنّ استخدامها يُعتبر أسلوب برمجة سيّء إلَّا في حالات نادرة. يتعلّق هذا الجِدال بشدّة بتصميم اللُّغة: فبعض اللُّغات لم تُضمِن «goto» على الإطلاق، وبذلك تجبر المبرمج على البرمجة المُهيكلة.
لتوفير سرعة في التجميع، وفّرت بعض اللُّغات «مجمّعات بمسار واحد»(one-pass compiler) والّتي تتوقَّع أن يتم تعريف الروتينات التابعة أوَّلًا، كما هو الحال في باسكال حيث يكون الروتين الرئيسيّ أو الدالّة القائدة هي القسم الأخير من البرنامج.
بعض اللُّغات الَّتي طُوِّرت في هذه الفترة:
كانت الثمانينات من القرن العشرين سنوات التصلُّد النسبيّ في اللُّغات الأمريّة أكثر منه اختراع أنماط جديدة، وكلّ هذه الحركات متوسّعة عن أفكار ابتُدِعَت في العقد المُنصرم. فقد دَمجت سي++ بين البرمجة الكائنيَّة وَبرمجة الأنظمة. اعتمدت حكومة الولايات المتّحدة لغة أيدا كلغة برمجة للأنظمة لاستخدامها من قِبَل مُقاولي الأعمال الدفاعيَّة. وَفي اليابان وأَماكن أُخرى، صُرِفَت مبالغ جمّة على اختراع ما دُعِيَ بِلغات برمجة الجيل الخامس الّتي تجمع بين بُنى منطق البرمجة. تحرَّك مُجتمع اللُّغات الوظيفيّة لجعل ليسب وَإم إل لغاتٍ قياسيَّة. وَقد بدأت في هذا العقد أبحاث على لغة ميراندا؛ وَهي لغة برمجة وظيفيّة ذات تثمين كسول.
إحدى النَّزعات الجديدة وَالمُهمّة في تصميم اللُّغات هي التركيز على البرمجة لأنظمة المِقياس الكبير باستخدام «مَكتبات» أو وحدات تتظيميّة كبيرة المِقياس للشِفرة. فقد طَوَّرت كل من مودولا، أيدا، إم إل أنظمة مَكتبات مَرموقة في الثمانينات من القرن العشرين. وَغالبًا ما تَمَسَّكت هذه الأنظمة بِبُنَى البرمجة المُعَمَّمَة.
وَرغم ذلك لم تظهر غالبيَّة الأنماط الجديدة للغات البرمجة الأمريَّة، وقد قام العديد من الباحثين بالتوسُّع في أفكار اللُّغات الأولى وَلائموها مع النهج الجديد. كمثال، لائمت لُغات النظامين أرغوس وَإميرالد البرمجة كائنية التوجه مع الأنظمة الموزَّعة.
جلب العقد 1980 تقدُّمًا في تطبيقات لُغات البرمجة. وَافترضت مجموعة تعليمات بنية الحاسب أنَّه يجب أن تُصَمَّمَ معمارية الحاسوب من أجل المُجمّعات وَليس من أجل مُبرمجي التجميع البشريين. وَبفضل تحسينات سرعة المُعالِج الَّتي مَكَّنَت وجود تقنيَّات تجميع مُتسارعة بِشِدَّة، أثارت مجموعة تعليمات بنية الحاسب اهتمامًا مُتزايدًا بتقنيَّة التجميع للُّغات عالية-المُستوى.
استمرَّت تقنيّات اللُّغات بالتقدُّم في التسعينات من القرن العشرين.
بعض اللُّغات الَّتي طُوِّرت في هذه الفترة:
الشبكة العالميّة وتسمّى أيضًا الإنترنت أو الشَّابِكة؛ مأخوذة من العبارة: International Network.
كان النمو السريع للشبكة العالمية في أواسط التسعينات هو الحدث التالي الرئيسي للغات البرمجة. فاتحًا وبشكل جذري منصة جديدة لأنظمة الحاسوب، وقد أوجدت الشبكة العالمية فرصة لتبنِّي لغات جديدة. وبتحديدٍ، زادت شعبيَّة لغة البرمجة جافا سكريبت بسبب تكاملها المبكِّر مع مستعرض الشبكة «مستكشف نتسكيب». وحققت العديد من اللُّغات السِكربتيَّة استخدامًا واسعًا في تطوير تطبيقات مُخَصَّصَة لخواديم الشبكة مثل بي إتش بي.
لم تَشهَد التسعينيَّات من القرن العشرين أي تطوُّر أساسيّ في اللُّغات الأمريَّة، لكن حدث العديد من التهجين وَنضوج الأفكار القديمة. وَبدأ في هذه الفترة انتشار اللُّغات الوظيفيَّة. وَبزغت فلسفة عميقة جديدة هي «إنتاجيَّة المُبَرمِج». فبزغت العديد من لُغات «تطوير التطبيقات السريع»(بالإنكليزيَّة: rapid application development؛ اختصارًا: RAD)، وَالَّتي عادةً ما تأتي مع بيئة تطوير متكاملة وَجامع قُمامَة وَتَنحدر من لُغات أقدم. كلّ هذه اللُّغات كانت كائِنيَّة التوجُّه. وَتتضمَّن أوبجكت باسكال وَفيجوال بيسك وَجافا. وَتَلقَّت جافا تحديدًا الكثير من الإنتباه. وَكانت لُغات البرمجة النصيَّة أكثر إبداعًا من لُغات «تطوير التطبيقات السريع». وَلم تنحدر هذه مُباشرةً من لُغاتٍ أُخرى وَقد عرضت نحويَّاتٍ جديدة وَمَيِّزات أُخرى أكثر تحرُّريَّة. يعتبر البعض لُغات البرمجة النصيَّة هذه أكثر إنتاجيَّة من لُغات «تطوير التطبيقات السريع»، لكن غالبًا يكون ذلك بسبب الخيارات الَّتي تجعل البرامج الصغيرة أبسط وَلكن قد تكون البرامج الكبيرة أصعب للكتابة وَالتطوير. وَبالرُّغم من ذلك، أصبحت اللُّغات النصيَّة هي الأكثر بُروزًا وَالمُستخدمة في الإتِّصال مع الشَّبكة.
بعض اللُّغات الَّتي طُوِّرت في هذه الفترة:
استمر تطور لغات البرمجة، في كل من الصناعة والبحوث. بعض الاتجاهات الحالية:
بعض الأشخاص المهمِّين الَّذين ساعدوا بِتطوير لُغات البرمجة: