哲学博士学位论文

胡说八道--

纯功能过程
应用于
图形用户界面

马格纳斯
托马斯·哈尔格伦

 


计算机科学系
查尔默斯工业大学
哥德堡大学
S-412 96哥德堡,瑞典
哥德堡1998


ISBN 91-7197-611-6
ISSN 0346-718X

http://www.cs.chalmers.se/~hallgren/论文/

计算机科学系

哥德堡1998


摘要

本文的主要成果是一种程序编写方法纯功能语言的图形用户界面。这个方法基于一个称为胡说八道.该方法充分利用了函数语言,如高阶函数和参数化多态性。

Fudget概念是用更简单的概念来定义的流处理器,这可以看作是一个简单的,但实际上过程概念的有用体现。基于fudgets的程序流处理器是通信过程的网络使用组合器分层构建。沟通是类型安全。基本组合器提供串行组合、并行组合组成和循环。与之前的工作的主要区别流处理函数和我们的方法是远离溪流。我们得到了一个可以完全在一个纯功能的语言,但这也使得利用并行评估和不确定性(如有)在功能语言中。纯功能方法使流程成为一流的价值观,并使其易于表达进程克隆和进程迁移。

该方法的实际可行性通过Fudget库,这是一个图形用户的实现纯函数语言Haskell的接口工具包,再加上一些小到大的应用程序在库的顶部实现。

除了GUI编程之外,fudget还适用于其他形式并发I/O编程。我们演示了客户机/服务器我们可以编写基于类型安全通信的应用程序在客户端和服务器之间。我们以一个web浏览器为例GUI编程和网络通信结合在一起。

我们认为fudgets是一个更一般的基于组合子的例子一种将功能语言结合在一起的方法使用组合库是减少使用的一个很好的选择由特定于应用程序的工具支持的表达语言。我们描述一组组合词,让人想起解析组合词,用于构建语法导向编辑器。


前言

这本专著是两位作者的论文。大部分工作后面一直在进行密切的合作作者,但有些章节呈现的是更具个人特色的作品性质:
托马斯·哈尔格伦:
第19章,27岁和39岁。他还发展了中的应用程序第五部分(部分稿件在第36章和不过,37岁)。
马格努斯·卡尔森:
第24、25章,28和29。

致谢
历史反思

目录

一、引言


1组合编程
2个组合库替换工具
3声明性编程和输入/输出
函数语言中的4个I/O?
5什么是软糖?
6论文贡献
7路线图

我和福吉特一起编程

fudget概念和fudget图书馆首先被构想出来设计用于帮助在懒惰的函数式语言。尽管福吉图书馆现在支持其他类型的I/O,库的主要部分仍然与图形用户界面编程。

在Fudget库中,每个GUI元素都表示为福吉。这座图书馆为许多普通的基础建筑提供资料块,如按钮、弹出菜单、文本框等。该库还提供了允许构建的组合器块组合成完整的用户界面。

本节通过介绍一个GUI编程示例的数量。它们说明了如何从GUI元素和特定于应用程序的代码。在示例之后,将概述图书馆。我们展示


8 Haskell简介
9你的前8个Fudget程序
10个Fudget库GUI元素
11指定布局
12个抽象的谎言
13福吉管道
14个用于非GUI I/O的fudget
15个定制参数

III流处理器——福吉特的精髓

本文所述工作的出发点是把愚人节看作是一个和其他蠢货交流的过程通过高级流和I/O系统低层流。因此,fudget有两个输入流,而不是预先知道两个流中元素的顺序变得可用。福吉应该能听高层次的投入还是低层次的投入,还要选择反应第一个可用的输入,不管它是什么流我们原以为前一个案子是例外和后一种情况将是规则,所以为不确定的选择提供一些运算符程序员可以在fudgets的定义中使用,我们选择在将高水位和低水位水流输送到这样就把不确定的选择转移到fudget之外。

所以,我们一开始以为福吉是原始概念,但很快把它们看作是从一个更简单的概念流动处理器,这是一个与通过一个输入流和一个输出溪流。

本文的这一部分致力于流处理器。


16个流处理器
17管道:合成流处理器
管道工程的18个实用方面
19使用纯流处理器的应用程序编程

四、设计与实施

在这一部分中,我们将描述Fudget库本身,以及我们的一些扩展完成。第一个组织章节可以用文字概括图书馆,扩展编程方法:
图书馆。
这些章节描述了福吉特图书馆背后的原则。第二十章讨论流处理器的不同实现。这个fudget组合子的实现是基于流的处理器,并允许它们与不同种类的I/O系统(第二十一章).第二十二章描写GUI背后的机制,异步I/O和X窗口的底层接口。

自动排样系统第二十三章可见作为组合子库,它不仅用于放置图形用户界面,还可以组成图形。

过滤器fudgets(修改福吉特的影响)第二十四章.缓存filter使fudget程序使用更少的内存运行得更快,并且焦点过滤器修改GUI的输入模型使用键盘。

扩展。
接下来的章节将描述我们但是,不要认为这对图书馆是绝对必要的它们中的一些位于库中,另一些则位于最少提示修改库以便工作。

流处理器和fudgets的一个显著特点是他们可以脱离他们原来的位置在程序,作为消息传递,并附加到另一个位置。第二十五章描述如何使用它来程序拖放应用程序,在这里GUI实际上拖动时在程序内部移动。

第二十六章展示了如何使用fudget概念用于编写客户机/服务器应用程序。服务器程序可以通常没有任何图形界面,但它是可以的有利于以并发方式编程服务器,以便他们可以同时为许多客户服务。

库包含的类型类具有图形化外观,它可以由用户。第二十七章呈现图解的类和它的实施。

编程方法。
这些章节描述了我们编程方法实验福吉特。第二十八章描述用于创建类似于解析的面向语法的编辑器组合子,和第二十九章展示了Haskell的课堂系统可以用来自动生成简单的gui。作为我们已经在前面的部分看到了,类系统也被用于编程使用具有默认值的参数。实现是描述第三十章.
最后,第三十一章描述Fudget库上的功能工具包小工具。这个包括流程概念的功能实现小工具,并允许将Gadget程序合并到福吉特。作为奖励,添加了一个分析工具,它提供消息队列的图形监视器。
20实现流处理器
21个Fudgets作为流处理器
22 Fudget I/O:血淋淋的细节
23自动布局
24过滤软糖
25个移动流处理器
用于客户端/服务器应用程序的26个类型化套接字
27显示和操作图形对象
面向语法操作的28个组合子
29类型导向GUI生成
30个定制参数
福吉特的31个小玩意

五、应用

福吉特发展背后的一个强大动机是实用性,也就是说,我们希望能够写作具有图形用户界面的纯功能语言中的声明式风格。手牵手随着图书馆的发展,我们开发了小型和大型应用程序的数量。

让你了解一下复古图书馆的潜力并讨论各种实际编程考虑事项,本部分详细介绍了一些我们用Fudgets实现的应用程序。


32 WWWBrowser—一个WWW客户端
33阿尔法——类型理论的校对编辑
34 Humake——分布式并行制造Haskell工具
35个空间入侵者——实时与模拟
36真菌
37移动数据通信协议原型工具
38双棋盘游戏

六、讨论


39效率和程序转换
哈斯凯尔语和其他语言的40条评论设计问题
41相关工作
42评价与结论
43未来工作

A在线资源


A、 1福吉特主页
A、 2个支持的平台,下载和安装
A、 3编写Fudget程序

福吉特图书馆快速参考指南

这是Fudget库的一个简短索引,列出了都出现在课文中的例子中。

对福吉特图书馆内容的更完整的描述是在参考手册中提供,可通过

http://www.altocumulus.org/Fudgets/Manual/

B、 1个顶级主程序
B、 2个GUI构建块(小部件)
B、 3个组合器,管道
B、 4添加应用程序特定代码
B、 5布局
B、 6图形
B、 7字母表

生产记录

这篇论文是用Haskell的一个扩展版本编写的,名为笔迹,由作者开发。扩展包括一个新的字符串类型,它可以覆盖许多行,并且包含用于规范的嵌入Haskell代码加价。HacWrite由一个转换hacdwrite的预处理器组成源代码到Haskell,和一个标记组合子库,编写在HacWrite中。该库还有用于生成乳胶的后端和HTML。