Mudlet membeku beberapa detik setelah mengetik perintah yang salah
Chad pengguna Discord menjelaskan:
testContainer = Adjustable.Container:new({name = "ARS main window"})
lua testContainer
di cmd Prompt[ERROR:] Objekt:<run lua code> Funktion:<Alias4>
<not enough memory>
itu bukan hanya di laptop sial saya, atau hanya 1 profil.
itu di laptop dan pc saya (ram 16gb)
di profil baru, profil lama
Lumpur 4.10.1
Perilaku itu terdengar konsisten dengan rekursi tak terbatas yang terjadi dalam kode Lua entah bagaimana...
Memberi label tinggi karena perilakunya yang buruk, kami berharap Mudlet bekerja lebih baik di sini.
Apakah adil untuk menandai ini sebagai satu- satunya masalah
Perilaku itu terdengar konsisten dengan rekursi tak terbatas yang terjadi dalam kode _Lua_ entah bagaimana...
Ya itulah alasannya. Karena Geyser selalu menyimpan referensi induk dalam wadah (myGeyserElement.container).
Ini adalah masalah yang diketahui dengan tampilan dan juga merupakan alasan pencipta Geyser membuat fungsi Geyser.display (11 tahun lalu :eyes: ).
https://github.com/Mudlet/Mudlet/blob/d84f0b5b171370feb96db2f1950a3fd6dac1709f/src/mudlet-lua/lua/geyser/GeyserUtil.lua#L35
Jadi, alih-alih menggunakan tampilan, solusinya adalah menggunakan Geyser.display.
Bisakah kita mengidentifikasi objek Geyser jika diberikan? Bisa membuat display()
memanggil fungsi itu dalam kasus itu secara otomatis.
Mungkin kami dapat membantu tampilan untuk tidak pernah mengalami loop tak terbatas ini lagi?
Misalnya, simpan daftar semua tabel yang sudah ditampilkan, dan jangan tampilkan versi kedua penuh lagi.
Setelah menggali sedikit saya menemukan bahwa prettywrite memiliki failsafe terhadap infinite loop di dalamnya tetapi gagal untuk Geyser dalam beberapa kasus (saya tidak yakin mengapa)
Misalnya:
test = {}
test[1] = test
display(test)
Tidak akan menyebabkan infinite loop.
Saya mencoba berkomentar https://github.com/Mudlet/Mudlet/blob/4042ac7600db8196b219b3ae43a977045d591fdd/src/mudlet-lua/lua/DebugTools.lua#L185 dan itu tampaknya berhasil tetapi saya tidak yakin apakah itu dapat menyebabkan yang lain masalah dan mengapa itu ada di tempat pertama.
Inilah alasannya: https://github.com/lunarmodules/Penlight/pull/38
Tidak terkait, sepertinya ada peningkatan untuk urutan kunci yang konsisten yang dapat kami manfaatkan: https://github.com/lunarmodules/Penlight/pull/293
Setelah menggali lebih jauh, saya perhatikan bahwa masalah ini terutama terjadi jika Label bersarang digunakan (menu klik kanan Kontainer yang Dapat Disesuaikan menggunakan Label bersarang)
Saya pribadi masih berpikir bahwa berkomentar https://github.com/Mudlet/Mudlet/blob/4042ac7600db8196b219b3ae43a977045d591fdd/src/mudlet-lua/lua/DebugTools.lua#L185 out adalah solusi yang layak untuk masalah ini.
Saya menguji https://github.com/kikito/inspect.lua yang kurang lebih sama dengan prettywrite dan mereka menyelesaikan masalah ini dengan cara yang sama (seperti jika bagian tables[t] dikomentari) tetapi dengan perbedaan bahwa setiap tabel yang digandakan mendapatkan id alih-alih <cycle>
generic generik
Saya juga menemukan masalah serupa menggunakan contoh label bersarang kedua dari Geyser Wiki (yang memiliki 'mainlabel') https://wiki.mudlet.org/index.php?title=Manual:Geyser#Demo -> arahkan kursor ke 'Arahkan ke sana bagian' dan kemudian gunakan lua display(Geyser)
masih menyebabkan kesalahan stackoverflow (tidak terjadi jika menggunakan inspeksi)
Mungkin beralih dari prettywrite ke inspect adalah sesuatu yang perlu dipikirkan.
Kami tidak memiliki alasan khusus untuk tetap berpegang pada satu - jika yang lain lebih baik, mari kita lakukan. Bagaimana perbandingan keduanya, bisakah Anda memposting sebelum/sesudah?
mengenai urutan kunci yang konsisten, bisa saja mengubah penggunaan pasangan menjadi pasangan dan itu harus menangani semua itu. Itu pada dasarnya semua cuplikan kode yang ditautkan, kami baru saja mengabstraksikannya untuk digunakan di mana saja sebagai pasangan.
Kami tidak memiliki alasan khusus untuk tetap berpegang pada satu - jika yang lain lebih baik, mari kita lakukan. Bagaimana perbandingan keduanya, bisakah Anda memposting sebelum/sesudah?
Ini cukup banyak melakukan hal yang sama tetapi saya tidak tahu apakah itu 'lebih baik' setidaknya tidak macet di Geyser (yang membuatnya lebih baik menurut saya) ;)
Saya akan membuka PR