فى زمن كان كل ما كمبيوتر جديد بينزل السوق كان بيتعمله لغة برمجة جديدة كان فى اتنين موظفين فى معامل بيل (Bell Labs) اسمهم دينس ريتشي وكين تومسون الشباب دول عملوا نظام تشغيل صغير “بسيط” وسموه UNIX كانوا بيشتغلوا على كمبيوترات اسمها PDP أحجام كبيرة جداً بمواصفات قوية جداً ساعتها ولكنها حاجة تضحك النهاردة لو قلتلك ان العملاق PDP7 كان فيه 9KB memory فأنت غالباً هتقف شوية تستوعب الرقم ده صح ولا غلطة فى الكتابة بس هو صح تسعة كيلو بايت ذاكرة.
فى الوقت ده لغات زي Fortran و CPL و حتى BCPL وغيرهم كانوا موجدين فى الدنيا .. وكين تومسون كان عايز يحط لغة منهم على ال PDP7
لكن ال 9 كيلو بايت بتوع PDP مكنوش كفاية علشان اللغة تشتغل وده لأن متاح ليها نصف مساحة الذاكرة فقط .. والعهدة على كين تومسون فى الكلام ده.
وبدأ يعمل لغة جديدة عبارة عن نسخة مستوحاة من BCPL و Fortran علشان تقدر تشتغل على 4k فقط من الذاكرة .. وسماها B .. وكان ده الهدف من اللغة .. انها تشتغل على 4K فقط من الذاكرة.
جدير بالذكر ان BCPL كانت نسخة مبسطة من CPL .. وب B نسخة مبسطة او معدلة من النسخة المبسطة بتاعة ال CPL .. واللى عايز اقوله ان CPL كانت لغة متكاملة وفيها حاجات كتير من اللى انت تعرفها النهاردة زي ال data types وال call by reference و call by value وحتى ال lambda expressions .. وكان فيها pointers اللى انت بتحبها .. وتخيل كان فيها garbage collector !!
وغيرها من ال features .. بس كانت مشكلتها ان مع كتر ال features دي بقى صعب ان تكتب لها compiler لكل كمبيوتر .. وصاحبها اضطر يشيل منها feature كتير علشان تبقى سهل تنزل على كمبيوترات كتير وسمى النسخة المبسطة منها BCPL.
خدت بالك ان الشباب مشاكلهم مع اللغات مش ان اللغة ضعيفة ولا بعيده عن الهاردوير ولا اى كلام من ده! .. مشكلتهم ان اللغة مش مناسبة للمكنة اللى هيشتغلوا عليها.
المهم بعد كدة بفترة قصيرة الشركة المنتجة لأجهزة PDP نزلت اصدار جديد اسمه PDP11 بمواصفات اعلى .. فبدأ كين وريتشي يفكروا فى استغلال المواصفات الأعلى دي فى انهم يعيدوا كتابة Unix بلغة high level شوية .. لأن Unix الى هذا الوقت كان مكتوب بـ Assembly.
دينس ريتشي هو اللى اخد على عاتقه تحويل لغة B الى لغة جديدة وسماها C علشان يستخدموها فى إعادة كتابة Linux.
= الـ C تبقى high level اازى معلش ؟؟
يا عم ده كلام اللي عملوها .. متتكلمش معايا انا .. روح اتخانق مع كين ودينس.
المهم .. دينس بدأ يضيف data types للـ C .. ودي مكنتش موجودة فى ال B .. لأن على كلام كين ان PDP7 الميمورى بتاعته كانت متقسمة words فلغة B كانت معتمدة ان كل داتا عندها تبقى word وخلاص .. لكن فى PDP11 بدأت تتقسم لـ bytes .. وبما ان الـ word تساوي اتنين byte يبقى احنا عندنا امكانية توفير كبيرة فى الذاكرة .. لأن كان ممكن يكون احتياجك من وحدة الذاكرة مثلاُ 4 bits فقط لكنك مضطر تخزنها فى أصغر وحدة فى الجهاز وهى word فى الحالة دي هيضيع مننا 12 bits مش هنقدر نستخدمها .. لكن لو اصغر وحدة فى الميمورى هى byte يبقى اللى هيضيع مننا 4 bits فقط .. وكل ما وحدة الميمورى تقل كل ما المساحة الضائعة هتقل.
لو انت مش مستوعب الكلام ده فالموضع ببساطة ان ال memory اللى فى جهاز الكمبيوتر فيها مخازن كتير للداتا والمخزن ده له مساحة ثابته .. وانت ونصيبك مع البيانات اللى بتتخزن فيه .. يا تاخد المخزن بالكامل يا تاخد جزء منه يا تاخد اكتر من مخزن .. الفكرة هنا ان لو فى مخزن تم استخدام جزء منه فمش هينفع نستخدم الجزء الفاضى لأى بيانات اخرى. لأن الجزء الفاضي فى الحقيقة مابيبقاش فاضي فعلاً.. بس مش موضوعنا.
المهم .. على حد قول كين فلغة B هى C بس بدون data types .. وكانت أهم سمة فى الـ C انك تقدر تـ Build ال program بتاعك على اكتر من compiler مش compiler واحد فقط بتاع جهاز واحد فقط .. وكمان انك تعملها compiler جديد مكنش بصعوبة اللغات اللى قبلها .. والكلام ده بأكد ان زمان كان حوار اصعب من النهاردة .. المهم الوضع الجديد ده ادى الى ان Unix ممكن نعمله build ونستخدمه على اى machine جديدة .. مش هنقعد نكتب نسخة Unix جديدة لكل machine .. وده طبعاً مصلحة.
ومش عارف هتتقبل المعلومة دي ازاى بس Unix فى الأساس كان معمول للاستخدام الشخصي .. كين تومسون كان عامله لنفسه بالتعاون مع دينس .. وأقنع معامل بيل بصعوبة واكتر من مرة انه يبقى الـ OS اللى الشركة كلها تعتمد عليه .. وده لأن الشركة كان عندها تجربة سيئة حديثة فى المشاركة مع MIT فى بناء نظام تشغيل معقد اسمه multics (مالتيكس) وخرجوا منه من غير ما يكملوا شغل فيه.
وبالمناسبة كين ودينس اتعرفوا على لغة BCPL لما كانوا شغالين فى مشروع Multics وده لأن صاحب اللغة كان معاهم فى المشروع.
وفى معلومة كدة مش مهمة وهى ان الـ C compiler اتكتب بلغة الـ C .. دي معلومة تخليك مش عارف تنام .. يلا عيش معاها.
فى الوقت ده فى واحد محترم اسمه Brian Kernighan كان زميل كين ودينس فى معامل بيل وحالياً بروفيسور علوم حاسب فى إحدى الجامعات الأمريكية .. الراجل ده اشتغل مع دينس وطلعوا كتاب اسمه “C Programming Language” .. وكان هدف الكتاب ده انه يعلم الناس اللى مش نينجا فى نفسهم ازاى يستخدموا لغة الـ C بأسلوب مبسط .. وده طبعاً ادى الى انتشار اللغة بشكل أسرع.
الـ Unix كان من ضمن اهدافه انه يبقى OS بسيط ومرن وغير معقد .. وكمان انه يوفر building blocks جاهزة تقدر تستخدمها كمبرمج بدل ما تضطر تكتب البرنامج بتاعك from scratch .. والكلام ده فاهمه كويس اى حد اتعامل مع Linux .. عندنا كمية commands جاهزة كتير اللى هى عبارة عن برامج جاهزة بتعمل حاجة واحدة فقط .. ممكن نستخدمها ونرصها فى bash script يعملنا task معقدة بدون ما نحتاج نكتب كل حاجة بنفسنا.
شكل الـ Applications بتاعة النهاردة دي مكنش فى دماغ اى حد من الشباب اللى عملوا C و Unix .. الحقبة الزمنية مختلفة والمجال كان مختلف وال requirements مختلفة .. والمؤكد أن صناعة لغات البرمجة ما وقفتش عند النقطة الزمنية دي .. من الحكاية اللى حكيناها كان ديماً فى دافع للغة جديدة مالوش علاقة بضعف أو قوة اللغات المتاحة .. له علاقة بالـ use case اللى محتاجين فيها اللغة و ال environment اللى هتشتغل عليها اللغة .. ودى الفكرة اللى العلماء المحترمين دول كانوا متبنينها .. وكين تومسون لو ماتعرفش فأخر أعماله كانت لغة Go .. نسأل نفسنا بقى .. ليه تومسون ماتوقفش عند الـ C وقرر بعد العمر يشارك فى كتابة لغة جديدة؟