برنامج حاسوبي

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

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

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

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

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

مثال على برنامج حاسوبي

يُستخدم برنامج "مرحباً بالعالم!" لتوضيح البنية الأساسية للغة. وقد تم تقييد بنية لغة BASIC (1964) عمدًا لتسهيل تعلمها. [ 7 ] على سبيل المثال، لا يتم تعريف المتغيرات قبل استخدامها. [ 8 ] كما يتم تهيئة المتغيرات تلقائيًا إلى الصفر. [ 8 ] إليك مثال لبرنامج حاسوبي مكتوب بلغة BASIC لحساب متوسط ​​قائمة من الأرقام: [ 9 ]

10 أدخل "كم عدد الأرقام المراد حساب متوسطها؟" ، A 20 من أجل I = 1 إلى A 30 أدخل "أدخل الرقم:" ، B 40 دع C = C + B 50 التالي I 60 دع D = C / A 70 اطبع "المتوسط ​​هو" ، D 80 نهاية

بمجرد تعلم آليات برمجة الحاسوب الأساسية، تصبح لغات أكثر تطوراً وقوة متاحة لبناء أنظمة حاسوبية كبيرة. [ 10 ]

تاريخ

إن التحسينات في تطوير البرمجيات هي نتيجة لتحسينات في أجهزة الكمبيوتر . في كل مرحلة من مراحل تاريخ الأجهزة، تغيرت مهمة برمجة الكمبيوتر بشكل كبير.

محرك تحليلي

وصف لوفليس من الملاحظة G

في عام 1837، ألهم نول جاكارد تشارلز باباج لمحاولة بناء المحرك التحليلي . [ 11 ] استُعيرت أسماء مكونات جهاز الحساب من صناعة النسيج. في صناعة النسيج، كان الغزل يُجلب من المخزن إلى المطحنة. احتوى الجهاز على مخزن يتكون من ذاكرة لحفظ 1000 رقم، كل منها مكون من 50 خانة عشرية. [ 12 ] نُقلت الأرقام من المخزن إلى المطحنة للمعالجة. بُرمج المحرك باستخدام مجموعتين من البطاقات المثقبة. تُوجه إحدى المجموعتين العملية، بينما تُدخل المجموعة الأخرى المتغيرات. [ 11 ] [ 13 ] مع ذلك، لم تعمل آلاف العجلات المسننة والتروس معًا بشكل كامل. [ 14 ]

عملت آدا لوفليس مع تشارلز باباج على وضع وصف للمحرك التحليلي (1843). [ 15 ] تضمن الوصف الملاحظة "ج" التي شرحت بالتفصيل طريقة حساب أعداد برنولي باستخدام المحرك التحليلي. ويعتبر بعض المؤرخين هذه الملاحظة أول برنامج حاسوبي في العالم . [ 14 ]

آلة تورينج العالمية

في عام ١٩٣٦، قدّم آلان تورينج آلة تورينج العالمية ، وهي جهاز نظري قادر على محاكاة أي عملية حسابية. [ ١٦ ] وهي آلة ذات حالات محدودة مزودة بشريط قراءة/كتابة لا نهائي الطول. تستطيع الآلة تحريك الشريط ذهابًا وإيابًا، مُغيرةً محتوياته أثناء تنفيذ الخوارزمية . تبدأ الآلة من الحالة الابتدائية، وتمر بسلسلة من الخطوات، وتتوقف عند الوصول إلى حالة التوقف. [ ١٧ ] جميع الحواسيب الحالية كاملة تورينج . [ ١٨ ]

إينياك

غلين أ. بيك يقوم بتغيير أنبوب في جهاز إينياك

تم بناء الحاسوب الإلكتروني المتكامل العددي (ENIAC) بين يوليو 1943 وخريف 1945. كان حاسوبًا متعدد الأغراض كاملًا من نوع تورينج، يستخدم 17468 صمامًا مفرغًا لإنشاء الدوائر . في جوهره، كان عبارة عن سلسلة من دوائر باسكالين موصولة ببعضها. [ 19 ] بلغ وزن وحداته الأربعين 30 طنًا، وشغلت مساحة 1800 قدم مربع (167 مترًا مربعًا ) ، واستهلكت 650 دولارًا أمريكيًا في الساعة ( بقيمة عملة الأربعينيات ) من الكهرباء في وضع الخمول. [ 19 ] احتوى على 20 مُراكمًا من النوع العشري . استغرقت برمجة ENIAC ما يصل إلى شهرين. [ 19 ] كانت ثلاث طاولات وظائف مزودة بعجلات، وكان لا بد من نقلها إلى لوحات وظائف ثابتة. تم توصيل طاولات الوظائف بلوحات الوظائف عن طريق توصيل كابلات سوداء سميكة بلوحات توصيل . احتوت كل طاولة وظائف على 728 مقبضًا دوارًا. تضمنت برمجة جهاز إينياك أيضًا ضبط بعض المفاتيح البالغ عددها 3000 مفتاح. واستغرق تصحيح أخطاء البرنامج أسبوعًا. [ 20 ] وقد عمل الجهاز من عام 1947 حتى عام 1955 في ميدان اختبار أبردين ، حيث كان يقوم بحساب معايير القنبلة الهيدروجينية، والتنبؤ بأنماط الطقس، وإنتاج جداول إطلاق النار لتوجيه مدافع المدفعية. [ 21 ] 

أجهزة الكمبيوتر ذات البرامج المخزنة

بدلاً من توصيل الأسلاك وتشغيل المفاتيح، يقوم الحاسوب ذو البرنامج المخزن بتحميل تعليماته في الذاكرة تمامًا كما يُحمّل بياناته. [ 22 ] ونتيجةً لذلك، أصبح بالإمكان برمجة الحاسوب بسرعة وإجراء العمليات الحسابية بسرعات فائقة. [ 23 ] قام بريسبر إيكرت وجون موشلي ببناء حاسوب إينياك. وقدّم المهندسان مفهوم البرنامج المخزن في مذكرة من ثلاث صفحات مؤرخة في فبراير 1944. [ 24 ] وفي وقت لاحق، في سبتمبر 1944، بدأ جون فون نيومان العمل على مشروع إينياك. وفي 30 يونيو 1945، نشر فون نيومان المسودة الأولى لتقرير عن حاسوب إيدفاك ، والذي ساوى فيه بين بنية الحاسوب وبنية الدماغ البشري. [ 23 ] عُرف هذا التصميم باسم بنية فون نيومان . وقد تم تطبيق هذه البنية في آنٍ واحد في بناء حاسوبي إيدفاك وإيدساك في عام 1949. [ 25 ] [ 26 ]

كان نظام IBM System/360 (1964) عائلة من الحواسيب، تشترك جميعها في نفس بنية مجموعة التعليمات . وكان الطراز 20 أصغرها وأقلها تكلفة. وكان بإمكان العملاء ترقية برامج التطبيقات والاحتفاظ بها . [ 27 ] أما الطراز 195 فكان الأكثر تميزًا. تميز كل طراز من طرازات System/360 بخاصية البرمجة المتعددة [ 27 ] ، أي وجود عدة عمليات في الذاكرة في آن واحد. فعندما تنتظر إحدى العمليات إدخال/إخراج ، يمكن لعملية أخرى إجراء الحساب.

خططت شركة IBM لبرمجة كل نموذج باستخدام لغة PL/I . [ 28 ] شُكّلت لجنة ضمت مبرمجين بلغات COBOL و FORTRAN و ALGOL . كان الهدف هو تطوير لغة شاملة وسهلة الاستخدام وقابلة للتوسيع، لتحل محل لغتي COBOL وFORTRAN. [ 28 ] وكانت النتيجة لغة كبيرة ومعقدة استغرقت وقتًا طويلاً في التجميع . [ 29 ]

مفاتيح الإدخال اليدوي في جهاز Data General Nova 3، الذي تم تصنيعه في منتصف سبعينيات القرن العشرين.

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

التكامل واسع النطاق للغاية

رقاقة دارة متكاملة بتقنية VLSI

كان اختراع دائرة التكامل واسع النطاق للغاية (VLSI) (1964) بمثابة علامة فارقة في تطوير البرمجيات.

حقق روبرت نويس ، المؤسس المشارك لشركتي فيرتشايلد لأشباه الموصلات (1957) وإنتل (1968)، تحسينًا تقنيًا في إنتاج ترانزستورات تأثير المجال (1963). [ 31 ] يهدف هذا التحسين إلى تغيير المقاومة الكهربائية والتوصيلية لوصلة أشباه الموصلات . في البداية، تُحوّل معادن السيليكات الطبيعية إلى قضبان من السيليكون متعدد التبلور باستخدام عملية سيمنز . [ 32 ] ثم تُحوّل عملية تشوخرالسكي هذه القضبان إلى بلورة أحادية التبلور من السيليكون . [ 33 ] بعد ذلك ، تُقطّع البلورة إلى شرائح رقيقة لتشكيل ركيزة رقاقة . ثم تُدمج الترانزستورات أحادية القطب والمكثفات والثنائيات والمقاومات [ 34 ] على الرقاقة باستخدام عملية الطباعة الضوئية المستوية ، لتكوين مصفوفة من ترانزستورات أشباه الموصلات المعدنية المؤكسدة (MOS). يُعد ترانزستور MOS المكون الأساسي في رقائق الدوائر المتكاملة . [ 31 ]

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

في عام 1969، تعاقدت شركة Busicom اليابانية المتخصصة في صناعة الآلات الحاسبة مع شركة Intel لتصنيع 12 شريحة دوائر متكاملة، كل منها مخصصة لوظيفة محددة في الآلة الحاسبة. أدرك تيد هوف ، المهندس المكلف بهذه المهمة، أنه يستطيع بناء شريحة واحدة قادرة على تنفيذ برامج حاسوبية لأداء وظائف الآلة الحاسبة الاثنتي عشرة. [ 35 ] سُميت الشريحة الناتجة بمعالج Intel 4004 الدقيق .

لم يكن معالج وحدة المعالجة المركزية (CPU) الخاص بنظام IBM System/360 (1964) معالجًا دقيقًا.

يُستخدم مصطلحا المعالج الدقيق ووحدة المعالجة المركزية (CPU) الآن بشكل متبادل. مع ذلك، فإن وحدات المعالجة المركزية أقدم من المعالجات الدقيقة. على سبيل المثال، كان نظام IBM System/360 (1964) يحتوي على وحدة معالجة مركزية مصنوعة من لوحات دوائر تحتوي على مكونات منفصلة على ركائز خزفية . [ 36 ]

سلسلة x86

استخدم جهاز الكمبيوتر الشخصي الأصلي من شركة IBM (1981) معالج Intel 8088 الدقيق.

في عام 1978، بدأت بيئة تطوير البرمجيات الحديثة عندما قامت شركة إنتل بترقية معالجها Intel 8080 إلى Intel 8086. ثم قامت إنتل بتبسيط معالج Intel 8086 لتصنيع معالج Intel 8088 الأرخص سعرًا . [ 37 ] تبنت شركة IBM معالج Intel 8088 عند دخولها سوق الحواسيب الشخصية (1981). ومع ازدياد طلب المستهلكين على الحواسيب الشخصية، ازداد تطوير معالجات إنتل الدقيقة. يُعرف هذا التطور المتواصل بسلسلة x86 . لغة التجميع x86 هي عائلة من تعليمات الآلة المتوافقة مع الإصدارات السابقة . تم الاحتفاظ بتعليمات الآلة التي تم إنشاؤها في المعالجات الدقيقة السابقة خلال ترقيات المعالجات الدقيقة. مكّن هذا المستهلكين من شراء حواسيب جديدة دون الحاجة إلى شراء برامج تطبيقية جديدة . الفئات الرئيسية للتعليمات هي: [ د ]

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

كان جهاز DEC VT100 (1978) جهاز طرفي حاسوبي واسع الاستخدام .

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

نماذج ولغات البرمجة

توجد خصائص لغات البرمجة لتوفير لبنات بناء يتم دمجها للتعبير عن مُثُل البرمجة. [ 38 ] من الناحية المثالية، ينبغي أن تكون لغة البرمجة: [ 38 ]

  • عبّر عن الأفكار مباشرة في الكود.
  • التعبير عن الأفكار المستقلة بشكل مستقل.
  • عبّر عن العلاقات بين الأفكار مباشرة في الكود.
  • اجمع الأفكار بحرية.
  • لا تجمع الأفكار إلا عندما يكون الجمع بينها منطقياً.
  • عبّر عن الأفكار البسيطة ببساطة.

يمكن تصنيف أسلوب البرمجة في لغة البرمجة لتوفير هذه اللبنات الأساسية إلى نماذج برمجية . [ 39 ] على سبيل المثال، قد تختلف النماذج المختلفة فيما يلي: [ 39 ]

وقد ساهم كل أسلوب من أساليب البرمجة هذه في نشأة لغات برمجة مختلفة . [ 39 ]

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

تستمد لغات البرمجة أساسها من اللغات الرسمية . [ 41 ] والهدف من تعريف الحل باستخدام لغته الرسمية هو توليد خوارزمية لحل المشكلة الأساسية. [ 41 ] الخوارزمية هي سلسلة من التعليمات البسيطة التي تحل مشكلة ما . [ 42 ]

أجيال من لغات البرمجة

شاشة مراقبة لغة الآلة على معالج دقيق W65C816S

بدأ تطور لغات البرمجة عندما استخدم جهاز EDSAC (1949) أول برنامج حاسوبي مخزن في بنيته فون نيومان . [ 43 ] وكانت برمجة جهاز EDSAC من الجيل الأول للغات البرمجة . [ 44 ]

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

اللغات الإجرائية

برنامج حاسوبي مكتوب بلغة أمرية

تحدد اللغات الإجرائية خوارزمية تسلسلية باستخدام التصريحات والتعبيرات والعبارات : [ 52 ]

  • يُعرّف التصريح اسم متغير لبرنامج الكمبيوتر ويُسنده إلى نوع بيانات [ 53 ] - على سبيل المثال:var x: integer;
  • ينتج عن التعبير قيمة - على سبيل المثال: 2 + 2ينتج 4
  • قد تقوم عبارة ما بتعيين تعبير لمتغير أو استخدام قيمة متغير لتغيير مسار التحكم في البرنامج - على سبيل المثال:x := 2 + 2; if x = 4 then do_something();

فورتران

تم الكشف عن لغة فورتران (1958) تحت اسم "نظام ترجمة الصيغ الرياضية من آي بي إم". صُممت لإجراء العمليات الحسابية العلمية، دون إمكانية التعامل مع النصوص . إلى جانب التصريحات والتعبيرات والعبارات ، دعمت اللغة ما يلي :

لقد نجح ذلك للأسباب التالية:

  • كانت تكاليف البرمجة وتصحيح الأخطاء أقل من تكاليف تشغيل الكمبيوتر.
  • وقد حظي بدعم شركة IBM.
  • كانت التطبيقات في ذلك الوقت علمية. [ 54 ]

مع ذلك، قام موردون آخرون غير شركة IBM بكتابة مترجمات لغة فورتران، ولكن بصيغة من المرجح أن تفشل مترجمات IBM. [ 54 ] وضع المعهد الوطني الأمريكي للمعايير (ANSI) أول معيار للغة فورتران عام 1966. وفي عام 1978، أصبح معيار فورتران 77 هو المعيار المعتمد حتى عام 1991. يدعم معيار فورتران 90 ما يلي:

كوبول

لغة كوبول (1959) اختصار لـ "لغة الأعمال التجارية الشائعة". كانت لغة فورتران تتعامل مع الرموز. وسرعان ما تبيّن أن الرموز لا تقتصر على الأرقام، فتم إدخال السلاسل النصية . [ 55 ] كان لوزارة الدفاع الأمريكية تأثير كبير على تطوير كوبول، حيث ساهمت غريس هوبر بشكل رئيسي في تطويرها. كانت التعليمات البرمجية شبيهة باللغة الإنجليزية ومطولة. وكان الهدف تصميم لغة تمكّن المديرين من قراءة البرامج. إلا أن افتقارها إلى التعليمات المنظمة حال دون تحقيق هذا الهدف. [ 56 ]

كان تطوير لغة كوبول خاضعًا لرقابة صارمة، لذا لم تظهر لهجات تتطلب معايير ANSI. ونتيجة لذلك، لم تُجرَ عليها أي تغييرات لمدة 15 عامًا حتى عام 1974. وقد أدخلت نسخة التسعينيات تغييرات جوهرية، مثل البرمجة كائنية التوجه . [ 56 ]

الغول

لغة ALGOL (1960) اختصار لـ "اللغة الخوارزمية". كان لها تأثير عميق على تصميم لغات البرمجة. [ 57 ] انبثقت من لجنة تضم خبراء لغات برمجة أوروبيين وأمريكيين، واستخدمت رموزًا رياضية قياسية ، وتميزت بتصميم منظم وسهل القراءة. كانت ALGOL أول من عرّف قواعدها النحوية باستخدام صيغة باكوس-ناور . [ 57 ] أدى ذلك إلى ظهور المترجمات الموجهة نحو بناء الجملة . وأضافت ميزات مثل:

تشمل اللغات المنحدرة مباشرة من لغة ألغول لغات باسكال ، ومودولا-2 ، وآدا ، ودلفي ، وأوبرون في فرع واحد. أما في فرع آخر ، فتشمل اللغات المنحدرة منها لغات سي ، وسي++ ، وجافا . [ 57 ]

أساسي

لغة BASIC (1964) اختصار لـ "Beginner's All-Purpose Symbolic Instruction Code" (رمز التعليمات الرمزية متعدد الأغراض للمبتدئين). طُوّرت في كلية دارتموث ليتعلمها جميع طلابها. [ 9 ] حتى لو لم ينتقل الطالب إلى لغة برمجة أكثر تطورًا، فإنه سيظل يتذكر لغة BASIC. [ 9 ] تم تثبيت مترجم لغة BASIC في الحواسيب الصغيرة المصنعة في أواخر سبعينيات القرن العشرين. ومع نمو صناعة الحواسيب الصغيرة، تطورت اللغة أيضًا. [ 9 ]

كانت لغة بيسك رائدة في مجال الجلسات التفاعلية . [ 9 ] وقد وفرت أوامر نظام التشغيل ضمن بيئتها:

  • الأمر "جديد" أنشأ صفحة فارغة.
  • تم تقييم البيانات على الفور.
  • يمكن برمجة العبارات عن طريق إضافة أرقام الأسطر قبلها. [ h ]
  • عرض الأمر "list" البرنامج.
  • قام الأمر "run" بتنفيذ البرنامج.

مع ذلك، كانت بنية لغة بيسك بسيطة للغاية بالنسبة للبرامج الكبيرة. [ 9 ] أضافت اللهجات الحديثة بنيةً وامتداداتٍ كائنية التوجه. ولا تزال لغة فيجوال بيسك من مايكروسوفت مستخدمةً على نطاق واسع، وتُنتج واجهة مستخدم رسومية . [ 8 ]

ج

حصلت لغة البرمجة C (1973) على اسمها لأن لغة BCPL استُبدلت بلغة B ، وأطلقت مختبرات AT&T Bell Labs على الإصدار التالي اسم "C". وكان الغرض منها كتابة نظام التشغيل UNIX . [ 50 ] تُعد C لغة صغيرة نسبيًا، مما يُسهّل كتابة المترجمات. وقد واكب نموها نمو الأجهزة في ثمانينيات القرن العشرين. [ 50 ] كما يعود نموها إلى امتلاكها إمكانيات لغة التجميع ، ولكنها تستخدم بنية نحوية عالية المستوى . وقد أضافت ميزات متقدمة مثل:

خريطة ذاكرة الحاسوب

تتيح لغة C للمبرمج التحكم في منطقة الذاكرة التي سيتم تخزين البيانات فيها. تتطلب المتغيرات العامة والمتغيرات الثابتة أقل عدد من دورات الساعة للتخزين. يتم استخدام المكدس تلقائيًا لتعريف المتغيرات القياسية . تُعاد بيانات الذاكرة الديناميكية إلى متغير مؤشر من malloc()الدالة.

  • تقع منطقة البيانات العامة والثابتة فوق منطقة البرنامج مباشرةً . ( تُسمى منطقة البرنامج تقنيًا منطقة النص ، وهي المكان الذي تُخزن فيه تعليمات الآلة).
  • تُعتبر منطقة البيانات العامة والثابتة منطقتين من الناحية التقنية. [ 58 ] تُسمى إحدى المنطقتين " مقطع البيانات المُهيأة "، حيث تُخزن المتغيرات المُعلنة بقيم افتراضية. أما المنطقة الأخرى فتُسمى " مقطع الكتلة المُبدأة" ، حيث تُخزن المتغيرات المُعلنة بدون قيم افتراضية.
  • يتم تحديد عناوين المتغيرات المخزنة في منطقة البيانات العامة والثابتة في وقت الترجمة. وتحتفظ هذه المتغيرات بقيمها طوال فترة تشغيل العملية.
  • تُخزّن المنطقة العامة والثابتة المتغيرات العامة المُعلنة خارج نطاق main()الدالة. [ 59 ] المتغيرات العامة مرئية main()لجميع الدوال الأخرى في الكود المصدري.
من جهة أخرى، تُعتبر تعريفات المتغيرات داخل main()الدوال الأخرى، أو ضمن {}حدود الكتل ، متغيرات محلية . تشمل المتغيرات المحلية أيضًا متغيرات المعاملات الرسمية . تُحاط متغيرات المعاملات بأقواس تعريف الدالة. [ 60 ] توفر المعاملات واجهة للدالة.
  • staticتُخزَّن المتغيرات المحلية المُعلنة باستخدام البادئة أيضًا في منطقة البيانات العامة والثابتة . [ 58 ] على عكس المتغيرات العامة، فإن المتغيرات الثابتة مرئية فقط داخل الدالة أو الكتلة. وتحتفظ المتغيرات الثابتة دائمًا بقيمتها. مثال على استخدامها هو الدالة int increment_counter(){static int counter = 0; counter++; return counter;}[ i ]
  • منطقة المكدس هي كتلة متصلة من الذاكرة تقع بالقرب من عنوان الذاكرة العلوي. [ 61 ] تُملأ المتغيرات الموجودة في المكدس من الأعلى إلى الأسفل. [ j ] [ 61 ] مؤشر المكدس هو سجل مخصص لتتبع آخر عنوان ذاكرة تم ملؤه. [ 61 ] تُوضع المتغيرات في المكدس باستخدام تعليمة PUSH في لغة التجميع . لذلك، تُحدد عناوين هذه المتغيرات أثناء وقت التشغيل . وتتم إزالة نطاق متغيرات المكدس باستخدام تعليمة POP.
  • تُسمى المتغيرات المحلية المُعلنة بدون staticالبادئة، بما في ذلك متغيرات المعاملات الرسمية، [ 62 ] بالمتغيرات التلقائية [ 59 ] وتُخزن في المكدس. [ 58 ] وتكون مرئية داخل الدالة أو الكتلة وتفقد نطاقها عند الخروج من الدالة أو الكتلة.
  • تقع منطقة الكومة أسفل المكدس. [ 58 ] ويتم ملؤها من الأسفل إلى الأعلى. يدير نظام التشغيل الكومة باستخدام مؤشر الكومة وقائمة بكتل الذاكرة المخصصة. [ 63 ] ومثل المكدس، يتم تعيين عناوين متغيرات الكومة أثناء وقت التشغيل. ويحدث خطأ نفاد الذاكرة عندما يتطابق مؤشر الكومة مع مؤشر المكدس.
  • توفر لغة Cmalloc() دالة مكتبة لتخصيص ذاكرة الكومة. [ k ] [ 64 ] يُعد ملء الكومة بالبيانات دالة نسخ إضافية. [ l ] يتم تمرير المتغيرات المخزنة في الكومة بكفاءة إلى الدوال باستخدام المؤشرات. بدون المؤشرات، سيتعين تمرير كتلة البيانات بأكملها إلى الدالة عبر المكدس.

لغة سي++

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

في مصطلحات البرمجة الكائنية، تُسمى أنواع البيانات المجردة بالفئات . مع ذلك، فإن الفئة مجرد تعريف؛ لا يتم تخصيص أي مساحة ذاكرة لها. عندما يتم تخصيص مساحة ذاكرة لفئة وربطها بمعرف ، تُسمى هذه الفئة كائنًا . [ 66 ]

لغات البرمجة الإجرائية كائنية التوجه ، التي طُوّرت بدمج الحاجة إلى الأصناف والحاجة إلى برمجة وظيفية آمنة . [ 67 ] في لغة كائنية التوجه، تُسند الدالة إلى صنف. وتُسمى الدالة المُسندة حينها طريقةً أو دالة عضو أو عملية . البرمجة كائنية التوجه هي تنفيذ عمليات على الكائنات . [ 68 ]

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

كانت لغة C++ (1985) تُسمى في الأصل "C مع الفئات". [ 70 ] وقد صُممت لتوسيع قدرات لغة C بإضافة إمكانيات البرمجة الكائنية التوجه للغة Simula . [ 71 ]

تتكون الوحدة البرمجية الموجهة للكائنات من ملفين. يُسمى ملف التعريفات ملف الرأس . إليك مثال على ملف رأس بلغة C++ لفئة GRADE في تطبيق مدرسي بسيط:

// grade.h // -------// يُستخدم للسماح لملفات مصدر متعددة بتضمين ملف الرأس هذا دون حدوث أخطاء تكرار. // ---------------------------------------------- #ifndef GRADE_H #define GRADE_Hclass GRADE { public : // هذه عملية البناء. // ---------------------------------- GRADE ( const char letter );// هذا متغير فئة. // ------------------------- حرف حرف ;// هذه عملية عضوية. // --------------------------- int grade_numeric ( const char letter );// هذا متغير فئة. // ------------------------- int numeric ; }; #endif

عملية البناء هي دالة تحمل نفس اسم الصنف. [ 72 ] ويتم تنفيذها عندما تقوم العملية المستدعِية بتنفيذ newالعبارة.

الملف الآخر للوحدة هو ملف المصدر . إليك ملف مصدر بلغة C++ لفئة GRADE في تطبيق مدرسي بسيط:

// grade.cpp // --------- #include "grade.h"GRADE :: GRADE ( const char letter ) { // الإشارة إلى الكائن باستخدام الكلمة المفتاحية 'this'. // ---------------------------------------------- this -> letter = letter ;// هذا هو التماسك الزمني // ------------------------- this -> numeric = grade_numeric ( letter ); }int GRADE :: grade_numeric ( const char letter ) { if ( ( letter == 'A' || letter == 'a' ) ) return 4 ; else if ( ( letter == 'B' || letter == 'b' ) ) return 3 ; else if ( ( letter == 'C' || letter == 'c' ) ) return 2 ; else if ( ( letter == 'D' || letter == 'd' ) ) return 1 ; else if ( ( letter == 'F' || letter == 'f' ) ) return 0 ; else return -1 ; }

فيما يلي ملف رأس C++ لفئة PERSON في تطبيق مدرسي بسيط:

// person.h // -------- #ifndef PERSON_H #define PERSON_Hclass PERSON { public : PERSON ( const char * name ); const char * name ; }; #endif

إليكم ملف مصدر C++ لفئة PERSON في تطبيق مدرسي بسيط:

// person.cpp // ---------- #include "person.h"PERSON :: PERSON ( const char * name ) { this -> name = name ; }

فيما يلي ملف رأس C++ لفئة STUDENT في تطبيق مدرسي بسيط:

// student.h // --------- #ifndef STUDENT_H #define STUDENT_H#include "person.h" #include "grade.h"// الطالب هو مجموعة فرعية من الشخص. // -------------------------------- class STUDENT : public PERSON { public : STUDENT ( const char * name ); GRADE * grade ; }; #endif

إليكم ملف مصدر C++ لفئة STUDENT في تطبيق مدرسي بسيط:

// student.cpp // ----------- #include "student.h" #include "person.h"STUDENT :: STUDENT ( const char * name ) : // تنفيذ مُنشئ الفئة الأصلية PERSON. // ------------------------------------------------- PERSON ( name ) { // لا يوجد شيء آخر للقيام به. // ------------------- }

إليكم برنامج تشغيل توضيحي:

// student_dvr.cpp // --------------- #include <iostream> #include "student.h"int main ( void ) { STUDENT * student = new STUDENT ( "The Student" ); student -> grade = new GRADE ( 'a' );std :: cout // لاحظ أن الطالب يرث اسم الشخص << student- > name << ": الدرجة الرقمية = " << student- > grade- > numeric << " \n " ; return 0 ; }

إليك ملف makefile لتجميع كل شيء:

ملف الإنشاء -------- الكل : مسجل فيديو الطالبتنظيف : rm student_dvr *.o student_dvr : student_dvr.cpp grade.o student.o person.o c ++ student_dvr.cpp grade.o student.o person.o -o student_dvr​​grade.o : grade.cpp grade.h c ++ -c grade.cpp​student.o : student.cpp student.h c ++ -c student.cppperson.o : person.cpp person.h c ++ -c person.cpp ​

اللغات التصريحية

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

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

times_10(x) = 10 * x

تُحوّل الدالة التعبير إلى نطاق من القيم . إحدى هذه القيم هي 20، ويحدث هذا عندما تكون قيمة x تساوي 2. لذا، يُمكن كتابة تطبيق الدالة رياضيًا على النحو التالي:10 * xtimes_10()

times_10(2) = 20

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

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

يُطوَّر البرنامج الوظيفي بمجموعة من الدوال الأساسية متبوعة بدالة تشغيل واحدة. [ 73 ] انظر إلى المقتطف التالي :

function max( a, b ){/* code omitted */}

function min( a, b ){/* code omitted */}

function range( a, b, c ) {

return max( a, max( b, c ) ) - min( a, min( b, c ) );

}

العناصر الأساسية هي max()و min(). الدالة الرئيسية هي range(). جارٍ التنفيذ:

put( range( 10, 4, 7) );سيخرج الرقم 6.

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

التلعثم

لغة Lisp (1958) اختصار لـ "معالج القوائم". [ 79 ] وهي مصممة خصيصًا لمعالجة القوائم . يتم تكوين بنية البيانات الكاملة من خلال بناء قوائم من القوائم. في الذاكرة، يتم بناء بنية بيانات شجرية . داخليًا، تُسهّل البنية الشجرية استخدام الدوال التكرارية . [ 80 ] تتمثل صيغة بناء الشجرة في وضع العناصر المفصولة بمسافات بين قوسين. فيما يلي قائمة من ثلاثة عناصر. العنصران الأولان هما قائمتان من عنصرين:

((A B) (HELLO WORLD) 94)

تحتوي لغة ليسب على دوال لاستخراج العناصر وإعادة بنائها. [ 81 ] تُرجع الدالة head()قائمة تحتوي على العنصر الأول في القائمة. tail()تُرجع الدالة قائمة تحتوي على جميع العناصر باستثناء العنصر الأول. cons()تُرجع الدالة قائمة ناتجة عن دمج قوائم أخرى. لذلك، سيُرجع التعبير التالي القائمة x:

cons(head(x), tail(x))

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

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

ML

لغة ML (1973) [ 85 ] هي اختصار لـ "لغة البيانات الوصفية". تتحقق ML من مقارنة البيانات من النوع نفسه فقط. [ 86 ] على سبيل المثال، هذه الدالة لها مُدخل واحد (عدد صحيح) وتُرجع عددًا صحيحًا:

fun times_10 ( n : int ) : int = 10 * n ;

لغة ML ليست غريبة الأطوار فيما يتعلق بالأقواس مثل لغة Lisp . فيما يلي تطبيق لذلك times_10():

10 مرات 2

يُرجع "20  : int". (يتم إرجاع كل من النتائج ونوع البيانات.)

على غرار لغة ليسب ، صُممت لغة ML لمعالجة القوائم. ولكن على عكس ليسب ، فإن جميع عناصرها لها نفس نوع البيانات. [ 87 ] علاوة على ذلك، تُحدد ML نوع بيانات العنصر في وقت الترجمة . يُطلق على تحديد نوع البيانات في وقت الترجمة اسم الربط الثابت . يزيد الربط الثابت من الموثوقية لأن المُترجم يتحقق من سياق المتغيرات قبل استخدامها. [ 88 ]

مقدمة

برولوج (1972) اختصار لـ "البرمجة بالمنطق". وهي لغة برمجة منطقية ، مبنية على المنطق الصوري . طُوّرت هذه اللغة على يد آلان كولميرور وفيليب روسيل في مرسيليا، فرنسا. وهي تطبيق لتقنية حل الجمل الخطية المحددة الانتقائية ، التي كان روبرت كوالسكي وآخرون من روادها في جامعة إدنبرة . [ 89 ]

تتكون لبنات بناء برنامج برولوج من الحقائق والقواعد . إليك مثال بسيط:

قط ( توم ). % توم قط. فأر ( جيري ). % جيري فأر.حيوان ( X ) :- قط ( X ). % كل قط حيوان حيوان ( X ) : - فأر ( X ). % كل فأر حيوانكبير ( X ) :- قط ( X ). % كل قط كبير صغير ( X ) :- فأر ( X ). % كل فأر صغيريأكل ( س ، ص ) :- فأر ( س جبن ( ص ). % كل فأر يأكل كل جبن. يأكل ( س ، ص ) :- كبير ( س صغير ( ص ). % كل حيوان كبير يأكل كل حيوان صغير.

بعد إدخال جميع الحقائق والقواعد، يمكن طرح سؤال:

هل سيأكل توم جيري؟
?- يأكل ( توم ، جيري ). صحيح

يوضح المثال التالي كيف يقوم برنامج Prolog بتحويل التقدير الحرفي إلى قيمته الرقمية:

numeric_grade ( 'A' , 4 ) .numeric_grade ( 'B' , 3 ) .numeric_grade ( 'C' , 2 ) .numeric_grade ( 'D' , 1 ) .numeric_grade ( 'F' , 0 ) .numeric_grade ( X , -1 ) :- not X = 'A' , not X = ' B' , not X = 'C' , not X = ' D' , not X = ' F'.grade ( 'The Student' , 'A' ).
?- grade ( 'The Student' , X ), numeric_grade ( X , Y ). X = 'A' , Y = 4

إليكم مثالاً شاملاً: [ 90 ]

1) جميع التنانين تنفث النار، أو ما يعادل ذلك، الشيء ينفث النار إذا كان الشيء تنينًا:

billows_fire ( X ) :- is_a_dragon ( X ).

2) ينفث المخلوق النار إذا كان أحد والديه ينفث النار:

billows_fire ( X ) :- is_a_creature ( X ), is_a_parent_of ( Y , X ), billows_fire ( Y ).

3) يكون الشيء X أحد والدي الشيء Y إذا كان X هو أم Y أو X هو والد Y:

is_a_parent_of ( X , Y ):- is_the_mother_of ( X , Y ). is_a_parent_of ( X , Y ):- is_the_father_of ( X , Y ).

4) يُعتبر الشيء مخلوقًا إذا كان تنينًا:

is_a_creature ( X ) :- is_a_dragon ( X ).

5) نوربرتا تنين، وباف مخلوق. نوربرتا هي والدة باف.

نوربرتا تنين . باف مخلوق . نوربرتا ، باف أم .

القاعدة (2) هي تعريف استقرائي (تكراري). يمكن فهمها بشكل تصريحي، دون الحاجة إلى فهم كيفية تنفيذها.

توضح القاعدة (3) كيفية تمثيل الدوال باستخدام العلاقات. هنا، تضمن دالتا الأم والأب أن يكون لكل فرد أم واحدة فقط وأب واحد فقط.

لغة برولوج هي لغة غير مصنفة. ومع ذلك، يمكن تمثيل الوراثة باستخدام المسندات. تنص القاعدة (4) على أن المخلوق هو فئة عليا للتنين.

تُجاب الأسئلة باستخدام الاستدلال العكسي . بالنظر إلى السؤال:

?- billows_fire ( X ).

يُنتج برنامج Prolog إجابتين  :

X = نوربرتا X = باف

تتمثل التطبيقات العملية للغة برولوج في تمثيل المعرفة وحل المشكلات في الذكاء الاصطناعي .

البرمجة الكائنية التوجه

البرمجة كائنية التوجه هي أسلوب برمجي لتنفيذ العمليات ( الدوال ) على الكائنات . [ 91 ] تقوم الفكرة الأساسية على تجميع خصائص ظاهرة ما في حاوية كائنية وتسمية هذه الحاوية. كما تُجمّع العمليات التي تُجرى على الظاهرة داخل الحاوية. [ 91 ] وقد تطورت البرمجة كائنية التوجه من خلال الجمع بين الحاجة إلى الحاويات والحاجة إلى برمجة وظيفية آمنة . [ 92 ] ولا يقتصر هذا الأسلوب البرمجي على لغة كائنية التوجه . [ 93 ] في لغة كائنية التوجه، تُسمى حاوية الكائن فئة . أما في لغة غير كائنية التوجه، فيمكن أن تصبح بنية البيانات (المعروفة أيضًا بالسجل ) حاوية كائن. ولتحويل بنية البيانات إلى حاوية كائن، يجب كتابة العمليات خصيصًا لهذه البنية. وتُسمى البنية الناتجة نوع بيانات مجرد . [ 94 ] ومع ذلك، سيغيب مفهوم الوراثة . ولكن يمكن التغلب على هذا القصور.

فيما يلي ملف رأس بلغة البرمجة C لنوع البيانات المجرد GRADE في تطبيق مدرسي بسيط:

/* grade.h */ /* ------- *//* يُستخدم للسماح بتضمين ملفات مصدر متعددة */ /* ملف الرأس هذا دون حدوث أخطاء تكرار. */ /* ---------------------------------------------- */ #ifndef GRADE_H #define GRADE_Htypedef struct { char letter ; } GRADE ;/* المُنشئ */ /* ----------- */ GRADE * grade_new ( char letter );int grade_numeric ( char letter ); #endif

تؤدي هذه grade_new()الدالة نفس خوارزمية عملية البناء في لغة C++ .

فيما يلي ملف مصدر بلغة البرمجة C لنوع البيانات المجرد GRADE في تطبيق مدرسي بسيط:

/* grade.c */ /* ------- */ #include "grade.h"GRADE * grade_new ( char letter ) { GRADE * grade ;/* تخصيص ذاكرة الكومة */ /* -------------------- */ if ( ! ( grade = calloc ( 1 , sizeof ( GRADE ) ) ) ) { fprintf ( stderr , "خطأ في %s/%s/%d: calloc() أعادت قيمة فارغة. \n " , __FILE__ , __FUNCTION__ , __LINE__ ); exit ( 1 ); }grade -> letter = letter ; return grade ; }دالة ` grade_numeric` تأخذ حرفًا كمدخل وتستقبله كمعامل . إذا كان الحرف ` A` أو ` a` ، تُرجع الدالة القيمة 4. وإذا كان الحرف ` B` أو ` b` ، تُرجع الدالة القيمة 3. وإذا كان الحرف ` C` أو ` c` ، تُرجع الدالة القيمة 2. وإذا كان الحرف ` D` أو ` d` ، تُرجع الدالة القيمة 1. وإذا كان الحرف ` F` أو ` f` ، تُرجع الدالة القيمة 0. وإلا ، تُرجع الدالة القيمة -1 .

calloc()في الدالة البانية، يتم استخدام الدالة بدلاً من ذلك malloc()لأن كل خلية ذاكرة سيتم تعيينها إلى الصفر.

فيما يلي ملف رأس بلغة البرمجة C لنوع البيانات المجرد PERSON في تطبيق مدرسي بسيط:

/* person.h */ /* -------- */ #ifndef PERSON_H #define PERSON_Htypedef struct { char * name ; } PERSON ;/* المُنشئ */ /* ----------- */ PERSON * person_new ( char * name ); #endif

فيما يلي ملف مصدر بلغة البرمجة C لنوع البيانات المجرد PERSON في تطبيق مدرسي بسيط:

/* person.c */ /* -------- */ #include "person.h"PERSON * person_new ( char * name ) { PERSON * person ;/* تم حذف التحقق من الأخطاء */ person = calloc ( 1 , sizeof ( PERSON ) );person -> name = name ; return person ; }

فيما يلي ملف رأس بلغة البرمجة C لنوع البيانات المجرد STUDENT في تطبيق مدرسي بسيط:

/* student.h */ /* --------- */ #ifndef STUDENT_H #define STUDENT_H#include "person.h" #include "grade.h"typedef struct { /* الطالب هو مجموعة فرعية من الشخص. */ /* -------------------------------- */ الشخص * شخص ;الدرجة * الدرجة ؛ } الطالب ؛/* المُنشئ */ /* ----------- */ STUDENT * student_new ( char * name ); #endif

فيما يلي ملف مصدر بلغة البرمجة C لنوع البيانات المجرد STUDENT في تطبيق مدرسي بسيط:

/* student.c */ /* --------- */ #include "student.h" #include "person.h"STUDENT * student_new ( char * name ) { STUDENT * student ;/* تم حذف التحقق من الأخطاء */ student = calloc ( 1 , sizeof ( STUDENT ) ); /* تنفيذ مُنشئ الفئة الأساسية PERSON. */ /* ------------------------------------------------- */ student- > person = person_new ( name ); return student ; }

إليكم برنامج تشغيل توضيحي:

/* student_dvr.c */ /* ------------- */ #include <stdio.h> #include "student.h"int main ( void ) { STUDENT * student = student_new ( "The Student" ); student -> grade = grade_new ( 'a' );printf ( "%s: الدرجة الرقمية = %d \n " , /* بينما توجد مجموعة فرعية، لا يوجد وراثة. */ student- > person- > name , /* البرمجة الوظيفية هي تنفيذ الدوال في الوقت المناسب (JIT) */ grade_numeric ( student- > grade- > letter ) );return 0 ; }

إليك ملف makefile لتجميع كل شيء:

ملف الإنشاء -------- الكل : مسجل فيديو الطالبتنظيف : rm student_dvr *.o student_dvr : student_dvr.c grade.o student.o person.o gcc student_dvr.c grade.o student.o person.o -o student_dvr​​grade.o : grade.c grade.h gcc -c grade.cstudent.o : student.c student.h gcc -c student.c​​person.o : person.c person.h gcc -c person.c​​ 

تتمثل الاستراتيجية الرسمية لبناء كائنات موجهة نحو الكائنات في: [ 95 ]

  • حدد الأشياء. على الأرجح ستكون أسماء.
  • حدد سمات كل عنصر. ما الذي يساعد في وصف العنصر؟
  • حدد أفعال كل شيء. على الأرجح ستكون هذه أفعالاً.
  • حدد العلاقات بين الأشياء. على الأرجح ستكون هذه العلاقات عبارة عن أفعال.

على سبيل المثال:

  • الشخص هو إنسان يتم التعرف عليه من خلال اسمه.
  • الدرجة هي إنجاز يتم تحديده بحرف.
  • الطالب هو الشخص الذي يحصل على درجة.

بناء الجملة والدلالات

تتكون قواعد الإنتاج من مجموعة من المحطات الطرفية وغير الطرفية.

تُعرَّف بنية برنامج الحاسوب بأنها قائمة من قواعد الإنتاج التي تُشكِّل قواعده النحوية . [ 96 ] تُرتِّب قواعد لغة البرمجة التصريحات والتعبيرات والعبارات في المواضع الصحيحة . [ 97 ] تُكمِّل دلالات اللغة بنية اللغة ، إذ تصف المعاني المرتبطة بمختلف البنى النحوية. [ 98 ] قد تحتاج البنية النحوية إلى وصف دلالي لأن قاعدة الإنتاج قد يكون لها تفسير غير صحيح. [ 99 ] كذلك، قد تتشابه لغات مختلفة في بنيتها النحوية، لكن سلوكها قد يختلف.

يُوصَف تركيب اللغة رسميًا من خلال سرد قواعد الإنتاج. في حين أن تركيب اللغة الطبيعية معقد للغاية، يمكن أن تحتوي مجموعة فرعية من اللغة الإنجليزية على قائمة قواعد الإنتاج التالية: [ 100 ]

  1. تتكون الجملة من عبارة اسمية متبوعة بعبارة فعلية ؛
  2. تتكون العبارة الاسمية من أداة تعريف متبوعة بصفة متبوعة باسم ؛
  3. تتكون العبارة الفعلية من فعل متبوع بعبارة اسمية ؛
  4. أداة التعريف هي "the"؛
  5. الصفة هي "كبير" أو
  6. الصفة هي "صغير" ؛
  7. الاسم هو "قطة" أو
  8. الاسم هو "الفأر" ؛
  9. الفعل هو "يأكل" ؛

الكلمات المكتوبة بخط غامق تُعرف بالرموز غير الطرفية . أما الكلمات الموجودة بين علامتي اقتباس مفردتين فتُعرف بالرموز الطرفية . [ 101 ]

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

  • جملة
  • عبارة اسمية عبارة فعلية
  • أداة تعريف، صفة، اسم ، فعل، عبارة
  • الصفة الاسم الفعل العبارة
  • العبارة الاسمية الفعلية الكبيرة
  • عبارة فعلية عن القطط الكبيرة
  • القط الكبير فعل اسم عبارة
  • القط الكبير يأكل عبارة اسمية
  • القط الكبير يأكل مقالة صفة اسم
  • القط الكبير يأكل الصفة الاسم
  • القط الكبير يأكل الاسم الصغير
  • القط الكبير يأكل الفأر الصغير

لكن هناك تركيبة أخرى تؤدي إلى جملة غير صالحة:

  • الفأر الصغير يأكل القط الكبير

لذلك، فإن الدلالة ضرورية لوصف معنى نشاط الأكل بشكل صحيح .

تُعرف إحدى طرق سرد قواعد الإنتاج بصيغة باكوس-ناور (BNF). [ 103 ] تصف صيغة باكوس-ناور (BNF) بنية اللغة، ولها هي نفسها بنية . يُعد هذا التعريف التكراري مثالًا على لغة وصفية . [ 98 ] تتضمن بنية صيغة باكوس-ناور (BNF) ما يلي:

  • ::=وهذا يعني أنه يتكون من a[n] عندما يكون رمز غير طرفي على يمينه. ويعني أنه يكون عندما يكون رمز طرفي على يمينه.
  • |والتي تُترجم إلى أو .
  • <والتي >تحيط بالرموز غير الطرفية .

باستخدام صيغة BNF، يمكن أن تحتوي مجموعة فرعية من اللغة الإنجليزية على قائمة قواعد الإنتاج التالية :

< جملة > ::= < عبارة اسمية >< عبارة فعلية > < عبارة اسمية > ::= < أداة تعريف >< صفة >< اسم > < عبارة فعلية > ::= < فعل >< عبارة اسمية > < أداة تعريف > ::= الـ < صفة > ::= كبير | صغير < اسم > ::= قط | فأر < فعل > ::= يأكل 

باستخدام صيغة BNF، فإن العدد الصحيح الموقّع له قائمة قواعد الإنتاج التالية : [ 104 ]

< عدد صحيح مُوقّع > ::= < إشارة >< عدد صحيح > < إشارة > ::= + | - < عدد صحيح > ::= < رقم > | < رقم >< عدد صحيح > < رقم > ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 

لاحظ قاعدة الإنتاج التكرارية:

< عدد صحيح > ::= < رقم > | < رقم >< عدد صحيح >

يُتيح هذا عددًا لا نهائيًا من الاحتمالات. لذا، من الضروري وجود دلالة لوصف محدودية عدد الأرقام.

لاحظ احتمال الصفر البادئ في قواعد الإنتاج:

< عدد صحيح > ::= < رقم > | < رقم >< عدد صحيح > < رقم > ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 

لذلك، من الضروري وجود دلالة لوصف ضرورة تجاهل الأصفار البادئة.

تتوفر طريقتان رسميتان لوصف الدلالات . وهما الدلالات الدلالية والدلالات البديهية . [ 105 ]

هندسة البرمجيات وبرمجة الحاسوب

قبل ظهور لغات البرمجة، قامت بيتي جينينغز وفران بيلاس ببرمجة جهاز ENIAC عن طريق تحريك الكابلات وضبط المفاتيح.

هندسة البرمجيات هي مجموعة متنوعة من التقنيات لإنتاج برامج حاسوبية عالية الجودة . [ 106 ] برمجة الحاسوب هي عملية كتابة أو تعديل شفرة المصدر . في بيئة عمل رسمية، يقوم محلل النظم بجمع المعلومات من المديرين حول جميع عمليات المؤسسة المراد أتمتتها. ثم يُعدّ هذا المختص خطة تفصيلية للنظام الجديد أو المُعدَّل. [ 107 ] تُشبه هذه الخطة المخطط الهندسي. [ 107 ]

أهداف الأداء

يهدف محلل النظم إلى تقديم المعلومات الصحيحة للشخص المناسب في الوقت المناسب. [ 108 ] العوامل الحاسمة لتحقيق هذا الهدف هي: [ 108 ]

  1. جودة المخرجات. هل المخرجات مفيدة في عملية صنع القرار؟
  2. دقة المخرجات. هل تعكس الوضع الحقيقي؟
  3. تنسيق المخرجات. هل المخرجات سهلة الفهم؟
  4. سرعة الإخراج. المعلومات الحساسة للوقت مهمة عند التواصل مع العميل في الوقت الفعلي.

أهداف التكلفة

ينبغي تحقيق أهداف الأداء مع مراعاة جميع التكاليف، بما في ذلك: [ 109 ]

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

إن تطبيق عملية تطوير الأنظمة من شأنه أن يخفف من البديهية القائلة بأنه كلما تأخر اكتشاف الخطأ في العملية، زادت تكلفة تصحيحه. [ 110 ]

نموذج الشلال

يُعد نموذج الشلال تطبيقًا لعملية تطوير الأنظمة . [ 111 ] وكما يوحي اسم الشلال ، فإن المراحل الأساسية تتداخل مع بعضها البعض: [ 112 ]

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

مبرمج حاسوب

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

قد يبرمج مبرمجو الحاسوب على نطاق صغير : أي البرمجة داخل وحدة برمجية واحدة. [ 115 ] ومن المرجح أن تقوم الوحدة البرمجية بتنفيذ وحدات برمجية أخرى موجودة في ملفات شفرة مصدرية أخرى. لذلك، قد يبرمج مبرمجو الحاسوب على نطاق واسع : أي برمجة الوحدات البرمجية بحيث تتكامل فيما بينها بكفاءة. [ 115 ] وتشمل البرمجة على نطاق واسع المساهمة في واجهة برمجة التطبيقات (API).

وحدات البرنامج

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

  • وظيفة الوحدة هي ما تقوم به .
  • سياق الوحدة هو العناصر التي يتم تنفيذها عليها .
  • منطق الوحدة هو كيفية أدائها للوظيفة .

ينبغي أن يُشتق اسم الوحدة أولاً من وظيفتها ، ثم من سياقها . ولا ينبغي أن يكون منطقها جزءًا من الاسم. [ 117 ] على سبيل المثال، يُعدّ كل من `<اسم الوحدة> function compute_square_root( x )` و`< اسم الوحدة>` اسمين مناسبين. أما `<اسم الوحدة>` فلا يُعدّ كذلك.function compute_square_root_integer( i : integer )function compute_square_root_by_division( x )

تُعرف درجة التفاعل داخل الوحدة البرمجية بمستوى تماسكها . [ 117 ] ويُقصد بالتماسك تقييم العلاقة بين اسم الوحدة ووظيفتها . أما درجة التفاعل بين الوحدات البرمجية فتُعرف بمستوى اقترانها . [ 118 ] ويُقصد بالاقتران تقييم العلاقة بين سياق الوحدة والعناصر التي تُنفذ عليها.

التماسك

مستويات التماسك من الأسوأ إلى الأفضل هي: [ 119 ]

  • التماسك العرضي : يتمتع الموديول بتماسك عرضي إذا كان يؤدي وظائف متعددة، وهذه الوظائف غير مترابطة تمامًا. على سبيل المثال، function read_sales_record_print_next_line_convert_to_float()يحدث التماسك العرضي عمليًا عندما تفرض الإدارة قواعد غير منطقية. على سبيل المثال، "سيحتوي كل موديول على ما بين 35 و50 عبارة قابلة للتنفيذ." [ 119 ]
  • التماسك المنطقي: تتمتع الوحدة النمطية بالتماسك المنطقي إذا كانت تحتوي على سلسلة من الوظائف المتاحة، ولكن يتم تنفيذ واحدة منها فقط. على سبيل المثال، function perform_arithmetic( perform_addition, a, b ).
  • التماسك الزمني : يتمتع الموديول بالتماسك الزمني إذا كان يؤدي وظائف مرتبطة بالوقت. مثال على ذلك: ... function initialize_variables_and_open_files()مثال آخر: ...stage_one()stage_two()
  • التماسك الإجرائي : تتمتع الوحدة النمطية بالتماسك الإجرائي إذا كانت تؤدي وظائف متعددة مترابطة بشكل غير مباشر. على سبيل المثال، function read_part_number_update_employee_record().
  • التماسك التواصلي : تتمتع الوحدة بتماسك تواصلي إذا كانت تؤدي وظائف متعددة مترابطة ترابطًا وثيقًا. على سبيل المثال، function read_part_number_update_sales_record()...
  • التماسك المعلوماتي : يتمتع الموديول بالتماسك المعلوماتي إذا كان يؤدي وظائف متعددة، ولكن لكل وظيفة نقاط دخول وخروج خاصة بها. علاوة على ذلك، تشترك الوظائف في نفس بنية البيانات. تعمل الفئات الموجهة للكائنات على هذا المستوى.
  • التماسك الوظيفي : يتمتع الموديول بالتماسك الوظيفي إذا حقق هدفًا واحدًا بالاعتماد فقط على المتغيرات المحلية. علاوة على ذلك، قد يكون قابلاً لإعادة الاستخدام في سياقات أخرى.

اقتران

مستويات الاقتران من الأسوأ إلى الأفضل هي: [ 118 ]

  • الاقتران بالمحتوى : يكون للوحدة البرمجية اقتران بالمحتوى إذا قامت بتعديل متغير محلي لدالة أخرى. كانت لغة كوبول تستخدم فعل التعديل (alter ) لهذا الغرض.
  • الاقتران المشترك : يكون للوحدة النمطية اقتران مشترك إذا قامت بتعديل متغير عام.
  • الترابط التحكمي : يكون للوحدة النمطية ترابط تحكمي إذا كان بإمكان وحدة نمطية أخرى تعديل مسار التحكم الخاص بها . على سبيل المثال perform_arithmetic( perform_addition, a, b )، يجب أن يكون التحكم في تكوين الكائن المُعاد.
  • الاقتران الطابعي : يكون للوحدة اقتران طابعي إذا تم تعديل عنصر من بنية البيانات التي تم تمريرها كمعامل. تعمل الفئات الموجهة للكائنات على هذا المستوى.
  • ترابط البيانات : يكون للوحدة ترابط بيانات إذا كانت جميع معلمات الإدخال الخاصة بها مطلوبة ولم يتم تعديل أي منها. علاوة على ذلك، يتم إرجاع نتيجة الدالة ككائن واحد.

تحليل تدفق البيانات

مخطط تدفق البيانات على مستوى الوظيفة

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

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

الفئات الوظيفية

رسم تخطيطي يوضح كيفية تفاعل المستخدم مع برنامج التطبيق . يتفاعل برنامج التطبيق مع نظام التشغيل ، الذي يتفاعل بدوره مع المكونات المادية .

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

برامج التطبيقات

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

قد تُطوَّر تطبيقات المؤسسات داخليًا كبرمجيات احتكارية فريدة من نوعها . [ 124 ] أو قد تُشترى كبرمجيات جاهزة . ويمكن تعديل البرمجيات المشتراة لتوفير برمجيات مخصصة . وفي حال تخصيص التطبيق، تُستخدم موارد الشركة أو تُستعان بمصادر خارجية لتطويره. وقد يكون تطوير البرمجيات الخارجية من بائع البرمجيات الأصلي أو من مطور طرف ثالث. [ 125 ]

تتمثل المزايا المحتملة للبرمجيات الداخلية في إمكانية تطوير الميزات والتقارير بدقة وفقًا للمواصفات المطلوبة. [ 126 ] كما يمكن للإدارة المشاركة في عملية التطوير وتوفير مستوى من التحكم. [ 127 ] وقد تقرر الإدارة مواجهة مبادرة جديدة من المنافس أو تنفيذ متطلبات العميل أو المورد. [ 128 ] وقد تستلزم عمليات الاندماج والاستحواذ تغييرات في برمجيات المؤسسة. أما العيوب المحتملة للبرمجيات الداخلية فتتمثل في ارتفاع تكاليف الوقت والموارد. [ 124 ] علاوة على ذلك، قد تظهر مخاطر تتعلق بالميزات والأداء.

تتمثل المزايا المحتملة للبرامج الجاهزة في إمكانية تحديد التكاليف الأولية، وتلبية الاحتياجات الأساسية، ووجود سجل حافل بالأداء والموثوقية. [ 124 ] أما عيوبها المحتملة فتتمثل في احتوائها على ميزات غير ضرورية قد تُربك المستخدمين النهائيين، وافتقارها إلى الميزات التي تحتاجها المؤسسة، وعدم توافق تدفق البيانات مع عمليات العمل فيها. [ 124 ]

موفر خدمة التطبيقات

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

نظام التشغيل

جدولة البرامج مقابل جدولة العمليات مقابل جدولة الخيوط ، والاستباق ، وتبديل السياق

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

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

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

برنامج النواة

تقوم النواة بربط برامج التطبيقات بأجهزة الكمبيوتر.

يتمثل الغرض الرئيسي لنواة النظام في إدارة الموارد المحدودة للحاسوب:

تتوزع الذاكرة الفعلية حول ذاكرة الوصول العشوائي (RAM) والقرص الصلب. أما الذاكرة الافتراضية فهي عبارة عن كتلة واحدة متصلة.
  • عندما يقوم نظام التشغيل بتحميل ملف تنفيذي إلى الذاكرة، فإنه يقسم مساحة العناوين منطقيًا إلى مناطق . [ 133 ] يحتفظ نظام التشغيل بجدول رئيسي للمناطق، بالإضافة إلى العديد من جداول مناطق العمليات (pregion) - جدول لكل عملية قيد التشغيل . [ 133 ] تُشكل هذه الجداول مساحة العناوين الافتراضية . يُستخدم الجدول الرئيسي للمناطق لتحديد موقع محتوياته في الذاكرة الفعلية . تسمح جداول مناطق العمليات لكل عملية بامتلاك منطقة خاصة بها للبرنامج (النص)، ومنطقة خاصة بالبيانات، ومنطقة خاصة بالمكدس.
  • يخزن ملف pregion الخاص بالبرنامج تعليمات الآلة. وبما أن تعليمات الآلة لا تتغير، فقد تتشارك العديد من عمليات نفس الملف التنفيذي ملف pregion. [ 133 ]
  • لتوفير الوقت والذاكرة، قد يقوم نظام التشغيل بتحميل كتل من تعليمات التنفيذ فقط من محرك الأقراص، وليس ملف التنفيذ بأكمله. [ 132 ]
  • تتولى النواة مسؤولية ترجمة العناوين الافتراضية إلى عناوين فعلية . قد تطلب النواة بيانات من وحدة تحكم الذاكرة ، ولكنها تتلقى بدلاً من ذلك خطأ في الصفحة . [ 134 ] في هذه الحالة، تصل النواة إلى وحدة إدارة الذاكرة لتعبئة منطقة البيانات الفعلية وترجمة العنوان. [ 135 ]
  • يقوم نظام التشغيل بتخصيص الذاكرة من الكومة بناءً على طلب العملية. [ 64 ] وعندما تنتهي العملية من استخدام الذاكرة، يمكنها طلب تحريرها . إذا انتهت العملية دون طلب تحرير جميع الذاكرة المخصصة، يقوم نظام التشغيل بجمع البيانات المهملة لتحرير الذاكرة.
  • كما تضمن النواة أن العملية لا تصل إلا إلى ذاكرتها الخاصة، وليس إلى ذاكرة النواة أو ذاكرة العمليات الأخرى. [ 132 ]
  • ينبغي لبرنامج النواة أن يقوم بإدارة نظام الملفات . [ 132 ] تحتوي النواة على تعليمات لإنشاء الملفات واسترجاعها وتحديثها وحذفها.
  • ينبغي لبرنامج النواة إدارة الأجهزة . [ 132 ] توفر النواة برامج لتوحيد وتبسيط واجهة المستخدم مع الفأرة ولوحة المفاتيح ومحركات الأقراص والطابعات وغيرها من الأجهزة. علاوة على ذلك، ينبغي للنواة تنظيم الوصول إلى جهاز ما إذا طلبه عمليتان في الوقت نفسه.
  • ينبغي لبرنامج النواة إدارة الشبكة . [ 136 ] تقوم النواة بإرسال واستقبال الحزم نيابةً عن العمليات. ومن أهم خدماتها إيجاد مسار فعال إلى النظام المستهدف.
  • ينبغي أن يوفر برنامج النواة وظائف على مستوى النظام ليستخدمها المبرمجون. [ 137 ]
    • يستطيع المبرمجون الوصول إلى الملفات عبر واجهة بسيطة نسبياً، والتي بدورها تُنفذ واجهة إدخال/إخراج منخفضة المستوى معقدة نسبياً. تشمل هذه الواجهة إنشاء الملفات، ووصف الملفات ، والبحث في الملفات، والقراءة والكتابة الفعلية.
    • يقوم المبرمجون بإنشاء العمليات من خلال واجهة بسيطة نسبياً، والتي بدورها تقوم بتنفيذ واجهة معقدة نسبياً ذات مستوى منخفض.
    • يقوم المبرمجون بإجراء العمليات الحسابية المتعلقة بالتاريخ والوقت من خلال واجهة بسيطة نسبياً، والتي بدورها تقوم بتنفيذ واجهة زمنية منخفضة المستوى معقدة نسبياً. [ 138 ]
  • ينبغي لبرنامج النواة توفير قناة اتصال بين العمليات قيد التنفيذ. [ 139 ] بالنسبة لأنظمة البرمجيات الكبيرة، قد يكون من المستحسن تصميم النظام إلى عمليات أصغر. يمكن للعمليات التواصل فيما بينها عن طريق إرسال واستقبال الإشارات .

في الأصل، كانت أنظمة التشغيل تُبرمج بلغة التجميع ؛ ومع ذلك ، فإن أنظمة التشغيل الحديثة تُكتب عادةً بلغات عالية المستوى مثل C و Objective-C و Swift .

برنامج المرافق

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

برنامج الشفرة المصغرة

بوابة NOT
بوابة NAND
بوابة نور
بوابة AND
بوابة OR

برنامج الشفرة المصغرة هو المفسر الأدنى مستوى [ ] الذي يتحكم في مسار البيانات للحواسيب التي تعمل بالبرمجيات. [ 143 ] (وقد أدت التطورات في مجال الأجهزة إلى نقل هذه العمليات إلى دوائر التنفيذ المادية .) [ 143 ] تسمح تعليمات الشفرة المصغرة للمبرمج بتنفيذ مستوى المنطق الرقمي بسهولة أكبر [ 144 ] - وهو المكون المادي الحقيقي للحاسوب. يمثل مستوى المنطق الرقمي الحد الفاصل بين علوم الحاسوب وهندسة الحاسوب . [ 145 ]

البوابة المنطقية عبارة عن ترانزستور صغير يمكنه إرجاع إحدى إشارتين: تشغيل أو إيقاف. [ 146 ]

  • يشكل وجود ترانزستور واحد بوابة NOT .
  • يؤدي توصيل ترانزستورين على التوالي إلى تكوين بوابة NAND .
  • يؤدي توصيل ترانزستورين على التوازي إلى تكوين بوابة NOR .
  • يؤدي توصيل بوابة NOT ببوابة NAND إلى تكوين بوابة AND .
  • يؤدي توصيل بوابة NOT ببوابة NOR إلى تكوين بوابة OR .

تشكل هذه البوابات الخمس اللبنات الأساسية للجبر الثنائي - وظائف المنطق الرقمي للحاسوب.

تعليمات الشفرة المصغرة هي اختصارات يستخدمها المبرمجون لتنفيذ وظائف المنطق الرقمي بدلاً من كتابتها بالجبر الثنائي. تُخزَّن هذه التعليمات في مخزن التحكم الخاص بوحدة المعالجة المركزية (CPU) . [ 147 ] تنقل هذه التعليمات، التي تُنفَّذ على مستوى العتاد، البيانات عبر مسار البيانات .

تبدأ دورة التعليمات الدقيقة عندما يستخدم مُسلسل التعليمات الدقيقة عداد البرنامج الدقيق لجلب تعليمة الآلة التالية من ذاكرة الوصول العشوائي . [ 148 ] الخطوة التالية هي فك تشفير تعليمة الآلة عن طريق تحديد خط الإخراج المناسب لوحدة الأجهزة. [ 149 ] الخطوة الأخيرة هي تنفيذ التعليمة باستخدام مجموعة البوابات في وحدة الأجهزة.

تمثيل رمزي لوحدة الحساب والمنطق

تُمرَّر تعليمات إجراء العمليات الحسابية عبر وحدة الحساب والمنطق (ALU). [ 150 ] تحتوي وحدة الحساب والمنطق على دوائر لتنفيذ العمليات الأساسية لجمع الأعداد الصحيحة وإزاحتها ومقارنتها. ومن خلال دمج هذه العمليات الأساسية وتكرارها عبر وحدة الحساب والمنطق، يُجري المعالج المركزي (CPU) عملياته الحسابية المعقدة.

تنقل تعليمات الشفرة المصغرة البيانات بين وحدة المعالجة المركزية ووحدة التحكم بالذاكرة . وتتعامل تعليمات الشفرة المصغرة لوحدة التحكم بالذاكرة مع سجلين . يُستخدم سجل عنوان الذاكرة للوصول إلى عنوان كل خلية ذاكرة. ويُستخدم سجل بيانات الذاكرة لضبط وقراءة محتويات كل خلية. [ 151 ]

ملحوظات

  1. تسمح لغة برولوج بإدخال قاعدة بيانات من الحقائق والقواعد بأي ترتيب. ومع ذلك، يجب أن يكون السؤال المتعلق بقاعدة البيانات في النهاية.
  2. إما أن يقوم المستخدم أو برنامج آخر بتقديم الطلب.
  3. يحتوي الملف التنفيذي على كل تعليمات الآلة جاهزة لوحدة المعالجة المركزية .
  4. لمزيد من المعلومات، تفضل بزيارة لغة التجميع X86#أنواع التعليمات .
  5. تم تقديمه في عام 1999
  6. بينما هذا رقم عشري، يتم التعبير عن رمز PDP-11 دائمًا بالنظام الثماني .
  7. عادةً ما يتم تجميع عوامل التشغيل مثل هذهx++إلى تعليمة واحدة.
  8. عادةً ما يتم زيادة أرقام الأسطر بمقدار 10 لإتاحة مساحة في حالة إضافة عبارات إضافية لاحقًا.
  9. يمكن كتابة هذه الدالة بشكل أكثر اختصارًا على النحو التاليint increment_counter(){ static int counter; return ++counter;}: 1) يتم تهيئة المتغيرات الثابتة تلقائيًا إلى الصفر. 2)++counterهو عامل زيادة بادئة .
  10. هذا على الرغم من استعارة الكومة ، التي تنمو عادةً من الأسفل إلى الأعلى.
  11. توفر لغة Ccalloc() أيضًا وظيفة لتخصيص ذاكرة الكومة. كما توفر خدمتين إضافيتين: 1) تسمح للمبرمج بإنشاء مصفوفة ذات حجم عشوائي. 2) تُعيّن قيمة كل خلية من خلايا الذاكرة إلى الصفر.
  12. بالنسبة لمتغيرات السلاسل النصية ،توفر لغة Cstrdup() الدالة. وهي تنفذ كلاً من دالة التخصيص ودالة النسخ.
  13. تمت كتابة نظام التشغيل UNIX بلغة C،وتمتكتابة macOS بلغة Objective-C، وحلت لغة Swift محل Objective - C.
  14. يُطلق على المفسر الأدنى مستوىً اسم الطبقة 1. أما الطبقة 0 فهي طبقة المنطق الرقمي. وتوجد ثلاث طبقات متوسطة، والطبقة 5 هي طبقة اللغة الموجهة نحو حل المشكلات. [ 142 ]

مراجع

  1. "ISO/IEC 2382:2015" . ISO . 2020-09-03. مؤرشف من الأصل في 2016-06-17 . تم الاطلاع عليه في 2022-05-26 . [يشمل البرنامج] جميع أو جزء من البرامج والإجراءات والقواعد والوثائق المرتبطة بنظام معالجة المعلومات.
  2. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 7. ISBN  0-201-71012-9يُعد استخدام المفسر بديلاً عن ترجمة البرنامج المصدر. إذ يمكن للمفسر تنفيذ البرنامج المصدر مباشرةً .
  3. كيريسك، مايكل (2010). واجهة برمجة لينكس . دار نشر نو ستارش. ص 22. ISBN  978-1-59327-220-3يمكن للنواة تحميل برنامج جديد في الذاكرة .
  4. سيلبرشاتز، أبراهام (1994). مفاهيم أنظمة التشغيل، الطبعة الرابعة . أديسون-ويسلي. ص 98. ISBN  978-0-201-50480-4. بشكل غير رسمي، العملية هي برنامج قيد التنفيذ.
  5. ↑ تانينباوم ، أندرو س. (1990). تنظيم الحاسوب الهيكلي، الطبعة الثالثة . برنتيس هول. ص 32. ISBN  978-0-13-854662-5.
  6. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 7. ISBN  0-201-71012-9.
  7. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 30. ISBN  0-201-71012-9كان هدفهم إنتاج لغة بسيطة للغاية ليسهل على الطلاب تعلمها .
  8. 1 2 3 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 31. ISBN  0-201-71012-9.
  9. 1 2 3 4 5 6 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 30. ISBN  0-201-71012-9.
  10. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 30. ISBN  0-201-71012-9كانت الفكرة هي أن الطلاب يمكن أن يكونوا مجرد مستخدمين عاديين أو ينتقلوا من لغة Basic إلى لغات أكثر تطوراً وقوة.
  11. 1 2 مكارتني ، سكوت (1999). إينياك - انتصارات ومآسي أول حاسوب في العالم . ووكر وشركاه. ص 16. ISBN  978-0-8027-1348-3.
  12. ↑ تانينباوم ، أندرو س. (1990). تنظيم الحاسوب الهيكلي، الطبعة الثالثة . برنتيس هول. ص 14. ISBN  978-0-13-854662-5.
  13. بروملي، آلان ج. (1998). "المحرك التحليلي لتشارلز باباج، 1838" (ملف PDF) . حوليات IEEE لتاريخ الحوسبة . 20 (4): 29-45 . رمز Bibcode : 1998IAHC...20d..29B . doi : 10.1109/85.728228 . S2CID 2285332. مؤرشف (PDF) من الأصل بتاريخ 2016-03-04 . تم الاطلاع عليه بتاريخ 2015-10-30 . 
  14. 1 2 تانينباوم ، أندرو س. (1990). تنظيم الحاسوب الهيكلي، الطبعة الثالثة . برنتيس هول. ص 15. ISBN  978-0-13-854662-5.
  15. ج. فويجي؛ ج. فرانسيس (أكتوبر–ديسمبر 2003)، "لوفليس وباباج وإنشاء 'الملاحظات' لعام 1843"حوليات تاريخ الحوسبة ، 25 (4): 16، 19، 25، رمز Bibcode : 2003IAHC...25d..16F ، doi : 10.1109/MAHC.2003.1253887
  16. ↑ روزن ، كينيث هـ. (1991). الرياضيات المتقطعة وتطبيقاتها . ماكجرو هيل، ص 654. ISBN  978-0-07-053744-6يمكن لآلات تورينج أن تحاكي جميع العمليات الحسابية التي يمكن إجراؤها على آلة حاسوبية .
  17. لينز، بيتر (1990). مقدمة في اللغات الرسمية والأتمتة . دي سي هيث وشركاه. ص 234. ISBN  978-0-669-17342-0.
  18. لينز، بيتر (1990). مقدمة في اللغات الرسمية والأتمتة . دي سي هيث وشركاه. ص 243. ISBN  978-0-669-17342-0جميع الدوال الرياضية الشائعة، مهما كانت معقدة، قابلة للحساب بواسطة تورينج .
  19. 1 2 3 مكارتني ، سكوت (1999). إينياك - انتصارات ومآسي أول حاسوب في العالم . ووكر وشركاه. ص 102. ISBN  978-0-8027-1348-3.
  20. ↑ مكارتني ، سكوت (1999). إينياك - انتصارات ومآسي أول حاسوب في العالم . ووكر وشركاه. ص 94. ISBN  978-0-8027-1348-3.
  21. مكارتني ، سكوت (1999). إينياك - انتصارات ومآسي أول حاسوب في العالم . ووكر وشركاه. ص 107. ISBN  978-0-8027-1348-3.
  22. مكارتني ، سكوت (1999). إينياك - انتصارات ومآسي أول حاسوب في العالم . ووكر وشركاه. ص 120. ISBN  978-0-8027-1348-3.
  23. 1 2 مكارتني ، سكوت (1999). إينياك - انتصارات ومآسي أول حاسوب في العالم . ووكر وشركاه. ص 118. ISBN  978-0-8027-1348-3.
  24. مكارتني ، سكوت (1999). إينياك - انتصارات ومآسي أول حاسوب في العالم . ووكر وشركاه. ص 119. ISBN  978-0-8027-1348-3.
  25. مكارتني ، سكوت (1999). إينياك - انتصارات ومآسي أول حاسوب في العالم . ووكر وشركاه. ص 123. ISBN  978-0-8027-1348-3.
  26. هاسكي، هاري د. (2003-01-01)، "EDVAC" ، موسوعة علوم الحاسوب ، المملكة المتحدة: جون وايلي وأولاده المحدودة، الصفحات 626-628 ، ISBN  978-0-470-86412-8تم الاطلاع عليه بتاريخ 25 أبريل 2025
  27. 1 2 تانينباوم ، أندرو س. (1990). تنظيم الحاسوب الهيكلي، الطبعة الثالثة . برنتيس هول. ص 21. ISBN  978-0-13-854662-5.
  28. 1 2 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 27. ISBN  0-201-71012-9.
  29. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 29. ISBN  0-201-71012-9.
  30. 1 2 3 سيلبرشاتز، أبراهام (1994). مفاهيم أنظمة التشغيل، الطبعة الرابعة . أديسون-ويسلي. ص 6. ISBN  978-0-201-50480-4.
  31. ١ ٢ إلى العصر الرقمي: مختبرات الأبحاث، والشركات الناشئة، وصعود نظام التشغيل MOS . مطبعة جامعة جونز هوبكنز. ٢٠٠٢. ISBN 9780801886393أُرشف من الأصل في 2 فبراير 2023. تم الاطلاع عليه في 3 فبراير 2022 .
  32. تشالامالا، بابو (2017). "تصنيع مواد السيليكون للإلكترونيات الدقيقة والخلايا الكهروضوئية الشمسية" . مختبرات سانديا الوطنية. مؤرشف من الأصل في 23 مارس 2023. تم الاطلاع عليه في 8 فبراير 2022 .
  33. "تصنيع الدوائر المتكاملة: صنع رقاقة أساسية" . بريتانيكا. مؤرشف من الأصل في 8 فبراير 2022. تم الاطلاع عليه في 8 فبراير 2022 .
  34. "1959: براءة اختراع مفهوم الدائرة المتكاملة المتجانسة العملية" . متحف تاريخ الحاسوب . تم الاطلاع عليه بتاريخ 13 أغسطس 2019 .
  35. ميلر، كريستوفر (2022). حرب الرقائق . دار نشر سيمون وشوستر، ص 70. ISBN  978-1-9821-7200-8راهن هوف على أنه سيصبح من الأرخص قريباً تصميم شريحة منطقية موحدة، مقترنة بشريحة ذاكرة قوية ومبرمجة بأنواع مختلفة من البرامج، يمكنها حساب العديد من الأشياء المختلفة.
  36. "ثورة 360" (ملف PDF) . الأب والابن وشركاؤهما، 1990. مؤرشف (ملف PDF) من الأصل بتاريخ 10 أكتوبر 2022. تم الاطلاع عليه بتاريخ 5 فبراير 2022 .
  37. "بيل غيتس، مايكروسوفت، والحاسوب الشخصي من آي بي إم" . إنفوورلد. 23 أغسطس 1982. مؤرشف من الأصل في 18 فبراير 2023. تم الاطلاع عليه في 1 فبراير 2022 .
  38. 1 2 ستروستروب، بيارن (2013). لغة البرمجة سي++، الطبعة الرابعة . أديسون-ويسلي. ص 10. ISBN  978-0-321-56384-2.
  39. 1 2 3 ستروستروب، بيارن (2013). لغة البرمجة سي++، الطبعة الرابعة . أديسون-ويسلي. ص 11. ISBN  978-0-321-56384-2.
  40. 1 2 ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 159. ISBN  0-619-06489-7.
  41. 1 2 لينز، بيتر (1990). مقدمة في اللغات الرسمية والأتمتة . دي سي هيث وشركاه. ص 2. ISBN  978-0-669-17342-0.
  42. وايس، مارك ألين (1994). هياكل البيانات وتحليل الخوارزميات في لغة C++ . شركة بنجامين/كومينغز للنشر، ص 29. ISBN  0-8053-5443-3.
  43. ↑ تانينباوم ، أندرو س. (1990). تنظيم الحاسوب الهيكلي، الطبعة الثالثة . برنتيس هول. ص 17. ISBN  978-0-13-854662-5.
  44. ويلكس، إم. في.؛ رينويك، دبليو. (1982)، "جهاز EDSAC" ، في راندل، برايان (محرر)، أصول الحواسيب الرقمية: أوراق مختارة ، برلين، هايدلبرغ: سبرينغر، ص 417-421 ، doi : 10.1007/978-3-642-61812-3_34 ، ISBN  978-3-642-61812-3تم الاطلاع عليه بتاريخ 25 أبريل 2025
  45. 1 2 3 4 5 6 ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 160. ISBN  0-619-06489-7.
  46. 1 2 3 تانينباوم ، أندرو س. (1990). تنظيم الحاسوب الهيكلي، الطبعة الثالثة . برنتيس هول. ص 399. ISBN  978-0-13-854662-5.
  47. ↑ تانينباوم ، أندرو س. (1990). تنظيم الحاسوب الهيكلي، الطبعة الثالثة . برنتيس هول. ص 400. ISBN  978-0-13-854662-5.
  48. ↑ تانينباوم ، أندرو س. (1990). تنظيم الحاسوب الهيكلي، الطبعة الثالثة . برنتيس هول. ص 398. ISBN  978-0-13-854662-5.
  49. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 26. ISBN  0-201-71012-9.
  50. 1 2 3 4 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 37. ISBN  0-201-71012-9.
  51. ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 160. ISBN  0-619-06489-7. في لغات البرمجة من الجيل الثالث وما فوق، يتم ترجمة كل عبارة في اللغة إلى عدة تعليمات بلغة الآلة.
  52. ويلسون، ليزلي ب. (1993). لغات البرمجة المقارنة، الطبعة الثانية . أديسون-ويسلي. ص 75. ISBN  978-0-201-56885-1.
  53. ستروستروب، بيارن (2013). لغة البرمجة سي++، الطبعة الرابعة . أديسون-ويسلي. ص 40. ISBN  978-0-321-56384-2.
  54. 1 2 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 16. ISBN  0-201-71012-9.
  55. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 24. ISBN  0-201-71012-9.
  56. 1 2 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 25. ISBN  0-201-71012-9.
  57. 1 2 3 4 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 19. ISBN  0-201-71012-9.
  58. 1 2 3 4 "تخطيط الذاكرة لبرامج لغة C" . 12 سبتمبر 2011. مؤرشف من الأصل في 6 نوفمبر 2021. تم الاطلاع عليه في 6 نوفمبر 2021 .
  59. 1 2 كيرنيغان، برايان دبليو؛ ريتشي، دينيس إم. (1988). لغة البرمجة سي، الطبعة الثانية . برنتيس هول. ص 31. ISBN  0-13-110362-8.
  60. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 128. ISBN  0-201-71012-9.
  61. 1 2 3 كيريسك، مايكل (2010). واجهة برمجة لينكس . دار نشر نو ستارش. ص 121. ISBN  978-1-59327-220-3.
  62. كيريسك، مايكل (2010). واجهة برمجة لينكس . دار نشر نو ستارش. ص 122. ISBN  978-1-59327-220-3.
  63. كيرنيغان، برايان دبليو؛ ريتشي، دينيس إم. (1988). لغة البرمجة سي، الطبعة الثانية . برنتيس هول. ص 185. ISBN  0-13-110362-8.
  64. 1 2 كيرنيغان، برايان دبليو؛ ريتشي، دينيس إم. (1988). لغة البرمجة سي، الطبعة الثانية . برنتيس هول. ص 187. ISBN  0-13-110362-8.
  65. 1 2 3 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 38. ISBN  0-201-71012-9.
  66. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 193. ISBN  0-201-71012-9.
  67. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 39. ISBN  0-201-71012-9.
  68. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 35. ISBN  0-201-71012-9.
  69. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 192. ISBN  0-201-71012-9.
  70. ستروستروب، بيارن (2013). لغة البرمجة سي++، الطبعة الرابعة . أديسون-ويسلي. ص 22. ISBN  978-0-321-56384-2.
  71. ستروستروب، بيارن (2013). لغة البرمجة سي++، الطبعة الرابعة . أديسون-ويسلي. ص 21. ISBN  978-0-321-56384-2.
  72. ستروستروب، بيارن (2013). لغة البرمجة سي++، الطبعة الرابعة . أديسون-ويسلي. ص 49. ISBN  978-0-321-56384-2.
  73. 1 2 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 218. ISBN  0-201-71012-9.
  74. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 217. ISBN  0-201-71012-9.
  75. وايس، مارك ألين (1994). هياكل البيانات وتحليل الخوارزميات في لغة C++ . شركة بنجامين/كومينغز للنشر، ص 103. ISBN  0-8053-5443-3عند استدعاء دالة ، يجب حفظ جميع المعلومات المهمة، مثل قيم المسجلات (المقابلة لأسماء المتغيرات) وعنوان العودة (الذي يمكن الحصول عليه من عداد البرنامج). وعندما تريد الدالة العودة، فإنها تعيد تهيئة جميع المسجلات، ثم تُنفذ عملية العودة. من الواضح أن كل هذا يمكن إنجازه باستخدام مكدس، وهذا ما يحدث بالفعل في جميع لغات البرمجة التي تدعم الاستدعاء الذاتي تقريبًا.
  76. 1 2 3 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 230. ISBN  0-201-71012-9.
  77. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 240. ISBN  0-201-71012-9.
  78. 1 2 3 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 241. ISBN  0-201-71012-9.
  79. جونز، روبن؛ ماينارد، كلايف؛ ستيوارت، إيان (6 ديسمبر 2012). فن برمجة لغة ليسب . سبرينغر ساينس آند بيزنس ميديا. ص 2. ISBN  9781447117193.
  80. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 220. ISBN  0-201-71012-9.
  81. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 221. ISBN  0-201-71012-9.
  82. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 229. ISBN  0-201-71012-9.
  83. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 227. ISBN  0-201-71012-9.
  84. 1 2 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 222. ISBN  0-201-71012-9.
  85. غوردون، مايكل جيه سي (1996). "من كلية لندن للموسيقى إلى جامعة لندن: تاريخ موجز" . مؤرشف من الأصل بتاريخ 5 سبتمبر 2016. تم الاطلاع عليه بتاريخ 30 أكتوبر 2021 .
  86. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 233. ISBN  0-201-71012-9.
  87. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 235. ISBN  0-201-71012-9.
  88. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 55. ISBN  0-201-71012-9.
  89. كولميراور، أ.؛ روسيل، ب. (1992). "ميلاد لغة برولوج" (ملف PDF) . نشرة ACM SIGPLAN . 28 (3). رابطة آلات الحوسبة: 5. doi : 10.1145/155360.155362 .
  90. كوالسكي، ر.، دافيلا، ج.، سارتور، ج.، وكاليخو، م.، 2023. اللغة الإنجليزية المنطقية للقانون والتعليم. في برولوج: الخمسون عامًا القادمة (ص 287-299). تشام: سبرينغر نيتشر سويسرا.
  91. 1 2 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 35. ISBN  0-201-71012-9استندت لغة سيمولا إلى لغة ألغول 60 مع إضافة بالغة الأهمية، وهي مفهوم الأصناف. ... الفكرة الأساسية هي أن البيانات (أو بنية البيانات) والعمليات التي تُجرى عليها مرتبطة ببعضها.
  92. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 39. ISBN  0-201-71012-9في الأصل ، تم تصميم عدد كبير من اللغات التجريبية، والتي جمع العديد منها بين البرمجة الموجهة للكائنات والبرمجة الوظيفية.
  93. شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص 284. ISBN  0-256-08515-3. على الرغم من أنه صحيح أن تصميم الكائنات الموجهة (OOD) في حد ذاته غير مدعوم من قبل غالبية اللغات الشائعة، إلا أنه يمكن استخدام مجموعة فرعية كبيرة من تصميم الكائنات الموجهة.
  94. وايس، مارك ألين (1994). هياكل البيانات وتحليل الخوارزميات في لغة C++ . شركة بنجامين/كومينغز للنشر، ص 57. ISBN  0-8053-5443-3.
  95. شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص 285. ISBN  0-256-08515-3.
  96. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 290. ISBN  0-201-71012-9يصف بناء الجملة (أو القواعد) للغة البرمجة الشكل الصحيح الذي يمكن كتابة البرامج به.
  97. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 78. ISBN  0-201-71012-9المكونات الرئيسية للغة الإجرائية هي التصريحات والتعبيرات والعبارات .
  98. 1 2 ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 290. ISBN  0-201-71012-9.
  99. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 294. ISBN  0-201-71012-9.
  100. ↑ روزن ، كينيث هـ. (1991). الرياضيات المتقطعة وتطبيقاتها . ماكجرو هيل، ص 615. ISBN  978-0-07-053744-6.
  101. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 291. ISBN  0-201-71012-9.
  102. ↑ روزن ، كينيث هـ. (1991). الرياضيات المتقطعة وتطبيقاتها . ماكجرو هيل، ص 616. ISBN  978-0-07-053744-6.
  103. ↑ روزن ، كينيث هـ. (1991). الرياضيات المتقطعة وتطبيقاتها . ماكجرو هيل، ص 623. ISBN  978-0-07-053744-6.
  104. ↑ روزن ، كينيث هـ. (1991). الرياضيات المتقطعة وتطبيقاتها . ماكجرو هيل، ص 624. ISBN  978-0-07-053744-6.
  105. ويلسون، ليزلي ب. (2001). لغات البرمجة المقارنة، الطبعة الثالثة . أديسون-ويسلي. ص 297. ISBN  0-201-71012-9.
  106. شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص. مقدمة. ISBN  0-256-08515-3.
  107. 1 2 3 ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 507. ISBN  0-619-06489-7.
  108. 1 2 ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 513. ISBN  0-619-06489-7.
  109. ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 514. ISBN  0-619-06489-7.
  110. ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 516. ISBN  0-619-06489-7.
  111. شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص 8. ISBN  0-256-08515-3.
  112. ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 517. ISBN  0-619-06489-7.
  113. شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص 345. ISBN  0-256-08515-3.
  114. 1 2 3 4 شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص 319. ISBN  0-256-08515-3.
  115. 1 2 شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص 331. ISBN  0-256-08515-3.
  116. شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص 216. ISBN  0-256-08515-3.
  117. 1 2 3 شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص 219. ISBN  0-256-08515-3.
  118. 1 2 شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص 226. ISBN  0-256-08515-3.
  119. 1 2 شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص 220. ISBN  0-256-08515-3.
  120. شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص 258. ISBN  0-256-08515-3.
  121. شاخ، ستيفن ر. (1990). هندسة البرمجيات . دار نشر أكسن أسوشيتس. ص 259. ISBN  0-256-08515-3.
  122. 1 2 3 سيلبرشاتز، أبراهام (1994). مفاهيم أنظمة التشغيل، الطبعة الرابعة . أديسون-ويسلي. ص 1. ISBN  978-0-201-50480-4.
  123. ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 147. ISBN  0-619-06489-7إن مفتاح إطلاق العنان لإمكانات أي نظام حاسوبي هو برامج التطبيقات.
  124. 1 2 3 4 ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 147. ISBN  0-619-06489-7.
  125. ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 147. ISBN  0-619-06489-7قد تقوم شركة برمجيات خارجية، والتي غالباً ما تسمى بائع برامج ذي قيمة مضافة، بتطوير أو تعديل برنامج لتلبية احتياجات صناعة أو شركة معينة .
  126. ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 148. ISBN  0-619-06489-7العنوان : برامج احتكارية؛ العنوان الفرعي: المزايا؛ الاقتباس: يمكنك الحصول على ما تحتاجه بالضبط من حيث الميزات والتقارير وما إلى ذلك.
  127. ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 148. ISBN  0-619-06489-7العنوان : البرمجيات الاحتكارية؛ العنوان الفرعي: المزايا؛ الاقتباس: إن المشاركة في عملية التطوير توفر مستوى إضافيًا من التحكم في النتائج.
  128. ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 147. ISBN  0-619-06489-7العنوان : برامج احتكارية؛ العنوان الفرعي: المزايا؛ اقتباس: هناك مرونة أكبر في إجراء التعديلات التي قد تكون مطلوبة لمواجهة مبادرة جديدة من أحد منافسيك أو لتلبية متطلبات الموردين و/أو العملاء الجدد.
  129. 1 2 3 4 ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 149. ISBN  0-619-06489-7.
  130. ↑ تانينباوم ، أندرو س. (1990). تنظيم الحاسوب الهيكلي، الطبعة الثالثة . برنتيس هول. ص 11. ISBN  978-0-13-854662-5.
  131. 1 2 كيريسك، مايكل (2010). واجهة برمجة لينكس . دار نشر نو ستارش. ص 21. ISBN  978-1-59327-220-3.
  132. 1 2 3 4 5 كيريسك، مايكل (2010). واجهة برمجة لينكس . دار نشر نو ستارش. ص 22. ISBN  978-1-59327-220-3.
  133. 1 2 3 باخ، موريس ج. (1986). تصميم نظام التشغيل يونكس . برنتيس هول، ص 152. ISBN  0-13-201799-7.
  134. تانينباوم، أندرو س. (2013). تنظيم الحاسوب الهيكلي، الطبعة السادسة . بيرسون. ص 443. ISBN  978-0-13-291652-3.
  135. ^ لاكاميرا ، دانييلي (2018). هندسة النظم المدمجة . حزمة. ص. 8. رقم ISBN  978-1-78883-250-2.
  136. كيريسك، مايكل (2010). واجهة برمجة لينكس . دار نشر نو ستارش. ص 23. ISBN  978-1-59327-220-3.
  137. كيرنيغان، برايان دبليو. (1984). بيئة برمجة يونكس . برنتيس هول. ص 201. ISBN  0-13-937699-2.
  138. كيريسك، مايكل (2010). واجهة برمجة لينكس . دار نشر نو ستارش. ص 187. ISBN  978-1-59327-220-3.
  139. هافيلاند، كيث (1987). برمجة أنظمة يونكس . شركة أديسون-ويسلي للنشر. ص 121. ISBN  0-201-12919-1.
  140. 1 2 ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 145. ISBN  0-619-06489-7.
  141. 1 2 3 ستير، رالف م. (2003). مبادئ نظم المعلومات، الطبعة السادسة . طومسون. ص 146. ISBN  0-619-06489-7.
  142. تانينباوم، أندرو س. (2013). تنظيم الحاسوب الهيكلي، الطبعة السادسة . بيرسون. ص 5. ISBN  978-0-13-291652-3.
  143. 1 2 تانينباوم، أندرو س. (2013). تنظيم الحاسوب الهيكلي، الطبعة السادسة . بيرسون. ص 6. ISBN  978-0-13-291652-3.
  144. تانينباوم، أندرو س. (2013). تنظيم الحاسوب الهيكلي، الطبعة السادسة . بيرسون. ص 243. ISBN  978-0-13-291652-3.
  145. تانينباوم، أندرو س. (2013). تنظيم الحاسوب الهيكلي، الطبعة السادسة . بيرسون. ص 147. ISBN  978-0-13-291652-3.
  146. تانينباوم، أندرو س. (2013). تنظيم الحاسوب الهيكلي، الطبعة السادسة . بيرسون. ص 148. ISBN  978-0-13-291652-3.
  147. تانينباوم، أندرو س. (2013). تنظيم الحاسوب الهيكلي، الطبعة السادسة . بيرسون. ص 253. ISBN  978-0-13-291652-3.
  148. تانينباوم، أندرو س. (2013). تنظيم الحاسوب الهيكلي، الطبعة السادسة . بيرسون. ص 255. ISBN  978-0-13-291652-3.
  149. تانينباوم، أندرو س. (2013). تنظيم الحاسوب الهيكلي، الطبعة السادسة . بيرسون. ص 161. ISBN  978-0-13-291652-3.
  150. تانينباوم، أندرو س. (2013). تنظيم الحاسوب الهيكلي، الطبعة السادسة . بيرسون. ص 166. ISBN  978-0-13-291652-3.
  151. تانينباوم، أندرو س. (2013). تنظيم الحاسوب الهيكلي، الطبعة السادسة . بيرسون. ص 249. ISBN  978-0-13-291652-3.