Na brincadeira, é feita a suposição de um framework para aplicações web em Lisp.
Mas sabe que a ideia não é tão estúpida assim? Ela me deixou cheio de ideias malignas…
É claro, não é um framework, mas vamos bricar de usar Lisp em aplicações web em ambiente GNU/Linux!
Primeiro baixe e instale o LIGHTTPD fly light. Não vou entrar em detalhes de instalação.
Habilite o uso de CGI – ainda preciso ver como habilitar FastCGI – e configure
cgi.assign
em lighttpd.conf
com as seguintes entradas mínimas:cgi.assign = (
".el" => "/usr/bin/clisp",
".fas" => "/usr/bin/clisp",
".lisp" => "/usr/bin/clisp",
".ss" => "/usr/bin/guile"
)
Depois a gente brinca com Smalltalk.
Acrescente também
index.lisp
à variável index-file.names
.Tendo reiniciado o LIGHTTPD, podemos ir ao script
index.lisp
, que deve estar no diretório raiz do LIGHTTPD, configurado pela variável server.document-root
.; index.lisp
(defun floor-div (a b)
(multiple-value-bind
(resp)
(floor (/ a b))
resp))
(let (
(content-type "text/html")
(title "Teste de Lisp")
(date "")
(century ""))
(multiple-value-bind
(S M H d m y)
(get-decoded-time)
(setq date
(format nil "~2,'0d/~d/~4,'0d" d m y))
(setq century
(format nil "~@r" (+ (floor-div (- y 1) 100) 1))))
(format t "Content-type: ~A~%~%" content-type)
(format t "<html>~%")
(format t "<head>~%")
(format t "<title>~A</title>~%" title)
(format t "</head>~%")
(format t "<body>~%")
(format t "<h1 align=\"center\">~A</h1>~%" title)
(format t "<p>Olá Mundo!</p>~%")
(format t "<p>Data: ~A</p>~%" date)
(format t "<p>Século: ~A</p>~%" century)
(format t "</body>~%")
(format t "</html>~%"))
Agora acesse http://localhost/index.lisp.
Ok! Ok! Até aqui é só CGI… mas vou dar uma olhada com mais calma em FastCGI e quem sabe desenvolver um rascunho de framework só por curtição. =)
É claro, preferiria fazer em Smalltalk, mas alguém já fez primeiro. Deem uma olhadinha na Superfície Reflexiva.
[]'s
Cacilhas
PS: Artigo publicado nas Reflexões de Monte Gasppa e Giulia C..