如何使用Lisp或Scheme进行Web编程?

时间:2009-08-14 01:10:00

标签: lisp scheme

我通常用PHP,Ruby或Perl编写Web应用程序。我正在开始研究Scheme,我想用这种语言尝试一些web项目。但我找不到最适合这种情况的环境。

我正在寻找以下功能:

  • 获取请求参数的简单方法(例如:get-get #key,get-post #key,get-cookie #key)。
  • Mysql访问。
  • HTML表格生成器,处理,验证器等
  • 过滤器用户输入数据的助手(类似于htmlentities,用于放入查询的转义变量等)。
  • FLOSS。
  • 和GNU / Linux友好。

所以,提前感谢所有回复。

14 个答案:

答案 0 :(得分:66)

Racket拥有您需要的一切。请参阅Racket网络服务器tutorial,然后查看documentation。 Web服务器已经存在了一段时间,它有一个很多的功能。可能唯一没有包含的是mysql接口,但它作为PLaneT上的包存在(Racket包分发工具)。

更新:Racket现在提供数据库支持,可与包括mysql在内的多个数据库配合使用。

答案 1 :(得分:19)

您可能需要查看Clojure

  

Clojure是一种针对Java虚拟机的动态编程语言。 [...] Clojure提供了对Java框架的轻松访问,具有可选的类型提示和类型推断,以确保对Java的调用可以避免反射。

     

Clojure是Lisp的一种方言,与Lisp共享代码为数据的哲学和强大的宏系统。

在Clojure中使用Java的Interop很简单,因此您可以根据需要重用任何现有的Java库。我确信有很多对Web开发有用。

clojure-contrib有一个SQL API,还有ClojureQL,它应该涵盖您的数据库访问需求。

正在开发一个名为Compojure的Clojure Web框架。也可能有其他人。

Clojure的来源是available on github下的EPL。让它在Linux上运行很容易;我只是克隆git repos并运行ant

答案 2 :(得分:18)

您可以使用guile scheme进行网站开发。它的标准库包括(sxml简单)模块,该模块对于html生成,操作和解析非常有用。 guile-www库添加了对http,cgi等的支持。guile-dbi库提供对MySQL和其他数据库的访问。使用这些构建块,您可以实现从简单的cgi脚本到具有自己的HTTP服务器的Web应用程序的所有内容。

答案 3 :(得分:15)

尝试使用Common Lisp Web框架Weblocks:

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

答案 4 :(得分:9)

我写了一篇关于这个主题的非常广泛的教程/电子书:http://lispwebtales.ppenev.com/

快速摘要:

  • 它使用Common Lisp
  • 它使用Restas框架
  • 它提供了几乎所有基本Web开发的示例,包括数据库访问,身份验证,HTML生成和模板。
  • 由于Restas文档已经过时,我的教程是最接近最新文档的。
  • 显示一些更高级的功能,例如策略,允许您编写可插拔接口,例如,您可以编写数据存储层,并相对轻松地为不同的存储机制编写后端,模块系统允许您编写可重用的组件,例如auth框架和类似的东西。
  • 它涵盖了安装lisp,设置ASDF构建系统和quicklisp包管理器等内容。
  • 它是免费在线的,一旦我完成它,它也将免费在leanpub上。根据CC许可证,源代码位于https://github.com/pvlpenev/lispwebtales,源代码为MIT。并非所有内容都已发布,我正在修改。

答案 5 :(得分:8)

答案 6 :(得分:8)

如果您对Common Lisp感兴趣并且不想使用weblocks路线,我建议您进行以下设置:

  1. 在Linux上使用SBCL但具有多线程支持
  2. 使用Hunchentoot作为Web服务器,它将为您提供所需的所有服务器处理,包括会话和cookie
  3. 使用ClSql与MySql通信它有足够的文档并且非常稳定。
  4. 对于HTMl代,您可以使用Edi Weitz Cl-WHO博士(记录完备)。
  5. 请注意以上所有内容均属于GPL或类似许可(对于lisp程序更有效)

答案 7 :(得分:6)

Gambit Scheme也有自己的网络应用解决方案。它使用Spork框架,基于Black Hole模块系统(均由Per Eckerdal提供)。

Andrew Whaley有一个关于如何让Gambit,Black Hole和Spork使用mod_proxy在Apache下运行Web应用程序的初始tutorial。你可能想看一下。

在一个(可能)相关的注释中,如果你有这种倾向,Gambit还会将你的东西编译成C然后编译成可执行文件。

答案 8 :(得分:5)

保罗·格雷厄姆(和朋友们)专门为编写基本的网络应用程序而制作了一个lisp方言。它被称为Arc,您可以在arclanguage.org获得它。

它可能不适用于非常复杂的大型网站,我不确定它的数据库支持状态是什么,但Paul Graham知道how to write web applications in lisp,所以Arc会让你在花费的时候轻松获得HTTP / HTML部分你的大部分大脑周期都在学习lisp方式。

答案 9 :(得分:3)

Weblocks是在Common Lisp中构建Web应用程序的好工具,但对我来说有点太重了。

我们使用以下堆栈:

  • OpenMCL(开源Lisp,非常好)

  • Portable Allegroserve(网络服务器,HTML生成器)

  • 我们自己的Rails工具用于做Ajaxy的东西(更新:现在已经开源为WuWei

  • 各种CL库,如cl-json,cl-smtp,md5

答案 10 :(得分:2)

我使用自己的自定义版本的Scheme,源自MzScheme。它有一个新的,简单的Web应用程序框架,一个内置的Web服务器(不是MzScheme附带的)和ODBC库。 (http://spark-scheme.wikispot.org/Web_applications)。文档可能不是详尽无遗的,因为这更像是一种个人工具。但是code repository中有很多示例代码。

答案 11 :(得分:2)

Clojure是一种可能让你感兴趣的Lisp方言。在这一点上,有一个相当不错的Web开发堆栈。我可以推荐一些东西:

  • leiningen依赖关系管理器非常容易安装和管理您正在使用的库。相当不错的一套插件。甚至还有Clojurescript的插件,这是一种基于Clojure的语言,可以编译为Javascript。
  • ring HTTP服务器抽象。它用于大多数实际的Web框架中。在进入实际框架之前先了解它是个不错的主意。
  • hiccup是一种用Clojure编写的HTML dsl /模板语言。它非常富有表现力!从某种意义上说,让我想起了一点玉。
  • composure必须是Clojure最受欢迎的Web框架。它本质上是一个路由库,如express.js

答案 12 :(得分:2)

让我们看看Common Lisp可以做些什么。

state of the Common Lisp ecosystem (2015)Awesome Common Lisp列表向我们展示了几个现代框架(CavemanLucerne,所有这些都构建在新的Clack Web应用程序服务器上,Hunchentoot和其他服务器的接口)。让我们讨论一下我们自己的发现。

更新:稍后,我发现了{/ 3}},是Sly或Emacs'Yasnippet的创造者,并且比Caveman的印象要好得多。声明端点就像声明函数一样,因此在Snooze中一些单调乏味的东西在Snooze中很明显,比如访问url参数。我没有太多的经验,但我建议检查出来。

更新2018年6月:也不要错过正在进行的Weblocks重写,这将是巨大的! :D Snooze Weblocks允许构建动态的webapps,没有一行Javascript,不分离后面和前面。它是基于组件的,如React,但服务器端。在编写时(2018年6月)它非常像alpha,但在进行中,并且它正在运行,我有几个简单的Web应用程序正在运行。

获取请求参数的简单方法(例如:get-get #key,get-post #key,get-cookie #key)。

我发现卢塞恩方式更简单,它就像with-params宏(http://40ants.com/weblocks/quickstart.html)一样简单:

@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的方式是real world example

Mysql访问

Caveman宣传数据库集成(使用Fukamachi的Datafly和sxql)。

您可以使用clsql或Mito ORM:less clear to me

HTML表格生成器,处理,验证器等

我不知道那里是否有表单生成器。 修改:有:https://lispcookbook.github.io/cl-cookbook/databases.htmlcl-forms,或者formlets,与Caveman2合作。

Caveman 1forms(2011年提出的问题)。

过滤器用户输入数据的帮助程序(类似于htmlentities,用于放入查询的转义变量等)。

does not have one是一个输入验证库,但未集成到框架中。

FLOSS和GNU / Linux友好✓

其他网络资料

谈到网络,CL土地上有Ratify

  • 网络服务器:other nice libraries是一个快速的HTTP服务器,比Nodejs更快(小心图表......),Woo是一个异步的http服务器,
  • wookie是HTTP客户端
  • DexadorPlumplquery可以轻松解析HTML并查询DOM。
  • CLSScl-bootstrap模板引擎提供了twitter-bootstrap快捷方式(即使我们也有常用的模板,也会取代Jade / Pug)。

Lisp中的Ajax

(请记住,使用Weblocks,见上文,我们可能不需要那些)

  • cl-who是一个有趣的实验,可以在Common Lisp中编写Ajax视图。该网站有很好的现实演示。它可以包含其他Javascript库。
  • Wuwei,在最近的博客文章(2017年)中进行了解释。

答案 13 :(得分:0)

Clojure对此非常完美。使用一些非常简短的代码,您可以实现一些非常复杂的应用程序,例如博客或论坛。