component-model

组件模型的高层设计选择

根据目标使用案例,组件模型做出了一些高层设计选择,这些选择渗透到了组件模型的其余部分。

  1. 组件模型采用无共享架构,其中组件实例完全封装其线性内存、表、全局变量以及未来的 GC 内存。组件接口仅包含不可变的复制值、不透明类型的句柄和不可变的未实例化模块/组件。虽然句柄和导入可以用作间接共享形式,但依赖项可以精细控制这种程度的共享。

  2. 组件模型不引入用于配置或链接组件的全局单例、命名空间、注册表、定位器服务或框架。相反,所有相关用例都通过导入(数据、函数和类型)显式参数化组件来解决,每个组件的客户端都可以选择使用自己选择的导入值独立实例化组件。

  3. 组件模型假设没有能够跟踪跨组件循环的全局组件间垃圾或循环收集器。相反,资源具有生命周期,并且需要通过句柄显式非循环所有权。显式生命周期允许资源具有确定性调用的析构函数,并且可用于释放非垃圾收集语言中的线性内存分配。

  4. 组件模型假设运行时无法进行即时编译,因此仅提供声明性链接功能,允许提前编译、优化和分析。虽然可以在运行时创建组件实例,但在执行开始之前,实例化的组件及其依赖项和客户端都是已知的。(另请参阅幻灯片