CN100468330C - 一种脚本内核管理方法及系统 - Google Patents
一种脚本内核管理方法及系统 Download PDFInfo
- Publication number
- CN100468330C CN100468330C CNB2007100737959A CN200710073795A CN100468330C CN 100468330 C CN100468330 C CN 100468330C CN B2007100737959 A CNB2007100737959 A CN B2007100737959A CN 200710073795 A CN200710073795 A CN 200710073795A CN 100468330 C CN100468330 C CN 100468330C
- Authority
- CN
- China
- Prior art keywords
- script
- namespace
- function
- plug
- programming
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明适用于计算机应用领域,提供了一种脚本内核管理方法及系统,所述方法包括下述步骤:创建对脚本编程以及脚本插件运行提供支持的底层函数以建立脚本编程的底层函数库;声明脚本类对象,建立脚本编程的基础脚本类;为脚本插件创建脚本命名空间,将不同脚本插件的运行环境隔离。所述系统包括:底层函数创建单元、底函数库、脚本类对象声明单元以及脚本命名空间创建单元。在本发明实施例中,通过为每个用户创建一脚本命名空间,并为创建的脚本命名空间设置约束,将不同用户提供的脚本插件的运行环境隔离,避免了脚本编程过程中的错误及脚本插件之间的冲突与不兼容。
Description
技术领域
本发明属于计算机应用领域,尤其涉及一种脚本内核管理方法及系统。
背景技术
随着现代网络的快速发展,网民需求不断提高,软件的更新和换代日益频繁,为了提高程序的灵活性和可扩展性,编程人员广泛采用脚本编写相应的插件以实现程序代码无法实现的软件的配置扩展功能,满足用户个性化需求。
随着脚本应用范围的扩大以及脚本插件的增多,脚本也变得越来越复杂,脚本规模动辄数千行,这样庞大的脚本规模为其正确性、可维护性、易用性带来较大问题。同时由于脚本以及脚本插件在系统中是零散分布的,脚本本身臃肿难懂,这增加了开发人员进行脚本编程以及对脚本进行调试的难度,脚本的正确性不能得到较好的保证。同时由于对脚本管理和控制没有层次导致脚本编程过程中以及脚本插件运行过程中,脚本容易出错,脚本插件互相冲突。
发明内容
本发明实施例的目的在于提供一种脚本内核管理的方法及系统,旨在解决现有技术中没有对脚本进行管理和控制导致脚本编程过程中以及脚本插件运行过程中,脚本容易出错,脚本插件互相冲突的问题。
本发明实施例是这样实现的,一种脚本内核管理方法,所述方法包括下述步骤:
创建对脚本编程以及脚本插件运行提供支持的底层函数以建立脚本编程的底层函数库;
声明脚本类对象,建立脚本编程的基础脚本类;
为脚本插件创建脚本命名空间,将不同脚本插件的运行环境隔离。
本发明实施例的另一目的在于提供一种脚本内核管理系统,所述系统包括:
底层函数创建单元,用于创建对脚本编程以及脚本插件运行提供支持的底层函数;
底层函数库,用于存储所述底层函数;
脚本类对象声明单元,用于声明脚本类对象,建立脚本编程的基础脚本类;
脚本命名空间创建单元,为脚本插件创建脚本命名空间,将不同脚本插件的运行环境隔离。
在本发明实施例中,通过为每个用户创建一脚本命名空间,并为创建的脚本命名空间设置约束,将不同用户提供的脚本及脚本插件的运行环境隔离,减少了脚本编程过程中的错误同时避免了脚本插件之间的冲突与不兼容。
附图说明
图1是本发明实施例提供的脚本内核管理方法的实现流程图;
图2是本发明实施例提供的脚本内核管理系统的结构图
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,通过为每个用户创建一脚本命名空间,并为创建的脚本命名空间设置约束,将不同用户提供的脚本插件的运行环境隔离,减少了脚本编程过程中的错误同时避免了脚本插件之间的冲突与不兼容。
图1示出了本发明实施例提供的脚本内核管理方法的实现流程。
在步骤S101中,创建对脚本编程以及脚本插件运行提供支持的底层函数以建立底层函数库。底层函数包括但不限于报错函数、面向对象的类的声明函数以及其它针对不同脚本编程语言的功能扩展函数。其中报错函数用于脚本编程过程中或者脚本插件运行出错时,输出足够详细的调试信息,使开发人员或者一部分用户能够较多的了解脚本出错的位置及原因,更好的调试脚本。面向对象的类的声明函数用于为编程人员在进行脚本编程时提供面向对象编程,对于已实现了面向对象的类声明的脚本编程语言,不需要创建面向对象的类的声明函数。功能扩展函数扩展不同脚本编程语言所支持的功能。
针对不同的脚本编程语言,创建底层函数以建立底层函数库的过程以及复杂度略有不同。在本发明实施例中,以脚本编程语言Lua语言为例。由于Lua语言本身提供的支持脚本编程以及脚本插件运行的底层函数比较少,没有面向对象的类声明和实现方法,因而采用Lua语言创建底层函数以建立底层函数库的复杂度相对其它脚本编程语言要大。在本发明实施例中,以Lua语言为例创建报错函数。
///报错函数_error(),指定报出当前Lua堆栈中第几层的定位信息
function_error(err,index)
if not index then
index=1
end
error(err.."\n"..geterrorpos(index+3))
end
由于Lua语言没有面向对象的类声明和实现方法,根据Lua语言中表的语法机制,在底层函数库中实现面向对象的类的声明函数,以使编程人员在使用Lua语言进行脚本编程时,能够进行面向对象编程,提高脚本编程的方便性及安全性。根据脚本编程的需要以及系统开销可以有选择性的创建所需的面向对象的类的声明函数。针对Lua语言的其它一些功能扩展函数,例如Lua语言不支持设置只读属性的功能,通过创建声明只读值的函数并加入到底层函数库中,可以使Lua语言增加声明只读值的功能。
在步骤S102中,声明脚本类对象以建立基础脚本类。建立了底层函数库后,即可声明脚本类对象,为图片、文字、界面框架等基础脚本界面建立相关的脚本类库。此过程建立类的框架,类的具体实现由程序代码完成,该程序代码可以是用C++语言或其它编程语言编写的程序代码。基础脚本类建立了程序与脚本之间的联系。在本发明实施例中,以声明图片的脚本类对象,建立图片基础脚本类为例。
///声明一个名称为a的界面框架Frame脚本类对象
local a=_Frame{}
///定义界面框架Frame脚本类,此过程将使用步骤S101中创建的底层函数
库中的底层函数,如_error函数报告非正常情况下的错误
_ControlFrame=class(_Frame,function(self,o)
self.init(self)
self.baseFrame=nil
if type(o.control)~=′function′then
_error("\′control\′field must be function",2)
end
local Reval=o.control(o.Param)
o.control=nil
o.Param=nil
if not Reval then
_error("_ControlFrame ret is nil!",2)
end
self.baseFrame=Reval
o.baseFrame=nil
objcopy(Reval,o)
self.id=′ControlFrame′
end)
在步骤S103中,为脚本插件创建脚本命名空间,即为每个脚本插件开发人员创建脚本命名空间,为每个脚本插件创建运行小环境,以将各脚本插件的运行环境隔离。此步骤与步骤S102没有先后顺序。当程序支持插件特别是脚本插件时,各脚本插件在运行时可能相互冲突,相互影响。通过为每个脚本开发者创建一脚本命名空间,即为每个脚本插件创建一脚本命名空间,同时为主应用程序创建一主应用脚本命名空间,为公用程序和变量建立一公用脚本命名空间。通过为每个创建的脚本命名空间加上约束,将各脚本开发者提供的脚本插件的运行环境隔离,避免各脚本插件之间的冲突和不兼容。如设置脚本命名空间的约束为在使用脚本命名空间中的变量之前进行声明,以避免在脚本编程过程中,由于变量未被声明即被使用而导致的不易发现的隐藏错误。
在本发明实施例中,以Lua语言为例详述脚本命名空间的创建过程。在创建脚本命名空间时,首先判断该命名空间是否存在。例如:
function using_namespace(nsname)
if not nsname then
error("must need namespace")
end
当判断结果为否时,则按下述步骤创建脚本命名空间:
A创建脚本命名空间的空间表,例如通过Lua脚本编程语言创建一名称为ns的空间表如下所述:
Local ns={}
B初始化脚本命名空间的空间表,该步骤可以根据实际需要,有选择性的对脚本命名空间的空间表进行参数初始化,例如:
ns["_declareNames"]={}///空间中进行了声明的变量的集合
ns["Window"]={}///空间中窗口的集合
ns["Control"]={}///空间控件
ns["_Theme"]={}///空间主题
ns["_nsname"]=nsname///空间名
ns["_FSName"]=_Api.GetNSFSName(nsname)///空间中文件系统名
ns["IDS"]={}///空间字符串
C设置脚本命名空间的规则,以对每个脚本命名空间加上约束,例如:
setmetatable(ns,_G._mt_ns)
_G._NS[nsname]=ns///对空间中变量的访问权限进行限制
setfenv(2,_G._NS[nsname])///保存创建的空间
在步骤S104中,创建一脚本扩展库以增加脚本编程过程中对基础功能的支持,更好的方便开发人员进行脚本编程。如在扩展库中增加一些通用字体设置函数、常量声明函数、公共函数调用等。
通过上述脚本内核管理方法,开发人员在进行脚本编程的过程中,通过调用底层函数库中的报错函数,在脚本出错时,可以输出详细的调试信息;通过在底层函数库中实现面向对象的类的声明函数,使不支持面向对象编程的脚本编程语言采用面向对象编程;同时通过在底层函数库中实现功能扩展函数,增加了脚本编程语言的应用范围。通过为每个用户建立脚本运行空间,为不同用户提供的脚本插件建立运行的小环境,在使用脚本运行空间中的变量前进行声明,避免了各脚本插件运行时的冲突。
图2示出了本发明实施例提供的脚本内核管理系统的结构。
底层函数创建单元11创建对脚本编程以及脚本插件运行提供支持的底层函数,如报错函数、面向对象的类的声明函数以及其它针对不同脚本编程语言的功能扩展函数。各底层函数统一存储在底层函数库12中。针对不同脚本编程语言,底层函数创建单元11创建的底层函数有所区别。在本发明实施例中,以脚本编程语言Lua语言为例创建一只读功能扩展函数。
///创建只读功能扩展函数readOnly()
function readOnly(t)
local proxy={}
local mt={--create metatable
_index=t,
_newindex=function(t,k,v)
error("attempt to update a read-only table",2)
end
}
setmetatable(proxy,mt)
return proxy
end
脚本类对象声明单元13声明脚本类对象,为图片、文字、界面框架等基础脚本界面建立相关的脚本类库。脚本类对象声明单元13建立类的框架,类的具体实现由程序代码完成,该程序代码可以是用C++语言或其它编程语言编写的程序代码。在进行脚本编程过程中,可以通过脚本类对象声明单元13调用程序完成脚本类对象的具体实现。
脚本命名空间创建单元14为每个用户建立脚本运行空间,将不同用户提供的脚本插件的运行环境隔离,避免各脚本插件之间的冲突。脚本命名空间判断单元141在命名空间被创建之前,判断即将创建的脚本命名空间是否已存在,如不存在则创建该脚本命名空间。空间表创建单元142为脚本命名空间创建空间表,脚本命名空间初始化单元143初始化创建的空间表,脚本命名空间规则设置单元144设置脚本运行空间的空间表的规则,为每个脚本命名空间加上约束,如设置脚本运行空间中的变量被使用前进行声明,避免变量因未声明即被使用而导致的隐藏错误。
扩展函数库15存储脚本编程扩展函数,增加脚本编程对基础功能的支持,更好的方便开发人员进行脚本编程。如在扩展库中增加一些通用字体设置函数、常量声明函数、公共函数调用等。
综上所述,在本发明实施例中,通过底层函数创建单元11创建了用于脚本编程的各种底层支持函数,方便了开发人员进行脚本编程,通过脚本命名空间创建单元14为每个用户创建一脚本命名空间,将不同用户提供的脚本插件的运行环境隔离,减少了脚本编程过程中的错误同时避免了脚本插件之间的冲突与不兼容。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1、一种脚本内核管理方法,其特征在于,所述方法包括下述步骤:
创建对脚本编程以及脚本插件运行提供支持的底层函数以建立脚本编程的底层函数库;
声明脚本类对象,建立脚本编程的基础脚本类;
为脚本插件创建脚本命名空间,将不同脚本插件的运行环境隔离。
2、如权利要求1所述的脚本内核管理方法,其特征在于,所述方法还包括下述步骤:
建立脚本编程的扩展函数库。
3、如权利要求1所述的脚本内核管理方法,其特征在于,在所述为脚本插件创建脚本命名空间,将不同脚本插件的运行环境隔离的步骤之前,所述方法包括:
判断所述脚本命名空间是否存在。
4、如权利要求1所述的脚本内核管理方法,其特征在于,所述底层函数包括报错函数、面向对象的类的声明函数以及功能扩展函数。
5、如权利要求1所述的脚本内核管理方法,其特征在于,所述为脚本插件创建脚本命名空间,将不同脚本插件的运行环境隔离的步骤具体为:
创建脚本命名空间的空间表;
初始化脚本命名空间的空间表;
设置脚本命名空间的规则,对脚本命名空间进行约束。
6、一种脚本内核管理系统,其特征在于,所述系统包括:
底层函数创建单元,用于创建对脚本编程以及脚本插件运行提供支持的底层函数;
底层函数库,用于存储所述底层函数;
脚本类对象声明单元,用于声明脚本类对象,建立脚本编程的基础脚本类;以及
脚本命名空间创建单元,为脚本插件创建脚本命名空间,将不同脚本插件的运行环境隔离。
7、如权利要求6所述的脚本内核管理系统,其特征在于,所述系统还包括:
扩展函数库,用于存储对脚本编程提供支持的扩展函数。
8、如权利要求6所述的脚本内核管理系统,其特征在于,所述系统还包括:
脚本命名空间判断单元,用于判断所述脚本命名空间是否存在。
9、如权利要求6所述的脚本内核管理系统,其特征在于,所述底层函数包括报错函数、面向对象的类的声明函数以及功能扩展函数。
10、如权利要求6所述的脚本内核管理系统,其特征在于,所述系统还包括:
空间表创建单元,用于创建脚本命名空间的空间表;
脚本命名空间初始化单元,用于初始化脚本命名空间的空间表;
脚本命名空间规则设置单元,用于设置脚本命名空间的规则,对脚本命名空间进行约束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100737959A CN100468330C (zh) | 2007-03-30 | 2007-03-30 | 一种脚本内核管理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100737959A CN100468330C (zh) | 2007-03-30 | 2007-03-30 | 一种脚本内核管理方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101071372A CN101071372A (zh) | 2007-11-14 |
CN100468330C true CN100468330C (zh) | 2009-03-11 |
Family
ID=38898609
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100737959A Active CN100468330C (zh) | 2007-03-30 | 2007-03-30 | 一种脚本内核管理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100468330C (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120005603A1 (en) * | 2009-09-17 | 2012-01-05 | The Bank Of Tokyo-Mitsubishi Ufj, Ltd. | Application development supporting apparatus, program, and recording medium |
CN101694626B (zh) * | 2009-09-30 | 2013-03-20 | 曙光信息产业(北京)有限公司 | 脚本执行系统及方法 |
CN103677772B (zh) * | 2012-09-07 | 2019-01-11 | 腾讯科技(深圳)有限公司 | 脚本编写方法及相应的脚本编写系统 |
CN102930203B (zh) * | 2012-10-12 | 2015-08-26 | 浙江大学城市学院 | 一种轻量级JavaScript沙箱的实现方法 |
CN105824608B (zh) * | 2015-01-07 | 2019-06-28 | 阿里巴巴集团控股有限公司 | 处理对象的处理、插件生成方法及装置 |
CN105187423B (zh) * | 2015-08-28 | 2019-04-12 | 宇龙计算机通信科技(深圳)有限公司 | 网络资源的隔离方法、网络资源的隔离系统和移动终端 |
US9684490B2 (en) * | 2015-10-27 | 2017-06-20 | Oracle Financial Services Software Limited | Uniform interface specification for interacting with and executing models in a variety of runtime environments |
CN109189663B (zh) * | 2018-07-12 | 2021-10-29 | 武汉精测电子集团股份有限公司 | 一种插件调试方法、测试方法及微内核架构系统 |
-
2007
- 2007-03-30 CN CNB2007100737959A patent/CN100468330C/zh active Active
Non-Patent Citations (2)
Title |
---|
在动态语言Lua中支持契约式开发. 邓际锋,张桂戌.计算机工程与应用,第19期. 2006 |
在动态语言Lua中支持契约式开发. 邓际锋,张桂戌.计算机工程与应用,第19期. 2006 * |
Also Published As
Publication number | Publication date |
---|---|
CN101071372A (zh) | 2007-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100468330C (zh) | 一种脚本内核管理方法及系统 | |
CN109670951B (zh) | 一种区块链智能合约调试发布方法及系统 | |
US11429365B2 (en) | Systems and methods for automated retrofitting of customized code objects | |
CN102207903B (zh) | 基于自动重定向调用的单元测试方法及系统 | |
US10146672B2 (en) | Method and system for automated user interface (UI) testing through model driven techniques | |
CN108958708B (zh) | 一种基于组件的软件系统架构及软件实现方法 | |
CN106126204B (zh) | 一种基于模块化设计的信息系统迭代式扩展开发方法 | |
US8769494B2 (en) | Globally sound and consistent configuration management for distributed datacenter components | |
US20080028364A1 (en) | Model based testing language and framework | |
CN107632937B (zh) | 一种对虚拟机集群进行测试的方法、装置、可读存储介质 | |
US8464246B2 (en) | Automation of mainframe software deployment | |
US10680901B2 (en) | Configuration management in a multisystem environment | |
CN103338121A (zh) | 一种系统管理服务器、方法及其系统 | |
KR101599470B1 (ko) | 소스 배포 장치, 시스템 및 방법, 컴퓨터 판독 가능한 기록 매체 | |
CN103309696B (zh) | 一种Java卡扩展库更新方法、装置和Java卡 | |
CN113032004B (zh) | 在开发环境中管理开发作业的方法、设备和程序产品 | |
KR20160000761A (ko) | 소스 관리 장치, 시스템 및 방법, 컴퓨터 판독 가능한 기록 매체 | |
CN116225617A (zh) | 容器实例的管理迁移方法、装置和电子设备及存储介质 | |
BR112020007044A2 (pt) | linguagem de programação | |
EP4102357A1 (en) | Development environment organizer with enhanced state switching and sharing | |
CN110321138A (zh) | 一种程序更新、迁移方法和装置 | |
CN109756570A (zh) | 一种实现定制pypi镜像服务器的方法及电子设备 | |
CN114003250A (zh) | 一种软件部署方法及装置 | |
US20110179428A1 (en) | Self-testable ha framework library infrastructure | |
CN111857710A (zh) | 一种基于内嵌chromium开发Eclipse插件的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20151217 Address after: The South Road in Guangdong province Shenzhen city Fiyta building 518057 floor 5-10 Nanshan District high tech Zone Patentee after: Shenzhen Tencent Computer System Co., Ltd. Address before: Shenzhen Futian District City, Guangdong province 518057 Zhenxing Road, SEG Science Park 2 East Room 403 Patentee before: Tencent Technology (Shenzhen) Co., Ltd. |