InfoQ主页新闻Haskell Web Framework IHP旨在使Web开发类型安全简单。
在Digital Induced创建的集成Haskell平台旨在成为一个完全自以为是的框架,将Haskell类型安全引入服务器端呈现,并结合快速开发。
IHP基于Warp Web服务器,使用ORM作为持久层。IHP使用NIX简化安装过程,包括其集成的数据库、编译器和开发环境。数字引发的声明称,您可以在20分钟内使用IHP构建您的第一个Web应用程序,这也要归功于IHP代码生成器(IHP Code Generator)和数据库架构设计器(Database Schema Designer)。IHP代码生成器旨在让您快速开始使用Haskell代码。IHP使用自己的HTML标记DSL,与Reaction JSX类似,称为HSX,但作为HTML生成的前一步,它会被转换为经过类型检查的Haskell代码。
Marc Scholten:在Digital Induced,我们与客户和合作伙伴一起开发许多复杂的软件解决方案。在完成软件生命周期的过程中,我们可以看到某些问题一遍又一遍地发生。尤其是在使用非常动态的语言时的质量问题,以及与包管理相关的问题。所以我们着手解决这些问题。
虽然很多人认为编程语言的选择无关紧要,但我们认为,技术选择的力量各不相同,对产品的影响很大。我们研究了很多不同的技术,发现Haskell非常适合我们追求最高质量的软件工程和开发人员快乐的目标。
虽然Haskell是一种很棒的语言,但我们找不到一个真正好的框架来使用。我们一直在寻找一些固执己见的、有充分记录的、容易上手的东西。在评估了一些解决方案之后,我们决定自己构建它。
同样的过程导致我们选择NIX作为我们的主要包管理解决方案:我们希望我们的开发人员能够非常快速地切换项目。我们打算做一个完全标准化的开发环境。您应该能够克隆项目,并准备好使用单个命令启动它。我们的目标是摆脱一切需要手工完成的工作。NIX包管理器正是实现这一点的合适工具。
InfoQ:IHP力争摆脱目前越来越普遍的在浏览器中生成UI的方法,而是依赖于服务器端呈现。在您看来,这两种方法是如何相互竞争的?它们的优点和缺点是什么?
Scholten:单页应用程序当然有其用武之地。例如,在做交互性很强的事情时,比如基于Web的3D工具,或者在处理交互式图表时。
我们现在看到的是,许多开发人员选择构建单页面应用程序,而没有考虑成本和权衡。开发单页面应用程序需要付出更多的努力,因为除了在后端处理应用程序状态之外,您还需要在客户端执行所有状态处理。显然,这会导致更多的代码。因此需要维护更多的代码。这会导致更多的错误,并降低应用程序开发的速度。
根据我们的经验,现在作为SPA构建的许多应用程序可以更快、更稳定地构建为服务器端呈现的应用程序。最近推出的hey.com就是一个很好的例子:这个应用程序的交互性很强,但它不是一个单页面的应用程序。
当您的应用程序中有一个非常动态且不能实现为服务器呈现的应用程序的特定部分时,您仍然可以仅为该特定页面构建一个小型封装的SPA。这种混合方法对我们非常有效,我们相信这是构建优秀Web应用程序的前进方向。
Scholten:实际上,Haskell最大的优势是类型安全。例如,与NodeJS相比,这导致每个LOC的错误明显减少。我们几乎没有运行时错误。当需要进行重大更改时,您可以轻松地重构您的Haskell应用程序,而不会破坏任何东西。当您正在快速构建新功能时,这会有很大帮助。我们从快速移动和打碎东西演变为快速移动。
许多编程语言生态系统正朝着更加类型安全的方向发展,例如,使用TypeScript或PHP世界的最新发展。我们使用过很多不同的技术,在这方面没有一种技术能真正与Haskell相提并论。
Scholten:IHP已经被数字诱导和我们的合作伙伴用于生产。在我们将框架开源之前,IHP的整体应用程序架构已经在多次迭代中进行了改进。此外,IHP构建在久经考验的Haskell库之上,例如WARP Web服务器。因此,您可以预期这对于大型项目来说已经相当稳定和可伸缩了。
Haskell工程师马特·帕森斯(Matt Parsons)在Twitter上将IHP描述为Haskell on Rails。在批评国际水文计划的一些设计决定的同时,帕森斯认为这是一项有益的努力:
它是生态系统中的新活力,非常注重开发人员的体验。它是一个Rails端口,我们没有,我们绝对可以使用。它为哈斯克尔在其他地方打开了大门。
IHP可通过其Linux子系统在大多数操作系统上使用,包括MacOS、Linux变体和Windows。你可以在GitHub上买到。
InfoQ上上周内容的综述每周二都会发布。加入一个超过25万名高级开发人员的社区。 查看示例。
选择您的国家/地区我同意InfoQ.com按照本隐私声明中的说明处理我的数据。