【问题标题】:What are Haskell continuation based web framework?什么是基于 Haskell 延续的 Web 框架?
【发布时间】:2014-12-29 01:58:02
【问题描述】:

我偶尔会遇到 Haskell 的基于延续的 Web 框架的概念。这到底是什么意思?

据我所知,延续是荣耀的 goto 控制结构。我看不出它们与网络内容有什么关系。

使用延续到底会带来什么?

【问题讨论】:

    标签: haskell continuations


    【解决方案1】:

    基于延续的 Web 框架反转 Web 应用程序中的控制流。它不是面向页面的,而是面向流的。显示网页的方式与在桌面应用程序中显示模式对话框的方式相同。控制流(从框架用户的角度来看)是一个命令式操作可以请求显示多个页面。被引用的延续是用户开始的其余操作。

    【讨论】:

    • 如何“被引用的延续是用户开始的其余操作。” http 是无状态的是有意义的。另外,我不明白您所说的“一个命令式操作可以请求显示多个页面”是什么意思。
    • 自从 cookie 被发明以来,HTTP 就不是无状态的。
    • 所以这里的延续感并不意味着代表暂停计算的某些 lambda 被保存在内存中,直到下一个相关操作。不知何故,cookie 被用来构建代表上次请求结束位置的东西?
    • @user782220,它被保存在“内存中”,但内存是 cookie、数据库条目或这些的某种组合。
    【解决方案2】:

    Haskell 的规范的基于延续的 Web 框架是 venerable WASH system

    这个想法是在延续中捕获状态,允许完全 RESTful、无状态的 Web 应用程序在某些情况下可以从基于非延续的程序版本自动生成。

    来自"WASH/CGI: Server-side Web Scripting with Sessions and Typed, Compositional Forms":(2001):

    主要思想是使用一个延续来拍摄状态的快照 将表单发送到浏览器后的脚本。这个延续 然后存储在服务器上,表单包含一个密钥供以后使用 继续检索。

    the MFlow Monad Reader 概述中给出了该方法的现代描述。

    【讨论】:

    • 在服务器上存储 application 状态(也称为 session 状态)实际上是 not RESTful,因为它违反了 REST 的 @987654324 @。在 REST 架构风格中,应用程序状态存储在客户端(服务器仅存储 resource 状态)。在服务器上存储应用程序状态提供了一种不同的架构风格,称为 RS(远程会话),例如Telnet 和 FTP。将它存储在客户端和服务器中提供了另一种名为 RDA(远程数据访问)的架构风格,例如SQL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    相关资源
    最近更新 更多