Language agnostic 构建不以文件为中心的系统

Language agnostic 构建不以文件为中心的系统,language-agnostic,automation,build-automation,Language Agnostic,Automation,Build Automation,我们有一个软件基础设施,它的工作原理很像一个软件构建系统:从不同的来源收集信息并用于生成一些输出。像在传统的软件构建中一样,我们有不同类型的输出、依赖树等 主要区别在于,我们的来源、中间结果和输出并非天生基于文件。相反,它们是(唯一可寻址的)数据对象 目前,我们正在结合传统构建系统(SCons)将数据结构映射到文件和目录,但这并不能扩展w.r.t.的性能,更重要的是,还不能扩展w.r.t.的可维护性。因此,我正在寻找一个基础设施,从一开始就是为了这个目的而建立的 例如,假设您有3个XML文档A、

我们有一个软件基础设施,它的工作原理很像一个软件构建系统:从不同的来源收集信息并用于生成一些输出。像在传统的软件构建中一样,我们有不同类型的输出、依赖树等

主要区别在于,我们的来源、中间结果和输出并非天生基于文件。相反,它们是(唯一可寻址的)数据对象

目前,我们正在结合传统构建系统(SCons)将数据结构映射到文件和目录,但这并不能扩展w.r.t.的性能,更重要的是,还不能扩展w.r.t.的可维护性。因此,我正在寻找一个基础设施,从一开始就是为了这个目的而建立的

例如,假设您有3个XML文档
A
B
C
。假设
B/foo/bar
A/x/y
A/x/z
计算,同样地
C/A/B
A/x/y
计算。我需要一个基础设施

  • 实现这些关系(即转换及其依赖关系)
  • 更改后自动重新生成相关零件
  • 使用文件的一个主要问题是,如果我将
    A
    B
    C
    映射到一些文件
    A.xml
    B.xml
    C.xml
    ,并使用传统的构建系统,那么对
    A.xml
    的任何更改都将触发
    B.xml
    C.xml
    的重建,即使
    A/x/y
    A/x/z
    (B的原始依赖项)未被修改。因此,对于细粒度的依赖项解析,我需要将
    a
    B
    C
    中的每一个映射到一个目录,而不是一个文件,其中每个子目录表示一个元素,文件表示属性,等等。正如我所说的,这对我们来说并不适用

    (请注意,我们的系统实际上并不基于XML)


    现在,我正在寻找任何指向这一方向的现有软件、基础设施或概念,而不考虑实现语言和底层数据结构。

    因此,没有什么能准确解决您的问题,但有一些工具可能会让您比现在更接近:

    1) 您可以使用Fuse将一些东西组合在一起,从而更好地控制数据对象映射到文件的方式。Fuse基本上允许您从所需的任何备份数据构建任意文件系统。(界面非常友好,但也有许多其他语言界面可用)。然后,您可以使用传统的构建工具,并利用与您的数据更好地关联的类似文件的对象


    2) Cmake有一种非常可扩展的语言,用于编写定制目标,您可以将其压入服务中。不幸的是,它的语言很有说教性,学习曲线也很陡峭,所以它不是我的第一选择。

    所以我想不出什么能准确解决你的问题,但有一些工具可以让你比现在更接近:

    1) 您可以使用Fuse将一些东西组合在一起,从而更好地控制数据对象映射到文件的方式。Fuse基本上允许您从所需的任何备份数据构建任意文件系统。(界面非常友好,但也有许多其他语言界面可用)。然后,您可以使用传统的构建工具,并利用与您的数据更好地关联的类似文件的对象


    2) Cmake有一种非常可扩展的语言,用于编写定制目标,您可以将其压入服务中。不幸的是,它的语言很有教育性,学习曲线也很陡峭,所以它不是我的第一选择。

    听起来你需要一个主动对象数据库管理系统()之类的。ODBMS提供传统的持久性服务,而不需要将数据结构映射到文件的旧成本,也不需要对象技术的众所周知的好处。正如您提到的依赖树和可寻址对象,在ODBMS中,导航引用作为其数据的一部分存储,允许表示/访问对象之间的任何复杂交互模式。当您预测一个使用继承、对象嵌套和交叉引用的系统时,尤其如此

    尽管对象引擎对于您的需求来说似乎太大了,但对于大型生产业务系统来说,在并发和多用户环境中使用OODBMs存储和执行方法是很常见的。它不是免费的,因为你必须投资于等式中的人的部分(教育和经验),但一旦最初的恐惧被克服,它将支付投资的回报

    对于在进行更改(播音员通知)后重新生成(订阅)部件,您可以使用或其一个变体(或)来实现您的播音/订阅体系结构。正如您已经注意到的那样,在这种类型的事件框架下,存在着使用传统的基于文件的解决方案很难解决的固有问题。例如,依赖关系机制通常管理对象的替换,或者在您的示例中管理XML文档的替换。任何现代事件框架都应该在删除对象时进行管理,插入到旧对象的所有依赖项都将更新为新引用


    最后,还有一个免费的包含对象依赖关系的框架,这样你就可以用一个真正的对象数据库进行实验。

    听起来你需要一个主动的对象数据库管理系统()之类的。ODBMS提供传统的持久性服务,而不需要将数据结构映射到文件的旧成本,也不需要对象技术的众所周知的好处。正如你提到的,德彭