要解决的问题
- 复用其他人的工作
- 减少 executable 的体积
- 不共享源代码的前提下复用
解决方案
exectuable不会携带所有的算法实现。它会构建在executor提供的builtin api的基础上。同时也会利用第三方的 dynamic library 依赖 executor 的 dynamic linker 动态链接进来使用。这个动态链接其他人的工作的机制在很多种机器中都有提供。
构成
- executable:动态链接发起的源头,executor第一个加载的东西
- dynamic library:提供被复用的算法,动态链接库
- dynamic library linker:一般是executor的一个组件,提供动态链接的能力。也可能是第三方利用executor的 api 独立实现的linker。
解决方案案例
JavaScript 主流的动态链接库有以下几种,各自使用的linker是不同的
![f5ce235a75ae202947edbac20201de38.png](https://img-blog.csdnimg.cn/img_convert/f5ce235a75ae202947edbac20201de38.png)
传统浏览器
- executable:直接嵌入到 html 的
<script>
标签的 JavaScript 代码 - dynamic library:由 html 文件的
<script src="xxx">
引用的 .js 文件 - dynamic linker:浏览器自身,通过全局变量实现彼此的互通。script标签的顺序决定了加载顺序,后被加载的js可以引用前面js定义的全局变量。
// http://localhost/library.js
function call_library() {
console.log('i am the library')
}
// http://localhost/index.html
<html>
<head>
<script src="./library.js"></script>
<script>
console.log('i am the executable')
call_library() // window.call_library()
</script>
</head>
<body>
</body>
</html>
executable 和 d