من أين يأتي يونيكس؟

تحياتي للجميع - لقد استمتعت في هذه الأسابيع بقراءة بعض الكتب عن البرمجة ، والحقيقة هي أن أفضل طريقة لتعلم البرمجة هي دائمًا من خلال كتاب ، وأي مقال ، ودليل تعليمي ، ودليل يمكن للمرء أن يجده (بما في ذلك كتابي) هو مجرد المعايير عند مقارنتها بكتاب حقيقي حول هذا الموضوع. الآن ، علينا تحديد ماهية الكتاب "الحقيقي" أيضًا ، نظرًا لأنه ليست كل الكتب جيدة في العادة ، ويمكن أن يكلف الكثير منها أكثر مما يستحق ويضيع الوقت.

على مدار هذه السنوات ، تباينت قائمة الكتب التي قرأتها وقائمة الكتب التي يمكنني أن أوصي بها قليلاً ، ولكن بلا شك من بين بعض الكتب المفضلة لدينا (بدون ترتيب محدد):

  • هاكر أخلاقي معتمد من CEH بواسطة مات ووكر.
  • بداية Python: من المبتدئ إلى المحترف بواسطة Magnus Lie Hetland.
  • القرصنة: فن الاستغلال لجون إريكسون.
  • البدء مع Arduino بواسطة Massimo Banzi.
  • تعلم شيل باش من تأليف كاميرون نيوبام وبيل روزنبلات.
  • تعلم محرري vi و vim بواسطة Arnold Robbins و Elbert Hannah و Linda Lamb.
  • Linux Kernel in a Nutshell بواسطة Greg Kroah-Hartman (مطور Gentoo أيضًا).
  • حديث C بواسطة Jens Gustedt
  • كتيب شيلكودر لكريس أنلي ، جون هيزمان ، فيليكس «FX» ليندر وجيراردو ريتشارت.
  • لغة البرمجة C بواسطة Brian W. Kernighan و Dennis M. Ritchie (مبتكرو C)
  • تصحيح الأخطاء باستخدام GDB بقلم ريتشارد ستالمان ورولاند بيش وستان شيبس وآخرون.
  • كشف القرصنة على Linux: أسرار وحلول أمان Linux من مجموعة كبيرة من باحثي ISECOM ، بما في ذلك Pete Herzog ، و Marga Barceló ، و Rick Tucker ، و Andrea Barisani (مطور Gentoo سابق آخر) ، و Thomas Bader ، و Simon Biles ، و Colby Clark ، و Raoul Chiesa ، بابلو إندريس ، ريتشارد فيست ، أندريا غيرارديني ، جوليان "هامر جامر" هو ، ماركو إيفالدي ، درو لافين ، ستيفان لو بريستي ، كريستوفر لو ، تاي ميلر ، أرماند بوتشيتي وآخرون.
  • أنظمة التشغيل: نهج قائم على المفهوم بقلم Dhananjay M. Dhamdhere
  • Pro Git لسكوت تشاكون وبن ستراوب
  • برمجة الخبراء C: أسرار عميقة بقلم بيتر فان دير ليندن.

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

يونكس وسي

عندما نتحدث عن UNIX ، يتشابك التاريخ مع أصل هذا النظام وتطور اللغة التي تعد حتى يومنا هذا واحدة من أكثر اللغات استخدامًا في تطويره ومشتقاته (بما في ذلك Linux). والغريب أن هذين الشخصين ولدا من "خطأ".

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

لم يكن حتى عام 1970 أن بدأ اثنان من مهندسي شركة Bell العمل على نظام تشغيل بسيط وسريع وخفيف الوزن لجهاز PDP-7. تمت كتابة النظام بأكمله المجمع وتم استدعاؤهم UNIX كمحاكاة ساخرة متعدد لأنه أراد فقط القيام ببعض الأشياء ، ولكن القيام بها بشكل جيد بدلاً من العمل الضائع الهائل الذي كان يعنيه الثاني. الآن يمكنك أن تفهم لماذا عصر يبدأ في 1 يناير ، 1970. 🙂 حقيقة غريبة بالنسبة لي. في ذلك الوقت ، لم يكن هناك حديث عن C بحد ذاته ، ولكن عن a جديد ب منذ أن جاءت أفكار ريتشي من لغة B المستخدمة بالفعل في ذلك الوقت.

أوائل ج

على مر السنين (1972-3) ، بدأ استخدام مصطلح C حيث بدأت اللغة الجديدة في التبلور ، وفي هذا الوقت ولدت حقيقة غريبة أخرى ، يقول العديد من المبرمجين ونكات المبرمجين:

يعرف المبرمجون أنك تبدأ العد من 0 بدلاً من 1.

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

array[8]=2;

يخبرنا أن العنصر من المصفوفة يتم تعريفها على أنها 2 ، لأنه تمت إضافة 8 وحدات إلى المصفوفة للوصول إلى مساحة الذاكرة حيث سيتم تخزين العنصر 2. قبل C ، بدأت العديد من اللغات في العد من 1 ، بفضل C ، والآن تبدأ جميعها تقريبًا بـ 0 🙂 لذا فليس خطأ المبرمجين ، بل خطأ المؤلفين المترجمين.

شل بورن

هذا موضوع ، على الرغم من عدم ارتباطه بشكل مباشر بـ C ، إلا أنه يمكن أن يساعد أكثر من شخص في فهم سبب خصوصية برمجة شل ، ومن المؤكد أنه من الغريب معرفته. كتب ستيف بورن مترجمًا لـ Algol-68 في ذلك الموسم ، وهي لغة تستخدم فيها المفاتيح ( {} ) بالكلمات ، لذلك يمكننا تعريفها على النحو التالي في C:

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

هذه فقط بعض الأمثلة لما يفهمه Algol ، ولكن إذا طبقناه على برمجة shell اليوم ، فسوف تفهم لماذا تتطلب برامجك في shell fi لكل منهما if 🙂 مثيرة للاهتمام بالتأكيد.

بدء القراءة

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


محتوى المقال يلتزم بمبادئنا أخلاقيات التحرير. للإبلاغ عن خطأ انقر فوق هنا.

13 تعليقات ، اترك لك

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني.

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   خوان قال

    مقالتك كانت ممتعة جدا بالنسبة لي. شكرا جزيلا.

  2.   HO2Gi قال

    مثيرة جدا للاهتمام كما هو الحال دائما.

  3.   خوسيه رافائيل قال

    مثيرة جدا للاهتمام التوضيحات جيدة.

  4.   الاسكندرية قال

    ممتاز

  5.   دانيالجا قال

    مثير للإعجاب !!! شكرا جزيلا.

  6.   ثان قال

    متعدد؟ لن يكون متعدد (https://en.wikipedia.org/wiki/Multics)

    اللغات ذات الفهارس من 1 هي اختراع الشيطان ...

    1.    كريساد قال

      ملاحظة مثيرة للاهتمام 🙂 أفترض أنه في وقت ما من التاريخ تم استخدام كلا المصطلحين:

      https://www.landley.net/history/mirror/collate/unix.htm

      ومن الواضح أنه نفس الكتاب الذي كتب في منتصف التسعينيات.

      شكرا على التوضيح 🙂 تحياتي

      1.    ثان قال

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

        1.    كريساد قال

          هاهاها فضولي بالتأكيد ، لقد راجعت نسختي الإنجليزية من الأسرار العميقة ، وهناك أيضًا تقول Multrics (لأنك جعلتني أشك أيضًا) ... ربما كان تعبيرًا عن الوقت 😛

          تحياتي

  7.   ED774 قال

    مساهمة كبيرة

  8.   مجهول قال

    أمر مثير للاهتمام ، على الرغم من أنه من المؤكد أن Multrics يرجع إلى خطأ في الطباعة ، حيث أن الاسم الأصلي لنظام التشغيل هذا كان Multics ، وكان Unix يُطلق عليه في الأصل Unics ، في إشارة تحديدًا إلى نظام التشغيل الرائع هذا ، وفي النهاية وبالصوتيات ، Unics se تحولت إلى Unix ، الآن ، ما عليك سوى ذكر اسم الشخص الذي يعتبر نفسه مؤلف Unix ؛ كين طومسون ، تقول الأسطورة أن كلاً من طومسون وريتشي كانا في كافيتريا مختبرات بيل للتعليق على مشاريعهما وكان ريتشي قد اقترح على طومبوسون إعادة كتابة برنامج Unics مع C ، واللغة التي كتبها ... والباقي ، هو التاريخ. 😉

    بالمناسبة ، كانت جميع البرامج تُكتب سابقًا بتعليمات الجهاز ، مما جعلها تعتمد كليًا على الأجهزة ، كان ابتكار C ، بصرف النظر عن تسهيل كتابة البرامج ، هو أن اللغة كانت مستقلة عن الأجهزة التي تنفذ compilers ، وهي فلسفة ستأخذها بعد سنوات عديدة Java ، بمعنى أن البرامج لم تكن تعتمد على نظام التشغيل ، مضيفةً آلة جافا الافتراضية الشهيرة.

    1.    كريساد قال

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

      أما بالنسبة للثانية ... أسطورة أخرى تشوه الواقع ، لأنه قبل C كان هناك B و A و pascal و Ada و algol-60 و PL / 1 وعدد قليل من اللغات الأخرى التي كانت لغات برمجة مناسبة (مختلفة جدًا عن Assembly ولهجاتها من خلال الهندسة المعمارية التي تعتمد على أجهزة المعالج) لذلك لم "يبتكر" C بهذا المعنى ، لقد تبنى ببساطة الحلول الموجودة بالفعل في لغات أخرى وفي النهاية أصبحت شائعة بشكل أسرع وأفضل من هذه ... الجزء الوحيد الحقيقة هي أن Java استندت إلى مفهوم قابلية النقل هذا لإنشاء آلة افتراضية لاحقًا ، ولكنها لم تعتمد فقط على C لهذا الغرض ، ولكنها اتبعت نماذج أخرى ، وإلا فلن يكون لدينا نموذج البرمجة الموجهة للكائنات في جافا ...

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

  9.   اجناسيو اسكويفيل قال

    كالعادة المقال ممتع جدا شكرا للمساهمة