2012-11-16 32 views
18

छोटे-छोटे में, आप दुनिया की स्थिति को एक छवि फ़ाइल में सहेजने में सक्षम हैं। मुझे लगता है कि इसे स्मॉलटाक की "धारावाहिक" करने की क्षमता के साथ करना है - यानी, वस्तुएं अपना स्वयं का स्रोत कोड उत्पन्न कर सकती हैं।स्मॉलटाक को छवि दृढ़ता करने की क्षमता क्या देती है, और रुबी/पायथन जैसी भाषाएं खुद को क्रमबद्ध क्यों नहीं कर सकती हैं?

1) क्या यह एक सटीक समझ है?

2) आधुनिक भाषाओं की इस क्षमता को जोड़ने में क्या चुनौती है (स्पष्ट रूप से, स्पष्ट रूप से)?

3) क्या "क्रमबद्धता" सही शब्द है? सही शब्दजाल क्या है?

उत्तर

15

यह "धारावाहिक" से कहीं अधिक सरल है। एक स्मॉलटॉक छवि ऑब्जेक्ट मेमोरी का स्नैपशॉट है। यह पूरी रैम सामग्री लेता है (कचरा इकट्ठा करने के बाद) और इसे एक फाइल में डंप करता है। स्टार्टअप पर, यह उस स्नैपशॉट को डिस्क से रैम में लोड करता है और जहां यह छोड़ा जाता है वहां प्रसंस्करण जारी रहता है। स्नैपशॉट पर विशेष क्रियाएं करने के लिए कुछ हुक हैं और फिर से शुरू होने पर, लेकिन मूल रूप से यह काम करता है।

(कहा: नीचे लुकास RENGGLI की टिप्पणी को देखने के लिए एक महत्वपूर्ण डिजाइन विकल्प है कि अन्य वातावरण की तुलना में यह इतना आसान बनाता है के लिए)

+0

ध्यान दें कि यह अच्छी तरह से काम करता है क्योंकि छोटे-छोटे अपने स्वयं के वीएम में चलता है, इसलिए यह अपनी स्मृति स्थिति का आयोजन करता है, और इसे स्वयं प्रबंधित करता है। यदि आपने इसके लिए बनाए गए सी प्रोग्राम के साथ ऐसा करने का प्रयास किया है, तो शायद यह अधिकतर समय ठीक होगा, लेकिन कोने-केस रेंग सकते हैं। – Marcin

+6

स्नैपशॉटिंग में क्या मदद करता है कि निष्पादन स्थिति (उदा। प्रक्रियाएं, ढेर फ्रेम) सामान्य ऑब्जेक्ट मेमोरी का हिस्सा है। यह स्नैपशॉट के लिए विशेष रूप से सरल बनाता है और चलने वाले कोड को फिर से शुरू करता है। –

1

यह ठीक है, एक तरह से पहले से ही होता है जब आप सोने के लिए अपने कंप्यूटर डाल? कर्नेल डिस्क पर चल रहे प्रोग्राम लिखता है और बाद में उन्हें फिर से लोड करता है? संभवतः कर्नेल एक चल रहे कार्यक्रम को नेटवर्क पर एक नई मशीन पर ले जा सकता है, दूसरे छोर पर एक ही वास्तुकला मानता है? जावा जेवीएम की वजह से सभी ऑब्जेक्ट्स को क्रमबद्ध कर सकता है, है ना? हो सकता है कि बाधा सिर्फ विविध स्मृति लेआउट को लागू करने वाली वास्तुकला है?

संपादित करें: लेकिन मुझे लगता है कि आप प्रोग्राम से इस कार्यक्षमता का उपयोग करने में रुचि रखते हैं। इसलिए मुझे लगता है कि यह पाइथन/रूबी दुभाषिया और stdlib में सुविधा को लागू करने का एक मामला है, और यदि आप किसी भिन्न हार्डवेयर आर्किटेक्चर में स्थानांतरित करने में सक्षम होना चाहते हैं तो किसी प्रकार की वर्चुअल मशीन है।

+0

"पाइथन/रूबी दुभाषिया और stdlib में सुविधा को लागू करने का सिर्फ एक मामला" आपका मतलब है, बस अपना खुद का कार्यान्वयन बनाने की बात है? क्यों, इसमें बिल्कुल समय नहीं लगेगा;) – Marcin

+1

हाँ, हाइबरनेशन सुविधा का अपना कार्यान्वयन। आपको पूरे दुभाषिया को लिखने की ज़रूरत नहीं है .. नहीं कि मैं स्वयंसेवी हूं। –

8

बर्ट फ्रायडेनबर्ग के उत्कृष्ट उत्तर पर विस्तार।

1) क्या यह (यानी वस्तु का अपना स्रोत कोड क्रमबद्ध करने की क्षमता) सटीक समझ है?

नहीं। जैसा कि बर्ट ने एक स्मॉलटॉक छवि को इंगित किया है, बस एक स्मृति स्नैपशॉट है। स्मॉलटाक ऑब्जेक्ट्स और स्मॉलटाक प्रोग्राम्स दोनों का एकल-स्रोत-सत्य उनकी याददाश्त का प्रतिनिधित्व है। यह अन्य भाषाओं में एक बड़ा अंतर है, जहां प्रोग्राम टेक्स्ट फ़ाइलों के रूप में प्रदर्शित होते हैं।

2) आधुनिक भाषाओं की इस क्षमता को जोड़ने में क्या चुनौती है (स्पष्ट रूप से, स्पष्ट रूप से)?

तकनीकी रूप से, अधिकांश भाषाओं के लिए मेमोरी स्नैपशॉट से एप्लिकेशन को बूटस्ट्रैप करना संभव होना चाहिए। अगर मुझे गलत नहीं लगता है तो ऐसे समाधान हैं जो जावा अनुप्रयोगों के लिए स्टार्टअप समय को गति देने के लिए इस दृष्टिकोण का उपयोग करते हैं। आपको एक कैनोलिक मेमोरी प्रस्तुति पर सहमत होना होगा हालांकि आपको प्रोग्राम को पुनरारंभ करने पर मूल संसाधनों को पुन: प्रारंभ करने की देखभाल करने की आवश्यकता होगी। उदाहरण के लिए, स्मॉलटाक में, खुली फ़ाइलें और नेटवर्क कनेक्टिंग फिर से खोला जाता है। और, संख्याओं की अंतहीनता को ठीक करने के लिए स्टार्टअप हुक भी है।

3) क्या "क्रमबद्धता" सही शब्द है? सही शब्दजाल क्या है?

हाइबरनेशन शब्द है।

+0

मैं कहां पढ़ सकता हूं कि स्मॉलटाक वीएम फाइलों और नेटवर्क कनेक्शन को फिर से खोलने में सक्षम है? और इन-मेमोरी का प्रतिनिधित्व क्या है? मुझे कहीं भी आसानी से पठनीय स्मॉलटाक स्रोत नहीं दिख रहे हैं ... बहुत बहुत धन्यवाद। –

+0

http://pharo-project.org से फ़ारो वन-क्लिक छवि डाउनलोड करें और स्रोत ब्राउज़ करें। मुझे अपने सिर के शीर्ष के प्रासंगिक संदेश याद नहीं हैं, लेकिन उन्हें फ़ाइल और कनेक्शन कक्षाओं में पाया जाना चाहिए। – akuhn

1

महत्वपूर्ण अंतर यह है कि स्मॉलटाक केवल ऑब्जेक्ट्स के समूह के रूप में प्रोग्राम का व्यवहार करता है। और आईडीई उन ऑब्जेक्ट्स को संपादित करने वाले संपादकों का एक समूह है, इसलिए जब आप छवि को सेव-लोड करते हैं, तो आपका कोड उसी तरह होता है जब आपने छोड़ा था।

अन्य भाषाओं के लिए ऐसा करना संभव हो सकता है, लेकिन मुझे लगता है कि वहां कितना प्रतिबिंब है, इस पर निर्भर करता है। अधिकांश अन्य भाषाओं में, प्रतिबिंब ऐड-ऑन, या यहां तक ​​कि बाद में विचार के रूप में आता है, लेकिन स्मॉलटाक में यह सिस्टम के केंद्र में है।