How can I do web programming with Lisp or Scheme?
Asked Answered
G

15

79

I usually write web apps in PHP, Ruby or Perl. I am starting the study of Scheme and I want to try some web project with this language. But I can't find what is the best environment for this.

I am looking for the following features:

  • A simple way of get the request parameters (something like: get-get #key, get-post #key, get-cookie #key).
  • Mysql access.
  • HTML Form generators, processing, validators, etc.
  • Helpers for filter user input data (something like htmlentities, escape variables for put in queries, etc).
  • FLOSS.
  • And GNU/Linux friendly.

So, thanks in advance to all replies.

Gopherwood answered 14/8, 2009 at 1:10 Comment(1)
Things like htmlentities, escaping functions, wrappers for requests, etc. could be a nice exercise for you to implement yourself in Scheme, since you say you are just starting out learning scheme.Hostel
C
73

Racket has everything that you need. See the Racket web server tutorial and then the documentation. The web server has been around for a while, and it has a lot of features. Probably the only thing that is not included is a mysql interface, but that exists as a package on PLaneT (Racket package distribution tool).

UPDATE: Racket now comes with DB support, works with several DBs including mysql.

Conchoidal answered 14/8, 2009 at 1:58 Comment(2)
Seconded. The continuation interface is interesting too -- don't worry if it looks confusing though; the rest of the servlet interface still works without it. Wasn't aware of the mysql interface, I'll check that out, thanks!Dubitation
Since '09 Racket has gotten builtin database support. There is support for PostgreSQL, MySQL, SQLite and ODBS. See docs.racket-lang.org/db/index.htmlWolfie
S
20

You may want to have a look at Clojure:

Clojure is a dynamic programming language that targets the Java Virtual Machine. [...] Clojure provides easy access to the Java frameworks, with optional type hints and type inference, to ensure that calls to Java can avoid reflection.

Clojure is a dialect of Lisp, and shares with Lisp the code-as-data philosophy and a powerful macro system.

Interop with Java is straightforward in Clojure, so you can re-use any existing Java libraries as you need. I'm sure there are plenty that are useful for web development.

clojure-contrib has an SQL API, and there is ClojureQL as well, which should cover your DB access needs.

There is a web framework for Clojure called Compojure under development. There may be others, too.

Clojure's source is available on github under the EPL. Getting it running on Linux is easy; I just clone the git repos and run ant.

Sartorial answered 14/8, 2009 at 1:49 Comment(3)
Thanks for the reply. I don't have any experience with Java. Is a requirement for clojure setup or use?Gopherwood
I don't think Java is a requirement; you'll be able to get started with Clojure just fine.Sartorial
Clojure runs on a JVM so you'll need to have one installed. Experience with the Java class library is definitely a plus once you get outside of Clojure's built-in types.Faa
I
19

You can do web development with guile scheme. Its standard library includes the (sxml simple) module that is very useful for html generation, manipulation, and parsing. The guile-www library adds support for http, cgi, etc. The guile-dbi library provides access to MySQL and other databases. With these building blocks, you can implement everything from simple cgi scripts to web applications with their own HTTP server.

Irresolution answered 27/1, 2012 at 14:31 Comment(0)
Q
15

Try Weblocks, a Common Lisp web framework:

http://weblocks.viridian-project.de/

Quinine answered 14/8, 2009 at 19:50 Comment(0)
S
11

I've written a pretty extensive tutorial/ebook on the topic: http://lispwebtales.ppenev.com/

Quick summary:

  • It uses Common Lisp
  • It uses the Restas framework
  • It has examples for pretty much most of basic web development, including DB access, authentication, HTML generation and templating.
  • Since the Restas documentation is pretty much out of date, my tutorial is the closest thing to up to date docs.
  • Shows a few of the more advanced features, like policies, which allow you to write pluggable interfaces, for instance you can write a data store layer, and write back-ends for different storage mechanisms with relative ease, the module system which allows you to write reusable components, like auth frameworks and things like that.
  • It covers things like installing lisp, setting up the ASDF build system and the quicklisp package manager etc.
  • It's free online, and as soon as I finish it it will be free on leanpub as well. The source is on https://github.com/pvlpenev/lispwebtales under a CC license, the source code is MIT. Not all of it is published yet, and I'm in the process of revising.
Sward answered 11/10, 2013 at 7:57 Comment(0)
S
8

This may be what you are looking for.

http://www.plt-scheme.org/

http://docs.plt-scheme.org/web-server/index.html

http://common-lisp.net/project/cl-weblocks/

Soda answered 14/8, 2009 at 1:18 Comment(2)
A description of the links would be nice.Caro
PLT Scheme is now known as Racket, and lives at a different site: racket-lang.orgThurible
H
8

If you are interested in Common Lisp to be exact and do not want to go the weblocks route I would recommend the following setup:

  1. Use SBCL on Linux but with multiple thread support
  2. Use Hunchentoot as a web server which will provide you with all the server processing required including sessions and cookies
  3. Use ClSql to communicate with MySql it has ample documentation and is very stable.
  4. For the HTMl generation you can use Dr Edi Weitz Cl-WHO (very well documented).

Note all the above are under GPL or similar license (one that works more for lisp programs)

Hydrothorax answered 19/10, 2009 at 19:21 Comment(0)
T
6

Gambit Scheme has its own solution to web apps as well. It uses the Spork framework, based o the Black Hole module system (both by Per Eckerdal).

Andrew Whaley has an initial tutorial on how to get Gambit, Black Hole and Spork running a web app under Apache using mod_proxy. You might want to take a look at that.

On a (possibly) related note, Gambit will also compile your stuff to C and then to an executable, if you feel so inclined.

Tashinatashkent answered 18/8, 2009 at 13:25 Comment(0)
F
5

Paul Graham (and friends) made a lisp dialect specifically for writing basic web applications. It's called Arc, and you can get it at arclanguage.org.

It's probably not suited for really big complex websites and I'm not sure what state it's database support is at but Paul Graham knows how to write web applications in lisp, so Arc will make the HTTP/HTML part easy for you while you spend most of your brain cycles learning the lisp way.

Faa answered 14/8, 2009 at 3:47 Comment(0)
A
3

Weblocks is nice tool for building web apps in Common Lisp, but a bit too heavy-weight for me.

We use the following stack:

  • OpenMCL (open source Lisp, very nice)

  • Portable Allegroserve (web server, HTML generator)

  • Our own Rails-like tools for doing Ajaxy stuff (update: this has now been open sourced as WuWei)

  • A variety of CL libraries like cl-json, cl-smtp, md5
Aceto answered 25/8, 2009 at 19:42 Comment(0)
M
2

I use my own, customized version of Scheme, derived from MzScheme. It has a new, simple web-application framework, a built-in web-server (not the one that comes with MzScheme) and ODBC libraries. (http://spark-scheme.wikispot.org/Web_applications). The documentation may not be exhaustive, as this is more of a personal tool. But there are lots of sample code in the code repository.

Mainz answered 14/8, 2009 at 5:18 Comment(0)
I
2

Clojure is a Lisp dialect which may interest you. At this point there's a pretty decent web development stack. I can recommend a few things:

  • The leiningen dependency manager which makes is really easy to install and manage libraries that you're using. Pretty nice set of plugins for it too. There's even a plugin for Clojurescript, which is a language based on Clojure that compiles to Javascript.
  • The ring HTTP server abstraction. Its used in most actual web frameworks. Its a pretty good idea to learn that first before jumping into an actual framework.
  • hiccup is a HTML dsl/templating language written in Clojure. Its very expressive! Reminds me a bit of Jade, in a sense.
  • composure would have to be the most popular web framework for Clojure. Its essentially a routing library like express.js.
Inae answered 17/10, 2015 at 0:36 Comment(0)
M
2

Let's see what can be done with Common Lisp.

The state of the Common Lisp ecosystem (2015) and the Awesome Common Lisp list show us a couple of modern frameworks (Caveman, Lucerne, all built on the new Clack web application server, an interface for Hunchentoot and other servers). Let's discuss with our own findings.

update 2019: there's a new tutorial on the Common Lisp Cookbook: https://lispcookbook.github.io/cl-cookbook/web.html It covers routing, template engines, building self-contained binaries, deployment, etc.

update: a bit later, I found out Snooze, by the creator of Sly or Emacs' Yasnippet, and had a much better impression than say Caveman. Declaring endpoints is just like declaring functions, so some things that were tedious in Caveman are obvious in Snooze, like accessing the url parameters. I don't have much experience with it but I recommend checking it out.

update june 2018: also don't miss the ongoing rewrite of Weblocks, it's going to be huge ! :D http://40ants.com/weblocks/quickstart.html Weblocks allows to build dynamic webapps, without a line of Javascript, without separating the back and front. It is components-based, like React but server-side. It's very alpha as of writing (june 2018), but in progress, and it's working, I have a couple simple web apps working.

A simple way of get the request parameters (something like: get-get #key, get-post #key, get-cookie #key).

I found easier the Lucerne way, it iss as simple as a with-params macro (real world example):

@route app (:post "/tweet")
(defview tweet ()
  (if (lucerne-auth:logged-in-p)
      (let ((user (current-user)))
        (with-params (tweet)
          (utweet.models:tweet user tweet))
        (redirect "/"))
      (render-template (+index+)
                       :error "You are not logged in.")))

Caveman's way has been less clear to me.

Mysql access

Caveman advertises database integration (with Fukamachi's Datafly and sxql).

You can just use clsql or the Mito ORM: https://lispcookbook.github.io/cl-cookbook/databases.html

HTML Form generators, processing, validators, etc.

I don't know if there are form generators out there. edit: there are: cl-forms and formlets, or again 1forms, working with Caveman2.

Caveman does not have one (issue raised in 2011).

Helpers for filter user input data (something like htmlentities, escape variables for put in queries, etc).

Ratify is an input validation library, not integrated into a framework though.

FLOSS and GNU/Linux friendly: ✓

Other web stuff

Speaking about web, there are other nice libraries in CL land:

  • web servers: Woo is a fast HTTP server, faster than Nodejs (beware of charts…), wookie is an async http server,
  • Dexador is an HTTP client
  • Plump, lquery and CLSS make it easy to parse html and query the DOM.
  • cl-bootstrap offers twitter-bootstrap shortcuts for the cl-who templating engine (which kind of replaces Jade/Pug, even though we have usual templates too).

Ajax in Lisp

(remember, with Weblocks, see above, we might not need those)

With ParenScript, we can write JavaScript in Common Lisp, without living our usual workflow, and we can thus use the fetch web API to write Ajax calls.

Mohair answered 16/3, 2017 at 15:19 Comment(0)
S
1

You might want to consider the awful web framework for Chicken Scheme.

  • Natively supports PostgreSQL and SQLite
  • Built-in easy support for sessions
  • Shortcuts for some webdev idioms, like the (ajax) procedure
  • Your app can be easily compiled to a static executable (via csc -static) for easier deployment
  • The collection of all chicken libraries (eggs) isn't as versatile as in some other programming languages, but isn't awful either
Selfregard answered 29/11, 2022 at 12:45 Comment(0)
O
0

Clojure would be perfect for this. With some very short, clean code, you can implement some very complex applications, such as blogs or forums.

Ocreate answered 14/8, 2009 at 3:9 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.