import和require

概述:import:语将一个外部名字空间导入到当前名字空间,import语句首先会在当前名字空间下查找同名对象是否存在,查找时不会触发名字空间的元方法。

如果同名对象已存在并且不是指向相同的库,则会报错。

import保证不会在同一线程重复加载相同的库。外部库内的代码在一个线程中仅运行一次。

区别1:模块加载的时间

require:运行时加载

import:编译时加载(效率更高)【由于是编译时加载,所以import命令会提升到整个模块的头部】

区别2:模块的本质

require:模块就是对象,输入时必须查找对象属性

import:ES6 模块不是对象

详解import导入库的过程

import导入库时查找顺序为“内核库->标准库->用户库”。
外部库文件的物理路径与名字空间路径保持一致(将物理路径中的斜杠替换为圆点就是名字空间路径)。

我们以下面的import语句为例详解导入库的过程:

import time.ole //将外部库time.ole导入当前名字空间


1、查询库缓存

已导入的库会直接加载到当前名字空间,不会重复导入相同的库,否则继续下面的过程。
 

2、查询内核库

如果内核库中存在该库,导入库,否则继续下面的过程。
 

3、查找编译嵌入EXE的库文件

aardio会优先加载编译发布EXE时嵌入EXE文件的库模块。

4、查询标准库

如果仍然没有找到库。在启动当前进程的EXE文件根目录下的的lib目录下查询库文件,从根目录逐渐向下层子目录开始搜索,查找顺序如下(按查找顺序先后排列):

~\lib\time.ole.aardio
~\lib\time\ole.aardio
~\lib\time\ole\_.aardio

如果找到aardio代码文件或编译后的二进制aardio文件,加载并运行,并将文件路径作为参数传递给目标文件。


5、查询用户库

如果仍然没有找到,按第三步的过程,在当前工程目录\lib目录,或启动文件所在目录\lib目录下查找用户库, 查找顺序如下(按查找顺序先后排列):

\lib\time.ole.aardio
\lib\time\ole.aardio
\lib\time\ole\_.aardio

如果找到aardio代码文件或编译后的二进制aardio文件,加载并运行,并将文件路径作为参数传递给目标文件。


注意在aardio开发环境中 "~\lib\" 表示aardio.exe所在目录下的标准 库,而 "\lib\"表示虚拟根目录下的用户库。对于一个工程来说工程目录就是虚拟根目录,对于一个在工程之外单独运行的aardio文件 - 文件所在的目录就是虚拟根目录。对于发布后的EXE文件来说,"\lib\"与"~\lib\"默认都是指EXE文件启动目录,在创建线程、协程时 - 可以在参数中改变虚拟根目录


6、查询扩展库

如果当前是运行在aardio开发环境中,仍然没有找到匹配的库文件,aardio会检查扩展库列表并安装扩展库。

6、检查库是否加载成功

最后aardio检查目标文件是否成功运行,
目标文件是否创建了新的名字空间全局名字空间..time.ole。
如果导入名字空间成功,则导入当前名字空间( self 名字空间 )。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值