2009-09-05 15 views
6

दोस्तों, क्या लुआ राज्य को क्लोन करने का कोई तरीका है?क्लोनिंग लुआ राज्य

मेरे गेम एप्लिकेशन में लुआ वर्चुअल मशीन की प्रारंभिक प्रक्रिया काफी भारी है (लगभग 1 सेकंड, क्योंकि कई स्क्रिप्ट एक बार में लोड की जाती हैं)। मेरे पास प्रत्येक स्वायत्त एजेंट के लिए एक अलग लुआ वीएम है और एक बार जब एजेंट बनाया जाता है तो इसका लुआ प्रारंभिक रूप से एफपीएस को बुरी तरह प्रभावित करता है।

मैं निम्नलिखित स्कीमा के बारे में सोच रहा हूं: "पूर्ववर्ती" लुआ राज्य को रखने के बारे में क्या है जिसे केवल प्रत्येक एजेंट के लिए क्लोन किया जाता है? क्या यह संभव है?

+2

बहुत से लोग लिख लुआ गलत है, यह एक संक्षिप्त नहीं है। क्या आप उपर्युक्त उपरोक्त संशोधित करेंगे ताकि यह मानक नामकरण का पालन करे। हम या तो Python नहीं लिखते हैं। लुआ बस एक तीन अक्षर का नाम होता है। देखें: http://www.lua.org/about.html – akauppi

+3

ओह, यह के लिए खेद है। सिर के लिए धन्यवाद। – pachanga

+0

क्या आपको कभी ऐसा करने का कोई तरीका मिला है? – DShook

उत्तर

4

आप एक पूरी तरह से अलग वीएम के बजाय प्रत्येक स्वायत्त एजेंट के लिए लुआ के कोरआउटिन का उपयोग करने पर विचार करना चाहते हैं। Coroutines अधिक हल्के समाधान हैं, लेकिन आपके आवेदन के लिए उपयुक्त हो सकता है या नहीं भी हो सकता है।

यदि आप आर्किटेक्चर को नहीं बदल सकते हैं, तो आप LuaJIT आज़मा सकते हैं। यह आपके उद्देश्यों के लिए प्रारंभिक तेज़ी से प्रारंभ कर सकता है।

अधिक विकल्प:

  1. Rings: "छल्ले एक पुस्तकालय जो नई लुआ बनाने के लिए एक तरीका प्रदान करता लुआ के भीतर से कहा गया है यह भी निर्माता (गुरु) और के बीच संवाद की एक आसान तरीका प्रदान करता है। बनाया (दास) राज्यों। "

  2. Pluto: "प्लूटो एक पुस्तकालय है जो उपयोगकर्ताओं को" लूआ ब्रह्मांड "के मनमाने ढंग से बड़े हिस्से को एक फ्लैट फ़ाइल में लिखने की अनुमति देता है, और बाद में उन्हें वापस या एक अलग लुआ ब्रह्मांड में पढ़ता है।"

+0

मैं coroutines उपयोग करने के बारे में सोच रहा था लेकिन मुझे डर है कि एक coroutine में एक गंभीर त्रुटि दूसरों इसलिए यह विकल्प एटीएम नहीं है को प्रभावित करेगा हूँ। लिंक के लिए धन्यवाद! मैं वर्तमान में लुआजिट और रिंग्स देख रहा हूं। रिंग्स मेरी समस्या के लिए एक संभावित समाधान प्रतीत होता है। एक coroutine में – pachanga

+3

गंभीर त्रुटि किसी भी तरह से दूसरों को प्रभावित नहीं करेगा। जब तक हम लुआ कोड के बारे में बात कर रहे हैं - उपयोगकर्ता द्वारा प्रदान की जाने वाली सामग्री निश्चित रूप से प्रोग्राम किए जाने वाले किसी भी नुकसान को कर सकती है। –

+0

मुझे वास्तव में एक राज्य क्लोन करने की जरूरत है। यह एक पीओएस ढांचे के लिए है जो मैं कर रहा हूं, और मैं नहीं चाहता कि वह व्यक्ति स्क्रिप्ट लिखने के लिए क्रेडिट कार्ड पासवर्ड चुरा सकता है। ईएमवी लाइब्रेरी अनुमति देता है कि उपयोगकर्ता कॉलबैक के माध्यम से स्क्रीन को कस्टमाइज़ करता है, और प्रत्येक कॉलबैक एक लूआ कोरआउटिन को ट्रिगर करता है जो स्क्रीन लोड करता है। लेकिन कोरआउट्स वैरिएबल साझा करते हैं, और मैं पासवर्ड कॉल के दौरान परिवर्तनीय वातावरण में सभी संशोधनों को वापस ले जाना चाहता हूं ... क्या मुझे इसके लिए एक नया प्रश्न बनाना चाहिए? –

1

वहाँ भी लेन है (download, docs) और सभी इसी तरह के उत्पादों मैं जानना चाहता comparison के भीतर।

छल्ले बारे तुलना चादर का कहना है:

छल्ले अलग लुआ कहा गया है प्रदान करता है, लेकिन कोई बहु सूत्रण। यह सरल बनाता है, लेकिन यह एक से अधिक CPU कोर का उपयोग नहीं करेगा।

नोट: तुलनात्मक शीट का कहना है कि लेन केवल मार्शल 'गैर-चक्रीय टेबल' ही होंगे। यह चक्र करता है, और मार्शल फ़ंक्शंस, अपग्रेड इत्यादि करता है और यह लुआ के बीच प्रतियां प्रत्यक्ष प्रतियों के रूप में राज्य करता है, मध्य में सामग्री को स्ट्रिंग करने की आवश्यकता नहीं होती है। यह तेज़ बनाता है।

1

यदि आप लिनक्स पर हैं, तो आप लुआ लेखकों में से एक द्वारा lper, LPSM-आधारित प्रयोगात्मक लाइब्रेरी का प्रयास कर सकते हैं।

+0

हाँ, मैं लिनक्स पर हूँ, लिंक के लिए धन्यवाद! – pachanga

1

सूचना, लुआ 5.2 के साथ और ऊपर

आप सिर्फ इस वीएम एक्सेस सीमित कर सकते काम करता है। आवश्यक सभी कार्यों के साथ एक उदाहरण बनाएं, जो _G (वैश्विक लुआ राज्य) पर निर्भर नहीं होगा और फिर प्रत्येक क्लाइंट के लिए अलग तालिका बनाएं। कि वे अपने वैश्विक नामस्थान के रूप में उपयोग करेंगे। _ENV के माध्यम से मौजूदा _G के रूप में एक टेबल सेट करना संभव है। एक पोस्ट में व्याख्या करना काफी कठिन विषय है। संक्षेप में आप अपने नए क्लाइंट के लिए "आभासी" _G तैयार करते हैं और फिर क्लाइंट के कोड के लिए _G को प्रतिस्थापित करते हैं। There is where I advice you to start.

यहां बिंदु है।

local _ENV = t -- change the environment. without the local, this would change the environment for the entire chunk

बस local को हटा दें और आप सभी आगे कोड के लिए _ENV बदल देंगे। प्रयोगों के साथ शुभकामनाएँ!

पी.एस. मत भूलना आप _ENV और _G तालिकाओं के लिए metatable सेट और कि metatable बदलते न करे सकता है। लुआ यहाँ वास्तव में लचीला है।