لغات برمجه Programming language - Langage de programmation
لغات البرمجة
لغة البرمجة programming language هي لغة مؤلفة من مجموعة من المحارف والقواعد الناظمة لها في رموز وكلمات وتعليمات للتعبير عن الخوارزمية بهدف تنفيذها على الحاسوب. تتضمن هذه القواعد آليات التصريح عن المتحولات variables في الأنماط المختلفة مثل: نمط الأعداد الصحيحة integers - نمط الأعداد الحقيقة أو الكسرية real - المحارف characters وسلاسل المحارف strings - الجداول arrays والمصفوفات matrices - التسجيلات records - الملفات files - المؤشرات pointers، وأوامر التحكم التي تسمح بمعالجة هذه المتحولات مثل: تعليمة الإسناد (=,= والتعليمات الشرطية if then else, switch, case, go to، والتعليمات الحلقية while, do, until, for وتعليمات القراءة والكتابة من/على الشاشة أو من/على الملفات read, write, scanf, printf, input وتعليمات الحجز في الذاكرة new, malloc, free، والعمليات الأساسية مثل: العمليات الحسابية (+, -, ×, /,<<, >> ,div, mod ) والبوليانية (=>, =<>,< ,> ,=<) والمحرفية chr, ascii, ord.
لمحة تاريخية
ظهر في النصف الثاني من القرن العشرين العديد من لغات البرمجة. في البداية كان على المبرمجين كتابة برامجهم بلغة الآلة machine language، وهي لغة مرمّزة بالبتات الإثنانية binary (0, 1) يمكن للحاسوب فهمها وبرمجتها من دون اللجوء إلى أي عملية تحويل أو تصريف compilation أو تفسير interpretation. تمثّل البتات الإثنانية فيها رموز العمليات ومواقع الذاكرة وقيم المتحولات، ولكن من العسير جداً كتابة البرامج فيها. ظهر بعد ذلك لغات التجميع assembly languages التي سمحت للمبرمج بالتعبير عن العمليات برموز محرفية (مثل: ADD للتعبير عن الجمع، وSUB للتعبير عن الطرح). على الرغم من أن البرمجة بلغات التجميع أبسط بكثير من لغة الآلة إلاّ أنها بقيت بعيدة عن اللغات الطبيعية التي يسهل على الإنسان التعامل معها على نحوٍ أفضل، كما أن كل لغة تجميع ترتبط ارتباطاً وثيقاً بنوع المعالج الصغري microprocessor الذي يميز العتاد المادي لأي حاسوب. وهكذا ظهرت لغات البرمجة عالية المستوى (وتُسمى أيضاً لغات الجيل الثالث) أقرب إلى اللغات الطبيعية ومستقلة عن العتاد المادي للحاسوب. كانت أولى هذه اللغات هي لغة FORTRAN (FORmula TRANslation) التي ظهرت في عام 1956 وكانت موجهة نحو البرمجة العلمية والرياضية، ومازال العديد من المكتبات البرمجية الرياضية مكتوباً بها حتى اليوم، لكنها كانت صعبة الاستخدام في المجالات الأخرى كالبرمجة الإدارية. ثم ظهرت لغة (COBOL) COmmon Business-Oriented Language في عام 1960 وكانت كلماتها وقواعدها قريبة من اللغة الإنكليزية ومناسبة جداً للتطبيقات الإدارية، وقد استخدمت استخداماً واسعاً ومُثّل التاريخ فيها بخانتين فقط. وكان ذلك من أهم ما سبب بما سُمي بمشكلة العام 2000. ظهرت بعد ذلك لغة BASIC (Beginner’s All-purpose Symbolic Instruction Code) وانتشرت انتشاراً واسعاً في المدارس والأعمال والمنازل (مع انتشار الحواسيب الشخصية) بسبب بساطتها الشديدة وسهولة تعلّمها. وظهرت في فترة السبعينيات لغة C الشهيرة ذات المرونة الكبيرة التي تتركز تطبيقاتها في برمجة نظم التشغيل operating systems والمصرّفات compilers وبرمجيات التحكم بالمنظومات الصناعية، بسبب كونها لغة عالية المستوى تتضمن فاعلية لغة التجميع. كما ظهرت أيضاً لغة PASCAL التي اشتهرت بكونها لغة تعليمية مهيكلة دقيقة التنميط.
تميزت حقبة الثمانينيات بظهور لغات البرمجة الغرضية التوجهobject-oriented programming languages واللغات الكتلية modular languages التي عكست تطور مفاهيم هندسة البرمجيات software engineering. كانت البداية الفعلية للغات البرمجة الغرضية التوجه مع لغة 80 smalltalk، ثم ترسخت أكثر مع لغة ADA التي طورتها وزارة الدفاع الأمريكية، ثم حققت انتشارها الواسع مع لغة ++C التي دعمت لغة C الواسعة الانتشار أصلاً بمفاهيم البرمجة غرضية التوجه. أمّا في اللغات الكتلية فإن خير من يمثّلها هي لغة MODULA-2 التي هي بمنزلة تطوير للغة Pascal المهيكلة، كما يمكن عدّ لغة ADA من أهم هذه اللغات.
شهدت حقبة التسعينيات تطورين بارزين هما: الوسائط المتعددة والفائقة multimedia and hypermedia وشبكة الإنترنت العالمية وخدمتها الأساسية الشبكة العنكبوتية العالمية <world wide web أو «الوب» اختصاراً، وقد انعكس ذلك مباشرةً على تطوّر لغات البرمجة. لذلك ظهرت بدءاً من النصف الأول من هذه الحقبة لغات البرمجة المرئية visual programming languages، وهي لغات منتشرة أصلاً لكنها طُعّمت بمزايا التعامل مع الواجهات الرسومية والاستجابة إلى الأحداث التي يقوم بها المستخدم ولذلك يمكن تسميتها باللغات الموجّهة بالأحداث event-driven languages مثل: لغة visual basic - لغة visual C - لغة delphi - لغة visual C++ .
ولعلّ أهم ما يميز هذه الحقبة ظهور لغة Java [ر] التي تحوي دعماً خاصاً لكي تنفذ من خلال الوب. وهي لغة كائنية المنحى تشبه كثيراً لغة ++C وإن كانت تختلف عنها بأمور جوهرية أهمها عدم تقبل تعليمات لغة C. يولّد تصريف لغة جافا برامج تنفيذية صغيرة يسهل تحميلها عبر الإنترنت. كما ظهر أيضاً العديد من لغات البرمجة المرتبطة ارتباطاً وثيقاً بالإنترنت: مثل اللغات الخطاطية Javascript, JScript, VBScript المستخدمة في إعطاء صفحات الوب إمكانات ديناميكية وتخاطبية مع المستخدم من خلال دمجها مع لغات التأشير[ر] markup languages المستخدمة أصلاً لتصميم هذه الصفحات (كلغتي HTML EXML) - ولغات برمجة أخرى تفيد في الربط بين صفحات الوب وقواعد المعطيات databases الموجودة على المخدّمات servers مثل لغة PERL ولغة ASP.
تنبغي الإشارة أيضاً إلى أنه قد ظهر أيضاً في النصف الثاني من القرن العشرين العديد من اللغات العالية المستوى الخاصة التي تملك ميزات مناسبة لتطبيقات محدّدة. هناك من الأمثلة على هذه اللغات: لغة APT (Automatically Programmed Tools) المستخدمة في التحكم الرقمي بالآلات الصناعية، ولغة GPSS (General Purpose Simulation System) المستخدمة في بناء نماذج المحاكاة، ولغة LISP (LISt Processing) المناسبة لمعالجة الرموز والقوائم والمستخدمة في تطبيقات الذكاء الصنعي[ر] artificial intelligence، ولغة PROLOG (PROgrammation LOGique) المحاكية للجمل المنطقية من الدرجة الأولى والمستخدمة في تطبيقات معالجة اللغات الطبيعية natural language processing.
ظهرت أيضاً ما سُميت لغات بالجيل الرابع 4 th generation languages، وهي لغات أكثر قرباً إلى اللغات الطبيعية وموجهة نحو الاستفسار والبحث في قواعد المعطيات مثل لغة الطلبات المهيكلة structured query language (SQL) وFOCUS و dBase.
مكونات لغة البرمجة:
على الرغم من اختلاف لغات البرمجة فيما بينها إلا أنها جميعاً تعمل وفق مبدأ رئيسي واحد، فالبرنامج الحاسوبي المكتوب بلغة برمجة ما، يتألف من سلسلة من الأوامر والتعليمات التي يجب على الآلة أن تنفذها. تنفذ الآلة المعلومات بترتيب قراءتها لها من الملف (أي من الأعلى إلى الأسفل) إلى أن تصل إلى تعليمات تفرّع branching instructions توجهها نحو تنفيذ مجموعة تعليمات من دون مجموعة أخرى. ويستمر تنفيذ التعليمات بهذا الشكل حتى بلوغ نهاية البرنامج.
1ـ مفهوم المتحول variable:
في معظم لغات البرمجة تُستخدم المتحولات. يعبّر المتحول عن مكان تخزين المعطيات في الذاكرة، ويقوم المبرمج بإعطائه اسماً، ويمكنه أن يضع فيه المحتوى المناسب. على سبيل المثال يمكن أن يُسمى متحول ما بـ xy ويوضع فيه العدد 8.
2ـ نمط المعطيات data type:
في بعض لغات البرمجة، يمكن أن يدل متحول ما على أي نمط من المعطيات (أي يمكن أن يخزن فيه عدد صحيح أو محرف)، تُسمى مثل هذه اللغات لغات غير منَمَّطة non typed languages. توجد لغات أكثر تطوراً مثل (C أو جافا) وهي لغات منمّطةtyped languages، أي إن لكل متحول فيها نمط خاص للمعطيات التي يمكن أن يحتويها، وفي لحظة التصريح عن تسمية متحول ما، يجب أن يُبيَّن نمط المعطيات الذي يجب أن يحتويه هذا المتحول. ويرتبط نمط المتحول بعدد الثمانيّات التي يجب أن يحجزها المترجم للمتحول -وهو عدد الثمانيّات التي ستُرَمَّز المعطيات ضمنها- وبطريقة ترميزها.
3ـ بنى المعطيات data structures:
توفّر معظم لغات البرمجة طرائق لتجميع المعطيات في بنى أكثر تعقيداً، فيجري تعريف نمط جديد غير موجود في أصل اللغة باستخدام مفاهيم المصفوفات، والقوائم، والمكدسات والملفات، ويُعطى اسماً جديداً.
كما تسمح اللغات غرضية التوجه object oriented languages بتعريف بنى معطيات جديدة تسمى أغراضاً objects لها بنية داخلية خاصة وسلوك خاص.
4ـ النحو syntax:
تحتاج لغات البرمجة إلى قواعد نحوية، إذ لا يمكن أن تُكتب الأوامر للحاسوب كيفما اتفق. وهكذا تعرّف اللغة عبارات أساسيةelementary statements تستخدم كلمات مفتاحية وبنى نحوية خاصة.
وتختلف اللغات بعضها عن بعض بطرق تجميع هذه العبارات الأساسية، وهكذا يمكن كتابة برامج تشمل أنواعاً مختلفة من المدخلات، كما تستطيع أن تنفذ عدة أشكال من تدفق التحكم (التفرّع branching، الحلقات loops، الرجوع إلى الوراء backtracking).
تصنيف لغات البرمجة
يمكن تصنيف لغات البرمجة وفق عدة معايير مختلفة مثل: طريقة التصميم والبرمجة - الحقبة الزمنية - سهولة التعلّم - طبيعة التطبيقات المناسبة - قدرتها التعبيرية - وغيرها. قد يكون من الأنسب تصنيف هذه اللغات بحسب المعيار الأول على النحو الآتي:
آـ اللغات الإجرائية
تتميز هذه اللغات بطريقة التصميم البرمجي من الأعلى إلى الأسفل حيث تجري تجزئة المسألة المطلوبة إلى مسائل جزئية، ثم تجزئة المسائل الجزئية إلى مسائل أصغر، وهكذا حتى الوصول إلى مسائل يمكن برمجتها مباشرةً بوساطة إجراءات procedures أو توابع functions. ويكون إجراء المسألة الجزئية في مستوى ما تجميعاً لإجراءات المسائل التي يتألف منها، ويصبح بالتالي البرنامج تجميعاً لكل المسائل الجزئية إضافةً إلى سيناريو استدعاء هذه الإجراءات عند الحاجة. تتضمّن معظم هذه اللغات أنماط المعطيات الأساسية وأوامر التحكم الأساسية. ويوضح الجدول (1) المعلومات الأساسية عن أهمّ لغات البرمجة الإجرائية.
اسم اللغة
بيئة العمل
نوع الترجمة
التطبيقات المناسبة
المصمّمون وتاريخ التصميم الأولي
ABC
Unix, Macintosh, MS-DOS
مفسّرة
مفسّرات اللغات الطبيعية وقواعد البيانات
Geurts & Meertens, 1975-82
Alef
Plan 9
مصرّفة
تطوير تطبيقات الشبكة
P. Winterbottom et al. Bell Labs (Lucent), 1995
Algol
DOS,
Mainframe
مصرّفة
علمية وصناعية عمومية
J. Backus and P. Naur, 1958-60.
Basic
DOS
مفسّرة
عمومية وتعليمية
John Kemeny & Thomas Kurtz, Dartmouth, 1963-64
BCPL
Unix, Amiga, MS-DOS
مصرّفة إلى رماز خاص
تطوير التطبيقات الصغيرة وخصوصاً لنظم التشغيل
Martin Richards, Cambridge University, 1966-67
Bliss
PDP, DECsystem, VAX
مفسّرة
تطوير تطبيقات لنظم التشغيل
Wulf, Russell et al. DEC, 1970
C
Unix, PC, Macintosh, mainframe
مصرّفة
عمومية وجيدة في نظم التشغيل والمترجمات
Ritchie & Thompson, 1972-73; Kernighan & Ritchie, 1978
CLU
Unix
مصرّفة
عمومية وجيدة خصوصاً في تصميم لغات البرمجة
B. Liskov et al.
1974-77
CMS-2
معظم البيئات
مصرّفة
تطبيقات الزمن الحقيقي المضمّنة للبحرية الأمريكية
Rand Corporation, US Navy, 1974
Cobol
Unix, DOS, Windows
مصرّفة
عمومية وجيدة في الأتمتة الإدارية وفي مجال الأعمال كالمصارف والمصانع
US DOD GPO, 1960; CODASYL Committee, 1960.
Coral 66
VAX, VMS
مصرّفة
تطبيقات الزمن الحقيقي
Royal Signals & Radar Establishment, Malvern UK, 1964-66
cT
Unix,
Windows, Macintosh
مصرّفة
تطبيقات الإحياء animation وبناء الواجهات التخاطبية متعددة الوسائط multimedia
Andersen, Sherwood et al. Carnegie-Mellon, 1990-94
Fortran,
Unix, Dos, VAX
مصرّفة
التطبيقات العلمية والرياضية وحسابات الفاصلة العائمة
John Backus, IBM, 1954-57
Jovial
DOS,
Mainframe
مصرّفة
تطوير التطبيقات الكبيرة في هندسة البرمجيات ونظم الزمن الحقيقي
Jules Schwartz et al. SDC, 1959-60
ICI
Unix, DOS, Windows, Macintosh
مفسّرة
تطوير التطبيقات
Tim Long, 1992
Icon
UNIX, DOS, OS/2, VMS, Windows, Macintosh
مفسّرة
معالجة المعطيات وسلاسل المحارف
R.E. Griswold, 1977
InterCall
DOS, Unix;
Mainframe
مصرّفة
عمومية
D.R. Woods and J.M. Lyons, 1972
Limbo
Inferno,
Unix, Windows, Plan9
مصرّفة إلى رماز ثماني
تطوير التطبيقات والنظم المحمولة embedded systems
Doward, Winterbottom, & Pike, Lucent Technologies, 1996
Modula-2
Unix, PC, VMS
مصرّفة
عمومية وجيدة في تعلّم البرمجة وصيانة تطبيقات هندسة البرمجيات
Niklaus Wirth, 1980
Pascal
Unix, PC, Macintosh
مصرّفة
عمومية وجيدة خصوصاً في تعلّم البرمجة
Niklaus Wirth, 1968-71
PL/1,
PLC
mainframe, WindowsNT, OS/2, Unix
مصرّفة
عمومية
George Radin, IBM, 1964
SETL
DOS, Unix, Macintosh
مصرّفة
تطبيقات المجموعات
Jacob T. Schwartz, 1969; Courant Institute, 1970
Terse
DOS, Windows
مصرّفة
تطبيقات المعالجة الصغرية Intel x86
Jim Neil, 1987
Turing
Windows, Macintosh, Unix
مصرّفة
تعليمية
R.C. Holt et al. Univ. of Toronto, 1987
الجدول (1): أهمّ لغات البرمجة الإجرائية
ب ـ لغات البرمجة الرياضية ولغات المحاكاة
هي لغات مختصة بالحسابات العلمية والرياضية والهندسية وطرق نمذجة ومحاكاة النظم، ولذلك فهي تحوي غالباً مجموعة صغيرة نسبياً من ميزات لغات البرمجة التقليدية، ومجموعة كبيرة من التعليمات والأدوات الرياضية اللازمة لزيادة فاعلية هذه التطبيقات. يحوي الجدول (2) المعلومات الأساسية عن أهمّ لغات البرمجة الرياضية ولغات المحاكاة.
اسم اللغة
بيئة العمل
نوع الترجمة
التطبيقات المناسبة
المصمّمون وتاريخ التصميم الأولي
APL
معظم البيئات
مفسّرة
الحسابات الرياضية ومعالجة المصفوفات
Iverson et al. IBM, 1960s
CSP
DOS
مفسّرة
وصف ومحاكاة الحسابات التفرعية
C.A.R. Hoare, 1978
Formac
معظم البيئات
مصرّفة
الحسابات العلمية والهندسية
Jean Sammet et al. IBM, 1964.
GPSS
Mainframe
مصرّفة
نمذجة النظم ومحاكاة الأحداث المتقطعة ونمذجة إجراءات الواقع الحقيقي
G. Gordon, IBM, 1961
Magma
Unix, PC
مفسّرة
برمجة رياضية عالية المستوى
J. Cannon, et al. 1993
Mathematica
Windows, Macintosh, Unix
مفسّرة
التطبيقات الرياضية الرمزية والبيانية الأكاديمية والصناعية
Stephen Wolfram, 1987
Reduce
معظم البيئات
مفسّرة
الجبر والرياضيات الرموزية
Anthony Hearn, RAND Corp, 1963
S
Unix, PC
مفسّرة
الإحصاء والنمذجة الرقمية وتحليل المعطيات والمحاكاة
R.A. Becker et al. 1977-84
SLAM
Unix, mainframe, Windows
مفسّرة
نمذجة النظم المتقطعة ومحاكاة جدولة الخدمات والتصنيع واللوجستية العسكرية وبنيان الحواسيب والأرتال.
A.A.B. Pritsker et al. 1976-77
SmiScript
معظم البيئات
مفسّرة
نمذجة الأحداث المتقطعة والمستمرة
H. Markowitz et al. Rand Corporation, 1962
VHDL
Unix
مفسّرة
الدارات الرقمية المتكاملة
M.R. Shahdad et al. 1985; IEEE Standard 1076, 1987
Yorick
Unix, Linux, Macintosh,, Windows
مفسّرة
تحليل المعطيات والبيانيات
Lawrence Livermore National Laboratory, 1994
الجدول (2): أهمّ لغات البرمجة الرياضية ولغات المحاكاة
ج ـ لغات البرمجة غرضية التوجه
تتميز هذه اللغات بطريقة التصميم البرمجي من الأسفل إلى الأعلى، حيث يجري أولاً تعريف الفئات classes التي تُستخدم في توليد الأغراض objects، ثم يجري بناء البرنامج كسيناريو لتبادل الأغراض فيما بينها الرسائل التي تؤدي إلى تحريض الطرائق methods التي تنفّذها، بغض النظر عن كيفية بنائها في الأغراض. تتضمن هذه اللغات المفاهيم التالية: مبدأ الكبسلة Encapsulation أو تجميع المعطيات مع الطرق التي تعمل عليها انتساخ instantiation الأغراض عن الفئات - وراثة inheritance الخصائص والطرق - مبدأ إعادة الاستخدام reusability - إخفاء المعطيات data hiding - مفاهيم التحميل الزائد وإعادة التعريف والتجريد، ويحوي الجدول (3) المعلومات الأساسية عن أهمّ اللغات الكائنية المنحى.
اسم اللغة
بيئة العمل
نوع الترجمة
التطبيقات المناسبة
المصمّمون وتاريخ التصميم الأولي
Ada
Unix, Windows, DOS
مصرّفة
هندسة البرمجيات والبرامج الضخمة
Jean Ichibah et al. 1980-1983
BETA
معظم البيئات
مصرّفة
تطوير التطبيقات البرمجية
Madsen et al. Aarhus Univesity, 1983
C++
PC,
Unix
مصرّفة
علمية وصناعية عمومية
Bjarne Stoustrup, AT&T Bell Labs, 1982-85
Cecil
Unix, Linux
مصرّفة
تطوير التطبيقات البرمجية الكبيرة
Craig Chambers, 1992
Claire
PC,
Unix, Macintosh
مصرّفة
بحوث اللغات والبرمجة الخاصة
F. Laburthe, Y. Casuau, ENS Paris, 1995
Dyaln
Unix, Macintosh, Windows
مفسّرة
تطوير التطبيقات وبرمجة النظم
Apple Computer, 1992
Dyance
معظم البيئات
مصرّفة
تطوير التطبيقات العمومية
B. McBride, Algorithms Corporation, 1993-96
Eiffel
معظم البيئات
مصرّفة إلى رماز ثماني
عمومية
Bertrand Meyers, 1986-92
Java
معظم البيئات
مصرّفة إلى رماز ثماني
عمومية
Gosling et al. Sun Microsystems, 1994-95
Leda
Unix, Windows 95/NT
مصرّفة
عمومية
T.A. Budd, Oregon State University, 1988
Modula-3
Unix, Linux, WindowsNT
مصرّفة
هندسة البرمجيات وتعليم علوم المعلوماتية
Luca Cardelli et al. Olivetti and DEC, 1988
Oberon
Unix, Linux, PC, Macintosh
مصرّفة
تعليم علوم المعلوماتية
Wirth and Gutknecht, ETH Zurich, 1985-88
Objective-C
NeXT, OpenStep
مصرّفة
عمومية
Brad J. Cox, 1984-85
Obliq
معظم البيئات
مفسّرة
الحسابات متعدّدة السريد
Luca Cardelli, DEC, 1993
Pike
Windows, Unix
مفسّرة
تطوير تطبيقات الشبكة
Fredrik Hübinette1996
Python
Windows
مفسّرة
عمومية
G. van Rossum, 1991
Ruby
Internet
مفسّرة
تطبيقات الإنترنت
Y. Matsumoto and others, 1993-95
Sather
معظم البيئات
مصرّفة
هندسة البرمجيات
S.M. Omohundro, C-C Lim, et al. UC Berkeley, 1990
Self
Unix,
Linux, Macintosh
مصرّفة
البيانيات والتشبيك وخدمات الدخل/خرج
David Ungar & Randall Smith, 1986
Simula67
معظم البيئات
مصرّفة
محاكاة الأحداث المتقطعة
Ole Dahl and Kristen Nygaard, NCC Olso, 1964-67
Sina
معظم البيئات
مفسّرة
التطبيقات الأكاديمية
A. Tripathi et al. 1989
Smalltalk
Unix
مصرّفة إلى رماز وسيط
تطوير التطبيقات
Alan Kay and Xerox Software Concepts Group, 1972
Telescript
Macintosh, Windows, Unix
مصرّفة
الواجهات البيانية وتطبيقات تبادل الرسائل ونظم الحوسبة الموزعة
General Magic, Inc, 1995
Theta
معظم البيئات
مصرّفة
هندسة البرمجيات
Barbara Liskov et al. MIT, 1994
UFO
Windows, Macintosh, Unix
مفسّرة
البرمجة التفرعية الضمنية
J. Sargeant et al. 1996
الجدول (3): أهمّ لغات البرمجة الكائنية المنحى
د ـ اللغات الوظيفية
هي لغات برمجة تُستخدم للتعبير عن البرامج بوصفها مجموعة متتالية من الوظائف واستدعاءات الوظائف. وتعتمد عموماً التصميم الوظيفي الذي يوصّف العلاقات بين الأجزاء العاملة وتفاصيل مكوناتها المنطقية وطريقة عملها بعضها مع بعض. يحوي الجدول (4) المعلومات الأساسية عن أهمّ اللغات الوظيفية.
اسم اللغة
بيئة العمل
نوع الترجمة
التطبيقات المناسبة
المصمّمون وتاريخ التصميم الأولي
Concurrent Clean
معظم البيئات
مصرّفة
تطوير التطبيقات التفرعية والموزعة
Nِcker, Plasmeijer, Smetsers et al. 1984-91
Curry
معظم البيئات
مفسّرة
تعليم المنطق والبرمجة الوظيفية واختبار التضييق والتجميع وعدم الحتمية
Michael Hanus,RWTH Aachen, Germany, 1997
Erlang
Windows, Unix
مصرّفة
تطوير التطبيقات البرمجية وخصوصاً نظم الزمن الحقيقي الضخمة
J. Armstrong and R. Virding, Ellemtel System Laboratories, 1990
Escher
معظم البيئات
مصرّفة
البحث العلمي والتعليم الأكاديمي
J.W. Lloyd, University of Bristol, 1995
FP
Unix
مفسّرة
البحث حول نموذج فون نيومان
John Backus, 1977
Haskell
معظم البيئات
مفسّرة
عمومية
Hughes, Wadler, Peterson et al. 1990
Hope
MS-DOS, Unix, Macintosh
مصرّفة
نمذجة النظم ومحاكاة الأحداث المتقطعة ونمذجة إجراءات الواقع الحقيقي
Burstall 1978, Perry, Kewley et al. 1985
Lisp
معظم البيئات
مفسّرة
الذكاء الصنعي
McCarthy et al. 1956-1961
Logo
Windows, Macintosh, Unix
مفسّرة
تعليم البرمجة وحل المسائل للأطفال
Papert et al. MIT, 1967
Miranda
Unix, Linux
مفسّرة
تطوير التطبيقات وتعليم البمجة الوظيفية
David Turner, University of Kent, 1985
ML
Unix, PC
مفسّرة
التحليل الصوري وبرهنة الصحة
Standard ML, Milner & Tofte, 1990
NAIL
معظم البيئات
مفسّرة
تطوير التطبيقات
M. A. Jenkins et al. 1981-86
REBOL
Internet
مفسّرة
تطوير التطبيقات وخدمات الشبكة
C. Sassenrath, 1997
SISAL
Unix, PC, Macintosh,, Cray
مفسّرة
المعالجة التفرعية وتحسين أداء المترجمات وتعليم البرمجة التفرعية
John Feo et al. Lawrence Livermore National Laboratory, 1990
الجدول (4): أهمّ اللغات الوظيفية
هـ ـ لغات البرمجة المتعددة والبرمجة التفرعية
أدى تطوّر عتاد الحواسيب، باتجاه تعدّد المعالجات وضرورة توزع المعطيات والعمليات عليها بين هذه المعالجات (وهذا ما يُسمى فعلياً بالمعالجة التفرعية parallel processing)، إلى ظهور لغات برمجة تسمح بهذا التوزيع على مستوى البرمجة وليس على مستوى العتاد بسبب صعوبة التعامل المباشر معه. ترتبط هذه اللغات ارتباطاً وثيقاً بنظم التشغيل التي تستطيع التعامل مع العتاد التفرعي. ويحتوي الجدول (5) المعلومات الأساسية عن أهمّ لغات البرمجة المتعدّدة والبرمجة التفرعية.
اسم اللغة
بيئة العمل
نوع الترجمة
التطبيقات المناسبة
المصمّمون وتاريخ التصميم الأولي
C*
Connection Machine CM2 & CM5
مصرّفة
تطوير التطبيقات على الحواسيب التفرعية
Thinking Machines Corp, 1987
Cilk
Unix, Linux, Windows NT
مصرّفة
بحوث البرمجة التفرعية والمترجمات التفرعية
Joerg, Leisers, et al. MIT, 1995
Concurrent Pascal
mini-computer, mainframe
مصرّفة
نظم التشغيل
P. Brinch Hansen, 1974
Esterel
Unix
مصرّفة
نمذجة وتوصيف النظم التفاعلية المتزامنة ودراسة الحسابات التفرعية تنفيذ العتاد الرقمي
G. Berry, L. Cosserat, et al. CMA France, 1983
Lucid
Unix
مفسّرة
تجريب نماذج مختلفة عن نموذج فون
لغات البرمجة
لغة البرمجة programming language هي لغة مؤلفة من مجموعة من المحارف والقواعد الناظمة لها في رموز وكلمات وتعليمات للتعبير عن الخوارزمية بهدف تنفيذها على الحاسوب. تتضمن هذه القواعد آليات التصريح عن المتحولات variables في الأنماط المختلفة مثل: نمط الأعداد الصحيحة integers - نمط الأعداد الحقيقة أو الكسرية real - المحارف characters وسلاسل المحارف strings - الجداول arrays والمصفوفات matrices - التسجيلات records - الملفات files - المؤشرات pointers، وأوامر التحكم التي تسمح بمعالجة هذه المتحولات مثل: تعليمة الإسناد (=,= والتعليمات الشرطية if then else, switch, case, go to، والتعليمات الحلقية while, do, until, for وتعليمات القراءة والكتابة من/على الشاشة أو من/على الملفات read, write, scanf, printf, input وتعليمات الحجز في الذاكرة new, malloc, free، والعمليات الأساسية مثل: العمليات الحسابية (+, -, ×, /,<<, >> ,div, mod ) والبوليانية (=>, =<>,< ,> ,=<) والمحرفية chr, ascii, ord.
لمحة تاريخية
ظهر في النصف الثاني من القرن العشرين العديد من لغات البرمجة. في البداية كان على المبرمجين كتابة برامجهم بلغة الآلة machine language، وهي لغة مرمّزة بالبتات الإثنانية binary (0, 1) يمكن للحاسوب فهمها وبرمجتها من دون اللجوء إلى أي عملية تحويل أو تصريف compilation أو تفسير interpretation. تمثّل البتات الإثنانية فيها رموز العمليات ومواقع الذاكرة وقيم المتحولات، ولكن من العسير جداً كتابة البرامج فيها. ظهر بعد ذلك لغات التجميع assembly languages التي سمحت للمبرمج بالتعبير عن العمليات برموز محرفية (مثل: ADD للتعبير عن الجمع، وSUB للتعبير عن الطرح). على الرغم من أن البرمجة بلغات التجميع أبسط بكثير من لغة الآلة إلاّ أنها بقيت بعيدة عن اللغات الطبيعية التي يسهل على الإنسان التعامل معها على نحوٍ أفضل، كما أن كل لغة تجميع ترتبط ارتباطاً وثيقاً بنوع المعالج الصغري microprocessor الذي يميز العتاد المادي لأي حاسوب. وهكذا ظهرت لغات البرمجة عالية المستوى (وتُسمى أيضاً لغات الجيل الثالث) أقرب إلى اللغات الطبيعية ومستقلة عن العتاد المادي للحاسوب. كانت أولى هذه اللغات هي لغة FORTRAN (FORmula TRANslation) التي ظهرت في عام 1956 وكانت موجهة نحو البرمجة العلمية والرياضية، ومازال العديد من المكتبات البرمجية الرياضية مكتوباً بها حتى اليوم، لكنها كانت صعبة الاستخدام في المجالات الأخرى كالبرمجة الإدارية. ثم ظهرت لغة (COBOL) COmmon Business-Oriented Language في عام 1960 وكانت كلماتها وقواعدها قريبة من اللغة الإنكليزية ومناسبة جداً للتطبيقات الإدارية، وقد استخدمت استخداماً واسعاً ومُثّل التاريخ فيها بخانتين فقط. وكان ذلك من أهم ما سبب بما سُمي بمشكلة العام 2000. ظهرت بعد ذلك لغة BASIC (Beginner’s All-purpose Symbolic Instruction Code) وانتشرت انتشاراً واسعاً في المدارس والأعمال والمنازل (مع انتشار الحواسيب الشخصية) بسبب بساطتها الشديدة وسهولة تعلّمها. وظهرت في فترة السبعينيات لغة C الشهيرة ذات المرونة الكبيرة التي تتركز تطبيقاتها في برمجة نظم التشغيل operating systems والمصرّفات compilers وبرمجيات التحكم بالمنظومات الصناعية، بسبب كونها لغة عالية المستوى تتضمن فاعلية لغة التجميع. كما ظهرت أيضاً لغة PASCAL التي اشتهرت بكونها لغة تعليمية مهيكلة دقيقة التنميط.
تميزت حقبة الثمانينيات بظهور لغات البرمجة الغرضية التوجهobject-oriented programming languages واللغات الكتلية modular languages التي عكست تطور مفاهيم هندسة البرمجيات software engineering. كانت البداية الفعلية للغات البرمجة الغرضية التوجه مع لغة 80 smalltalk، ثم ترسخت أكثر مع لغة ADA التي طورتها وزارة الدفاع الأمريكية، ثم حققت انتشارها الواسع مع لغة ++C التي دعمت لغة C الواسعة الانتشار أصلاً بمفاهيم البرمجة غرضية التوجه. أمّا في اللغات الكتلية فإن خير من يمثّلها هي لغة MODULA-2 التي هي بمنزلة تطوير للغة Pascal المهيكلة، كما يمكن عدّ لغة ADA من أهم هذه اللغات.
شهدت حقبة التسعينيات تطورين بارزين هما: الوسائط المتعددة والفائقة multimedia and hypermedia وشبكة الإنترنت العالمية وخدمتها الأساسية الشبكة العنكبوتية العالمية <world wide web أو «الوب» اختصاراً، وقد انعكس ذلك مباشرةً على تطوّر لغات البرمجة. لذلك ظهرت بدءاً من النصف الأول من هذه الحقبة لغات البرمجة المرئية visual programming languages، وهي لغات منتشرة أصلاً لكنها طُعّمت بمزايا التعامل مع الواجهات الرسومية والاستجابة إلى الأحداث التي يقوم بها المستخدم ولذلك يمكن تسميتها باللغات الموجّهة بالأحداث event-driven languages مثل: لغة visual basic - لغة visual C - لغة delphi - لغة visual C++ .
ولعلّ أهم ما يميز هذه الحقبة ظهور لغة Java [ر] التي تحوي دعماً خاصاً لكي تنفذ من خلال الوب. وهي لغة كائنية المنحى تشبه كثيراً لغة ++C وإن كانت تختلف عنها بأمور جوهرية أهمها عدم تقبل تعليمات لغة C. يولّد تصريف لغة جافا برامج تنفيذية صغيرة يسهل تحميلها عبر الإنترنت. كما ظهر أيضاً العديد من لغات البرمجة المرتبطة ارتباطاً وثيقاً بالإنترنت: مثل اللغات الخطاطية Javascript, JScript, VBScript المستخدمة في إعطاء صفحات الوب إمكانات ديناميكية وتخاطبية مع المستخدم من خلال دمجها مع لغات التأشير[ر] markup languages المستخدمة أصلاً لتصميم هذه الصفحات (كلغتي HTML EXML) - ولغات برمجة أخرى تفيد في الربط بين صفحات الوب وقواعد المعطيات databases الموجودة على المخدّمات servers مثل لغة PERL ولغة ASP.
تنبغي الإشارة أيضاً إلى أنه قد ظهر أيضاً في النصف الثاني من القرن العشرين العديد من اللغات العالية المستوى الخاصة التي تملك ميزات مناسبة لتطبيقات محدّدة. هناك من الأمثلة على هذه اللغات: لغة APT (Automatically Programmed Tools) المستخدمة في التحكم الرقمي بالآلات الصناعية، ولغة GPSS (General Purpose Simulation System) المستخدمة في بناء نماذج المحاكاة، ولغة LISP (LISt Processing) المناسبة لمعالجة الرموز والقوائم والمستخدمة في تطبيقات الذكاء الصنعي[ر] artificial intelligence، ولغة PROLOG (PROgrammation LOGique) المحاكية للجمل المنطقية من الدرجة الأولى والمستخدمة في تطبيقات معالجة اللغات الطبيعية natural language processing.
ظهرت أيضاً ما سُميت لغات بالجيل الرابع 4 th generation languages، وهي لغات أكثر قرباً إلى اللغات الطبيعية وموجهة نحو الاستفسار والبحث في قواعد المعطيات مثل لغة الطلبات المهيكلة structured query language (SQL) وFOCUS و dBase.
مكونات لغة البرمجة:
على الرغم من اختلاف لغات البرمجة فيما بينها إلا أنها جميعاً تعمل وفق مبدأ رئيسي واحد، فالبرنامج الحاسوبي المكتوب بلغة برمجة ما، يتألف من سلسلة من الأوامر والتعليمات التي يجب على الآلة أن تنفذها. تنفذ الآلة المعلومات بترتيب قراءتها لها من الملف (أي من الأعلى إلى الأسفل) إلى أن تصل إلى تعليمات تفرّع branching instructions توجهها نحو تنفيذ مجموعة تعليمات من دون مجموعة أخرى. ويستمر تنفيذ التعليمات بهذا الشكل حتى بلوغ نهاية البرنامج.
1ـ مفهوم المتحول variable:
في معظم لغات البرمجة تُستخدم المتحولات. يعبّر المتحول عن مكان تخزين المعطيات في الذاكرة، ويقوم المبرمج بإعطائه اسماً، ويمكنه أن يضع فيه المحتوى المناسب. على سبيل المثال يمكن أن يُسمى متحول ما بـ xy ويوضع فيه العدد 8.
2ـ نمط المعطيات data type:
في بعض لغات البرمجة، يمكن أن يدل متحول ما على أي نمط من المعطيات (أي يمكن أن يخزن فيه عدد صحيح أو محرف)، تُسمى مثل هذه اللغات لغات غير منَمَّطة non typed languages. توجد لغات أكثر تطوراً مثل (C أو جافا) وهي لغات منمّطةtyped languages، أي إن لكل متحول فيها نمط خاص للمعطيات التي يمكن أن يحتويها، وفي لحظة التصريح عن تسمية متحول ما، يجب أن يُبيَّن نمط المعطيات الذي يجب أن يحتويه هذا المتحول. ويرتبط نمط المتحول بعدد الثمانيّات التي يجب أن يحجزها المترجم للمتحول -وهو عدد الثمانيّات التي ستُرَمَّز المعطيات ضمنها- وبطريقة ترميزها.
3ـ بنى المعطيات data structures:
توفّر معظم لغات البرمجة طرائق لتجميع المعطيات في بنى أكثر تعقيداً، فيجري تعريف نمط جديد غير موجود في أصل اللغة باستخدام مفاهيم المصفوفات، والقوائم، والمكدسات والملفات، ويُعطى اسماً جديداً.
كما تسمح اللغات غرضية التوجه object oriented languages بتعريف بنى معطيات جديدة تسمى أغراضاً objects لها بنية داخلية خاصة وسلوك خاص.
4ـ النحو syntax:
تحتاج لغات البرمجة إلى قواعد نحوية، إذ لا يمكن أن تُكتب الأوامر للحاسوب كيفما اتفق. وهكذا تعرّف اللغة عبارات أساسيةelementary statements تستخدم كلمات مفتاحية وبنى نحوية خاصة.
وتختلف اللغات بعضها عن بعض بطرق تجميع هذه العبارات الأساسية، وهكذا يمكن كتابة برامج تشمل أنواعاً مختلفة من المدخلات، كما تستطيع أن تنفذ عدة أشكال من تدفق التحكم (التفرّع branching، الحلقات loops، الرجوع إلى الوراء backtracking).
تصنيف لغات البرمجة
يمكن تصنيف لغات البرمجة وفق عدة معايير مختلفة مثل: طريقة التصميم والبرمجة - الحقبة الزمنية - سهولة التعلّم - طبيعة التطبيقات المناسبة - قدرتها التعبيرية - وغيرها. قد يكون من الأنسب تصنيف هذه اللغات بحسب المعيار الأول على النحو الآتي:
آـ اللغات الإجرائية
تتميز هذه اللغات بطريقة التصميم البرمجي من الأعلى إلى الأسفل حيث تجري تجزئة المسألة المطلوبة إلى مسائل جزئية، ثم تجزئة المسائل الجزئية إلى مسائل أصغر، وهكذا حتى الوصول إلى مسائل يمكن برمجتها مباشرةً بوساطة إجراءات procedures أو توابع functions. ويكون إجراء المسألة الجزئية في مستوى ما تجميعاً لإجراءات المسائل التي يتألف منها، ويصبح بالتالي البرنامج تجميعاً لكل المسائل الجزئية إضافةً إلى سيناريو استدعاء هذه الإجراءات عند الحاجة. تتضمّن معظم هذه اللغات أنماط المعطيات الأساسية وأوامر التحكم الأساسية. ويوضح الجدول (1) المعلومات الأساسية عن أهمّ لغات البرمجة الإجرائية.
اسم اللغة
بيئة العمل
نوع الترجمة
التطبيقات المناسبة
المصمّمون وتاريخ التصميم الأولي
ABC
Unix, Macintosh, MS-DOS
مفسّرة
مفسّرات اللغات الطبيعية وقواعد البيانات
Geurts & Meertens, 1975-82
Alef
Plan 9
مصرّفة
تطوير تطبيقات الشبكة
P. Winterbottom et al. Bell Labs (Lucent), 1995
Algol
DOS,
Mainframe
مصرّفة
علمية وصناعية عمومية
J. Backus and P. Naur, 1958-60.
Basic
DOS
مفسّرة
عمومية وتعليمية
John Kemeny & Thomas Kurtz, Dartmouth, 1963-64
BCPL
Unix, Amiga, MS-DOS
مصرّفة إلى رماز خاص
تطوير التطبيقات الصغيرة وخصوصاً لنظم التشغيل
Martin Richards, Cambridge University, 1966-67
Bliss
PDP, DECsystem, VAX
مفسّرة
تطوير تطبيقات لنظم التشغيل
Wulf, Russell et al. DEC, 1970
C
Unix, PC, Macintosh, mainframe
مصرّفة
عمومية وجيدة في نظم التشغيل والمترجمات
Ritchie & Thompson, 1972-73; Kernighan & Ritchie, 1978
CLU
Unix
مصرّفة
عمومية وجيدة خصوصاً في تصميم لغات البرمجة
B. Liskov et al.
1974-77
CMS-2
معظم البيئات
مصرّفة
تطبيقات الزمن الحقيقي المضمّنة للبحرية الأمريكية
Rand Corporation, US Navy, 1974
Cobol
Unix, DOS, Windows
مصرّفة
عمومية وجيدة في الأتمتة الإدارية وفي مجال الأعمال كالمصارف والمصانع
US DOD GPO, 1960; CODASYL Committee, 1960.
Coral 66
VAX, VMS
مصرّفة
تطبيقات الزمن الحقيقي
Royal Signals & Radar Establishment, Malvern UK, 1964-66
cT
Unix,
Windows, Macintosh
مصرّفة
تطبيقات الإحياء animation وبناء الواجهات التخاطبية متعددة الوسائط multimedia
Andersen, Sherwood et al. Carnegie-Mellon, 1990-94
Fortran,
Unix, Dos, VAX
مصرّفة
التطبيقات العلمية والرياضية وحسابات الفاصلة العائمة
John Backus, IBM, 1954-57
Jovial
DOS,
Mainframe
مصرّفة
تطوير التطبيقات الكبيرة في هندسة البرمجيات ونظم الزمن الحقيقي
Jules Schwartz et al. SDC, 1959-60
ICI
Unix, DOS, Windows, Macintosh
مفسّرة
تطوير التطبيقات
Tim Long, 1992
Icon
UNIX, DOS, OS/2, VMS, Windows, Macintosh
مفسّرة
معالجة المعطيات وسلاسل المحارف
R.E. Griswold, 1977
InterCall
DOS, Unix;
Mainframe
مصرّفة
عمومية
D.R. Woods and J.M. Lyons, 1972
Limbo
Inferno,
Unix, Windows, Plan9
مصرّفة إلى رماز ثماني
تطوير التطبيقات والنظم المحمولة embedded systems
Doward, Winterbottom, & Pike, Lucent Technologies, 1996
Modula-2
Unix, PC, VMS
مصرّفة
عمومية وجيدة في تعلّم البرمجة وصيانة تطبيقات هندسة البرمجيات
Niklaus Wirth, 1980
Pascal
Unix, PC, Macintosh
مصرّفة
عمومية وجيدة خصوصاً في تعلّم البرمجة
Niklaus Wirth, 1968-71
PL/1,
PLC
mainframe, WindowsNT, OS/2, Unix
مصرّفة
عمومية
George Radin, IBM, 1964
SETL
DOS, Unix, Macintosh
مصرّفة
تطبيقات المجموعات
Jacob T. Schwartz, 1969; Courant Institute, 1970
Terse
DOS, Windows
مصرّفة
تطبيقات المعالجة الصغرية Intel x86
Jim Neil, 1987
Turing
Windows, Macintosh, Unix
مصرّفة
تعليمية
R.C. Holt et al. Univ. of Toronto, 1987
الجدول (1): أهمّ لغات البرمجة الإجرائية
ب ـ لغات البرمجة الرياضية ولغات المحاكاة
هي لغات مختصة بالحسابات العلمية والرياضية والهندسية وطرق نمذجة ومحاكاة النظم، ولذلك فهي تحوي غالباً مجموعة صغيرة نسبياً من ميزات لغات البرمجة التقليدية، ومجموعة كبيرة من التعليمات والأدوات الرياضية اللازمة لزيادة فاعلية هذه التطبيقات. يحوي الجدول (2) المعلومات الأساسية عن أهمّ لغات البرمجة الرياضية ولغات المحاكاة.
اسم اللغة
بيئة العمل
نوع الترجمة
التطبيقات المناسبة
المصمّمون وتاريخ التصميم الأولي
APL
معظم البيئات
مفسّرة
الحسابات الرياضية ومعالجة المصفوفات
Iverson et al. IBM, 1960s
CSP
DOS
مفسّرة
وصف ومحاكاة الحسابات التفرعية
C.A.R. Hoare, 1978
Formac
معظم البيئات
مصرّفة
الحسابات العلمية والهندسية
Jean Sammet et al. IBM, 1964.
GPSS
Mainframe
مصرّفة
نمذجة النظم ومحاكاة الأحداث المتقطعة ونمذجة إجراءات الواقع الحقيقي
G. Gordon, IBM, 1961
Magma
Unix, PC
مفسّرة
برمجة رياضية عالية المستوى
J. Cannon, et al. 1993
Mathematica
Windows, Macintosh, Unix
مفسّرة
التطبيقات الرياضية الرمزية والبيانية الأكاديمية والصناعية
Stephen Wolfram, 1987
Reduce
معظم البيئات
مفسّرة
الجبر والرياضيات الرموزية
Anthony Hearn, RAND Corp, 1963
S
Unix, PC
مفسّرة
الإحصاء والنمذجة الرقمية وتحليل المعطيات والمحاكاة
R.A. Becker et al. 1977-84
SLAM
Unix, mainframe, Windows
مفسّرة
نمذجة النظم المتقطعة ومحاكاة جدولة الخدمات والتصنيع واللوجستية العسكرية وبنيان الحواسيب والأرتال.
A.A.B. Pritsker et al. 1976-77
SmiScript
معظم البيئات
مفسّرة
نمذجة الأحداث المتقطعة والمستمرة
H. Markowitz et al. Rand Corporation, 1962
VHDL
Unix
مفسّرة
الدارات الرقمية المتكاملة
M.R. Shahdad et al. 1985; IEEE Standard 1076, 1987
Yorick
Unix, Linux, Macintosh,, Windows
مفسّرة
تحليل المعطيات والبيانيات
Lawrence Livermore National Laboratory, 1994
الجدول (2): أهمّ لغات البرمجة الرياضية ولغات المحاكاة
ج ـ لغات البرمجة غرضية التوجه
تتميز هذه اللغات بطريقة التصميم البرمجي من الأسفل إلى الأعلى، حيث يجري أولاً تعريف الفئات classes التي تُستخدم في توليد الأغراض objects، ثم يجري بناء البرنامج كسيناريو لتبادل الأغراض فيما بينها الرسائل التي تؤدي إلى تحريض الطرائق methods التي تنفّذها، بغض النظر عن كيفية بنائها في الأغراض. تتضمن هذه اللغات المفاهيم التالية: مبدأ الكبسلة Encapsulation أو تجميع المعطيات مع الطرق التي تعمل عليها انتساخ instantiation الأغراض عن الفئات - وراثة inheritance الخصائص والطرق - مبدأ إعادة الاستخدام reusability - إخفاء المعطيات data hiding - مفاهيم التحميل الزائد وإعادة التعريف والتجريد، ويحوي الجدول (3) المعلومات الأساسية عن أهمّ اللغات الكائنية المنحى.
اسم اللغة
بيئة العمل
نوع الترجمة
التطبيقات المناسبة
المصمّمون وتاريخ التصميم الأولي
Ada
Unix, Windows, DOS
مصرّفة
هندسة البرمجيات والبرامج الضخمة
Jean Ichibah et al. 1980-1983
BETA
معظم البيئات
مصرّفة
تطوير التطبيقات البرمجية
Madsen et al. Aarhus Univesity, 1983
C++
PC,
Unix
مصرّفة
علمية وصناعية عمومية
Bjarne Stoustrup, AT&T Bell Labs, 1982-85
Cecil
Unix, Linux
مصرّفة
تطوير التطبيقات البرمجية الكبيرة
Craig Chambers, 1992
Claire
PC,
Unix, Macintosh
مصرّفة
بحوث اللغات والبرمجة الخاصة
F. Laburthe, Y. Casuau, ENS Paris, 1995
Dyaln
Unix, Macintosh, Windows
مفسّرة
تطوير التطبيقات وبرمجة النظم
Apple Computer, 1992
Dyance
معظم البيئات
مصرّفة
تطوير التطبيقات العمومية
B. McBride, Algorithms Corporation, 1993-96
Eiffel
معظم البيئات
مصرّفة إلى رماز ثماني
عمومية
Bertrand Meyers, 1986-92
Java
معظم البيئات
مصرّفة إلى رماز ثماني
عمومية
Gosling et al. Sun Microsystems, 1994-95
Leda
Unix, Windows 95/NT
مصرّفة
عمومية
T.A. Budd, Oregon State University, 1988
Modula-3
Unix, Linux, WindowsNT
مصرّفة
هندسة البرمجيات وتعليم علوم المعلوماتية
Luca Cardelli et al. Olivetti and DEC, 1988
Oberon
Unix, Linux, PC, Macintosh
مصرّفة
تعليم علوم المعلوماتية
Wirth and Gutknecht, ETH Zurich, 1985-88
Objective-C
NeXT, OpenStep
مصرّفة
عمومية
Brad J. Cox, 1984-85
Obliq
معظم البيئات
مفسّرة
الحسابات متعدّدة السريد
Luca Cardelli, DEC, 1993
Pike
Windows, Unix
مفسّرة
تطوير تطبيقات الشبكة
Fredrik Hübinette1996
Python
Windows
مفسّرة
عمومية
G. van Rossum, 1991
Ruby
Internet
مفسّرة
تطبيقات الإنترنت
Y. Matsumoto and others, 1993-95
Sather
معظم البيئات
مصرّفة
هندسة البرمجيات
S.M. Omohundro, C-C Lim, et al. UC Berkeley, 1990
Self
Unix,
Linux, Macintosh
مصرّفة
البيانيات والتشبيك وخدمات الدخل/خرج
David Ungar & Randall Smith, 1986
Simula67
معظم البيئات
مصرّفة
محاكاة الأحداث المتقطعة
Ole Dahl and Kristen Nygaard, NCC Olso, 1964-67
Sina
معظم البيئات
مفسّرة
التطبيقات الأكاديمية
A. Tripathi et al. 1989
Smalltalk
Unix
مصرّفة إلى رماز وسيط
تطوير التطبيقات
Alan Kay and Xerox Software Concepts Group, 1972
Telescript
Macintosh, Windows, Unix
مصرّفة
الواجهات البيانية وتطبيقات تبادل الرسائل ونظم الحوسبة الموزعة
General Magic, Inc, 1995
Theta
معظم البيئات
مصرّفة
هندسة البرمجيات
Barbara Liskov et al. MIT, 1994
UFO
Windows, Macintosh, Unix
مفسّرة
البرمجة التفرعية الضمنية
J. Sargeant et al. 1996
الجدول (3): أهمّ لغات البرمجة الكائنية المنحى
د ـ اللغات الوظيفية
هي لغات برمجة تُستخدم للتعبير عن البرامج بوصفها مجموعة متتالية من الوظائف واستدعاءات الوظائف. وتعتمد عموماً التصميم الوظيفي الذي يوصّف العلاقات بين الأجزاء العاملة وتفاصيل مكوناتها المنطقية وطريقة عملها بعضها مع بعض. يحوي الجدول (4) المعلومات الأساسية عن أهمّ اللغات الوظيفية.
اسم اللغة
بيئة العمل
نوع الترجمة
التطبيقات المناسبة
المصمّمون وتاريخ التصميم الأولي
Concurrent Clean
معظم البيئات
مصرّفة
تطوير التطبيقات التفرعية والموزعة
Nِcker, Plasmeijer, Smetsers et al. 1984-91
Curry
معظم البيئات
مفسّرة
تعليم المنطق والبرمجة الوظيفية واختبار التضييق والتجميع وعدم الحتمية
Michael Hanus,RWTH Aachen, Germany, 1997
Erlang
Windows, Unix
مصرّفة
تطوير التطبيقات البرمجية وخصوصاً نظم الزمن الحقيقي الضخمة
J. Armstrong and R. Virding, Ellemtel System Laboratories, 1990
Escher
معظم البيئات
مصرّفة
البحث العلمي والتعليم الأكاديمي
J.W. Lloyd, University of Bristol, 1995
FP
Unix
مفسّرة
البحث حول نموذج فون نيومان
John Backus, 1977
Haskell
معظم البيئات
مفسّرة
عمومية
Hughes, Wadler, Peterson et al. 1990
Hope
MS-DOS, Unix, Macintosh
مصرّفة
نمذجة النظم ومحاكاة الأحداث المتقطعة ونمذجة إجراءات الواقع الحقيقي
Burstall 1978, Perry, Kewley et al. 1985
Lisp
معظم البيئات
مفسّرة
الذكاء الصنعي
McCarthy et al. 1956-1961
Logo
Windows, Macintosh, Unix
مفسّرة
تعليم البرمجة وحل المسائل للأطفال
Papert et al. MIT, 1967
Miranda
Unix, Linux
مفسّرة
تطوير التطبيقات وتعليم البمجة الوظيفية
David Turner, University of Kent, 1985
ML
Unix, PC
مفسّرة
التحليل الصوري وبرهنة الصحة
Standard ML, Milner & Tofte, 1990
NAIL
معظم البيئات
مفسّرة
تطوير التطبيقات
M. A. Jenkins et al. 1981-86
REBOL
Internet
مفسّرة
تطوير التطبيقات وخدمات الشبكة
C. Sassenrath, 1997
SISAL
Unix, PC, Macintosh,, Cray
مفسّرة
المعالجة التفرعية وتحسين أداء المترجمات وتعليم البرمجة التفرعية
John Feo et al. Lawrence Livermore National Laboratory, 1990
الجدول (4): أهمّ اللغات الوظيفية
هـ ـ لغات البرمجة المتعددة والبرمجة التفرعية
أدى تطوّر عتاد الحواسيب، باتجاه تعدّد المعالجات وضرورة توزع المعطيات والعمليات عليها بين هذه المعالجات (وهذا ما يُسمى فعلياً بالمعالجة التفرعية parallel processing)، إلى ظهور لغات برمجة تسمح بهذا التوزيع على مستوى البرمجة وليس على مستوى العتاد بسبب صعوبة التعامل المباشر معه. ترتبط هذه اللغات ارتباطاً وثيقاً بنظم التشغيل التي تستطيع التعامل مع العتاد التفرعي. ويحتوي الجدول (5) المعلومات الأساسية عن أهمّ لغات البرمجة المتعدّدة والبرمجة التفرعية.
اسم اللغة
بيئة العمل
نوع الترجمة
التطبيقات المناسبة
المصمّمون وتاريخ التصميم الأولي
C*
Connection Machine CM2 & CM5
مصرّفة
تطوير التطبيقات على الحواسيب التفرعية
Thinking Machines Corp, 1987
Cilk
Unix, Linux, Windows NT
مصرّفة
بحوث البرمجة التفرعية والمترجمات التفرعية
Joerg, Leisers, et al. MIT, 1995
Concurrent Pascal
mini-computer, mainframe
مصرّفة
نظم التشغيل
P. Brinch Hansen, 1974
Esterel
Unix
مصرّفة
نمذجة وتوصيف النظم التفاعلية المتزامنة ودراسة الحسابات التفرعية تنفيذ العتاد الرقمي
G. Berry, L. Cosserat, et al. CMA France, 1983
Lucid
Unix
مفسّرة
تجريب نماذج مختلفة عن نموذج فون