<p>شاشة استدعاء تجميد Mudlet () على حاوية قابلة للتعديل</p>

تم إنشاؤها على ١٠ يناير ٢٠٢١  ·  13تعليقات  ·  مصدر: Mudlet/Mudlet

ملخص موجز للقضية

يتجمد Mudlet بعد ثوانٍ قليلة من كتابة الأمر الخاطئ

خطوات إعادة إظهار المشكلة

يوضح مستخدم Discord تشاد:

  1. لذلك إذا قمت بعمل حاوية قابلة للتعديل ، تسمى testContainer
    testContainer = Adjustable.Container:new({name = "ARS main window"})
  2. وأقوم بعمل lua testContainer في موجه أوامر cmd الخاص بي
  3. يتجمد mudlet ثم يعطيني خطأ في الذاكرة

خرج الخطأ

[ERROR:] Objekt:<run lua code> Funktion:<Alias4>
        <not enough memory>

معلومات إضافية ، مثل إصدار Mudlet ونظام التشغيل والأفكار حول كيفية الحل / التنفيذ:

هذا ليس فقط على جهاز الكمبيوتر المحمول الخاص بي ، أو ملف تعريف واحد فقط.
هذا على جهاز الكمبيوتر المحمول والكمبيوتر الشخصي (ذاكرة وصول عشوائي 16 جيجابايت)
في التشكيلات الجديدة ، التشكيلات القديمة
Mudlet 4.10.1

bug high lua only

ال 13 كومينتر

يبدو هذا السلوك متسقًا مع تكرار لا نهائي يحدث في كود Lua بطريقة ما ...

وصفها بأنها عالية لأنها سلوك سيء ، نتوقع أن يقوم Mudlet بعمل أفضل هنا.

هل سيكون من العدل تحديد هذا على أنه من المحتمل أن يكون مشكلة لوا فقط ؟

يبدو هذا السلوك متسقًا مع العودية اللانهائية التي تحدث في كود _Lua_ بطريقة ما ...

نعم هذا هو السبب. نظرًا لأن Geyser يحتفظ دائمًا بمرجع للوالد في الحاوية (myGeyserElement.container).
هذه مشكلة معروفة في العرض وهي أيضًا سبب أن منشئ Geyser صنع وظيفة Geyser.display (منذ 11 عامًا: العيون:).
https://github.com/Mudlet/Mudlet/blob/d84f0b5b171370feb96db2f1950a3fd6dac1709f/src/mudlet-lua/lua/geyser/GeyserUtil.lua#L35
لذلك بدلاً من استخدام العرض ، سيكون الحل البديل هو استخدام Geyser.display.

هل يمكننا تحديد كائن Geyser إذا تم تقديمه؟ يمكن أن تجعل display() يستدعي هذه الوظيفة في هذه الحالة تلقائيًا.

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

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

test = {}
test[1] = test
display(test)

لن تسبب حلقة لا نهائية.

حاولت التعليق على https://github.com/Mudlet/Mudlet/blob/4042ac7600db8196b219b3ae43a977045d591fdd/src/mudlet-lua/lua/DebugTools.lua#L185 ويبدو أن ذلك يعمل ولكني لست متأكدًا مما إذا كان ذلك قد يتسبب في حدوث أشياء أخرى القضايا ولماذا كان هناك في المقام الأول.

غير ذي صلة ، يبدو أن هناك تحسنًا في ترتيب المفاتيح الثابت الذي يمكننا الاستفادة منه: https://github.com/lunarmodules/Penlight/pull/293

بعد البحث أكثر ، لاحظت أن المشكلة تحدث بشكل أساسي في حالة استخدام الملصقات المتداخلة (تستخدم قائمة النقر بزر الماوس الأيمن على حاوية قابلة للتعديل تسمية متداخلة)
أنا شخصياً ما زلت أعتقد أن التعليق https://github.com/Mudlet/Mudlet/blob/4042ac7600db8196b219b3ae43a977045d591fdd/src/mudlet-lua/lua/DebugTools.lua#L185 out هو حل قابل للتطبيق لهذه المشكلة.

لقد اختبرت https://github.com/kikito/inspect.lua والذي يعمل بشكل أو بآخر على نفس طريقة الكتابة الجميلة ويقومون بحل هذه المشكلة بنفس الطريقة (كما لو تم التعليق على جزء الجداول [t]) ولكن مع اختلاف أن كل جدول مكرر يحصل على معرف بدلاً من <cycle>

لقد وجدت أيضًا مشكلة مماثلة باستخدام مثال التسميات المتداخلة الثاني من Geyser Wiki (المثال الذي يحتوي على "mainlabel") https://wiki.mudlet.org/index.php؟title=Manual:Geyser#Demo -> حرك الماوس فوق لا يزال "التمرير فوق الجزء" ثم استخدام lua display(Geyser) يتسبب في حدوث خطأ في التدفق التراكمي (لا يحدث في حالة استخدام الفحص)

ربما يكون التبديل من الكتابة الجميلة إلى الفحص أمرًا يجب التفكير فيه.

ليس لدينا سبب معين للالتزام بواحد - إذا كان الآخر أفضل ، فلنبدأ. كيف يمكن المقارنة بين الاثنين ، هل يمكنك النشر قبل / بعد ذلك؟

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

ليس لدينا سبب معين للالتزام بواحد - إذا كان الآخر أفضل ، فلنبدأ. كيف يمكن المقارنة بين الاثنين ، هل يمكنك النشر قبل / بعد ذلك؟

إنها تفعل الشيء نفسه إلى حد كبير ولكني لا أعرف ما إذا كانت "أفضل" على الأقل لا تتعطل في Geyser (مما يجعلها أفضل في رأيي) ؛)
سأفتح العلاقات العامة

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات