我已經用Racket(以前稱爲PLT Scheme)構建了一個相當複雜的應用程序,並且希望爲調試目的添加REPL。我試圖讓它通過TCP流訪問:通過TCP的球拍REPL
(define repl-server
(thread (lambda()
(let ((listener (tcp-listen 8082 5 #t)))
(do() (#f)
(let-values (((in out) (tcp-accept listener)))
(thread (lambda()
(let ((port-string (get-port-string in)))
(Try "debug-repl" #f
(begin
(file-stream-buffer-mode out 'line)
(display-and-log "Password: " out)
(flush-output out)
(when (string=? (read-line in) "whatever")
(log "Connect to REPL: " port-string))
(current-input-port in)
(current-output-port out)
(current-error-port out)
(read-eval-print-loop))
(close-input-port in)
(close-output-port out))))))))))))
(Try name result-if-exception form)
是提供基本的異常處理的宏,(日誌...)和(顯示和記錄...)?他們什麼聲音喜歡。
現在,如果我訪問REPL,我甚至不能評估常量,因爲我不斷收到錯誤compile: unbound identifier (and no #%app syntax transformer is bound) at: #%top-interaction
。我怎樣才能讓這個REPL工作?在啓動REPL服務器之前,如何訪問值define
d?
大問題!你真的應該在球拍郵件列表http://lists.racket-lang.org/users/上提出這個問題。我可以預測以下幾點:1)有辦法做到這一點。 2)可能會很痛苦。 3)你可能想看看沙箱。 – 2011-05-10 07:23:05
注意自我:下次使用'addlog'或類似的名稱作爲該功能的名稱... – lbruder 2011-05-10 07:57:50