2010-10-08 13 views
8

मुझे लूआ से प्यार है, इसे प्राथमिक (एम्बेडेड) भाषा के रूप में अधिक से अधिक परियोजनाओं के लिए उपयोग नहीं किया जाता है। मेरी वर्तमान परियोजना 10,000 लाइनों तक पहुंच रही है और शायद लगभग 15,000 लाइनों पर समाप्त हो जाएगी। उस पैमाने पर लुआ में विकास करते समय आपको क्या उपयोगी लगता है? आपने अपने सिर को किसके खिलाफ टक्कर लगी है, और आपने किन समाधानों को पाया है? मैं विकास उपकरण, भाषा सुविधाओं & तकनीक, तीसरे पक्ष के मॉड्यूल के बारे में सोच रहा हूं?वास्तव में लुआ के साथ काम करना आसान क्यों होगा?

मेरे शीर्ष 3:

  1. strict.lua - मैं इस का एक संशोधित संस्करण का उपयोग करें। अप्रयुक्त/अनपेक्षित चर के उपयोग के लिए सतर्क किए बिना मैं पागल हो जाऊंगा।

  2. कोरआउट - उनकी बहुभाषी क्षमता के लिए नहीं, बल्कि उनकी निरंतरता के लिए। राज्य मशीनों के कार्यान्वयन को सरल बनाने के लिए बहुत उपयोगी है।

  3. क्रमबद्धता फ़ंक्शन - डंपिंग तालिका सामग्री के लिए अनिवार्य, और डिस्क पर लगातार तालिकाओं के लिए (मैं कई बार इसका उपयोग करता हूं जब अन्यथा मैं डेटाबेस के लिए पहुंच गया होता)।

मेरी इच्छा सूची: ओएस एक्स के लिए मैं प्रिंट उपयोग कर रहा हूँ() अब है, लेकिन एक डिबगर कि मुझे स्रोत फ़ाइलों के माध्यम से एकल कदम दिया जाएगा बहुत अच्छा होगा

  1. दृश्य डिबगर।

  2. एक जारी बयान। दोहराव का उपयोग करना ... जब तक कि सच्चे कामकाज बदसूरत न हो, और बहुत से घोंसले के मामले जटिल और बदसूरत हो जाते हैं।

  3. एक मौजूदा तालिका सदस्य संशोधित होने पर एक मेटामाइट जो लागू होता है।

बड़े पैमाने पर लुआ विकास के लिए कोई अन्य सुझाव?

उत्तर

6

एक जारी बयान। दोहराना का उपयोग करना ... जब तक सच वर्कअराउंड बदसूरत नहीं है, और बहुत से घोंसला वाले ifs जटिल और बदसूरत हो जाते हैं।

क्या आपका लूप बॉडी फ़ंक्शन कॉल है; तो returncontinue बन जाता है।

मौजूदा तालिका सदस्य संशोधित होने पर एक मेटामॉइड लागू किया गया है। पर एक अवरोधन लिखते हैं/पढ़ता newindex/सूचकांक metamethods और बदले तालिका बी से/देखने को संशोधित -

आप स्वयं इस एक प्रॉक्सी तालिका बी उस तालिका एक के लिए वास्तविक डेटा के सभी संग्रहीत करता है का उपयोग करके लागू कर सकते हैं। चूंकि ए को कभी भी कुछ भी लिखा नहीं जाता है, इसलिए सभी हिट न्यूइंडेक्स लिखते हैं।ओएस एक्स के लिए

+0

दुर्भाग्य से, यह नेस्टेड टेबल के लिए बहुत अच्छा काम नहीं करता है। मैंने एक रिकर्सिव 'फ़ंक्शन' बनाया है जो परीक्षण करता है कि नया मान 'टेबल' है, और यह ''मेटाटेबल' को भी इसी 'फ़ंक्शन' पर सेट करता है, इसलिए मैं इसे हुक कर सकता हूं। समस्या यह है कि, जब यह एक और 'आदिम प्रकार' होता है तो क्या करना है? मेरे पास दो घोंसले वाली टेबल और एक 'स्ट्रिंग' है जो आंतरिक कारणों में से एक है जिसे 'कारण "से अनुक्रमित किया गया है, उस' स्ट्रिंग 'में परिवर्तनों का पता कैसे लगाया गया है, बशर्ते बदलाव से पहले प्रारंभिक मान' शून्य' न हो? – henry700

+0

ओएच! मुझे सिर्फ इस प्रॉक्सीइंग को प्रोग्रामिक रूप से कार्यान्वित करना है! – henry700

3

अपने top3 और इच्छा सूचियों के आधार पर, यहाँ उत्पादों मैं पर काम किया और सिफारिश कर सकते हैं कर रहे हैं (कम से कम मुझे प्राप्त फीडबैक के आधार पर):

  1. MobDebug: रेमडेबग पर आधारित एक दूरस्थ डीबगर, लेकिन विभिन्न प्रकार के फ़िक्स और नए फ़ंक्शंस के साथ।
  2. ZeroBrane Studio: एक लुआ आईडीई जो सभी अपेक्षित कार्यों (स्टेपइन/ओवर/आउट, ब्रेक, वॉच, स्टैक, ब्रेकपॉइंट्स, रिमोट शैल, सीरियलाइजेशन सपोर्ट, कोरआउटिन सपोर्ट और अधिक) के साथ डीबगर प्रदान करता है और ओएसएक्स और विंडोज पर चलता है। यह आईडीई में MobDebug के साथ एक निर्बाध एकीकरण प्रदान करता है। मैंने कई स्क्रीनकास्टों को क्रिया में दिखाया: http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style, http://notebook.kulchenko.com/zerobrane/love2d-debugging
  3. Serpent: एक कॉम्पैक्ट और शक्तिशाली धारावाहिक। ज़ीरोब्रैन स्टूडियो कंसोल और स्टैक विंडो में जटिल डेटा संरचनाओं को प्रदर्शित करने के लिए सर्प का उपयोग कर रहा है।
  4. ज़ीरोब्रेन स्टूडियो में static analyzer (मेटलुआ और लुआ-इंस्पेक्ट के आधार पर) शामिल है, जो आपको सख्त.लुआ का पता लगाता है, लेकिन विकास के दौरान (कोड चलाने से पहले) को पहचानने की अनुमति देता है।
  5. परिवर्तन देखने के संदर्भ में, MobDebug किसी भी प्रकार के चर (केवल तालिका नहीं) के लिए ऐसा करने का एक तरीका प्रदान करता है। मैंने इसे SO post में वर्णित किया है। यह कार्यक्षमता अभी तक ज़ीरोब्रेन स्टूडियो के माध्यम से उपलब्ध नहीं है।
संबंधित मुद्दे