提问人:deceze 提问时间:8/10/2009 最后编辑:Communitydeceze 更新时间:6/16/2015 访问量:19315
Haskell Web 开发的生态系统是什么?[已结束]
What is the ecosystem for Haskell web development? [closed]
问:
受到这个问题和最近一件事的启发,我想知道 Haskell Web 开发涉及什么。
- 是否有任何 Haskell Web 框架或模板引擎?
- 托管 Haskell 站点将如何工作,是否有合适的 Web 服务器?
- Haskell对于Web开发中通常使用的基于快速开发和原型制作的工作流程来说是否太复杂了?
- 是否有现有 Haskell Web 应用程序的示例?
答:
首先,免责声明:我从未做过任何Haskell的Web开发,所以我不是凭经验说话的。
如果你看一下 Hackage 上的 Web 类别,就会发现有很多与 Web 相关的软件包。
我认为大多数Haskell的Web应用程序都运行在自定义服务器上(可能使用Apache或IIS的高级请求路由作为前端)。但是,也有一些 FastCGI 绑定。mod_proxy
最突出的 Haskell Web 服务器/框架/数据存储基础设施是 Happstack,它很有趣,原因有几个,最明显的是它将其所有状态存储在内存中并且不使用关系数据库。
另一个较新的 Web 服务器界面是 hack,除了 1 分钟的教程看起来很有趣之外,我对它知之甚少。
Haskell 中还有更多的 Web 服务器/框架,但这两个只是我所知道的。
首先,该死的,如果那个“外遇”链接不是有史以来最有趣的事情之一!
现在,虽然我在另一个链接上发布了答案,但我认为 Haskell 网络土地上并没有发生太多事情。你有 Happstack,也许还有其他一些框架,它们似乎无处可去。然后你就有了FastCgi。
如果你像我一样,那么FastCgi可能足以满足你的大部分需求。我发现,大多数客户端并没有真正的规模问题(此外,它对 Ruby 的人来说已经足够好了,对吧)。
如果 FastCgi 不是您的速度......好吧,也许雅司病或升降机(分别为 Erlang 和 Scala)值得一看。
评论
- 是否有任何 Haskell Web 框架或模板引擎?
有许多 Web 框架。在 Web 类别中查找:http://hackage.haskell.org/packages/archive/pkg-list.html#cat:web
对于模板,HStringTemplate 似乎是品牌领导者: http://hackage.haskell.org/package/HStringTemplate
- 托管 Haskell 站点将如何工作,是否有合适的 Web 服务器?
静态链接的二进制文件运行自己的 Web 服务器(例如 happstack-server 或其他 Haskell Web 服务器之一),Haskell 二进制文件与 Apache 通信,...几乎所有你能想到的组合。
- Haskell对于Web开发中通常使用的基于快速开发和原型制作的工作流程来说是否太复杂了?
不。由于类型系统,您将获得更强大的保证,应用程序不会出现故障。
- 是否有现有 Haskell Web 应用程序的示例?
hpaste 是 happstack 的简单演示。Tupil.com 整个业务都是Haskell的Web应用程序。 德意志银行去年在CUFP上发表了关于其内部Haskell网络框架(基于happstack)的演讲。
评论
我在 Haskell 中完成了真正的生产 Web 应用程序。这是我使用的堆栈:
- PostgreSQL 数据库后端
- HDBC Postgres 连接到它
- XHTML 生成 Html。这是一个有点有趣的语法,但至少你有 lambda 抽象。
- Fastcgi 将后端连接到 lighttpd,进行 Web 服务。
整个 Web 应用程序是一个单独的 haskell 程序,编译为本机代码 ghc。我编写了手动执行请求路由(和反向路由)的代码。
我使用 Happstack 为我们的本地 Intranet 创建了一个简单的 webapp/web服务。
- 它将数据存储在内存中,并带有用于恢复的事务日志(Happstack的标准)。你不会在任何地方的代码中找到 SQL。
- 没有模板。人们通常会用模板做什么,我在 Javascript 中做。只需获取 JSON 格式的数据,并将其放入 DOM 中即可。
只有 169 行 Haskell 代码,全部在 Main.hs
中,它们定义了服务器。剩下的是用于演示的 Javascript,以及一些用于测试的 Python。
它是开源的,你可以在GitHub上查看它,也许可以把它作为一个起点。
评论