5

Pluto libraryLua के लिए लुआ सह-रूटीन को क्रमबद्ध करने में सक्षम होने का दावा है। मैं इसका अर्थ 'धारावाहिक निरंतरता' के रूप में समझता हूं, जो एक सिंक्रोनस शैली में लिखने वाले एसिंक्रोनस प्रोग्रामिंग को बनाने के लिए एक महत्वपूर्ण विशेषता है।एसिंक तर्क को सरल बनाने के लिए लुआ सह-रूटीन/निरंतरता क्रमबद्धता का वास्तविक दुनिया उपयोग?

उदाहरण के लिए, एक कार्यप्रवाह बजाय प्रवेश बिंदुओं

if (ask user is hungry) then 
    if (not ask user is vegetarian) then 
     if (ask user if likes_burgers) then 
      feed_user(burger) 
     else 
      tell_user("Picky!") 
    else 
     feed_user(salad) 

function main() 
    ask(user is hungry, "hungry_response") 

function hungry_response(answer) 
    if (answer is yes) 
    ask(user is vegetarian, "vegetarian_response") 

function vegetarian_response(answer) 
    if (answer is yes) 
    feed_user(salad) 
    else 
    ask(user likes burgers, "burgers_response") 

function burgers_response(answer) 
    if (answer is yes) then 
    feed_user(burger) 
    else 
    tell_user("Picky!") 

के बजाय

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

यह वह जगह है जहां क्रमिक निरंतरता गंभीर रूप से बन जाती है जरूरी।

Serialized continuations जावाफ्लो, कोकून (रिंक), समुद्रतट, पीएलटी योजना, एसआईसीएस में उपयोग किया जाता है, और व्यवसाय वर्कफ़्लो, चिकित्सा निदान, और (मेरे मामले में), पाठ्यचर्या साहसिक खेलों से निपटने के लिए बहुत अच्छे हैं।

क्या लुआ और प्लूटो के किसी भी उदाहरण (उम्मीद है कि ओपन सोर्स!) का कोई उदाहरण है, इस तरह से अपनी सुविधाओं का लाभ उठाते हुए, एसिंक पर्यावरण में तर्क को सरल बनाने के लिए निरंतरता का उपयोग करते हुए?

उत्तर

3

http://sheddingbikes.com/posts/1289384533.html

http://dpaste.de/Huj4/

उदाहरण के लिए, एक WKP से Tir ("एक प्रसिद्ध प्रोग्रामर") की जाँच करें। यह सरल बनाता है, अगर serializes, async संचालन नहीं है। यह एक बीएसडी लाइसेंस प्राप्त माइक्रो वेब फ्रेमवर्क है जो लुआ कोरोटाइन का उपयोग करता है।

ब्लॉग से ...

जादू इस काम करता है कि लुआ के coroutines है। अंकों में से प्रत्येक पर हम वेब कॉल करते हैं: प्रॉम्प्ट और वेब: तिर इंजन पर क्लिक करें हमारे हैंडलर को उपज करता है, इसे बाद में सहेजता है, और फिर एक नया अनुरोध इसे वापस लाता है। कोड कि यह करता है मूल रूप से है:

function Web:recv() 
    return coroutine.yield() 
end 
+0

धन्यवाद, मैं Tir के पहले नहीं सुना था! –

संबंधित मुद्दे