我是一名对信息检索感兴趣的软件开发人员。目前我正在处理我的第三个搜索引擎项目,并且对一次又一次编写的样板代码数量感到非常沮丧,同样的错误等等。
基本搜索引擎是一个非常简单的野兽,可以用由两个“层”组成的正式语言来描述:
“原语层”(或公理,内核语言 - 不知道如何命名它们)。它们包括几个集合(作为一组资源 - 文件、网站)、集合上的关系(作为“站点 A 链接到站点 B”)和简单的操作,例如“打开资源 A 的流”、“从流中读取记录”、 'merge N 个流','index set of records by field F'等。还有很多数据转换,如'save stream in YAML format','load stream from XML format'等。
“应用层”——构成搜索引擎生命周期的几个非常高级的操作,如“收获新资源”、“抓取收获的资源”、“将抓取的资源合并到数据库”、“索引抓取的资源”、“合并索引”等等。每一个高级操作都可以用从 1 开始的“原语”来表示。
这种高级表示可以很容易地测试,甚至可以正式证明,并用所选的编程语言实现(或代码生成)。
那么问题来了:是否有人以这种方式设计系统——形式上、严格(甚至可能在代数/群论的层面上),在严格的自上而下的方法中?我可以阅读以了解什么?