لغة البرمجة

شفرة المصدر لبرنامج حاسوبي مكتوب بلغة C. الأسطر الرمادية عبارة عن تعليقات تشرح البرنامج للمستخدمين. عند تجميع البرنامج وتشغيله ، سيُظهر الناتج " Hello, world! ".

لغة البرمجة هي لغة مصممة للتعبير عن برامج الكمبيوتر ، [ 1 ] وعادة ما تسمح بكتابة البرامج بطريقة يسهل على الإنسان قراءتها .

يتطلب تنفيذ أي برنامج وجود تطبيق له . هناك منهجان رئيسيان لتطبيق لغة برمجة : الترجمة ، حيث تُترجم البرامج مسبقًا إلى لغة الآلة ، والتفسير ، حيث تُنفذ البرامج مباشرةً. بالإضافة إلى هذين المنهجين المتطرفين، تستخدم بعض التطبيقات مناهج هجينة مثل الترجمة الفورية ومفسرات الشفرة الوسيطة . [ 2 ]

تأثر تصميم لغات البرمجة بشكل كبير ببنية الحاسوب ، حيث صُممت معظم اللغات الإجرائية وفقًا لبنية فون نيومان الشائعة . [ 3 ] في حين كانت لغات البرمجة المبكرة مرتبطة ارتباطًا وثيقًا بالأجهزة ، غالبًا ما تُخفي اللغات الحديثة تفاصيل الأجهزة عبر التجريد سعيًا إلى تمكين برمجيات أفضل بجهد أقل. تُعرف هذه اللغات باللغات عالية المستوى . [ 4 ]

العلاقة باللغات الطبيعية

تتشابه لغات البرمجة إلى حد ما مع اللغات الطبيعية في قدرتها على تسهيل التواصل بين الناس وتبادل الأفكار. أي أن البرامج عمومًا سهلة القراءة ويمكنها التعبير عن أفكار معقدة. مع ذلك، فإن أنواع الأفكار التي يمكن للغات البرمجة التعبير عنها تقتصر في نهاية المطاف على مجال الحوسبة. [ 5 ]

يُستخدم مصطلح " لغة الحاسوب" أحيانًا كمرادف لمصطلح "لغة البرمجة" [ 6 ] ، لكن يرى البعض أنهما مفهومان مختلفان. ويرى آخرون أن لغات البرمجة هي مجموعة فرعية من لغات الحاسوب [ 7 ] . ويستخدم البعض مصطلح "لغة الحاسوب" لتصنيف أي لغة مستخدمة في الحوسبة ولا تُعتبر لغة برمجة. بينما يعتبر البعض لغة البرمجة بناءً نظريًا لبرمجة آلة مجردة ، ولغة الحاسوب هي المجموعة الفرعية منها التي تعمل على حاسوب فعلي ذي موارد مادية محدودة [ 8 ] .

يؤكد جون سي. رينولدز أن لغة المواصفات الرسمية هي لغة برمجة تمامًا كأي لغة أخرى مُصممة للتنفيذ. ويجادل بأن تنسيقات الإدخال النصية وحتى الرسومية التي تؤثر على سلوك الحاسوب هي لغات برمجة، على الرغم من أنها عادةً لا تكون كاملة تورينج، ويشير إلى أن الجهل بمفاهيم لغات البرمجة هو سبب العديد من العيوب في تنسيقات الإدخال. [ 9 ]

تاريخ

التطورات المبكرة

اختُرعت أولى الحواسيب القابلة للبرمجة خلال أربعينيات القرن العشرين، ومعها ظهرت أولى لغات البرمجة. [ 10 ] [ 11 ] بُرمجت الحواسيب الأولى بلغات برمجة الجيل الأول (1GLs)، وهي لغة الآلة (تعليمات بسيطة يمكن للمعالج تنفيذها مباشرةً). كان تصحيح أخطاء هذا النوع من البرامج صعبًا للغاية، كما لم يكن قابلاً للنقل بين أنظمة حاسوبية مختلفة. [ 12 ] ولتحسين سهولة البرمجة، اختُرعت لغات التجميع (أو لغات برمجة الجيل الثاني - 2GLs)، وهي لغات تختلف عن لغة الآلة لجعل البرامج أسهل فهمًا للبشر، مع أنها لم تُحسّن قابلية النقل. [ 13 ]

في البداية، كانت موارد الأجهزة نادرة ومكلفة، بينما كانت الموارد البشرية أرخص. لذلك، تم تفضيل اللغات المعقدة التي تستغرق وقتًا طويلاً في استخدامها، ولكنها أقرب إلى الأجهزة لتحقيق كفاءة أعلى. [ 14 ] أحدث ظهور لغات البرمجة عالية المستوى ( لغات البرمجة من الجيل الثالث - 3GLs) ثورة في البرمجة. فقد حجبت هذه اللغات تفاصيل الأجهزة، وصُممت بدلاً من ذلك للتعبير عن خوارزميات يسهل على البشر فهمها. على سبيل المثال، أصبح من الممكن الآن كتابة التعبيرات الحسابية باستخدام الترميز الرمزي، ثم ترجمتها لاحقًا إلى لغة الآلة التي يمكن للأجهزة تنفيذها. [ 13 ] في عام 1957، تم اختراع لغة فورتران (FORmula TRANslation). تُعتبر فورتران غالبًا أول لغة برمجة عالية المستوى مُجمّعة ، [ 13 ] [ 15 ] وقد ظلت قيد الاستخدام حتى القرن الحادي والعشرين. [ 16 ]

الستينيات والسبعينيات

شخصان يستخدمان حاسوبًا مركزيًا من طراز IBM 704 - وهو أول جهاز يدعم العمليات الحسابية ذات الفاصلة العائمة - في عام 1957. وقد صُممت لغة فورتران خصيصًا لهذا الجهاز. [ 17 ] [ 16 ]

في حوالي عام 1960، طُوّرت أولى الحواسيب المركزية - وهي حواسيب متعددة الأغراض - على الرغم من أنها كانت حكرًا على المحترفين، وكانت تكلفتها باهظة. كانت البيانات والتعليمات تُدخل عبر بطاقات مثقبة ، مما يعني عدم إمكانية إضافة أي بيانات أثناء تشغيل البرنامج. ولذلك، صُممت لغات البرمجة التي طُوّرت في ذلك الوقت لتقليل التفاعل إلى أدنى حد. [ 18 ] بعد اختراع المعالج الدقيق ، انخفضت أسعار الحواسيب بشكل كبير في سبعينيات القرن العشرين. [ 19 ] كما أتاحت الحواسيب الجديدة تفاعلًا أكبر من المستخدم، وهو ما دعمته لغات برمجة أحدث. [ 20 ]

كانت لغة ليسب ، التي طُورت عام 1958، أول لغة برمجة وظيفية . [ 21 ] وعلى عكس لغة فورتران، دعمت ليسب الاستدعاء الذاتي والعبارات الشرطية ، [ 22 ] كما قدمت إدارة ديناميكية للذاكرة على الكومة وجمع البيانات المهملة تلقائيًا . [ 23 ] هيمنت ليسب على تطبيقات الذكاء الاصطناعي لعقود لاحقة . [ 24 ] وفي عام 1978، قدمت لغة وظيفية أخرى، هي ML ، أنواعًا مستنتجة ومعاملات متعددة الأشكال . [ 20 ] [ 25 ]

بعد إصدار لغة ALGOL (لغة الخوارزميات) في عامي 1958 و1960، [ 26 ] أصبحت المعيار في أدبيات الحوسبة لوصف الخوارزميات . ورغم محدودية نجاحها التجاري، فإن معظم لغات البرمجة الإجرائية الشائعة - بما في ذلك C و Pascal و Ada و C++ و Java و C# - مشتقة بشكل مباشر أو غير مباشر من ALGOL 60. [ 27 ] [ 16 ] ومن بين ابتكاراتها التي تبنتها لغات البرمجة اللاحقة، زيادة قابلية النقل والاستخدام الأول لقواعد BNF الخالية من السياق . [ 28 ] كما أن لغة Simula ، أول لغة تدعم البرمجة كائنية التوجه (بما في ذلك الأنواع الفرعية ، والتوزيع الديناميكي ، والوراثة )، مشتقة من ALGOL وحققت نجاحًا تجاريًا. [ 29 ] أما لغة C، وهي لغة أخرى مشتقة من ALGOL، فقد حافظت على شعبيتها حتى القرن الحادي والعشرين. وتتيح لغة C الوصول إلى عمليات الآلة منخفضة المستوى مقارنةً باللغات المعاصرة الأخرى. تأتي قوتها وكفاءتها، التي تولد جزئياً من خلال عمليات المؤشر المرنة ، على حساب جعل كتابة التعليمات البرمجية الصحيحة أكثر صعوبة. [ 20 ]

كانت لغة البرمجة برولوج ، التي صُممت عام 1972، أول لغة برمجة منطقية تتواصل مع الحاسوب باستخدام رموز منطقية رسمية . [ 30 ] [ 31 ] في البرمجة المنطقية، يُحدد المبرمج النتيجة المرجوة ويترك للمُفسِّر تحديد كيفية تحقيقها. [ 32 ] [ 31 ]

من ثمانينيات القرن العشرين إلى العقد الأول من القرن الحادي والعشرين

مجموعة صغيرة من كتب تعليم لغات البرمجة

خلال ثمانينيات القرن العشرين، أحدث اختراع الحاسوب الشخصي تحولًا جذريًا في استخدام لغات البرمجة. [ 33 ] ومن بين اللغات الجديدة التي ظهرت في تلك الفترة لغة C++، وهي لغة مشتقة من لغة C، قادرة على ترجمة برامج C ، بالإضافة إلى دعمها للفئات والوراثة . [ 34 ] كما أضافت لغة Ada وغيرها من اللغات الجديدة دعمًا للتزامن . [ 35 ] استثمرت الحكومة اليابانية بكثافة في ما يُعرف بلغات الجيل الخامس التي أضافت دعمًا للتزامن إلى بنى البرمجة المنطقية، إلا أن هذه اللغات لم تتفوق عليها لغات أخرى تدعم التزامن. [ 36 ] [ 37 ]

نتيجةً للنمو السريع للإنترنت وشبكة الويب العالمية في تسعينيات القرن الماضي، ظهرت لغات برمجة جديدة لدعم صفحات الويب والشبكات . [ 38 ] حققت لغة جافا ، المبنية على لغة C++ والمصممة لزيادة قابلية النقل بين الأنظمة وتعزيز الأمان، نجاحًا واسع النطاق لأن هذه الميزات ضرورية للعديد من تطبيقات الإنترنت. [ 39 ] [ 40 ] ومن التطورات الأخرى لغات البرمجة النصية ذات الكتابة الديناميكية - بايثون ، وجافا سكريبت ، وبي إتش بي ، وروبي - المصممة لإنتاج برامج صغيرة بسرعة لتنسيق التطبيقات الحالية . وبفضل تكاملها مع لغة HTML ، فقد استُخدمت أيضًا لبناء صفحات ويب مُستضافة على الخوادم . [ 41 ] [ 42 ]

من العقد الأول من الألفية الثانية وحتى الآن

خلال العقد الأول من الألفية الثانية، شهد تطوير لغات البرمجة الجديدة التي حققت انتشارًا واسعًا تباطؤًا. [ 43 ] ومن الابتكارات التي ظهرت البرمجة الموجهة نحو الخدمات ، المصممة لاستغلال أنظمة الحوسبة الموزعة التي تتصل مكوناتها بشبكة. تشبه الخدمات الكائنات في البرمجة الموجهة نحو الكائنات، ولكنها تعمل في عملية منفصلة. [ 44 ] وقد ساهمت لغتا C# و F# في دمج أفكار البرمجة الإجرائية والوظيفية. [ 45 ] بعد عام 2010، تنافست عدة لغات جديدة - مثل Rust و Go و Swift و Zig و Carbon - على تطوير البرمجيات الحساسة للأداء التي كانت لغة C تُستخدم فيها تاريخيًا. [ 46 ] تستخدم معظم لغات البرمجة الجديدة الكتابة الثابتة، بينما يستخدم عدد قليل منها الكتابة الديناميكية مثل Julia . [ 47 ]

تُصنّف بعض لغات البرمجة الجديدة كلغات برمجة مرئية ، مثل سكراتش ولاب فيو . كما تمزج بعض هذه اللغات بين البرمجة النصية والمرئية، مثل باليرينا . [ 48 ] [ 49 ] [ 50 ] وقد أدى هذا التوجه إلى تطوير مشاريع تُسهم في تطوير لغات مرئية جديدة، مثل بلوكلي من جوجل . [ 51 ] وتدعم العديد من محركات الألعاب، مثل أنريل ويونيتي ، البرمجة المرئية. [ 52 ] [ 53 ]

تعريف

يمكن تعريف اللغة من حيث بناء الجملة (الشكل) والدلالات (المعنى)، وغالبًا ما يتم تعريفها من خلال مواصفات اللغة الرسمية .

بناء الجملة

تحليل شجرة كود بايثون باستخدام تجزئة الكلمات المضمنة
يُستخدم تمييز بناء الجملة غالبًا لمساعدة المبرمجين في التعرف على عناصر شفرة المصدر. اللغة المذكورة أعلاه هي بايثون .

يُعرف الشكل الظاهري للغة البرمجة باسم تركيبها النحوي . معظم لغات البرمجة نصية بحتة؛ فهي تستخدم تسلسلات نصية تتضمن كلمات وأرقامًا وعلامات ترقيم، تمامًا مثل اللغات الطبيعية المكتوبة. في المقابل، بعض لغات البرمجة رسومية ، تستخدم العلاقات المرئية بين الرموز لتحديد البرنامج.

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

تُعرَّف قواعد لغة البرمجة عادةً باستخدام مزيج من التعابير النمطية (للبنية المعجمية ) وصيغة باكوس-ناور (للبنية النحوية ). فيما يلي قواعد نحوية بسيطة، مبنية على لغة ليسب :

التعبير ::= ذرة | قائمة ذرة ::= عدد | رمز الرقم ::= [+-]?['0'-'9']+ symbol ::= ['A'-'Z''a'-'z'].* list ::= '(' expression* ')' 

تحدد هذه القواعد النحوية ما يلي:

  • التعبير إما أن يكون ذرة أو قائمة ؛
  • الذرة إما أن تكون رقماً أو رمزاً ؛
  • الرقم هو سلسلة متصلة من رقم عشري واحد أو أكثر، ويسبقه اختيارياً علامة زائد أو ناقص ؛
  • الرمز هو حرف متبوع بصفر أو أكثر من أي أحرف أبجدية (باستثناء المسافات البيضاء)؛ و
  • القائمة عبارة عن زوج متطابق من الأقواس، يحتوي على صفر أو أكثر من التعبيرات بداخله.

فيما يلي أمثلة على تسلسلات الرموز الصحيحة في هذه القواعد النحوية: 12345، ()و (a b c232 (1)).

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

باستخدام اللغة الطبيعية كمثال، قد لا يكون من الممكن تحديد معنى لجملة صحيحة نحوياً، أو قد تكون الجملة خاطئة:

الجزء التالي من لغة C صحيح نحويًا، ولكنه يُنفذ عمليات غير مُعرّفة دلاليًا (العملية *p >> 4ليس لها معنى بالنسبة لقيمة ذات نوع مُركب، p->imوهي غير مُعرّفة لأن قيمة pهي مؤشر فارغ ):

complex * p = NULL ; complex abs_p = sqrt ( * p >> 4 + p -> im );

إذا تم حذف تعريف النوع في السطر الأول، فسيؤدي البرنامج إلى ظهور خطأ بسبب المتغير غير المعرّف pأثناء الترجمة. ومع ذلك، سيظل البرنامج صحيحًا من الناحية النحوية لأن تعريفات الأنواع لا توفر سوى معلومات دلالية.

يمكن تصنيف القواعد النحوية اللازمة لتحديد لغة برمجة ما وفقًا لموقعها في التسلسل الهرمي لتشومسكي . يمكن تحديد بنية معظم لغات البرمجة باستخدام قواعد من النوع الثاني، أي أنها قواعد خالية من السياق . [ 54 ] تحتوي بعض اللغات، بما في ذلك بيرل وليسب، على بنيات تسمح بالتنفيذ أثناء مرحلة التحليل. اللغات التي تحتوي على بنيات تسمح للمبرمج بتغيير سلوك المحلل اللغوي تجعل تحليل البنية مشكلة غير قابلة للحل ، وتُطمس عمومًا التمييز بين التحليل والتنفيذ. [ 55 ] على عكس نظام الماكرو في ليسب وكتل بيرل BEGIN، التي قد تحتوي على عمليات حسابية عامة، فإن وحدات الماكرو في لغة سي هي مجرد استبدالات للسلاسل النصية ولا تتطلب تنفيذ التعليمات البرمجية. [ 56 ]

علم الدلالة

يشير علم الدلالة إلى معنى المحتوى الذي يتوافق مع قواعد اللغة.

الدلالات الثابتة

تُعرّف الدلالات الثابتة قيودًا على بنية النصوص الصحيحة يصعب أو يستحيل التعبير عنها في الصيغ النحوية القياسية. [ 57 ] بالنسبة للغات المُصرّفة، تشمل الدلالات الثابتة بشكل أساسي تلك القواعد الدلالية التي يمكن التحقق منها أثناء عملية التصريف. ومن الأمثلة على ذلك التحقق من تعريف كل مُعرّف قبل استخدامه (في اللغات التي تتطلب مثل هذه التعريفات)، أو من أن تكون التسميات على أذرع عبارة الحالة مُختلفة. [ 58 ] يمكن فرض العديد من القيود المهمة من هذا النوع، مثل التحقق من استخدام المُعرّفات في السياق المناسب (مثل عدم إضافة عدد صحيح إلى اسم دالة)، أو من أن استدعاءات الإجراءات الفرعية تحتوي على العدد والنوع المناسبين من الوسائط، وذلك بتعريفها كقواعد في منطق يُسمى نظام النوع . قد تكون أشكال أخرى من التحليلات الثابتة ، مثل تحليل تدفق البيانات، جزءًا من الدلالات الثابتة. تحتوي لغات البرمجة مثل Java و C# على تحليل التعيين المُحدد ، وهو شكل من أشكال تحليل تدفق البيانات، كجزء من دلالاتها الثابتة. [ 59 ]

الدلالات الديناميكية

بمجرد تحديد البيانات، يجب توجيه الجهاز لإجراء عمليات عليها. على سبيل المثال، قد تحدد الدلالات الاستراتيجية التي يتم من خلالها تقييم التعبيرات إلى قيم، أو الطريقة التي تنفذ بها هياكل التحكم العبارات بشكل مشروط . تحدد الدلالات الديناميكية (المعروفة أيضًا بدلالات التنفيذ ) للغة كيفية ووقت إنتاج سلوك البرنامج بواسطة بنيات اللغة المختلفة. هناك طرق عديدة لتعريف دلالات التنفيذ. غالبًا ما تُستخدم اللغة الطبيعية لتحديد دلالات التنفيذ للغات الشائعة الاستخدام عمليًا. يُخصص قدر كبير من البحث الأكاديمي للدلالات الرسمية للغات البرمجة ، مما يسمح بتحديد دلالات التنفيذ بطريقة رسمية. وقد شهدت نتائج هذا المجال البحثي تطبيقًا محدودًا في تصميم لغات البرمجة وتنفيذها خارج الأوساط الأكاديمية. [ 59 ]

سمات

توفر لغة البرمجة خصائص للمبرمج لتطوير البرامج. وفيما يلي وصف لبعض الخصائص البارزة.

نظام الكتابة

نوع البيانات هو مجموعة من القيم المسموح بها والعمليات التي يمكن إجراؤها على هذه القيم. [ 60 ] يحدد نظام أنواع كل لغة برمجة أنواع البيانات الموجودة، ونوع التعبير ، وكيفية عمل تكافؤ الأنواع وتوافقها في اللغة. [ 61 ]

وفقًا لنظرية الأنواع ، تُعتبر اللغة كاملة الأنواع إذا حددت مواصفات كل عملية أنواع البيانات التي يمكن تطبيق تلك العملية عليها. [ 62 ] في المقابل، تسمح اللغة غير كاملة الأنواع، مثل معظم لغات التجميع ، بإجراء أي عملية على أي بيانات، وعادةً ما تكون عبارة عن سلاسل من البتات بأطوال مختلفة. [ 62 ] عمليًا، على الرغم من أن قلة من اللغات كاملة الأنواع، إلا أن معظمها يوفر درجة من تحديد الأنواع. [ 62 ]

نظرًا لأن الأنواع المختلفة (مثل الأعداد الصحيحة والأعداد العشرية ) تُمثل القيم بطرق مختلفة، فستحدث نتائج غير متوقعة إذا استُخدم نوعٌ ما بينما يُتوقع نوعٌ آخر. يُشير فحص الأنواع إلى هذا الخطأ، عادةً أثناء الترجمة (فحص الأنواع أثناء التشغيل أكثر تكلفة). [ 63 ] مع الكتابة القوية ، يُمكن دائمًا اكتشاف أخطاء الأنواع ما لم يتم تحويل المتغيرات صراحةً إلى نوع مختلف. تحدث الكتابة الضعيفة عندما تسمح اللغات بالتحويل الضمني - على سبيل المثال، لتمكين العمليات بين متغيرات من أنواع مختلفة دون أن يُجري المبرمج تحويلًا صريحًا للأنواع. كلما زادت الحالات التي يُسمح فيها بهذا التحويل ، قلّت أخطاء الأنواع التي يُمكن اكتشافها. [ 64 ]

الأنواع المدعومة بشكل شائع

كانت لغات البرمجة المبكرة تدعم في الغالب أنواع البيانات العددية المدمجة فقط، مثل الأعداد الصحيحة (المُوقّعة وغير المُوقّعة) والأعداد العشرية (لدعم العمليات على الأعداد الحقيقية غير الصحيحة). تدعم معظم لغات البرمجة أحجامًا متعددة للأعداد العشرية (تُسمى غالبًا float و double ) والأعداد الصحيحة، وذلك حسب الحجم والدقة المطلوبين من قِبل المبرمج. يؤدي تخزين عدد صحيح في نوع بيانات أصغر من أن يُمثله إلى حدوث تجاوز في سعة العدد الصحيح . الطريقة الأكثر شيوعًا لتمثيل الأعداد السالبة باستخدام أنواع البيانات المُوقّعة هي المُتمّم الثنائي ، على الرغم من استخدام المُتمّم الأحادي أيضًا. [ 65 ] تشمل الأنواع الشائعة الأخرى القيم المنطقية (Boolean) - التي تكون إما صحيحة أو خاطئة - والحرف - الذي يُمثل تقليديًا بايتًا واحدًا ، وهو كافٍ لتمثيل جميع أحرف ASCII . [ 66 ]

المصفوفات هي نوع من أنواع البيانات التي يجب أن تتكون عناصرها، في العديد من لغات البرمجة، من نوع واحد ذي طول ثابت. بينما تُعرّف لغات أخرى المصفوفات على أنها مراجع لبيانات مخزنة في مكان آخر، وتدعم عناصر من أنواع مختلفة. [ 67 ] اعتمادًا على لغة البرمجة، قد تُدعم سلاسل الأحرف المتعددة، والتي تُسمى السلاسل النصية ، كمصفوفات من الأحرف أو كنوع بيانات أساسي مستقل . [ 68 ] قد تكون السلاسل النصية ذات طول ثابت أو متغير، مما يتيح مرونة أكبر على حساب زيادة مساحة التخزين والتعقيد. [ 69 ] تشمل أنواع البيانات الأخرى التي قد تُدعم القوائم ، [ 70 ] والمصفوفات الترابطية (غير المرتبة) التي يتم الوصول إليها عبر المفاتيح، [ 71 ] والسجلات التي تُربط فيها البيانات بأسماء في بنية مرتبة، [ 72 ] والصفوف - وهي مشابهة للسجلات ولكن بدون أسماء لحقول البيانات. [ 73 ] تخزن المؤشرات عناوين الذاكرة، وتشير عادةً إلى مواقع في الذاكرة الديناميكية حيث تُخزن بيانات أخرى. [ 74 ]

أبسط أنواع البيانات التي يُعرّفها المستخدم هو النوع الترتيبي ، والذي يُسمى غالبًا بالتعداد ، حيث يمكن ربط قيمه بمجموعة الأعداد الصحيحة الموجبة. [ 75 ] منذ منتصف ثمانينيات القرن الماضي، تدعم معظم لغات البرمجة أيضًا أنواع البيانات المجردة ، حيث يكون تمثيل البيانات والعمليات مخفيًا عن المستخدم ، الذي لا يمكنه الوصول إلا إلى واجهة . [ 76 ] تشمل فوائد تجريد البيانات زيادة الموثوقية، وتقليل التعقيد، وتقليل احتمالية تضارب الأسماء ، والسماح بتغيير بنية البيانات الأساسية دون الحاجة إلى تعديل العميل لشفرته البرمجية. [ 77 ]

الكتابة الثابتة والديناميكية

في البرمجة الثابتة ، تُحدد أنواع جميع التعبيرات قبل تنفيذ البرنامج، عادةً أثناء الترجمة. [ 62 ] تتطلب معظم لغات البرمجة الثابتة الشائعة تحديد أنواع المتغيرات صراحةً. في بعض اللغات، تكون الأنواع ضمنية؛ أحد أشكال ذلك هو عندما يستطيع المترجم استنتاج الأنواع بناءً على السياق. من سلبيات البرمجة الضمنية احتمال عدم اكتشاف الأخطاء. [ 78 ] لطالما ارتبط استنتاج الأنواع الكامل باللغات الوظيفية مثل هاسكل و ML . [ 79 ]

في الكتابة الديناميكية ، لا يرتبط نوع المتغير بالمتغير نفسه، بل بالقيمة المُشفّرة فيه فقط. ويمكن إعادة استخدام متغير واحد لقيمة من نوع مختلف. ورغم أن هذا يوفر مرونة أكبر للمبرمج، إلا أنه يأتي على حساب انخفاض الموثوقية وقدرة لغة البرمجة على التحقق من الأخطاء. [ 80 ] تسمح بعض اللغات بمتغيرات من نوع الاتحاد ، والتي يمكن إسناد أي نوع من القيم إليها، وذلك استثناءً من قواعد الكتابة الثابتة المعتادة. [ 81 ]

التزامن

في مجال الحوسبة، يمكن تنفيذ تعليمات متعددة في وقت واحد. تدعم العديد من لغات البرمجة التزامن على مستوى التعليمات وعلى مستوى البرامج الفرعية. [ 82 ] وبحلول القرن الحادي والعشرين، أصبحت القدرة المعالجة الإضافية للحواسيب تعتمد بشكل متزايد على استخدام معالجات إضافية، مما يتطلب من المبرمجين تصميم برامج تستخدم معالجات متعددة في آن واحد لتحقيق أداء أفضل. [ 83 ] لا تدعم اللغات المفسرة مثل بايثون وروبي الاستخدام المتزامن لمعالجات متعددة. [ 84 ] بينما تدعم لغات برمجة أخرى إدارة البيانات المشتركة بين سلاسل العمليات المختلفة من خلال التحكم في ترتيب تنفيذ التعليمات الرئيسية باستخدام الإشارات ، أو التحكم في الوصول إلى البيانات المشتركة عبر المراقبة ، أو تمكين تمرير الرسائل بين سلاسل العمليات. [ 85 ]

معالجة الاستثناءات

تتضمن العديد من لغات البرمجة معالجات الاستثناءات، وهي عبارة عن قسم من التعليمات البرمجية يتم تشغيله بواسطة أخطاء وقت التشغيل والتي يمكنها التعامل معها بطريقتين رئيسيتين: [ 86 ]

  • الإنهاء: إيقاف التشغيل وتسليم التحكم إلى نظام التشغيل . يُعتبر هذا الخيار الأبسط.
  • استئناف التنفيذ: استئناف البرنامج بالقرب من موضع حدوث الاستثناء. قد يؤدي ذلك إلى تكرار الاستثناء، ما لم يتمكن معالج الاستثناء من تعديل القيم لمنع تكراره.

تدعم بعض لغات البرمجة تخصيص جزء من التعليمات البرمجية للتنفيذ بغض النظر عما إذا كان قد حدث استثناء قبل الوصول إلى تلك التعليمات البرمجية؛ وهذا ما يسمى بالإنهاء. [ 87 ]

هناك مفاضلة بين زيادة القدرة على معالجة الاستثناءات وانخفاض الأداء. [ 88 ] على سبيل المثال، على الرغم من شيوع أخطاء فهرسة المصفوفات [ 89 فإن لغة C لا تتحقق منها لأسباب تتعلق بالأداء. [ 88 ] مع أن المبرمجين يستطيعون كتابة شيفرة برمجية لمعالجة الاستثناءات المُعرَّفة من قِبل المستخدم، إلا أن ذلك قد يُؤدي إلى ازدحام البرنامج. تستخدم المكتبات القياسية في بعض اللغات، مثل C، قيم الإرجاع للإشارة إلى وجود استثناء. [ 90 ] بعض اللغات ومترجماتها تُتيح خيار تفعيل أو تعطيل إمكانية معالجة الأخطاء، إما مؤقتًا أو دائمًا. [ 91 ]

التصميم والتنفيذ

كان لهندسة الحاسوب تأثير كبير على تصميم لغات البرمجة . صُممت اللغات الإجرائية ، وهي الأكثر شيوعًا، لتعمل بكفاءة عالية على بنية فون نيومان ، وهي البنية الأكثر شيوعًا للحواسيب الرقمية. [ 92 ] في بنية فون نيومان، تُخزن الذاكرة البيانات والتعليمات معًا، بينما وحدة المعالجة المركزية (CPU) التي تُنفذ التعليمات على البيانات منفصلة، ​​ويجب نقل البيانات ذهابًا وإيابًا إلى وحدة المعالجة المركزية. العناصر الأساسية في هذه اللغات هي المتغيرات، والتخصيص ، والتكرار ، وهو أكثر كفاءة من الاستدعاء الذاتي (recursion) على هذه الحواسيب. [ 93 ]

صُممت العديد من لغات البرمجة من الصفر، ثم عُدّلت لتلبية الاحتياجات الجديدة، ودُمجت مع لغات أخرى. وقد اندثر الكثير منها في نهاية المطاف. كان الدافع وراء ظهور لغات البرمجة في خمسينيات القرن العشرين هو الرغبة في ابتكار لغة برمجة عالمية مناسبة لجميع الأجهزة والاستخدامات، مما يُغني عن كتابة التعليمات البرمجية لأجهزة حاسوب مختلفة. [ 94 ] وبحلول أوائل ستينيات القرن العشرين، رُفضت فكرة اللغة العالمية نظرًا لاختلاف متطلبات الأغراض المتنوعة التي كُتبت التعليمات البرمجية من أجلها. [ 95 ]

المفاضلات

تشمل الصفات المرغوبة في لغات البرمجة سهولة القراءة والكتابة والموثوقية. [ 96 ] يمكن لهذه الميزات أن تقلل من تكلفة تدريب المبرمجين على اللغة، والوقت اللازم لكتابة البرامج وصيانتها، وتكلفة تجميع الشفرة، وتزيد من أداء وقت التشغيل. [ 97 ]

  • على الرغم من أن لغات البرمجة المبكرة كانت تُعطي الأولوية للكفاءة على حساب سهولة القراءة، إلا أن أهمية الأخيرة ازدادت منذ سبعينيات القرن الماضي. فوجود عمليات متعددة لتحقيق النتيجة نفسها قد يُضر بسهولة القراءة، وكذلك تحميل المعاملات بشكل زائد ، بحيث يُمكن أن يحمل المعامل الواحد معاني متعددة. [ 98 ] ومن السمات الأخرى المهمة لسهولة القراءة خاصية التعامد ، التي تُقلل من عدد البنى التي يتعين على المبرمج تعلمها. [ 99 ] كما أن بنية بناء الجملة سهلة الفهم والكلمات الخاصة الواضحة فورًا تُسهم في سهولة القراءة. [ 100 ]
  • سهولة الكتابة هي سهولة استخدام البرنامج لكتابة التعليمات البرمجية لحل المشكلة المطلوبة. إلى جانب الميزات الأساسية نفسها لسهولة القراءة، [ 101 ] يساعد التجريد -الواجهات التي تُمكّن من إخفاء التفاصيل عن المستخدم- والتعبيرية -التي تُمكّن من كتابة برامج أكثر إيجازًا- المبرمجَ على كتابة التعليمات البرمجية. [ 102 ] كانت لغات البرمجة الأولى مرتبطة ارتباطًا وثيقًا بالأجهزة المادية للحاسوب، ولكن مع مرور الوقت ازداد دعم التجريد، مما يسمح للمبرمجين بالتعبير عن أفكار أبعد عن الترجمة البسيطة إلى تعليمات الأجهزة المادية. ولأن المبرمجين أقل ارتباطًا بتعقيد الحاسوب، يمكن لبرامجهم القيام بمزيد من العمليات الحسابية بجهد أقل من المبرمج. [ 103 ] تأتي معظم لغات البرمجة مزودة بمكتبة قياسية من الدوال شائعة الاستخدام. [ 104 ]
  • تعني الموثوقية أن البرنامج يعمل وفقًا للمواصفات المحددة في نطاق واسع من الظروف. [ 105 ] يمكن لفحص أنواع البيانات ، ومعالجة الاستثناءات ، وتقييد استخدام أسماء المتغيرات (الوصول إلى نفس منطقة الذاكرة باستخدام أسماء متغيرات متعددة) أن تُحسّن جميعها من موثوقية البرنامج. [ 106 ]

غالبًا ما ينطوي تصميم لغات البرمجة على مفاضلات. [ 107 ] فعلى سبيل المثال، عادةً ما تأتي الميزات التي تُحسّن الموثوقية على حساب الأداء. [ 108 ] كما أن زيادة القدرة التعبيرية نتيجةً لكثرة المعاملات تُسهّل كتابة التعليمات البرمجية، ولكنها تأتي على حساب سهولة قراءتها. [ 108 ]

طُرحت برمجة اللغة الطبيعية كوسيلة للاستغناء عن لغة برمجة متخصصة. مع ذلك، لا يزال هذا الهدف بعيد المنال، وفوائده محل نقاش. وقد رأى إدسكار دبليو ديكسترا أن استخدام لغة رسمية ضروري لمنع إدخال تراكيب لا معنى لها. [ 109 ] وبالمثل، رفض آلان بيرليس هذه الفكرة. [ 110 ]

مواصفة

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

يمكن أن تتخذ مواصفات لغة البرمجة عدة أشكال، بما في ذلك ما يلي:

  • تعريف صريح لبنية اللغة، ودلالاتها الثابتة، ودلالات تنفيذها. في حين أن البنية تُحدد عادةً باستخدام قواعد نحوية رسمية، يمكن كتابة التعريفات الدلالية بلغة طبيعية (كما هو الحال في لغة C )، أو بدلالات رسمية (كما هو الحال في مواصفات Standard ML [ 111 ] و Scheme [ 112 ] ).
  • وصف لسلوك مترجم اللغة (مثل مواصفات لغتي C++ و Fortran ). يجب استنتاج بناء الجملة ودلالات اللغة من هذا الوصف، الذي قد يُكتب بلغة طبيعية أو رسمية.
  • نموذج أو تطبيق مرجعي ، يُكتب أحيانًا باللغة المحددة (مثل Prolog أو ANSI REXX [ 113 ] ) . وتكون قواعد اللغة ودلالاتها واضحة في سلوك التطبيق المرجعي.

تطبيق

تُعرَّف عملية تنفيذ لغة البرمجة بأنها تحويل البرنامج إلى لغة الآلة التي يمكن تنفيذها بواسطة العتاد. بعد ذلك، يمكن تنفيذ لغة الآلة بمساعدة نظام التشغيل . [ 114 ] يُعدّ استخدام المُترجم الشكل الأكثر شيوعًا لتفسير التعليمات البرمجية في بيئة الإنتاج ، حيث يقوم بترجمة التعليمات البرمجية المصدرية عبر لغة وسيطة إلى لغة الآلة، المعروفة باسم الملف التنفيذي . بمجرد ترجمة البرنامج، سيعمل بسرعة أكبر من طرق التنفيذ الأخرى. [ 115 ] تستطيع بعض المُترجمات توفير تحسينات إضافية لتقليل استخدام الذاكرة أو الحساب عند تشغيل الملف التنفيذي، ولكن ذلك يزيد من وقت الترجمة. [ 116 ]

تتمثل إحدى طرق التنفيذ الأخرى في تشغيل البرنامج باستخدام مترجم فوري ، يقوم بترجمة كل سطر من البرنامج إلى لغة الآلة قبل تنفيذه مباشرةً. ورغم أن هذه الطريقة تُسهّل عملية تصحيح الأخطاء، إلا أن عيبها يكمن في أنها أبطأ من 10 إلى 100 مرة من البرنامج المُترجم. [ 117 ] توفر طرق التفسير الهجينة بعض مزايا الترجمة وبعض مزايا التفسير عبر الترجمة الجزئية. ومن أشكالها الترجمة الفورية ، حيث يُترجم البرنامج مسبقًا إلى لغة وسيطة، ثم إلى لغة الآلة مباشرةً قبل التنفيذ. [ 118 ]

لغات خاصة

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

توجد بعض لغات البرمجة على الحدود بين لغات الملكية الفكرية واللغات المفتوحة؛ فعلى سبيل المثال، تؤكد شركة أوراكل حقوق الملكية الفكرية لبعض جوانب لغة البرمجة جافا ، [ 119 ] كما أن لغة البرمجة سي شارب من مايكروسوفت ، والتي تحتوي على تطبيقات مفتوحة لمعظم أجزاء النظام، لديها أيضًا بيئة تشغيل اللغة المشتركة (CLR) كبيئة مغلقة. [ 120 ]

تُستخدم العديد من اللغات الاحتكارية على نطاق واسع، على الرغم من طبيعتها الاحتكارية؛ ومن أمثلتها MATLAB و VBScript و Wolfram Language . وقد تنتقل بعض اللغات من كونها مغلقة إلى مفتوحة؛ فعلى سبيل المثال، كانت Erlang في الأصل لغة برمجة داخلية لشركة Ericsson. [ 121 ]

تُعد لغات البرمجة مفتوحة المصدر مفيدة بشكل خاص لتطبيقات العلوم المفتوحة ، حيث تعزز القدرة على النسخ ومشاركة التعليمات البرمجية. [ 122 ]

يستخدم

تم ابتكار آلاف لغات البرمجة المختلفة، وخاصة في مجال الحوسبة. [ 123 ] وتستخدم مشاريع البرمجيات الفردية عادةً خمس لغات برمجة أو أكثر. [ 124 ]

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

توفر لغة البرمجة آلية منظمة لتحديد أجزاء البيانات، والعمليات أو التحويلات التي يمكن إجراؤها تلقائيًا على تلك البيانات. يستخدم المبرمج التجريدات الموجودة في اللغة لتمثيل المفاهيم المتعلقة بالحساب. تُمثل هذه المفاهيم كمجموعة من أبسط العناصر المتاحة (تُسمى العناصر الأولية ). [ 125 ] البرمجة هي العملية التي يجمع بها المبرمجون هذه العناصر الأولية لتكوين برامج جديدة، أو لتكييف البرامج الموجودة مع استخدامات جديدة أو بيئة متغيرة.

قد تُنفَّذ برامج الحاسوب في عملية دفعية دون أي تدخل بشري، أو قد يُدخل المستخدم الأوامر في جلسة تفاعلية لمترجم . في هذه الحالة ، تُعدّ "الأوامر" مجرد برامج، يتم تنفيذها بشكل متسلسل. عندما تستطيع لغة برمجة تشغيل أوامرها من خلال مترجم (مثل واجهة سطر أوامر يونكس أو غيرها )، دون الحاجة إلى تجميعها، تُسمى لغة برمجة نصية . [ 126 ]

قياس استخدام اللغة

يُعدّ تحديد لغة البرمجة الأكثر استخدامًا أمرًا صعبًا، إذ يختلف تعريف الاستخدام باختلاف السياق. فقد تستغرق لغةٌ ما ساعاتٍ أطول من وقت المبرمجين، بينما تتطلب لغةٌ أخرى عددًا أكبر من أسطر البرمجة، وقد تستهلك لغةٌ ثالثة أكبر قدرٍ من وقت وحدة المعالجة المركزية. تحظى بعض اللغات بشعبيةٍ واسعةٍ في أنواعٍ مُحددةٍ من التطبيقات. على سبيل المثال، لا تزال لغة كوبول رائجةً في مراكز بيانات الشركات، وغالبًا ما تُستخدم على الحواسيب المركزية الضخمة ؛ [ 127 ] [ 128 ] وتُستخدم لغة فورتران في التطبيقات العلمية والهندسية؛ وتُستخدم لغة آدا في تطبيقات الفضاء والنقل والتطبيقات العسكرية والتطبيقات الآنية والتطبيقات المُدمجة؛ وتُستخدم لغة سي في التطبيقات المُدمجة وأنظمة التشغيل. بينما تُستخدم لغاتٌ أخرى بانتظامٍ لكتابة أنواعٍ مُختلفةٍ من التطبيقات.

تم اقتراح طرق مختلفة لقياس شعبية اللغة، كل منها عرضة لتحيز مختلف فيما يتم قياسه:

  • إحصاء عدد إعلانات الوظائف التي تذكر اللغة [ 129 ]
  • عدد الكتب المباعة التي تعلم أو تصف اللغة [ 130 ]
  • تقديرات عدد أسطر التعليمات البرمجية الموجودة المكتوبة باللغة - والتي قد تقلل من شأن اللغات التي لا يتم العثور عليها غالبًا في عمليات البحث العامة [ 131 ] 
  • عدد المراجع اللغوية (أي اسم اللغة) التي تم العثور عليها باستخدام محرك بحث على الويب.

قام موقع stackify.com بدمج المعلومات من مواقع الإنترنت المختلفة وحساب متوسطها، وأفاد بأكثر عشر لغات برمجة شيوعًا (مرتبة تنازليًا حسب شعبيتها الإجمالية): Java و C و C++ و Python و C# و JavaScript و VB .NET و R و PHP و MATLAB . [ 132 ]

اعتبارًا من يونيو 2024، كانت لغات البرمجة الخمس الأولى وفقًا لمؤشر TIOBE هي بايثون ، وسي++ ، وسي ، وجافا ، وسي# . يُصدر مؤشر TIOBE قائمة بأفضل 100 لغة برمجة، ويُحدّث هذه القائمة شهريًا. [ 133 ]

بحسب فريق عمل مجلة IEEE Spectrum، قد تبقى لغات البرمجة الأكثر شيوعًا اليوم مهيمنة بسبب طريقة عمل الذكاء الاصطناعي. ونتيجة لذلك، ستواجه اللغات الجديدة صعوبة أكبر في اكتساب شعبية، إذ لن يكتب المبرمجون الكثير من البرامج بها. [ 134 ]

اللهجات والنكهات والتطبيقات

اللهجة في لغة برمجة أو لغة تبادل بيانات هي تنويع (صغير نسبيًا) أو امتداد للغة دون تغيير جوهرها. في لغات مثل Scheme و Forth ، قد يعتبر المطورون المعايير غير كافية أو غير ملائمة أو غير شرعية، لذا غالبًا ما ينحرفون عنها، مما يؤدي إلى ظهور لهجة جديدة . في حالات أخرى، تُنشأ اللهجة لاستخدامها في لغة خاصة بمجال معين ، وغالبًا ما تكون جزءًا منه. في عالم Lisp ، تُعتبر معظم اللغات التي تستخدم بنية S-expression الأساسية ودلالات شبيهة بـ Lisp لهجات Lisp، على الرغم من اختلافها الكبير، كما هو الحال في Racket و Clojure على سبيل المثال. نظرًا لشيوع وجود عدة لهجات في اللغة الواحدة، قد يجد المبرمج عديم الخبرة صعوبة في العثور على التوثيق المناسب. لغة BASIC لها لهجات عديدة .

التصنيفات

يمكن وصف لغات البرمجة وفقًا للتصنيفات عالية المستوى التالية، والتي تتداخل أحيانًا: [ 135 ]

إلزامي

تدعم لغة البرمجة الإجرائية تنفيذ المنطق المشفر كسلسلة من العمليات المرتبة. وتُصنف معظم اللغات الأكثر استخدامًا على أنها إجرائية. [ 136 ]

وظيفي

تدعم لغة البرمجة الوظيفية تطبيق الدوال بشكل متتابع على المعاملات المُعطاة. ورغم تقدير العديد من الباحثين لبساطتها وأناقتها، إلا أن مشاكل الكفاءة حالت دون انتشارها على نطاق واسع. [ 137 ]

منطق

تم تصميم لغة البرمجة المنطقية بحيث يحدد البرنامج، وليس المبرمج، ترتيب تنفيذ التعليمات. [ 138 ]

البرمجة الكائنية

تتميز البرمجة الكائنية التوجه (OOP) بخصائص مثل تجريد البيانات ، والوراثة ، والتوزيع الديناميكي . وتدعم معظم لغات البرمجة الإجرائية الشائعة وبعض لغات البرمجة الوظيفية البرمجة الكائنية التوجه. [ 136 ]

ترميز

على الرغم من أن لغة الترميز ليست لغة برمجة بحد ذاتها، إلا أنها قد تدعم التكامل مع لغة برمجة.

خاص

توجد لغات برمجة ذات أغراض خاصة لا يمكن مقارنتها بسهولة بلغات البرمجة الأخرى. [ 139 ]

انظر أيضاً

مراجع

  1. تكنولوجيا المعلومات — المفردات .
  2. سيبستا، روبرت و. (2023). مفاهيم لغات البرمجة ( الطبعة العالمية الثانية عشرة). بيرسون. الصفحات 46-51 . ISBN   978-1-292-43682-1.
  3. ^ سيبيستا ، روبرت (2022). مفاهيم لغات البرمجة: الطبعة العالمية ( الطبعة العالمية الثانية عشرة). هارلو: بيرسون. ص. 41. ردمك   978-1-292-43682-1.
  4. "لغات البرمجة عالية المستوى" . علوم الحاسوب . 11 مايو 2026.
  5. تشوهان، شاراد (2013). "10". لغات البرمجة - التصميم والتركيبات . مطبعة جامعة العلوم. ص 235. ISBN  978-93-81159-41-5تم الاطلاع عليه بتاريخ ١٠ سبتمبر ٢٠٢٥. تُسهّل لغات البرمجة ، مثل لغاتنا الطبيعية، التعبير والتواصل بين الناس. إلا أنها تختلف عنها في جانبين: أولًا، تُمكّن لغات البرمجة أيضًا من تبادل الأفكار بين البشر وأجهزة الحاسوب. ثانيًا، تتميز لغات البرمجة بنطاق تعبيري أضيق من لغاتنا الطبيعية، فهي تُسهّل فقط تبادل الأفكار الحاسوبية.
  6. روبرت أ. إدموندز، معجم برنتيس هول القياسي لمصطلحات الحاسوب، برنتيس هول، 1985، ص 91
  7. باسكال لاندو، آن لابوجاد، جيل كاسيل، وفريدريك فورست، نحو أنطولوجيا عامة لبرامج الحاسوب، مؤرشف في 7 يوليو 2015 في آلة Wayback ، ICSOFT 2007 ، مؤرشف في 27 أبريل 2010 في آلة Wayback ، الصفحات 163-170
  8. ر. ناراسيمهان، لغات البرمجة والحواسيب: نظرية شاملة موحدة، الصفحات 189-247 في فرانز آلت، موريس روبينوف (محرران)، التطورات في الحواسيب، المجلد 8، دار النشر الأكاديمية، 1994، رقم ISBN 0-12-012108-5ص ٢١٥: "[...] يختلف نموذج [...] لغات الحاسوب عن نموذج [...] لغات البرمجة في جانبين فقط. ففي لغة الحاسوب، يوجد عدد محدود من الأسماء - أو السجلات - التي لا يمكنها أن تأخذ إلا عددًا محدودًا من القيم - أو الحالات - وهذه الحالات لا تُفرّق فيما بينها من حيث أي سمات أخرى. [حاشية المؤلف:] قد يبدو هذا بديهيًا، لكن دلالاته بعيدة المدى. فعلى سبيل المثال، يعني هذا أن أي نموذج للغات البرمجة، بتحديد بعض معاييره أو خصائصه، يمكن اختزاله بطريقة طبيعية إلى نموذج للغات الحاسوب."
  9. جون سي. رينولدز، "بعض الأفكار حول تدريس البرمجة ولغات البرمجة"، نشرة SIGPLAN ، المجلد 43، العدد 11، نوفمبر 2008، ص 109
  10. هيرسو، سيفيرين (10 يونيو 2022). "البرمجة من 1849 إلى 2022: دليل لتسلسل لغات البرمجة" . جمعية مهندسي الكهرباء والإلكترونيات (IEEE ). تم الاطلاع عليه في 1 مارس 2026 .
  11. ^ جابرييلي ومارتيني 2023 ، ص. 519.
  12. ^ جابرييلي ومارتيني 2023 ، ص 520-521.
  13. 1 2 3 جابرييلي ومارتيني 2023 ، ص. 521.
  14. ^ جابرييلي ومارتيني 2023 ، ص. 522.
  15. سيبستا 2012 ، ص 42.
  16. 1 2 3 جابرييلي ومارتيني 2023 ، ص. 524.
  17. ^ سيبيستا 2012 ، ص 42-44.
  18. ^ جابرييلي ومارتيني 2023 ، ص 523-524.
  19. ^ جابرييلي ومارتيني 2023 ، ص. 527.
  20. 1 2 3 جابرييلي ومارتيني 2023 ، ص. 528.
  21. "كيف أصبحت لغة ليسب لغة البرمجة الخاصة بالله" . twobithistory.org . مؤرشف من الأصل في 10 أبريل 2024. تم الاطلاع عليه في 10 أبريل 2024 .
  22. ^ سيبيستا 2012 ، ص 47-48.
  23. ^ جابرييلي ومارتيني 2023 ، ص. 526.
  24. سيبستا 2012 ، ص 50.
  25. ^ سيبيستا 2012 ، ص 701-703.
  26. ^ جابرييلي ومارتيني 2023 ، ص 524-525.
  27. ^ سيبيستا 2012 ، ص 56-57.
  28. ^ جابرييلي ومارتيني 2023 ، ص. 525.
  29. ^ جابرييلي ومارتيني 2023 ، ص 526-527.
  30. ^ جابرييلي ومارتيني 2023 ، ص. 531.
  31. 1 2 Sebesta 2012 ، ص. 79.
  32. ^ جابرييلي ومارتيني 2023 ، ص. 530.
  33. ^ جابرييلي ومارتيني 2023 ، ص 532-533.
  34. ^ جابرييلي ومارتيني 2023 ، ص. 534.
  35. ^ جابرييلي ومارتيني 2023 ، ص 534-535.
  36. ^ جابرييلي ومارتيني 2023 ، ص. 535.
  37. Sebesta 2012 ، ص 736.
  38. ^ جابرييلي ومارتيني 2023 ، ص. 536.
  39. ^ جابرييلي ومارتيني 2023 ، ص 536-537.
  40. ^ سيبيستا 2012 ، ص 91-92.
  41. ^ جابرييلي ومارتيني 2023 ، ص 538-539.
  42. ^ سيبيستا 2012 ، ص 97-99.
  43. ^ جابرييلي ومارتيني 2023 ، ص. 542.
  44. ^ جابرييلي ومارتيني 2023 ، الصفحات من 474 إلى 475، 477، 542.
  45. ^ جابرييلي ومارتيني 2023 ، ص 542-543.
  46. ^ جابرييلي ومارتيني 2023 ، ص. 544.
  47. بيزانسون، جيف؛ كاربينسكي، ستيفان؛ شاه، فيرال ب.؛ إيدلمان، آلان (2012). "جوليا: لغة ديناميكية سريعة للحوسبة التقنية". arXiv : 1209.5145 [ cs.PL ].
  48. سايز-لوبيز، جيه إم، رومان-غونزاليس، إم، وفاسكيز-كانو، إي، 2016. لغات البرمجة المرئية المدمجة في المناهج الدراسية في المرحلة الابتدائية: دراسة حالة لمدة عامين باستخدام "سكراتش" في خمس مدارس. الحوسبة والتعليم، 97، ص 129-141.
  49. Kodosky, J., 2020. LabVIEW. Proceedings of the ACM on Programming Languages, 4(HOPL), pp.1-54.
  50. فرناندو، أ. وواروساويثانا، ل.، 2020. برمجة راقصات الباليه المبتدئات: من المبتدئة إلى المحترفة. أبريس.
  51. بالوبريثفيراج، ك. ن.، بهاراتي، ك. ر.، تشيندهوران، س.، ولوكيشواران، ب.، مارس 2021. باب ذكي قائم على الذكاء الاصطناعي مع خاصية كشف الكمامات. في المؤتمر الدولي للذكاء الاصطناعي والأنظمة الذكية (ICAIS) لعام 2021 (ص 543-548). معهد مهندسي الكهرباء والإلكترونيات (IEEE).
  52. سيويل، ب.، 2015. مخططات البرمجة المرئية لمحرك Unreal Engine. شركة Packt للنشر المحدودة.
  53. بيرتوليني، ل.، 2018. تطوير الألعاب العملي بدون برمجة: إنشاء ألعاب ثنائية وثلاثية الأبعاد باستخدام البرمجة المرئية في يونيتي. دار نشر باكت المحدودة.
  54. مايكل سيبسر (1996). مقدمة في نظرية الحوسبة . دار نشر PWS. رقم ISBN 978-0-534-94728-6.القسم 2.2: آلات الدفع لأسفل، الصفحات 101-114.
  55. جيفري كيجلر، " بيرل وعدم قابلية الحسم " مؤرشف في 17 أغسطس 2009 في Wayback Machine ، مجلة بيرل ريفيو . تثبت الورقتان 2 و3، باستخدام نظرية رايس والاختزال المباشر لمشكلة التوقف على التوالي ، أن تحليل برامج بيرل غير قابل للحسم بشكل عام.
  56. مارتي هول، 1995، ملاحظات المحاضرة: وحدات الماكرو، مؤرشفة في 6 أغسطس 2013 على موقع Wayback Machine ، نسخة PostScript مؤرشفة في 17 أغسطس 2000 على موقع Wayback Machine
  57. آبي، أنتوني (2004). مقدمة في لغات البرمجة . مؤرشف من الأصل في 8 نوفمبر 2012. تم الاطلاع عليه في 29 سبتمبر 2012 .
  58. مايكل لي سكوت، براغماتية لغات البرمجة ، الطبعة الثانية، مورغان كوفمان، 2006، رقم ISBN 0-12-633951-1، ص 18-19
  59. 1 2 وينسكل، جلين (5 فبراير 1993). الدلالات الرسمية للغات البرمجة: مقدمة . مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 978-0-262-73103-4.
  60. Sebesta 2012 ، ص 244.
  61. سيبستا 2012 ، ص 245.
  62. 1 2 3 4 أندرو كوك. "مقدمة في لغات البرمجة" . مؤرشف من الأصل في 15 أغسطس 2012. تم الاطلاع عليه في 13 يوليو 2012 .
  63. ^ سيبيستا 2012 ، ص 15 ، 408-409.
  64. ^ سيبيستا 2012 ، ص 303-304.
  65. ^ سيبيستا 2012 ، ص 246-247.
  66. Sebesta 2012 ، ص 249.
  67. سيبستا 2012 ، ص 260.
  68. سيبستا 2012 ، ص 250.
  69. سيبستا 2012 ، ص 254.
  70. ^ سيبيستا 2012 ، ص 281-282.
  71. ^ سيبيستا 2012 ، ص 272-273.
  72. ^ سيبيستا 2012 ، ص 276-277.
  73. سيبستا 2012 ، ص 280.
  74. ^ سيبيستا 2012 ، ص 289-290.
  75. سيبستا 2012 ، ص 255.
  76. ^ سيبيستا 2012 ، ص 244-245.
  77. سيبستا 2012 ، ص 477.
  78. سيبستا 2012 ، ص 211.
  79. ليفانت، دانيال (1983). استنتاج الأنواع متعددة الأشكال . ندوة ACM SIGACT-SIGPLAN حول مبادئ لغات البرمجة. أوستن، تكساس: مطبعة ACM. الصفحات 88-98 . doi : 10.1145/567067.567077 . ISBN  978-0-89791-090-3.
  80. ^ سيبيستا 2012 ، ص 212-213.
  81. ^ سيبيستا 2012 ، ص 284-285.
  82. سيبستا 2012 ، ص 576.
  83. سيبستا 2012 ، ص 579.
  84. سيبستا 2012 ، ص 585.
  85. ^ سيبيستا 2012 ، ص 585-586.
  86. ^ سيبيستا 2012 ، ص 630 ، 634.
  87. Sebesta 2012 ، ص 635.
  88. 1 2 Sebesta 2012 ، ص. 631.
  89. Sebesta 2012 ، ص 261.
  90. Sebesta 2012 ، ص 632.
  91. ^ سيبيستا 2012 ، ص 631، 635–636.
  92. سيبستا 2012 ، ص 18.
  93. سيبستا 2012 ، ص 19.
  94. ^ نوفر، بريستلي وألبرتس 2014 ، ص. 55.
  95. ^ نوفر، بريستلي وألبرتس 2014 ، ص. 60.
  96. سيبستا 2012 ، ص 8.
  97. ^ سيبيستا 2012 ، ص 16-17.
  98. Sebesta 2012 ، ص 8-9.
  99. ^ سيبيستا 2012 ، ص 9-10.
  100. ^ سيبيستا 2012 ، ص 12 – 13.
  101. سيبستا 2012 ، ص 13.
  102. ^ سيبيستا 2012 ، ص 14-15.
  103. فريدريك ب. بروكس الابن: الشهر الأسطوري للرجل ، أديسون ويسلي، 1982، ص 93-94
  104. بوسبي، كينيث ليروي؛ براونشفايغ، ديف (15 ديسمبر 2018). "المكتبات القياسية" . أساسيات البرمجة - منهج هيكلي معياري . تم الاسترجاع في 27 يناير 2024 .
  105. سيبستا 2012 ، ص 15.
  106. Sebesta 2012 ، ص 8، 16.
  107. ^ سيبيستا 2012 ، ص 18 ، 23.
  108. 1 2 Sebesta 2012 ، ص. 23.
  109. ديجكسترا، إدسكار دبليو. حول حماقة "برمجة اللغة الطبيعية". مؤرشف في 20 يناير 2008 في Wayback Machine EWD667.
  110. بيرليس، آلان (سبتمبر 1982). "مقتطفات عن البرمجة" . نشرة SIGPLAN، المجلد 17، العدد 9 ، الصفحات 7-13. مؤرشف من الأصل في 17 يناير 1999. 
  111. ميلنر، رم. توفت ؛ ر. هاربر ؛ د. ماكوين (1997). تعريف لغة ML القياسية (مراجعة) . مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 978-0-262-63181-5.
  112. كيلسي، ريتشارد؛ ويليام كلينجر؛ جوناثان ريس (فبراير 1998). "القسم 7.2 الدلالات الرسمية" . التقرير الخامس المنقح حول مخطط لغة الخوارزميات . مؤرشف من الأصل في 6 يوليو 2006.
  113. ANSI – لغة البرمجة Rexx، X3-274.1996
  114. ^ سيبيستا 2012 ، ص 23 – 24.
  115. ^ سيبيستا 2012 ، ص 25 – 27.
  116. سيبستا 2012 ، ص 27.
  117. سيبستا 2012 ، ص 28.
  118. ^ سيبيستا 2012 ، ص 29-30.
  119. انظر: قضية أوراكل أمريكا ضد جوجل
  120. "دليل لغات البرمجة | ComputerScience.org" . ComputerScience.org . مؤرشف من الأصل بتاريخ 13 مايو 2018. تم الاطلاع عليه بتاريخ 13 مايو 2018 .
  121. "الأساسيات" . ibm.com . 10 مايو 2011. مؤرشف من الأصل في 14 مايو 2018. تم الاطلاع عليه في 13 مايو 2018 .
  122. عبد العزيز، عبد الله إ.؛ هانسون، كينت أ.؛ جابر، تشارلز إ.؛ لي، تود أ. (2023). "تحسين تحليل البيانات الواقعية الضخمة باستخدام ملفات Parquet في لغة R: دليل إرشادي خطوة بخطوة" . علم الأوبئة الدوائية وسلامة الأدوية . 33 (3) e5728. doi : 10.1002/pds.5728 . PMID 37984998 . 
  123. "HOPL: قائمة تفاعلية للغات البرمجة" . أستراليا: جامعة مردوخ . مؤرشف من الأصل في 20 فبراير 2011. تم الاطلاع عليه في 1 يونيو 2009. يسرد هذا الموقع 8512 لغة.
  124. ماير، فيليب؛ باور، ألكسندر (2015). "تحليل تجريبي لاستخدام لغات برمجة متعددة في مشاريع المصادر المفتوحة". وقائع المؤتمر الدولي التاسع عشر للتقييم والتحليل في هندسة البرمجيات . وقائع المؤتمر الدولي التاسع عشر للتقييم والتحليل في هندسة البرمجيات - EASE '15. نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. الصفحات 4:1-4:10. doi : 10.1145/2745802.2745805 . ISBN  978-1-4503-3350-4النتائج : وجدنا (أ) متوسط ​​5 لغات لكل مشروع، مع هيمنة واضحة للغة عامة رئيسية و5 أنواع من لغات المجال الخاصة بالمجال (DSL) شائعة الاستخدام، (ب) تأثير كبير لحجم المشروع وعدد المساهمات واللغة الرئيسية على عدد اللغات، بينما لم يكن لعمر المشروع أو عدد المساهمين أي تأثير يُذكر، (ج) ثلاثة أنظمة لغوية مُجمّعة حول XML وShell/Make وHTML/CSS. الاستنتاجات: يبدو أن البرمجة متعددة اللغات شائعة في مشاريع المصادر المفتوحة، وهي عامل يجب مراعاته في الأدوات وعند تقييم تطوير وصيانة أنظمة البرمجيات هذه.
  125. أبيلسون، سوسمان، وسوسمان. "بنية وتفسير برامج الحاسوب" . مؤرشف من الأصل في 26 فبراير 2009. تم الاطلاع عليه في 3 مارس 2009 .{{cite web}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط )
  126. فيكي، براون؛ مورين، ريتش (1999). "لغات البرمجة النصية" . ماك تك . مؤرشف من الأصل في 2 ديسمبر 2017.
  127. جورجينا سوان (21 سبتمبر 2009). "لغة كوبول تبلغ 50 عامًا" . مجلة كمبيوتر وورلد. مؤرشف من الأصل في 19 أكتوبر 2013. تم الاطلاع عليه في 19 أكتوبر 2013 .
  128. إد آيري (3 مايو 2012). "دحض 7 خرافات حول لغة كوبول" . developer.com. مؤرشف من الأصل في 19 أكتوبر 2013. تم الاطلاع عليه في 19 أكتوبر 2013 .
  129. نيكولاس إنتيكناب. "استطلاع رواتب تكنولوجيا المعلومات من SSL/Computer Weekly: ازدهار القطاع المالي يدفع نمو وظائف تكنولوجيا المعلومات" . Computer Weekly . مؤرشف من الأصل في 26 أكتوبر 2011. تم الاطلاع عليه في 14 يونيو 2013 .
  130. "إحصاء لغات البرمجة حسب مبيعات الكتب" . Radar.oreilly.com. 2 أغسطس 2006. مؤرشف من الأصل في 17 مايو 2008.
  131. بييمان، جيه إم؛ موردوك، في، العثور على التعليمات البرمجية على شبكة الويب العالمية: دراسة أولية، وقائع ورشة العمل الدولية الأولى لمعهد مهندسي الكهرباء والإلكترونيات حول تحليل ومعالجة التعليمات البرمجية المصدرية، 2001
  132. "لغات البرمجة الأكثر شيوعًا وتأثيرًا في عام 2018" . stackify.com. 18 ديسمبر 2017. مؤرشف من الأصل في 30 أغسطس 2018. تم الاطلاع عليه في 29 أغسطس 2018 .
  133. "مؤشر TIOBE" . تم الاطلاع عليه بتاريخ 24 يونيو 2024 .
  134. "IEEE Spectrum" . تم الاطلاع عليه بتاريخ 25 سبتمبر 2025 .
  135. سيبستا 2012 ، ص 21.
  136. 1 2 سيبيستا 2012 ، ص 21-22.
  137. سيبستا 2012 ، ص 12.
  138. سيبستا 2012 ، ص 22.
  139. ^ سيبيستا 2012 ، ص 22 – 23.

للمزيد من القراءة