كيف يتمكن الحاسوب من فهم لغات البرمجة ؟
دائماُ ما أجد لغات متنوعة من لغات البرمجة وأصدارات يتم تحديثها ولغات يتم أبتكارها وأخرى يتم تعديلها
من يقوم بكل هذا ؟
والأهم هو كيف يفهم الكمبيوتر لغات البرمجة المختلفة او كيف يتم دمج هذه اللغات مع الكمبيوتر ويقوم بتفسيرها بهذا الشكل ؟ ، كمثال :- عندما تقوم بكتابة عدة أسطر من الأكواد يتم تفسيرها فى الجهة المقابلة لأشكال متناسقة وينتهى الامر بتصميم متكامل لموقع ويب متناسق شكله رائع او تطبيق على الموبايل او لعبة مثيرة
التعليقات
كتبتها في مكان آخر. تكاسلت عن إعادة كتابتها بالفصحى:
- الترانسيستور هو مكون الكتروني نعتبره يشبه حرف ال Y
عند امرار تيار كهربي بسيط في العصا السفلية (base) يتم امرار التيار من العصا اليسرى لليمني. (مثل المفتاح الكهربي. عندما تضعط على الزر يتم توصيل التيار)
عند عدم وجود تيار تكون الدائرة مفتوحة.
وجود تيار على base (العصا السفلية) = 1
عدم وجوده = 0
أي ان الترانسيستور يمكنك اعتباره مساوي لهذا السطر
if (base == 1) connect else disconnect
الآن اصبح لدينا تعليمة if بسيطة في شكل عنصر كهربي
يمكنك استخدام اكثر من ترانسيستور عن طريق توصيلهم مع بعض لكي تحصل على العمليات المنطقية and, or, xor, not ... الخ
يمكنك استخدام أكثر من عملية منطقية للحصول على عمليات حسابية (+, -, *, /) .. الخ
كل عملية من دولت بتعمل على 1 بت فقط. أما تجيب 8 دوائر جمع ونوصلها توازي مع بعض كده نقدر نجمع عددين 8 بت (أي النوع char في معظم أنظمة السي).
يمكنك الآن ادخال واخراج وجمع وطرح الأعداد الكبيرة (متعددة البت) وكذلك فحصها.
تقوم بتصميم دائرة كهربية تقرأ عدد:
لو العدد 1 -> اجمع ( 1 تعني 1 بالنظام الثنائي)
لو العدد 2 -> اطرح (2 تعني 10 بالنظام الثنائي)
لو العدد 3 -> اضرب (3 تعني 11 بالنظام الثنائي)
لو العدد 4 -> اقفز لهذا العنوان في البرنامج (goto) (هذه تعني 100 بالنظام الثنائي)
وهكذا
- يمكنك الآن كتابة كود يعمل على الكومبيوتر بإستخدام هذه الاعداد. طبعا الكومبيوتر الرقمي المبني على الترانسيستور لا يفهم إلا الاعداد بصورتها الرقمية الثنائية (0,1).
أي بتبرمجها بالصفر والواحد (ماكتبته بالأعلى بداخل الأقواس).
ده في أسوأ الحالات. أي مهندس كهربي عارف مدى تفاهة دائرة تحول من نظام عشري أو ستعشري لنظام ثنائي. لذلك تجد الكثير من الناس يسمي هذا الكود hex code لأنهم يفضلون أن يستخدموا أعداد اكبر من صفر وواحد فقط.
يمكن الآن حساب الأعداد لكنا نحتاج إلى طريقة لتخزينها. يمكن استخدام دائرتي NOR (مكونة من ترانسيستورات كما قلنا) لعمل ذاكرة 1 بت. يمكن استخدام 8192 دائرة منها لعمل ذاكرة 1 كيلوبايت وهكذا.
لكن الكود مازال عبارة عن ارقام (سواء ارقام ثنائية أو عشرية فما زالت صعبة للحفظ) ماذا نفعل؟ عملنا لغة اسمها assembly. سمينا ال 1 add وسمينا ال 2 sub وال 3 mul وهكذا عشان تكون سهلة الإستخدام قليلا
لكن الكود مازال بدائي كتبنا كومبيلر بيحول لغة اقرب من الإنسان (سي مثلا) إلى assembly
مازالت السي معقدة. عملنا لغة high level مثل python أو php مثلا وطبقناها في السي.
هذه القصة باختصار
أشياء لم أتكلم عنها:
كيف تعمل ترانسيستور؟ اقرا كتاب في الهندسة الكهربية - فصل "تطبيقات على تطعيم أشباه الموصلات".
هل يجب وجود transistor؟
لا اطلاقا. نحتاج فقط إلى هذه ال if البسيطة التي تعمل مثل حرف ال Y. يمكنك تطبيق ذلك بالترانسيستور أو باستخدام ال vacuum tubes أو حتى باستخدام التروس (mechanical computer) وبعد عدة عقود من الزمن ربما عن طريق تأثيرات ميكانيكا الكم (quantum computers).
- هذه الجزئية مكانها بالأعلى لكني نقلتها هنا لمنع التشتيت. من فروع الرياضيات المهمة في تصميم هذه الدوائر الجبر البولياني boolean algebra. هذا فرع من الجبر يختص فقط بكيفية تحويل المعادلات المنطقية إلى صور أبسط (صور بسيطة يعني مكونات اقل يعني توفير فلوس).
رد ممتاز جدا و انا استفدت منة كثيرا و لكن ما اريد فهمة هو كيف يمكن للكمبيوتر التعرف على اللغات البرمجية
مثال اذا كان الحاسوب الخاص بك يعمل بنظام الماك و الاخر يعمل بالويندوز فكيف لا يستطع الويندوز تشغيل تطبيقات الماك اذا كان الحاسوبان يعتمدان على لغة assembly لفهم لغه برمجة التطبيقات هل تفهم قصدى ما الفرق الذى يجعل لهذا النظام برامجه الخاصة و هذا برامجه الخاصة مع ان الجهازين يعملان بنفس قطع الهارد وير
انا لم ادرس الحاسوب من قبل و لكن هذا سؤال بداعى الفضول ، وشكرا لك
عدا البرامج الرياضية البحتة فجزء كبير من البرنامج يتمحور حول معالجة البيانات من العالم المحيط و إعادة ارسالها.
لأنك لا تقوم باختراع العجلة من جديد، تستخدم المكتبات لتسهيل العمل. لكن هذه المكتبات بدورها تعتمد على مكتبات أخرى ويعتمد الكل على نظام التشغيل.
ونفس البرنامج على الماك والويندوز ربما يقضي نفس الغرض لكن الية تعامله مع النظام مختلفة تماما لأن النظام نفسه مختلف.
يوجد طرق لتشغيل برامج مصممة لنظام ما على نظام أخر، مثلا:
الإلتزام بواجهة برمجية محددة (API): مثلا كلا من لينكس وماك يلتزمان بمواصفات POSIX وهو ما يجعل البرامج المكتوبة طبقة ل POSIX تعمل على كليهم بعد إعادة الترجمة.
محاكاة النواه: هذا ما يقوم به Windows 10 لدعم تطبيقات لينكس عبر WSL
محاكاة مكتبات النظام: هذا ما يقوم به wine لدعم تشغيل برامج ويندوز على نظم أخرى
الكمبيوتر عند المستوى الأكثر انخفاظاََ لا يعرف الا 0 (لا يوجد كهرباء) و 1 (يوجد كهرباء), أي لغة برمجة لديها مترجم أو محلل (compiler) يترجم الأكواد التي لا يفهمها الا البشر الى لغة يفهمها الكمبيوتر. هذا تفسير عام و سطحي, يمكنك التعمق أكثر في هذا المجال و هو علم كامل يدرس في مدارس الهندسة لمدة سنتين.