السلام عليكم
بدأت تعلم البرمجة حديثا وقد قرأت على موسوعة حسوب أن لغة بايثون هى لغة مفسرة وليست مبنية
فما الفرق بين اللغة المفسّرة interpreted، والمبنية compiled
وما معنى ذلك؟
اعتقد ان المقصود هو تسلسل تحويل الكود و ليس (إلى ماذا يتحويل | implementation)
الفرق الجوهري أنَّ في اللغات المبنية، يُحوِّل المُصرِّف (compiler) البرمجيّة إلى لغة الآلة لتُنفَّذ عبر العتاد مباشرةً، بينما في اللغات المُفسرة، تُحوَّل البرمجيّة إلى "صيغة أخرى (أشهر هذه الصيغ الرُقامة - bytecode)" ليقوم المُفسِّر بعدها بتفسير وتنفيذ هذه الصيغة.
ماذا عن visual c++ compiler ? هو مُجمع لكنه بنفس الوقت يقوم بتحويل الكود إلى لُغة وسيطة و التي هي CLI
ألا تشعر بشيء من التناقض بين معطياتي و معطياتك ؟
بينما في اللغات المُفسرة، تُحوَّل البرمجيّة إلى "صيغة أخرى (أشهر هذه الصيغ الرُقامة - bytecode)" ليقوم المُفسِّر بعدها بتفسير وتنفيذ هذه الصيغة.
اعتقد ان كلامك غير صحيح فلغة الجافا تستخدم ال bytecode وهي لغة مبنية.
يتم تحويل الbytecode الى لغة الالة لاحقاً.
، يُحوِّل المُصرِّف (compiler) البرمجيّة إلى لغة الآلة لتُنفَّذ عبر العتاد مباشرةً، بينما في اللغات المُفسرة، تُحوَّل البرمجيّة إلى "صيغة أخرى (أشهر هذه الصيغ الرُقامة - bytecode)" ليقوم المُفسِّر بعدها بتفسير وتنفيذ هذه الصيغة.
هذا الكلام غير صحيحٍ؛ فالتجميع ليس شرطًا أن يكون للغة الآلة؛ مثلًا:
TypeScript تُجمّعُ للغة JavaScript تجميع من نوع "Source to Source"[1].
مُجمّع Emscripten يُجمّع LLVM إلى شيفرة ASM.JS أو صيغة WASM، تعمل في محرك جافاسكريبت(مثلًا قد يستخدم لتجميع C/C++) تجميع من نوع "source-to-source" أيضًا [2].
وليس شرطًا أن تكون اللغة المفسرة تُحول لصيغة Bytcode قبل التفسير، مثلًا: مفسر Lua القياسي حيث أنه في الأساس مبني ليكون قابل للتضمين في مختلف البرمجيات بمختلف الأنظمة والمعماريات [3].
وقد تكون اللغة تملك خطوتين أو عدّة خطوات لتصل إلى مرحلة التشغيل النهائي لدى المستخدم وليس شرطًا أن تكون مجمعة أو مفسرة، فمثلًا لغة جافا:
لغة مجمعة لأنها تُجمع إلى صيغة JIT وقت التجميع.
صيغة JIT قد تفسر مباشرةً أو تجمع إلى لغة الآلة أو أشكال أكثر تعقيدًا باختلاف ألة جافا الإفتراضية يمكنك مراجعة قائمة آلات جافا على ويكيبيديا:
تعليقي كان عن "الفرق الجوهري" بين الإثنين، بعيدًا عن التفاصيل المعقدة (اللغة المحلية للآلة، نظم التجميع الحديثة كالتجميع الآني ومن مصدر لمصدر، مراحل التجميع ...إلخ)
لا أنت حصرت التجميع والتفسير في نوعين فقط ولم تكتب أنك تمثل حتى..
وأظن أنَّه الفرق السائد والجواب العام الذي ستحصل عليه من جل المجتمع [1][2].
جل المجتمع إجابتين لشخصين على Stackoverflow وليست حتى إجابات ويكي!
ومَن قال أنَّه شرط؟ أنا قلت أنَّ هذه إحدى الصيغ المشهورة التي قد يُحوَّل إليها الكود.
أنت الذي قلت أنه شرط وارجع لتعليقك الأولي.
وفعلًا هذا الفرق الجوهري (قبل دخول أنظمة التجميع المختلطة والأحدث على الأقل)
من قال هذا؟ أنت؟ طبعًا هذا غير صحيح وليس الفرق الجوهري.
إجابتين لشخصين حصلا على مِئات التأييدات! وبالمناسبة الرابط الثاني كان معطوب (هل أطّلعت على الإجابات؟ لأنّك لم تشتكِ)، تفضل الصالِح:
ما زال ليس جل المجتمع.
أنا لم أقل أنَّ اللغة ستحوَّل إلى bytecode حصرًا وإنَّما قلت bytecode مجرَّد صيغة قد تُحوَّل إليها، انظر:
لغة Lua لا تحول إلى أي صيغة قبل التنفيذ ليس شرطًا أن تحول اللغة قبل التفسير..
معلومة: لن تدفع مالًا إن لم تستميت لتثبت أنك صحيحًا، ثلاثتنا نرى أن تعليقك به مشكلة، لا أعرف ماذا تحاول أنت تفعل أو تثبت لديك المصادر اطلع عليها إن أردت.
كلامك الحالي ليس به مشكلة ولو كنت علقت به لم أكن لأرد عليك المشكلة أنك كتبت:
البرمجيّة إلى لغة الآلة لتُنفَّذ عبر العتاد مباشرةً.
مجتمع stackoverflow ليس غبي لهذه الدرجة. دعنا نتفرض أنَّ 500 شخص وقعوا في هذا الخطأ، السؤال هنا لم يأتِ مِقدام ليصحح الخطأ بعد كل هذه السنوات؟ أنا لا استخدم السؤالين كحجة وإنما لأقرب لك الفكرة.
بعيدًا عن أن الإجابتين بعيدتين عن معنى تعليقك الأول مازال هذا لا يعبر عن جل المجتمع.
ثلاثتكم ترون كلامي خاطِئًا (سأتجاهل أنَّك انتخبت نفسك تلقائيًا لتتكلَّم عن البقيّة) إذًا أنا مُخطئ؟! ما هذه المغالطة اللطيفة؟!
لا يعني أنك مخطئ، يعني أنه في تعليقك مشكلة، ربما خانك التعبير، ربما يفهم خطأً ولديك المصادر راجعها وقارنها بتعليقك.
عمومًا لا يستحق الأمر كل هذا الجدال، على أي حال شكرًا على اجابتك ومحاولتك المساعدة في الويب العربي.
التعليقات