2010-06-18 9 views
25

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

उत्तर

12

यहाँ एक (hackish) समाधान है: सबसे पहले, आप OSProcess जरूरत है, तो एक कार्यस्थान में इस चलाएँ:

Gofer new squeaksource:'OSProcess'; package:'OSProcess';load. 

इसके बाद, फ़ाइल repl.st में रखते:

OSProcess thisOSProcess stdOut 
    nextPutAll: 'Welcome to the simple Smalltalk REPL'; 
    nextPut: Character lf; nextPut: $>; flush. 
[ |input| 
    [ input := OSProcess readFromStdIn. 
    input size > 0 ifTrue: [ 
     OSProcess thisOSProcess stdOut 
     nextPutAll: ((Compiler evaluate: input) asString; 
     nextPut: Character lf; nextPut: $>; flush 
    ] 
    ] repeat. 
]forkAt: (Processor userBackgroundPriority) 

और आखिरी, इस कमांड चलाएँ:

squeak -headless path/to/squeak.image /absolute/path/to/repl.st 

अब आप एक स्मालटाक आरईपीएल के साथ मजा कर सकते हैं। आदेश में टाइप करना न भूलें:

Smalltalk snapshot:true andQuit:true 

यदि आप अपने परिवर्तनों को सहेजना चाहते हैं।

अब, इस समाधान के स्पष्टीकरण पर: ओएसप्रोसेस एक पैकेज है जो अन्य प्रक्रियाओं को चलाने, stdin से पढ़ने और stdout और stderr को लिखने की अनुमति देता है। आप OSProcess thisOSProcess (वर्तमान प्रक्रिया, उर्फ ​​स्क्वाक) के साथ stdout अटैचबलफाइलस्ट्रीम तक पहुंच सकते हैं।

अगला, आप उपयोगकर्ता बैकग्राउंड प्राथमिकता पर एक अनंत लूप चलाते हैं (अन्य प्रक्रियाओं को चलाने के लिए)। इस अनंत लूप में, आप इनपुट निष्पादित करने के लिए Compiler evaluate: का उपयोग करते हैं।

और आप इसे एक स्क्रिप्ट में एक हेडलेस छवि के साथ चलाते हैं।

7
+0

यह वास्तव में प्रश्न का उत्तर नहीं देता है। पहला लिंक मूल रूप से प्रश्न से असंबंधित है। दूसरा सर्वर ऑपरेशन के बारे में एक सवाल है। लेकिन यह सवाल, जैसा कि मैं इसे समझता हूं, स्क्वाक को 'irb' या' पायथन 'जैसे चलाने के बारे में है ताकि यह टर्मिनल के साथ stdin और stdout पर बातचीत कर सके। –

0

परियोजना http://www.squeaksource.com/SecureSqueak.html एक आरईपीएल पैकेज है कि आप के लिए क्या देख रहे के बहुत प्रदान कर सकता है भी शामिल है।

+0

ओह और फ्रेडरिक की प्रतिक्रिया में पहला लिंक बाहरी कॉमांडशेल के संदर्भ में शामिल है जो ऐसा लगता है जैसे यह समान कार्यक्षमता प्रदान करता है। –

+0

SecureSqueak से REPLServer के बारे में अधिक जानकारी http://gulik.pbworks.com/w/page/7760030/REPLServer पर मिल सकती है। –

7

फारो 2.0 (और 1.3/1.4 नीचे वर्णित फिक्स के साथ) के रूप में, कोई और हैक आवश्यक नहीं है। निम्नलिखित स्निपेट एक आरईपीएल सर्वर में अपने वेनिला Pharo छवि बदल जाएगी ...

https://gist.github.com/2604215 से:

"Works out of the box in Pharo 2.0. For prior versions (definitely works in 1.3 and 1.4), first file in https://gist.github.com/2602113" 

| command | 
[ 
    command := FileStream stdin nextLine. 
    command ~= 'exit' ] whileTrue: [ | result | 
     result := Compiler evaluate: command. 
     FileStream stdout nextPutAll: result asString; lf ]. 

Smalltalk snapshot: false andQuit: true. 

आप छवि चाहते हैं हमेशा एक आरईपीएल होने के लिए, एक #startup में कोड डाल: विधि ; अन्यथा, जब आप आरईपीएल मोड चाहते हैं तो स्क्रिप्ट लाइन पर स्क्रिप्ट पास करें, जैसे:

"/path/to/vm" -headless "/path/to/Pharo-2.0.image" "/path/to/gistfile1.st" 
संबंधित मुद्दे