月度档案:2018年3月

任务抽象

尼尔·米切尔(Neil Mitchell)、西蒙·佩顿·琼斯(Simon Peyton Jones)和我刚刚完成了一篇论文,描述了一个用于开发和比较构建系统的系统和可执行框架。论文和相关代码可在此处获得:https://github.com/snowleopard/build(网址:https://github.com/snowleopard/build)。代码还没有得到很好的记录和完善,但我会在四月份将其完善。您可以了解更多有关项目背后动机的信息在这里

(更新:论文被ICFP接受!阅读PDF格式,观看谈话.)

在这篇博客文章中,我想分享一个有趣的抽象概念,我们提出这个概念来描述构建任务:

类型 任务c千伏=对于所有f立方英尺=>(k)->f v)->k个-> 也许 吧(f v)

A类任务与编译器、文件系统、依赖关系图、缓存以及实际构建系统的所有其他复杂性完全隔离。它只计算键的值k个,以无副作用的方式,使用类型的回调k→f v查找其依赖项的值。回调的一个简单示例是Haskell的readFile函数:从它的类型可以看出文件路径→IO字符串,给定密钥(文件路径k=文件路径)它可以找到它的值(类型为v=字符串)通过执行任意IO效果(因此f=IO). 我们要求任务描述在(f),以便我们可以在不同的计算环境中重用它们(f)无需从头开始重写。

继续阅读任务抽象