قائمة طعام
مجاني
التسجيل
الصفحة الرئيسية  /  إنترنت/ متى تم إنشاؤه ج. Adventik هي وكالة رقمية كاملة الخدمات

متى كان ج. Adventik هي وكالة رقمية كاملة الخدمات

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

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

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

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

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

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

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

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

بدأت المحاولات الأولى لتصحيح هذه النواقص في أوائل الثمانينيات. حتى ذلك الحين ، بدأ Bjarne Stroustrup في AT&T Bell Labs في تطوير امتداد للغة C تحت الاسم الرمزي. كان أسلوب التطوير متسقًا تمامًا مع الروح التي تم بها إنشاء لغة C نفسها - تم إدخال بعض الاحتمالات فيها من أجل تحقيق المزيد عمل مريحأشخاص ومجموعات محددة. ظهر أول مترجم تجاري للغة جديدة تسمى C ++ في عام 1983. لقد كان معالجًا أوليًا قام بترجمة البرنامج إلى رمز C. ومع ذلك ، يمكن اعتبار الولادة الفعلية للغة إصدارًا لكتاب Stroustrup في عام 1985. منذ هذه اللحظة ، بدأت C ++ تكتسب شعبية عالمية.

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

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

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

أدى كل هذا إلى حقيقة أن العديد من المطورين أجبروا على استكشاف متاهات دلالات اللغة بأنفسهم والبحث بشكل مستقل عن مصطلحات تعمل بنجاح. لذلك ، على سبيل المثال ، في المرحلة الأولى من تطوير اللغة ، سعى العديد من منشئي مكتبات الفئات إلى بناء تسلسل هرمي لفئة واحدة باستخدام كائن فئة أساسي مشترك. تم استعارة هذه الفكرة من Smalltalk - إحدى أشهر اللغات الشيئية. ومع ذلك ، اتضح أنه غير قابل للتطبيق تمامًا في C ++ - كانت التسلسلات الهرمية للمكتبة الصفية المدروسة بعناية غير مرنة ، وعمل الفصول الدراسية لم يكن واضحًا. لكي تكون مكتبات الفصل قابلة للاستخدام ، يجب شحنها من المصدر.

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

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

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

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

في ضوء كل ما قيل ، لا تبدو النظرة المستقبلية لـ C ++ قاتمة. رغم أن احتكار سوق لغات البرمجة لا يلمع بالنسبة له. ربما لا يسعنا إلا أن نقول بثقة أن هذه اللغة لن تنجو من امتداد تحديث آخر. لا عجب ، عندما ظهرت Java ، تم الاهتمام بها عن كثب. تخلصت اللغة ، القريبة من بناء الجملة لـ C ++ ، مما يعني أنها تبدو مألوفة للعديد من المبرمجين ، من أفظع أوجه القصور في C ++ ، الموروثة من السبعينيات. ومع ذلك ، لا يبدو أن Java ترقى إلى مستوى الدور الذي أوكله إليها البعض.

إن الدور الخاص للغات C / C ++ في البرمجة الحديثة يجعل من غير المعنى تقريبًا تقديم عناوين محددة على الإنترنت حيث يمكنك العثور على مواد عليها. هناك ببساطة أماكن كثيرة مثل هذا. ومع ذلك ، إذا كنت مهتمًا بمعرفة المزيد عن تطور C ++ ، فابدأ بمقال صغير. http://citforum.syzran.ru/programming/prg96/76.shtml.

الكسندر سيرجيف ، [بريد إلكتروني محمي]
مقال من مجلة BYTE / روسيا ، آذار 2000

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

القائمة 1.C

1 # تضمين / * توصيل وظائف الإدخال والإخراج * / 2 3 باطل رئيسي (باطل) 4 (5 int М ؛ / * صفيف من 10 أعداد صحيحة ، العد من 0 * / 6 int N ؛ 7 لـ (N = 0 ؛ N<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>= 0 ؛ --N) / * تصفح المصفوفة عكسيًا * / 12 if (M [N]٪ 2) / * ترتيب وطباعة الفردي * / 13 printf ("٪ d \ n"، M [N]) ؛ أربعة عشرة )

  • الخط 3.في C / C ++ ، يبدأ تنفيذ البرنامج دائمًا بالوظيفة الرئيسية.
  • السطر 7 و 11.في رأس الحلقة ، يتم تحديد الإعداد الأولي وشرط الاستمرارية وقاعدة إعادة حساب معلمة الحلقة باستخدام الفواصل المنقوطة. عمليات ++ و -/- - أشهر اختصارات لغة سي ، وتعني الزيادة والنقصان لمتغير ، أي زيادة قيمته وخفضها بمقدار واحد.
  • الخط 8.وظيفة مسحيُدخل ، وفقًا للتنسيق المحدد بواسطة المعلمة الأولى ، قيم المتغيرات التي يتم تحديد عناوينها بواسطة المعلمات المتبقية. هنا ، يتم حساب العنوان حيث يتم إدخال القيمة باستخدام حساب العنوان ، إلى عنوان موقع المصفوفة متم التعديل بواسطة نعناصر. يمكن الحصول على نفس التأثير عن طريق الكتابة & م [لا].
  • السطر 12.عملية % بحساب باقي القسمة. حالة المشغل لويعتبر مستوفى إذا كانت القيمة العددية للتعبير غير صفرية.
  • السطر 13.وظيفة printf- الطباعة حسب الصيغة تعمل بنفس الطريقة مسح، ولكن بدلاً من العناوين ، يتم تمرير القيم المراد عرضها.
1 # تضمين 2 3 نموذج صفيف الفئة 4 (5 عام: صفيف (حجم T = 1): M (جديد T) ، N (الحجم) ، n (0) () 6 صفيف (باطل) (حذف M ؛) 7 T Count (باطل) const ( return n ؛) 8 T عامل (int i) const (إرجاع M [i] ؛) 9 باطل إضافة (T Data) ؛ 10 خاص: 11 T * M ؛ // عنوان الذاكرة المخصصة 12 int N ، n ؛ // N - مخصص ؛ ن - مستخدم 13) ؛ 14 15 نموذج صفيف باطل :: أضف (T Data) 16 (if (N-n) // إذا تم تخصيص 17 (int * P = new T ؛ // تم استخدام مساحة أكثر ، خصص 18 أكثر لـ (int i = 0 ؛ i أ؛ // مصفوفة الأعداد الصحيحة ذات الحجم المتغير 28 بينما (1) // حلقة لا نهاية لها 29 (int N ؛ 30 cin >> N ؛ // cin - تيار الإدخال القياسي 31 إذا (cin.eof ()) كسر ؛ // الخروج من حلقة بنهاية الملف 32 أ إضافة (N) ؛ // أضف الرقم المدخل إلى المصفوفة 33) 34 من أجل (int N = A.Count () - 1 ؛ N> = 0 ؛ --N) // Loop through المصفوفة 35 إذا (A [N]٪ 2) 36 cout<، وتحرر الذاكرة
  • الخطوط 3-13.تم التصريح عن فئة القالب مجموعة مصفوفةمع المعلمة تي... إنها مجموعة متغيرة الحجم من الكائنات مثل تي... بالطبع ، في مهمتنا ليست هناك حاجة لاستخدام فئة القالب. ومع ذلك ، أردنا توضيح كيفية إنشاء بنية بيانات متعددة الأشكال في C ++ يمكنها العمل مع أي نوع من العناصر.
  • الخط 5.مُنشئ فئة. يقوم بتهيئة تمثيل الكائن. على سبيل المثال ، في الميدان ميتم إدخال عنوان كتلة الذاكرة التي طلبتها العملية جديد تي.
  • الخط 8.مثال على التحميل الزائد للعملية. وظيفة المشغل أو العاملسيتم استدعاؤها عندما تظهر الأقواس المربعة على يمين كائن الفئة مجموعة مصفوفة.
  • الخط 9.هذه الوظيفة هي الوظيفة الرئيسية في التنفيذ. يضيف عناصر إلى المصفوفة ، ويوسعها حسب الحاجة. نظرًا لأنه أكثر تعقيدًا من الآخرين ، فإن تعريفه مأخوذ من وصف الفصل. يتم تنفيذ الوظائف الموصوفة في جسم الفئة في C ++ ليس عن طريق الاستدعاء ، ولكن عن طريق الاستبدال المضمن. يؤدي هذا إلى تسريع البرنامج ، على الرغم من أنه يزيد من حجمه.
  • السطور 15-24.تعريف الوظيفة Arrau :: إضافة (T)(بالمناسبة ، هذا هو اسمها الكامل).
  • السطر 27.نقوم بإنشاء كائن من النوع مجموعة مصفوفة... قالب أجاومعلمات حسب النوع int.

C ++ (يقرأ C-plus-plus) هي لغة برمجة للأغراض العامة مجمعة ومكتوبة بشكل ثابت يمكنك من خلالها إنشاء برامج من أي تعقيد.
لأكثر من 20 عامًا ، كانت هذه اللغة من بين أكثر ثلاث لغات برمجة شعبية وطلبًا. (يمكنك التحقق من ذلك من خلال زيارة موقع TIOBE).
نشأت اللغة في أوائل الثمانينيات ، عندما جاء بيورن ستروستروب موظف Bell Labs بعدد من التحسينات على لغة C لتناسب احتياجاته الخاصة.

Bjarne Stroustrup - مبتكر لغة C ++

قرر Stroustrup استكمال لغة C بإمكانيات لغة Simula. لغة C ، باعتبارها اللغة الأساسية لنظام UNIX الذي تعمل عليه أجهزة كمبيوتر Bell ، هي لغة سريعة وغنية بالميزات وقابلة للحمل. أضاف Stroustrup القدرة على العمل مع الفئات والعناصر إليها. نتيجة لذلك ، أصبحت مشكلات النمذجة العملية متاحة لحلها من حيث وقت التطوير (بفضل استخدام فئات تشبه Simula) ومن حيث وقت الحساب (بفضل سرعة C).
هكذا يقول مطور اللغة نفسه عن ذلك:



في عام 1998 ، تم نشر معيار اللغة الأول ، المعروف باسم C ++ 98 ، من قبل لجنة التقييس. تواصل C ++ التطور لتلبي المتطلبات الحديثة. إحدى المجموعات التي تطور لغة C ++ وترسل اقتراحات لتحسينها إلى لجنة توحيد C ++ هي تعزيز، والتي تشارك ، من بين أمور أخرى ، في تحسين قدرات اللغة عن طريق إضافة ميزات البرمجة الوصفية إليها. تم إصدار المعيار الأخير في عام 2017 ويسمى سي ++ 17... لن يكون المعيار التالي طويلاً في المستقبل وسيظهر كما هو متوقع في عام 2020.
لا أحد يمتلك حقوق لغة C ++ ، فهي مجانية. في مارس 2016 ، تم إنشاء مجموعة عمل WG21 C ++ في روسيا. تم تنظيم المجموعة لجمع المقترحات الخاصة بمعيار C ++ ، وإرسالها إلى اللجنة والدفاع عنها في الاجتماعات العامة للمنظمة الدولية للتوحيد القياسي.
C ++ هي لغة متعددة النماذج (من الكلمة paradigm - أسلوب كتابة برامج الكمبيوتر) ، والتي تتضمن مجموعة واسعة من أساليب وتقنيات البرمجة المختلفة. غالبًا ما يشار إليها على أنها لغة موجهة للكائنات ، ولكنها ليست كذلك بالمعنى الدقيق للكلمة. في عملية العمل ، يكتسب المطور الحرية المطلقة في اختيار الأدوات بحيث يتم حل المشكلة باستخدام هذا النهج أو ذاك بأكبر قدر ممكن من الكفاءة. بمعنى آخر ، لا تجبر C ++ المبرمج على الالتزام بنمط واحد فقط من تطوير البرامج (على سبيل المثال ، موجه للكائنات).
يحتوي C ++ على مكتبة قياسية غنية تتضمن حاويات وخوارزميات مشتركة ، و I / O ، وتعبيرات منتظمة ، ودعم متعدد مؤشرات الترابط ، والمزيد. أثرت C ++ على العديد من لغات البرمجة ، بما في ذلك: Java ، C # ، D. نظرًا لأن C ++ تنتمي إلى عائلة اللغات بناءً على بناء جملة لغة C ، يمكنك بسهولة إتقان لغات البرمجة الأخرى لهذه العائلة : JavaScript و PHP و Perl و Objective-C وغيرها الكثير. ... أخرى ، بما في ذلك اللغة الأم نفسها - C. ()
خلال وجودها ، رسخت لغة C ++ أساطير مستقرة يمكن دحضها بسهولة (انظر هنا: الجزء الأول والجزء الثاني)

تاريخ اللغة وإصدار المعايير

1983

مبتكر اللغة - بيورن ستروستروب، موظف Bell Labs ، قدم إصدارًا مبكرًا من C ++ ("C مع الفئات")

1985

أول إصدار تجاري لـ C ++ ، تأخذ اللغة اسمها الحديث

1986

الطبعة الأولى من لغة البرمجة C ++ ، كتاب عن C ++ كتبه Björn Stroustrup

1998

تم التصديق على المعيار الدولي للغة C ++: ISO / IEC 14882: 1998 "معيار لغة البرمجة C ++"

2003
2005

إصدار التقرير الفني للمكتبة 1 (TR1). على الرغم من أنه ليس جزءًا رسميًا من المعيار ، فقد وصف التقرير الامتدادات للمكتبة القياسية التي يجب تضمينها في الإصدار التالي من لغة C ++.

2011

إصدار معيار جديد - C ++ 11 أو ISO / IEC 14882: 2011 ؛ تضمن المعيار الجديد إضافات إلى جوهر اللغة وامتدادًا للمكتبة القياسية ، بما في ذلك معظم TR1

2014

إصدار معيار C ++ 14 ("المعيار الدولي ISO / IEC 14882: 2014 (E) لغة البرمجة C ++") ؛ يمكن اعتبار C ++ 14 امتدادًا صغيرًا على C ++ 11 ، يحتوي في الغالب على إصلاحات للأخطاء وتحسينات طفيفة

2017

تم إصدار معيار جديد - C ++ 1z (C ++ 17). أدخل هذا المعيار العديد من التغييرات والإضافات. على سبيل المثال ، يتضمن STD مكتبات من معيار C11 ، وهو نظام ملفات يعتمد على نظام Boost :: filesystem ، ومعظم مكتبة TS I التجريبية.

2020

C ++ 20 هو الاسم غير الرسمي لمعيار ISO / IEC للغة البرمجة C ++ ، والمتوقع بعد C ++ 17. مشروع معيار N4800.

فلسفة C ++

في The Design and Evolution of C ++ (2007) ، يصف Björne Stroustrup المبادئ التي اتبعها في تصميم C ++ (مختصر):

  • احصل على لغة عامة مع أنواع بيانات ثابتة ، وكفاءة وإمكانية نقل لغة C.
  • دعم العديد من أنماط البرمجة بشكل مباشر وشامل.
  • امنح المبرمج حرية الاختيار ، حتى لو أعطته الفرصة لاختيار الخطأ.
  • حافظ على التوافق مع لغة سي قدر الإمكان ، مما يجعل الانتقال سهلًا من برمجة لغة سي.
  • تجنب الخلط بين C و C ++: أي بناء مسموح به في كلتا اللغتين يجب أن يعني نفس الشيء في كل منهما ويؤدي إلى نفس سلوك البرنامج.
  • تجنب الميزات التي تعتمد على النظام الأساسي أو ليست عامة.
  • لا تدفع مقابل ما لم يتم استخدامه - لا ينبغي لأي أداة لغوية أن تقلل من أداء البرامج التي لا تستخدمها.
  • لا تتطلب بيئة برمجة معقدة للغاية.

C و C ++

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

البرنامج 9.1

#يشمل int main () (printf ("٪ s \ n"، (sizeof ("a") == sizeof (char))؟ "C ++": "C")؛ return 0؛)

هذا يرجع إلى حقيقة أن ثوابت الحرف في C من النوع int ، وفي C ++ تكون من النوع char ، لكن أحجام هذه الأنواع مختلفة.

نماذج دورة حياة التطبيق

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

  1. تشكيل المتطلبات ؛
  2. تصميم؛
  3. تطبيق؛
  4. اختبارات؛
  5. تطبيق؛
  6. التشغيل والصيانة.

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


يتم تنفيذ إصدارات مختلفة من النهج التكراري في معظم منهجيات التطوير الحديثة:

عملية التطوير - العملية الموحدة العقلانية (RUP)

العملية العقلانية الموحدة (RUP)(Lean Unified Process) هي منهجية لتطوير البرمجيات مدعومة من قبل Rational Software (IBM). توفر المنهجية توصيات لجميع مراحل التطوير: من نمذجة الأعمال إلى اختبار البرنامج النهائي وتشغيله. تستخدم لغة النمذجة الموحدة (UML) كلغة نمذجة.
تتكون دورة الحياة الكاملة لتطوير المنتج من أربع مراحل ، تتضمن كل منها تكرارًا واحدًا أو أكثر.

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

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

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

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



"تكنولوجيا المعلومات. هندسة النظم والبرمجيات. عمليات دورة حياة البرمجيات ". تم اعتماد هذا المعيار من قبل الوكالة الفيدرالية للتنظيم الفني والمقاييس في الاتحاد الروسي وهو مشابه للمعيار الدولي ISO / IEC 12207: 2008. يحدد هذا المعيار إطارًا عامًا لعمليات دورة حياة البرامج التي يمكن توجيهها في صناعة البرمجيات. لا يقدم المعيار نموذج دورة حياة محدد. أحكامه شائعة في أي نماذج دورة حياة وأساليب وتقنيات لإنشاء البرامج. يصف هيكل عمليات دورة الحياة دون تحديد كيفية تنفيذ أو أداء الأنشطة والمهام المدرجة في هذه العمليات.

عرض الدرس
مواضيع الرسائل
  • مؤسسة البرمجيات الحرة (FSF)
  • تراخيص البرمجيات الحرة
  • برنامج FreeSoftware والمصدر المفتوح
  • تاريخ تطور لغات البرمجة
  • تاريخ C. C و C ++
  • تاريخ
  • نقد C ++
  • تاريخ UNIX
  • نموذج دورة حياة البرنامج الحلزوني
  • UML (لغة النمذجة الإنجليزية الموحدة)
  • إطار عمل حلول Microsoft
  • IDE لبرمجة C / C ++ على Windows
  • مترجمي C / C ++
  • إنشاء تطبيق وحدة التحكم على Windows
أسئلة
  1. لماذا لا يتم تطبيق نموذج الشلال لتطوير البرمجيات على المشاريع الكبيرة؟
  2. ما الفرق بين نماذج الشلال ونماذج التطوير التكرارية؟
  3. ضع قائمة بمراحل تطوير البرمجيات في منهجية Rational Unified Process (RUP)

عندما تعمل سمعتك من أجل ربحك

إدارة المجتمع

إنشاء نغمة الصوت. المعالجة السريعة لكل من التعليقات السلبية والإيجابية نيابة عن العلامة التجارية. إدارة الاتصالات وفق سيناريوهات محددة. بث اللحظات الإشكالية للعميل.

وكلاء النفوذ

إنشاء وتنفيذ "افتراضية" على المنتديات والشبكات الاجتماعية. هناك قاعدة بيانات للحسابات التي تمت ترقيتها والحياة على أكثر من 300 موقع.

العمل مع المراجعات

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

مراقبة وسائل التواصل الاجتماعي

العمل مع أنظمة Youscan و IQbuzz و Brand Analytics. يذكر السيطرة على العلامة التجارية. تحديد الأفكار الرئيسية ، والاستجابة السريعة للسلبية. أداة لا غنى عنها لمراقبة ملاحظات العملاء.

التحليلات والبحوث

تحليل مجال المعلومات والبحث عن فئة المنتج والمنافسين الرئيسيين للعلامة التجارية. تغطي هذه الأداة المهام من مراقبة السمعة والتسويق في الوقت الفعلي إلى البحث المتعمق.

SERM

تحليل مفصل لنتائج البحث عن الكلمات الرئيسية المختارة. جمع الإشارات للعميل في الشبكات الاجتماعية والمنتديات والمواقع الإخبارية. تطوير إستراتيجية للتعامل مع المعلومات السلبية. يتلقى العميل مشكلة خاضعة للسيطرة الكاملة في TOP10.

تاريخ الخلق

نشأت اللغة في أوائل الثمانينيات ، عندما جاء بيورن ستروستروب موظف Bell Labs بعدد من التحسينات على لغة C لتناسب احتياجاته الخاصة. عندما بدأ Stroustrup العمل في Bell Labs في أواخر السبعينيات من القرن الماضي حول مشاكل الانتظار (كما هو مطبق على المكالمات الهاتفية النمذجة) ، وجد أن محاولات استخدام لغات النمذجة الموجودة في ذلك الوقت كانت غير فعالة ، واستخدام لغات الآلة عالية الكفاءة كانت صعبة للغاية. لتعبيرها المحدود. وبالتالي ، تحتوي لغة Simula على ميزات من شأنها أن تكون مفيدة جدًا لتطوير البرامج الكبيرة ، ولكنها بطيئة جدًا ، ولغة BCPL سريعة بدرجة كافية ، ولكنها قريبة جدًا من اللغات منخفضة المستوى وليست مناسبة لتطوير البرامج الكبيرة .

مستذكراً تجربة أطروحته ، قرر Stroustrup استكمال لغة C (خليفة BCPL) بإمكانيات لغة Simula. لغة C ، باعتبارها اللغة الأساسية لنظام UNIX الذي تعمل عليه أجهزة كمبيوتر Bell ، هي لغة سريعة وغنية بالميزات وقابلة للحمل. أضاف Stroustrup القدرة على العمل مع الفئات والعناصر إليها. نتيجة لذلك ، أصبحت مشكلات النمذجة العملية متاحة لحلها من حيث وقت التطوير (بفضل استخدام فئات تشبه Simula) ومن حيث وقت الحساب (بفضل سرعة C). بادئ ذي بدء ، تمت إضافة فئات C (مع التغليف) ، وراثة الفئة ، والتحقق القوي من النوع ، والوظائف المضمنة ، والوسيطات الافتراضية. كانت الإصدارات القديمة من اللغة ، والتي كانت تسمى في الأصل "C مع الفصول" ، متاحة منذ عام 1980.

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

أراد Björn Stroustrup عند إنشاء C ++
  • احصل على لغة عامة مع أنواع بيانات ثابتة ، وكفاءة وإمكانية نقل لغة C.
  • دعم العديد من أنماط البرمجة بشكل مباشر وشامل ، بما في ذلك البرمجة الإجرائية ، وتجريد البيانات ، والبرمجة الموجهة للكائنات ، والبرمجة العامة.
  • امنح المبرمج حرية الاختيار ، حتى لو أعطته الفرصة لاختيار الخطأ.
  • حافظ على التوافق مع لغة سي قدر الإمكان ، مما يجعل الانتقال سهلًا من برمجة لغة سي.
  • تجنب الخلط بين C و C ++: أي بناء مسموح به في كلتا اللغتين يجب أن يعني نفس الشيء في كل منهما ويؤدي إلى نفس سلوك البرنامج.
  • تجنب الميزات التي تعتمد على النظام الأساسي أو ليست عامة.
  • لا تدفع مقابل ما لم يتم استخدامه - لا ينبغي لأي أداة لغوية أن تقلل من أداء البرامج التي لا تستخدمها.
  • لا تتطلب بيئة برمجة معقدة للغاية.

يفسر اختيار C كأساس لإنشاء لغة برمجة جديدة بحقيقة أن لغة C:

1. هي لغة متعددة الأغراض ومختصرة ومنخفضة المستوى نسبيًا ؛
2. مناسبة لمعظم مهام النظام ؛
3. تؤدى في كل مكان وعلى كل شيء ؛
4. أحواض مع بيئة برمجة UNIX.

- B. Stroustrup. لغة البرمجة C ++. القسم 1.6

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

أثناء تطوير C ++ ، تم تضمين ميزات أخرى تداخلت مع قدرات بنيات C ، والتي أثيرت مرارًا وتكرارًا مسألة التخلي عن توافق اللغة عن طريق إزالة التركيبات القديمة. ومع ذلك ، فقد تم الحفاظ على التوافق للأسباب التالية:

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

بحلول عام 1983 ، تمت إضافة ميزات جديدة إلى اللغة ، مثل الوظائف الافتراضية والوظيفة والحمل الزائد للمشغل والمراجع والثوابت وتحكم المستخدم في إدارة الذاكرة المجانية والتحقق المحسّن من النوع ونمط جديد من التعليقات (//). توقفت اللغة الناتجة عن أن تكون مجرد نسخة موسعة من C الكلاسيكي وتمت إعادة تسميتها من C مع الفئات إلى "C ++". تم إطلاقه التجاري الأول في أكتوبر 1985.

يأتي اسم اللغة الناتج من عامل الزيادة اللاحقة للإصلاح أحادي ++ C (زيادة قيمة المتغير بمقدار واحد).

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

تاريخ المعايير

في عام 1985 ، تم إصدار الإصدار الأول من لغة البرمجة C ++ ، والذي قدم الوصف الأول للغة ، والذي كان مهمًا للغاية بسبب عدم وجود معيار رسمي.


في عام 1989 ، تم إطلاق الإصدار 2.0 من C ++. تضمنت ميزاته الجديدة الوراثة المتعددة ، والفئات المجردة ، ووظائف الأعضاء الثابتة ، والوظائف الثابتة ، والأعضاء المحميون. في عام 1990 ، تم نشر الدليل المرجعي المعلق بلغة C ++ ، والذي أصبح فيما بعد أساس المعيار. تضمنت التحديثات الأخيرة القوالب والاستثناءات ومساحات الأسماء والقوالب الجديدة والوحدات المنطقية.

كما تطورت مكتبة C ++ القياسية معها. كانت أول إضافة إلى مكتبة C ++ القياسية هي تدفقات الإدخال / الإخراج ، والتي توفر وسيلة لاستبدال وظائف C printf و scanf التقليدية. في الآونة الأخيرة ، كان أهم تطور للمكتبة القياسية هو تضمين مكتبة النماذج القياسية.

في عام 1998 ، تم نشر معيار اللغة ISO / IEC 14882: 1998 (المعروف باسم C ++ 98) ، الذي طورته لجنة التقييس C ++ (مجموعة العمل ISO / IEC JTC1 / SC22 / WG21). لا يغطي معيار C ++ اصطلاحات تسمية الكائنات ، وبعض تفاصيل معالجة الاستثناءات ، والميزات الأخرى المتعلقة بتفاصيل التنفيذ ، مما يجعل كود الكائن الذي تم إنشاؤه بواسطة مترجمين مختلفين غير متوافق. ومع ذلك ، للقيام بذلك ، أنشأت الجهات الخارجية العديد من المعايير لبنيات وأنظمة تشغيل محددة.

في عام 2005 ، تم إصدار التقرير الفني للمكتبة 1 (الذي يطلق عليه اختصارًا TR1). في حين أنه ليس جزءًا رسميًا من المعيار ، يصف التقرير الامتدادات للمكتبة القياسية التي توقع المؤلفون تضمينها في الإصدار التالي من لغة C ++. يتم تحسين دعم TR1 في جميع برامج التحويل البرمجي لـ C ++ المدعومة تقريبًا.

منذ عام 2009 ، تم تنفيذ العمل لتحديث المعيار السابق ، وكان الإصدار الأولي للمعيار الجديد أول C ++ 09 ، وبعد مرور عام ، C ++ 0x ، اليوم - C ++ 11 ، والتي تضمنت إضافات إلى النواة اللغة وامتدادًا للمكتبة القياسية ، بما في ذلك معظم TR1.

تواصل C ++ التطور لتلبي المتطلبات الحديثة. إحدى المجموعات التي تعمل على تطوير لغة C ++ وإرسال اقتراحات لتحسينها إلى لجنة توحيد C ++ هي Boost ، التي تشارك ، من بين أمور أخرى ، في تحسين قدرات اللغة عن طريق إضافة ميزات البرمجة الوصفية إليها.

لا أحد يمتلك حقوق لغة C ++ ، فهي مجانية. ومع ذلك ، فإن المستند القياسي للغة نفسه (باستثناء المسودات) غير متاح مجانًا.

العلامات: تاريخ توحيد C ، ANSI C ، ISO C ، C99 ، C11 ، ISO / IEC C ، C.

الأصول

C وهو "منتج مصاحب" من إنشاء نظام التشغيل UNIX ، والذي تم تطويره في Bell Laboratories بواسطة Ken Thompson و Denis Ritchie وشركائهم. كتب Thompson بمفرده الإصدار الأصلي من UNIX الذي تم تشغيله على DEC PDP-7 ، وهو أحد الحواسيب الصغيرة الأولى التي تحتوي على 8K كلمة فقط في الذاكرة الرئيسية (كان عام 1969 ، بعد كل شيء).

مثل أنظمة التشغيل الأخرى في ذلك الوقت ، تمت كتابة UNIX بلغة التجميع. يعد تصحيح أخطاء برامج لغة التجميع أمرًا مؤلمًا ويصعب تحسينه ، ولم يكن نظام UNIX استثناءً. قرر طومسون أن هناك حاجة إلى لغة عالية المستوى لتطوير نظام التشغيل بشكل أكبر وتوصل إلى لغة صغيرة. اتخذ طومسون لغة BCPL ، وهي لغة برمجة نظام تم تطويرها في منتصف الستينيات ، كأساس. BCPL ، بدورها ، نشأت من Algol 60 ، واحدة من أقدم اللغات (والأكثر تأثيرًا).

سرعان ما انضم ريتشي إلى مشروع UNIX وبدأ الكتابة في B. في عام 1970 حصلت Bell Labs على PDP-11 للمشروع. نظرًا لأن B كان جاهزًا للتشغيل على PDP-11 ، أعاد Thompson كتابة جزء من UNIX في B. في عام 1971 ، أصبح من الواضح أن B لم يكن مناسبًا تمامًا لـ PDP-11 ، لذلك بدأ Ritchie في إنشاء نسخة موسعة من B. At أطلق عليها أولاً اسم NB (New B) ، ولكن عندما أصبحت اللغة مختلفة جدًا عن B ، تم تغيير الاسم إلى C. بحلول عام 1973 ، كانت اللغة مستقرة بدرجة كافية لإعادة كتابة UNIX فيها. قدم الانتقال إلى C ميزة مهمة: قابلية النقل. من خلال كتابة مترجم C لكل آلة في Bell Labs ، يمكن لفريق التطوير نقل UNIX إليها.

التوحيد

استمرت لغة سي في التطور في السبعينيات ، خاصة من عام 1977 إلى عام 1979 ، عندما أصبح الكتاب الأول عن لغة البرمجة سي ، الذي كتبه بريان كيرنيغان ودينيس ريتشي ونُشر في عام 1978 ، الكتاب المقدس لمبرمجي لغة سي. في غياب معيار رسمي ، أصبح هذا الكتاب - المعروف أيضًا باسم K&R ، أو الكتاب الأبيض كما يحب محبو C تسميته - هو المعيار الفعلي. في السبعينيات ، كان هناك عدد قليل من مبرمجي C وكان معظمهم من مستخدمي UNIX. ومع ذلك ، في الثمانينيات ، انتقلت لغة C إلى ما وراء الحدود الضيقة لعالم UNIX. أصبحت برامج التحويل البرمجي لـ C متاحة على مجموعة متنوعة من الأجهزة التي تعمل بأنظمة تشغيل مختلفة. على وجه الخصوص ، بدأ Xi في الانتشار على منصة IBM PC سريعة التطور.

جنبا إلى جنب مع ارتفاع شعبية ، ظهرت المشاكل. أخذ المبرمجون الذين كتبوا المترجمين الجدد اللغة الموصوفة في K&R كأساس. لسوء الحظ ، تم وصف بعض ميزات اللغة بشكل غامض في K&R ، لذلك فسرها المترجمون في كثير من الأحيان وفقًا لتقديرهم. بالإضافة إلى ذلك ، لم يميز الكتاب بشكل واضح بين ما هو سمة من سمات اللغة وما هي سمة من سمات نظام التشغيل UNIX. تفاقم الوضع بسبب حقيقة أنه بعد نشر K&R C استمر في التطور: تمت إضافة ميزات جديدة إليه وتم حذف الميزات القديمة منه. سرعان ما ظهرت حاجة واضحة لوصف شامل ودقيق وحديث للغة. بدون مثل هذا المعيار ، بدأت لهجات اللغة في الظهور والتي تتداخل مع قابلية النقل - أقوى جانب في اللغة.

بدأ تطوير معيار C الأمريكي في عام 1983 تحت رعاية المعهد الوطني الأمريكي للمعايير (ANSI). بعد العديد من التحسينات ، تم الانتهاء من المعيار في عام 1988 وتم اعتماده رسميًا في ديسمبر 1989 كمعيار ANSI X3.159-1989. في عام 1990 ، تمت الموافقة عليه من قبل المنظمة الدولية للتوحيد القياسي (ISO) كمعيار دولي ISO / IEC 9899: 1990. عادةً ما يُطلق على هذا الإصدار من اللغة C89 أو C90 ، حتى لا يتم الخلط بينه وبين الإصدار الأصلي من C ، والذي يُسمى عادةً K&R C.

خضعت اللغة لتغييرات طفيفة في عام 1995 (التغييرات موصوفة في وثيقة يشار إليها عادة باسم التعديل 1). حدثت تغييرات أكثر أهمية في عام 1999 عندما تم نشر ISO / IEC 9899: 1999. يشار إلى اللغة الموصوفة في هذا المعيار عادةً باسم C99. المصطلحات "ANSI C" و "ANSI / ISO C" و "ISO C" ، التي استخدمت لوصف C99 بسبب وجود معيارين ، غامضة.

في عام 2011 ، مع إصدار C ++ ، تم إصدار معيار C11. على الرغم من وجود معيار 11 عامًا ، لا يزال العديد من المترجمين لا يدعمون بشكل كامل حتى إصدارات C99 ، لذلك سيتم تحديد استخدام معيار C11 بشكل صريح.