我可以將Squeak作爲REPL(無GUI)發送,我可以在其中輸入和評估Smalltalk表達式嗎?我知道默認圖像不允許這樣做。有沒有關於如何構建可從命令行shell訪問的最小圖像的文檔?使用外殼中的吱吱聲
回答
這裏是一個(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 REPL獲得樂趣。不要忘記輸入命令:
Smalltalk snapshot:true andQuit:true
如果你想保存你的更改。
現在,解釋這個解決方案: OSProcess是一個包,允許運行其他進程,從標準輸入讀取,並寫入標準輸出和標準錯誤。您可以使用OSProcess thisOSProcess
(當前進程,aka吱吱聲)訪問標準輸出AttachableFileStream。
接下來,您在userBackgroundPriority上運行一個無限循環(以讓其他進程運行)。在這個無限循環中,您使用Compiler evaluate:
來執行輸入。
然後你可以在一個無頭像的腳本中運行它。
項目http://www.squeaksource.com/SecureSqueak.html包括REPL包,可以提供很多的,你在找什麼。
哦,Friedrich的回覆中的第一個鏈接包括對ExternalCommandShell的引用,這聽起來像是它提供了類似的功能。 – 2011-05-19 14:39:04
有關來自SecureSqueak的REPLServer的更多信息,請訪問http://gulik.pbworks.com/w/page/7760030/REPLServer。 – 2011-05-19 14:44:18
從Pharo 2.0(和1.3/1.4以及下面描述的修復程序)開始,不再需要黑客了。下面的代碼片段會變成你的香草菲羅圖像到REPL服務器...
從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.
如果你想要的形象永遠是一個REPL,將代碼放在一個#startup:方法;否則,當你想要REPL模式時,在命令行傳遞腳本,如:
"/path/to/vm" -headless "/path/to/Pharo-2.0.image" "/path/to/gistfile1.st"
- 1. 吱吱聲:測試和使用流
- 2. Smalltalk中的事件處理(吱吱聲)
- 3. 吱吱聲 - SUnit測試錯誤
- 4. 吱吱聲系統瀏覽器問題
- 5. 方法檢查吱吱聲/ Smalltalk
- 6. 如何在吱吱聲中獲得類變量的值?
- 7. 如何查看「收件箱」吱吱聲中的測試代碼?
- 8. 如何檢索吱吱聲中的方法簽名
- 9. 在吱吱聲中創建新的僞變量
- 10. 在運行時在吱吱聲中編譯類方法
- 11. 如何在吱吱聲代碼中設置斷點?
- 12. 如何在吱吱聲中比較ByteString和ByteSymbol?
- 13. 吱吱聲:在運行時獲取方法的源代碼
- 14. 引用通過'代碼'直接操作創建的吱吱聲中的變形
- 15. 如何以編程方式在smalltalk80(吱吱聲)中創建箭頭變形?
- 16. 有沒有什麼像吱吱叫etoys,在iPad上運行?
- 17. 如何安裝mcz文件來吱吱叫?
- 18. 如何找到所有沼澤廣場在一個吱吱作響的房間?
- 19. 在哪裏可以找到whatIsAPrimitive在吱
- 20. 從在Smalltalk(吱)字符串中提取一個子
- 21. 解釋外殼聲明
- 22. 使用C++中的外殼命令
- 23. 如何使用ADB外殼?
- 24. 使用phpMyAdmin連接外殼
- 25. 使用外殼腳本
- 26. 如何使用AppleScript外殼
- 27. 使用外殼腳本
- 28. 如何使用adb外殼爲Android設備揚聲器打開
- 29. 使用Cygwin作爲MinGW的外殼
- 30. 掃描使用HBase的外殼
這並不真正回答這個問題。第一個環節基本上與這個問題無關。第二個是關於服務器操作的問題。但是據我所知,這個問題是關於運行像'irb'或'python'這樣的Squeak,以便它在stdin和stdout上與終端進行交互。 – 2011-05-19 08:48:00