Mostrando postagens com marcador repl. Mostrar todas as postagens
Mostrando postagens com marcador repl. Mostrar todas as postagens

quarta-feira, 6 de agosto de 2008

Chicken Web REPL

Há algum tempo eu e o Vilson estávamos discutindo sobre REPLs na Web (não lembro o que desencadeou esse tópico -- também é possível que o tópico não tenha sido esse -- tá feio o caso da minha memória). Bem, o fato é que desta conversa surgiu a idéia de fazer um REPL via Web para Chicken. Lembrei do egg sandbox, do Chicken Playground (um ambiente chroot com uma instalação de Debian, Chicken e um monte de eggs) e fiz um Web REPL simples para Chicken.

Em seguida, o Vilson descobriu o EditArea (um editor de código em Javascript) e modificou para adicionar um suporte básico a Common Lisp. Enviou o código para mim e eu, com base nele, adicionei suporte básico a Scheme.

O resultado está em http://repl.ucpel.tche.br:8080.



Uma das funcionalidades interessantes do Web REPL é o uso de sessões HTTP para manter coisas como histórico de trechos de código submetidos ao avaliador e definições feitas na sessão. A implementação de sessões é feita com o egg http-session.

O Web REPL também usa os eggs web-scheme, ajax, spiffy-utils e spiffy (servidor web).

quinta-feira, 8 de maio de 2008

Clip no REPL

A procrastinação leva o cara a fazer coisas como essa:

(use utils)

(define (stupid-clip text)
(string-append
" --
/ \\
| |
@ @
|| ||
|| ||
|\\_/|
\\___/\n

What do you want to mess up with today?

"

text
))

(toplevel-command
'annoy
(lambda ()
(print
(stupid-clip (with-output-to-string
(lambda ()
(apropos (read))))))))

Usando isso no REPL:

$ csi -n

CHICKEN
(c)2008 The Chicken Team
(c)2000-2007 Felix L. Winkelmann
Version 3.2.0 - linux-unix-gnu-x86 [ manyargs dload ptables applyhook ]
SVN rev. 10664 compiled 2008-05-07 on ze-dureza (Linux)

#;1> (load "annoy.scm")
; loading annoy.scm ...
; loading library utils ...
#;2> ,annoy close
--
/ \
| |
@ @
|| ||
|| ||
|\_/|
\___/


What do you want to mess up with today?

close-input-port : (procedure port948)
close-input-file : variable
close-output-file : variable
close-output-port : (procedure port949)

Atualização

Na realidade, o código pode ser um pouco mais simples:


(use utils)

(toplevel-command
'annoy
(lambda ()
(print " --
/ \\
| |
@ @
|| ||
|| ||
|\\_/|
\\___/\n

What do you want to mess up with today?

"
)
(apropos (read))))