我通常用PHP,Ruby或Perl编写Web应用程序。我正在开始研究Scheme,我想用这种语言尝试一些web项目。但我找不到最适合这种情况的环境。
我正在寻找以下功能:
所以,提前感谢所有回复。
答案 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:
答案 4 :(得分:9)
我写了一篇关于这个主题的非常广泛的教程/电子书:http://lispwebtales.ppenev.com/
快速摘要:
答案 5 :(得分:8)
这可能就是你要找的东西。
答案 6 :(得分:8)
如果您对Common Lisp感兴趣并且不想使用weblocks路线,我建议您进行以下设置:
请注意以上所有内容均属于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)
它可能不适用于非常复杂的大型网站,我不确定它的数据库支持状态是什么,但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)
答案 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列表向我们展示了几个现代框架(Caveman,Lucerne,所有这些都构建在新的Clack Web应用程序服务器上,Hunchentoot和其他服务器的接口)。让我们讨论一下我们自己的发现。
更新:稍后,我发现了{/ 3}},是Sly或Emacs'Yasnippet的创造者,并且比Caveman的印象要好得多。声明端点就像声明函数一样,因此在Snooze中一些单调乏味的东西在Snooze中很明显,比如访问url参数。我没有太多的经验,但我建议检查出来。
更新2018年6月:也不要错过正在进行的Weblocks重写,这将是巨大的! :D Snooze Weblocks允许构建动态的webapps,没有一行Javascript,不分离后面和前面。它是基于组件的,如React,但服务器端。在编写时(2018年6月)它非常像alpha,但在进行中,并且它正在运行,我有几个简单的Web应用程序正在运行。
我发现卢塞恩方式更简单,它就像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。
Caveman宣传数据库集成(使用Fukamachi的Datafly和sxql)。
您可以使用clsql或Mito ORM:less clear to me
我不知道那里是否有表单生成器。 修改:有:https://lispcookbook.github.io/cl-cookbook/databases.html和cl-forms,或者formlets,与Caveman2合作。
Caveman 1forms(2011年提出的问题)。
does not have one是一个输入验证库,但未集成到框架中。
谈到网络,CL土地上有Ratify:
(请记住,使用Weblocks,见上文,我们可能不需要那些)
答案 13 :(得分:0)
Clojure对此非常完美。使用一些非常简短的代码,您可以实现一些非常复杂的应用程序,例如博客或论坛。