有时候,一个想法会强烈地冲击你,你会说:“我怎么没想到呢?”Web编程的历史是一个抽象创新的序列,每一个都可能使您说出前面提到的短语。
Web由一系列相互关联的标准支持,包括HTTP、HTML、CSS、CGI和JavaScript。在此基础上构建了一系列抽象,每个抽象都增加了Web应用程序的设计和实现的便利性。
最早的抽象概念之一出现在上世纪末,由阿特金斯、鲍尔、布伦斯和考克斯提出1设计了MAWL——所有网络语言之母。MAWL向Web世界引入了现在很常见的控制反转概念,即调用生成Web页面的程序的用户请求序列被视为生成用户响应的页面序列的单个程序。我第一次尝试掌握控制倒置时,大脑受到了伤害,但在几年内,它在理论上获得了坚实的基础,并在Queinnec的努力下,将其与很好理解的延续概念和延续传递风格联系起来7以及grunke、Findler、Krishnamurthi、Van Der Hoeven和Felleisen组成的PLT计划(现在的球拍)团队。4
Web编程是复杂的,因为它涉及到大量在不同平台上运行的、用不同语言编写的程序。通常,三层系统由客户机上的JavaScript、服务器上的Java(或其他语言)和数据库上的SQL组成。Cooper、Lindley、Wadler和Yallop将从单一源代码生成所有三个层的想法命名为“无层编程”。2许多系统独立地从一个源生成两到三个层,包括谷歌的AWT和微软的LINQ,以及面向研究的系统,包括Ocsygen、Opa和Hop。
尽管这些系统很先进,但即使像在表单上输入日期这样简单的事情也可能很复杂。它可以是需要解析的表单中的单个字符串,也可以是需要组装的日、月和年的三个下拉菜单,或者是通过JavaScript中的日历小部件输入。直到2006年,我才看到Plasmeijer和Achten的数据数据系统,6他建议Web系统应该对这些细节进行抽象,将模型-视图抽象引入到Web表单中,将数据的输入方式与数据的处理方式分开封装。一个显而易见的想法,但只是在回想时。库珀,林德利,瓦德勒和亚洛普3.将iData的这一方面重新制作为formlet。正如控制反转一旦与已知的延续概念相关联就更容易理解一样,正如McBride和Patterson所介绍的那样,formlet从适应已知的应用概念中受益。5理论辅助实践:开发人员为f#、Haskell、JavaScript和Racket编写了formlet库,并将对formlet的支持整合到Happstack、Tupil、Web-Sharper和Yesod等框架中。
下面的论文介绍下一步。到目前为止,Web应用程序中的数据库一直被视为全局变量,所有人都可以访问。Chlipala提出了一个更好的方法:允许每个模块在本地声明与其需求相关的数据库部分,并对其他模块隐藏该部分。他还引入了支持并发和事务的原语,其设计比大多数其他Web语言更优雅。最后,他提出了一种包含命令式操作的函数式响应式编程的新形式。后者与Elm等语言中更具声明性的函数式响应式编程相比如何,还有待观察。Chlipala已经在实践中尝试了这些技术,他的早期客户的有趣名单可以在这篇论文的研究版本中找到,它出现在POPL 2015年。
到目前为止,Web应用程序中的数据库一直被视为全局变量,所有人都可以访问。Chlipala提出了一个更好的方法。
模块化数据库访问是一个功能强大的简单想法,我希望它很快就会出现在您身边的Web编程语言中。我怎么没想到呢?
1.Atkins, d.l., Ball, T., Bruns, G.和Cox, K. Mawl:一种针对基于表单的服务的领域特定语言。IEEE反式。软件工程253(1999), 334346。
2.库珀,林德利,S.,瓦德勒,P.和雅洛普,J.链接:没有层的Web编程。组件和对象的形式化方法。施普林格,2007,266296。
3.《形式抽象的本质》,作者:库珀、林德利、瓦德勒、亚洛普。在亚洲程序设计语言与系统研讨会论文集。施普林格,2008,205220。
4.Graunke, P., Krishnamurthi, S., Van Der Hoeven, S.和Felleisen, M.用高级编程语言进行Web编程。在欧洲程序设计研讨会论文集。施普林格,2001,122136。
5.麦克布莱德,C.和帕特森,R.应用程序设计与效果。J.函数式编程18, 1(2008), 113。
6.Plasmeijer, R.和Achten, P.数据为万维网编程互联Web表单。在函数和逻辑程序设计国际研讨会论文集。施普林格,2006,242258。
数字图书馆是由计算机协会出版的。版权所有©2016 ACM, Inc.
没有找到条目