我通常用PHP,Ruby或Perl编写Web应用程序。我正在研究Scheme,我想尝试使用这种语言的一些Web项目。但是我找不到最佳的环境。
我正在寻找以下功能:
- 一种获取请求参数的简单方法(类似:get-get#key,get-post#key,get-cookie #key)。
- MySQL访问。
- HTML表单生成器,处理,验证器等。
- 用于过滤用户输入数据的助手(诸如htmlentities,用于转入查询的转义变量等)。
- 牙线。
- 与GNU / Linux友好。
因此,在此先感谢所有答复。
我通常用PHP,Ruby或Perl编写Web应用程序。我正在研究Scheme,我想尝试使用这种语言的一些Web项目。但是我找不到最佳的环境。
我正在寻找以下功能:
因此,在此先感谢所有答复。
Answers:
您可能想看看Clojure:
Clojure是一种针对Java虚拟机的动态编程语言。[...] Clojure通过可选的类型提示和类型推断,可以轻松访问Java框架,以确保对Java的调用可以避免反射。
Clojure是Lisp的方言,并且与Lisp共享代码即数据的哲学和强大的宏系统。
与Java互操作在Clojure中非常简单,因此您可以根据需要重新使用任何现有的Java库。我确信有很多对Web开发有用的东西。
clojure-contrib有一个SQL API,还有ClojureQL,它应该满足您的数据库访问需求。
Clojure的Web框架正在开发中,称为Compojure。可能还有其他。
Clojure的源代码可以在EPL下的github上找到。在Linux上运行它很容易。我只是克隆git repos并运行ant
。
尝试使用Weblocks,一个常见的Lisp Web框架:
我已经写了一篇有关该主题的非常详尽的教程/电子书:http : //lispwebtales.ppenev.com/
快速总结:
Gambit Scheme也为Web应用程序提供了自己的解决方案。它使用基于Black Hole模块系统的Spork框架(均由Per Eckerdal负责)。
Andrew Whaley有一个初始教程,介绍如何使用mod_proxy使Gambit,Black Hole和Spork在Apache下运行Web应用程序。您可能想看看。
在一个(可能)相关的说明中,如果您愿意,Gambit还将把您的东西编译为C,然后编译为可执行文件。
保罗·格雷厄姆(Paul Graham)和他的朋友们开发了一种Lisp方言,专门用于编写基本的Web应用程序。它称为Arc,您可以在arclanguage.org上获得它。
它可能不适合真正的大型复杂网站,而且我不确定数据库支持的状态如何,但是Paul Graham知道如何用Lisp编写Web应用程序,因此在您花费最多的时候,Arc会让您轻松使用HTTP / HTML的一部分。您的大脑循环学习口齿不清的方式。
我使用从MzScheme派生的自己的定制版本的Scheme。它具有一个新的简单的Web应用程序框架,一个内置的Web服务器(不是MzScheme随附的Web服务器)和ODBC库。(http://spark-scheme.wikispot.org/Web_applications)。文档可能并不详尽,因为这更多是个人工具。但是在代码存储库中有很多示例代码。
Clojure是一种Lisp方言,您可能会感兴趣。此时,有一个相当不错的Web开发堆栈。我可以推荐一些东西:
leiningen
依赖管理,这使得是很容易安装和管理库,你正在使用。相当不错的插件集。甚至还有Clojurescript的插件,这是一种基于Clojure的语言,可以编译为Javascript。ring
HTTP服务器抽象。它在大多数实际的Web框架中使用。在跳入实际框架之前先学习它是一个相当不错的主意。hiccup
是用Clojure编写的HTML DSL /模板语言。它非常有表现力!从某种意义上说,让我想起了玉。composure
一定是Clojure最受欢迎的网络框架。它本质上是一个路由库,例如express.js
。让我们看看Common Lisp可以做什么。
Common Lisp生态系统的状态(2015年)和Awesome Common Lisp列表向我们展示了几个现代框架(Caveman,Lucerne,它们都基于新的Clack Web应用程序服务器,Hunchentoot和其他服务器的接口)。让我们讨论一下我们自己的发现。
2019年更新:Common Lisp Cookbook上有一个新教程:https://lispcookbook.github.io/cl-cookbook/web.html它涵盖了路由,模板引擎,构建独立的二进制文件,部署等。
更新:稍后,我发现了Sly或Emacs的Yasnippet的创建者Snooze,给人的印象比Caveman更好。声明端点就像声明函数一样,因此在穴居人中有些繁琐的事情在Snooze中很明显,例如访问url参数。我没有太多经验,但是我建议您检查一下。
2018年6月更新:也不要错过正在进行的Weblocks重写,这将是巨大的!:D http://40ants.com/weblocks/quickstart.html Weblocks允许构建动态webapp,而无需一行Javascript,而无需前后分开。它是基于组件的,就像React一样,但是是服务器端的。截至撰写时(2018年6月),它的alpha值非常高,但仍在进行中并且正在运行,我有几个简单的Web应用程序正在运行。
我发现卢塞恩方法更简单,它就像with-params
宏一样简单(真实示例):
@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宣传数据库集成(与Fukamachi的Datafly和sxql集成)。
您可以只使用clsql或Mito ORM:https ://lispcookbook.github.io/cl-cookbook/databases.html
我不知道那里是否有表单生成器。编辑:有: cl-forms和formlets,或再次1forms,与Caveman2一起工作。
穴居人没有一只(2011年提出)。
批准是输入验证库,但未集成到框架中。
说到网络,CL领域还有其他不错的库:
(请记住,使用Weblocks,请参见上文,我们可能不需要这些)
使用ParenScript,我们可以用Common Lisp编写JavaScript,而无需使用通常的工作流程,因此我们可以使用fetch
Web API编写Ajax调用。