هل يمكنك حقًا إنشاء معالج نصوص سريع باستخدام GoF Design Patterns؟

StackOverflow https://stackoverflow.com/questions/15649

سؤال

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

بخلاف استخدام لغة C أو C++، هل يمكنك حقًا استخدام تلك الأنماط والتكاليف العامة الموجهة للكائنات التي تتطلبها لكتابة معالج كلمات كامل الميزات وعالي الأداء؟

أعلم أن Eclipse مكتوب بلغة Java ولكني لم أستخدمه كثيرًا، لذا لا أعرف ما إذا كان كل ذلك سريعًا أو مصقولًا مثل Visual Studio، الذي يحتوي على نظام تحرير نص يعتمد على C++.


لقد استخدمت C++ وJava كأمثلة فقط.يتعلق السؤال أكثر بالعبء الناتج عن وجود الكثير من الكائنات في الذاكرة كما تفعل في تطبيق مثل معالج النصوص أو حتى لعبة.

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

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

هل كانت مفيدة؟

المحلول

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

أعتقد أن هناك الكثير لبناء معالج نصوص عالي الأداء أكثر من مجرد هذه الأنماط الأساسية - لست متأكدًا مما إذا كان هناك أي شيء في GoF يستبعد القدرة على القيام بذلك بنجاح.

بشكل عام، يعد Visual Studio (VS) أكثر تقدمًا وأداء أفضل بكثير من Eclipse - على الأقل إصدارات VS التي رأيتها.يعد Eclipse أحد تطبيقات Java الأكثر إثارة للإعجاب، على الرغم من أنه يعمل بشكل جيد على الأجهزة الحديثة التي تحتوي على الكثير من ذاكرة الوصول العشوائي.

نصائح أخرى

حسنًا، وزن الذبابة هو نمط مثير للسخرية لاستخدامه في معالج النصوص.IIRC، تمت الإشارة إلى كل حرف ككائن [ملاحظة:كان لكل منهما الصورة الرمزية, ، وهو أمر لا يزال جنونيًا لأن نظام التشغيل الخاص بك سوف يرسم ذلك لك بكل سرور].نظرًا لكون المؤشر أوسع من الحرف وجميع العمليات المرتبطة بالمراوغة، ستكون مجنونًا لاستخدام هذا النمط المعين بهذه الطريقة في معالج النصوص.

إذا كنت مهتمًا بتصميم معالجات النصوص، فقد وجدت مقالًا لا يتناول الأنماط ولكنه ينظر في بعض العناصر هياكل البيانات الأساسية لتصميم معالج النصوص واعتبارات التصميم.

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

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

إن الشعور بأنك "تنحرف" عن القاعدة يشجعك على أ) التفكير مرتين، و ب) التعليق جيدًا على التعليمات البرمجية غير الاصطلاحية.

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

بعد أن قلت كل ذلك - لا أستطيع التفكير في أي سبب يمنعك من كتابة محرر نصوص لائق باستخدام الأنماط وJDK الحديث

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

تم إصدار IIRC GoF في عام 1994.حتى في عام 1994، كان Windows 95 Beta متاحًا (ويعمل على جهاز 486DX33) وكان Windows 3.x موجودًا منذ عام 1990 تقريبًا.

Eclipse + netbeans + IntelliJ كلها مكتوبة تقريبًا كلها بلغة Java أو شئ ما الذي يعمل على JVM (وليس C++).في اثنين على الأقل من بيئة التطوير المتكاملة هذه، أمضيت بعض الوقت في التعامل مع كود المحرر، لذا يمكنني أن أؤكد لك أن كل ما يتعلق ببرنامج جافا (وهو ليس بالأمر السهل أيضًا).

كان VS 2005 هو تجربتي الأخيرة في الاستوديو المرئي، وحتى ذلك الحين اعتقدت أن Eclipse كان أكثر استجابة (يتضاعف IntelliJ مع الوقت للإحماء والفهرسة).

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

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

يبدو أن هذا السؤال يتعلق في الواقع بـ Java vs.أداء C++، وهذا ليس اتجاه الكائن بقدر ما يتعلق بالتشغيل على جهاز افتراضي مع مجموعة البيانات المهملة وما شابه.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top