الانتقال إلى المحتوى الرئيسي

لماذا بايثون هي لغة برمجة بطيئة: الأسباب وإمكانيات التحسين

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

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

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

ومع ذلك ، لا تيأس! هناك عدد من الطرق لتحسين كود بايثون الذي يمكنه تحسين أدائه. وهذا يشمل استخدام وحدات ج / ج modules ، وذلك باستخدام مترجم بيبي ، وتطبيق تحسينات مختلفة مثل الديكور والمولدات. نتيجة لذلك ، يمكن أن يؤدي الاستخدام الصحيح لهذه الأساليب إلى زيادة سرعة برامج بايثون بشكل كبير.

  1. لماذا سرعة تنفيذ التعليمات البرمجية بيثون ترك الكثير مما هو مرغوب فيه?
  2. بطء بايثون: المشاكل الأبدية للغة الشعبية
  3. تجميع غير كاف: ماذا تضحية بايثون?
  4. التفسير: عندما تكون كل خطوة عملية منفصلة
  5. الحظر العالمي: كيف يمنع ذلك زيادة سرعة التنفيذ
  6. أغلفة عديدة: لماذا تؤثر الأغلفة على أداء بايثون?
  7. الأمثل: كيف يمكنني تحسين سرعة التنفيذ على بيثون?
  8. سؤال وجواب
  9. لماذا تعتبر بايثون لغة برمجة بطيئة?
  10. ما هي إمكانيات تحسين سرعة تنفيذ برامج بايثون?
  11. هل من الممكن تسريع سرعة تنفيذ برامج بايثون دون تغيير الكود?

لماذا سرعة تنفيذ التعليمات البرمجية بيثون ترك الكثير مما هو مرغوب فيه?

بايثون ، على الرغم من شعبيتها وسهولة استخدامها ، غالبا ما تعتبر لغة برمجة بطيئة. ويرجع ذلك إلى عدد من العوامل التي تؤثر على سرعة تنفيذ التعليمات البرمجية.

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

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

يمكن أن يؤثر عدد كبير من المكتبات والوظائف القياسية في بايثون أيضا على الأداء. يمكن أن يؤدي استخدام هذه المكتبات إلى استدعاء عدد كبير من الوظائف ، مما يؤدي إلى إبطاء سرعة تنفيذ التعليمات البرمجية.

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

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

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

بطء بايثون: المشاكل الأبدية للغة الشعبية

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

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

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

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

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

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

يمكنك أيضا استخدام تجميع جيت (فقط في الوقت المناسب تجميع) ، على سبيل المثال ، وذلك باستخدام بيبي. جيت تجميع يسمح لك لتسريع تنفيذ البرنامج عن طريق تحويل أجزاء منه إلى رمز الجهاز على الطاير وتنفيذها دون تفسير.

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

تجميع غير كاف: ماذا تضحية بايثون?

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

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

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

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

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

الترجمة الشفوية: عندما تكون كل خطوة عملية منفصلة

السبب في الأداء الضعيف نسبيا للغة بايثون هو تفسيرها. لفهم سبب إبطاء التفسير لتنفيذ البرنامج ، من الضروري فهم مبادئه الأساسية وآليات تشغيله.

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

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

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

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

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

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

الحظر العالمي: كيف يمنع ذلك زيادة سرعة التنفيذ

لغة البرمجة بيثون لديها ميزة تسمى قفل العالمي (جيل). جيل هي آلية مصممة لضمان سلامة العمل مع الكائنات المشتركة وتجنب المشاكل مع الحوسبة المتوازية.

ومع ذلك ، فإن وجود قفل عالمي يمكن أن يقلل بشكل كبير من أداء وسرعة تنفيذ البرنامج. عند تنفيذ برنامج بيثون ، جيل يسمح لك لتنفيذ تعليمات بيثون واحد فقط في وقت واحد.

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

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

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

أغلفة متعددة: لماذا تؤثر الأغلفة على أداء بايثون?

أحد العوامل التي تؤثر على أداء لغة برمجة بايثون هو الأغلفة العديدة التي تستخدم غالبا عند العمل مع المكتبات والوحدات المختلفة.

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

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

عند استخدام الأغلفة ، قد يكون هناك العديد من المشكلات التي تؤثر على الأداء:

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

  2. الشيكات الإضافية: قد تحتوي الأغلفة على فحوصات أو شروط إضافية يجب إجراؤها قبل استدعاء وظيفة أو طريقة. يمكن أن تؤدي هذه الفحوصات أيضا إلى إبطاء البرنامج.

  3. تغيير السلوك: يمكن للأغلفة تغيير سلوك الوظائف أو الأساليب الحالية ، مما قد يؤدي إلى نتائج غير متوقعة أو إبطاء تنفيذ التعليمات البرمجية.

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

أيضا ، عند تطوير الأغلفة الخاصة بك ، تحتاج إلى الانتباه إلى العمليات التي يتم إجراؤها داخل الغلاف وكيف يمكن أن تؤثر على الأداء. في بعض الأحيان يمكنك العثور على بدائل للأغلفة التي لن تؤثر على أداء البرنامج كثيرا.

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

الأمثل: كيف يمكنني تحسين سرعة التنفيذ على بيثون?

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

  1. باستخدام وظائف وطرق مدمجة
  2. توفر بايثون مجموعة واسعة من الوظائف والأساليب المضمنة التي تم تحسينها للأداء العالي. يمكن أن يؤدي استخدام هذه الوظائف والأساليب بدلا من تنفيذ وظائف مماثلة بمفردك إلى تسريع تنفيذ البرنامج بشكل كبير.

  3. توجيه العمليات
  4. نومبي هي مكتبة لبيثون التي تسمح لك لأداء العمليات على المصفوفات بسرعة وكفاءة. يؤدي استخدام نومبي لتوجيه العمليات إلى تقليل وقت تنفيذ البرنامج ، خاصة عند العمل بكميات كبيرة من البيانات.

  5. تجميع التعليمات البرمجية باستخدام المجمعين جيت
  6. لتسريع تنفيذ التعليمات البرمجية بيثون ، يمكنك استخدام المجمعين جيت (فقط في الوقت المناسب). إنها تسمح لك بتجميع التعليمات البرمجية أثناء تنفيذها ، مما يقلل من وقت التفسير ويزيد من سرعة البرنامج.

  7. استخدام الحوسبة غير المتزامنة والمتوازية
  8. بيثون لديها نظام بيئي غني للعمل مع الحوسبة غير المتزامنة والمتوازية. يتيح لك استخدام الآليات غير المتزامنة (على سبيل المثال ، التزامن) أو تعدد مؤشرات الترابط (على سبيل المثال ، الترابط) توزيع الحمل بشكل فعال وتحسين سرعة تنفيذ البرنامج.

  9. التنميط وتحسين الاختناقات
  10. عند تحسين سرعة تنفيذ كود بايثون ، من المفيد استخدام أدوات التنميط. إنها تسمح لك بتحديد" الاختناقات " في البرنامج — أقسام التعليمات البرمجية التي تتطلب المزيد من وقت التنفيذ. بعد ذلك ، يمكنك تحسين هذه الأقسام ، على سبيل المثال ، استبدال العمليات البطيئة بأخرى أسرع أو تنفيذ التخزين المؤقت للنتائج.

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

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

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

سؤال وجواب

لماذا تعتبر بايثون لغة برمجة بطيئة?

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

ما هي إمكانيات تحسين سرعة تنفيذ برامج بايثون?

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

هل من الممكن تسريع سرعة تنفيذ برامج بايثون دون تغيير الكود?

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