一种脚本内核管理方法及系统的制作方法

文档序号:6573722阅读:147来源:国知局

专利名称::一种脚本内核管理方法及系统的制作方法
技术领域
:本发明属于计算机应用领域,尤其涉及一种脚本内核管理方法及系统。
背景技术
:随着现代网络的快速发展,网民需求不断提高,软件的更新和换代日益频繁,为了提高程序的灵活性和可扩展性,编程人员广泛采用脚本编写相应的插件以实现程序代码无法实现的软件的配置扩展功能,满足用户个性化需求。随着脚本应用范围的扩大以及脚本插件的增多,脚本也变得越来越复杂,脚本规模动辄数千行,这样庞大的脚本规模为其正确性、可维护性、易用性带来较大问题。同时由于脚本以及脚本插件在系统中是零散分布的,脚本本身臃肿难懂,这增加了开发人员进行脚本编程以及对脚本进行调试的难度,脚本的正确性不能得到较好的保证。同时由于对脚本管理和控制没有层次导致脚本编程过程中以及脚本插件运行过程中,脚本容易出错,脚本插件互相冲突。
发明内容本发明实施例的目的在于提供一种脚本内核管理的方法及系统,旨在解决现有技术中没有对脚本进行管理和控制导致脚本编程过程中以及脚本插件运行过程中,脚本容易出错,脚本插件互相冲突的问题。本发明实施例是这样实现的,一种脚本内核管理方法,所述方法包括下述步骤创建对脚本编程以及脚本插件运行提供支持的底层函数以建立脚本编程的底层函数库;声明脚本类对象,建立脚本编程的基础脚本类;为脚本插件创建脚本命名空间,将不同脚本插件的运行环境隔离。本发明实施例的另一目的在于提供一种脚本内核管理系统,所述系统包括底层函数创建单元,用于创建对脚本编程以及脚本插件运行提供支持的底层函数;底层函数库,用于存储所述底层函数;脚本类对象声明单元,用于声明脚本类对象,建立脚本编程的基础脚本类;脚本命名空间创建单元,为脚本插件创建脚本命名空间,将不同脚本插件的运行环境隔离。在本发明实施例中,通过为每个用户创建一脚本命名空间,并为创建的脚本命名空间设置约束,将不同用户提供的脚本及脚本插件的运行环境隔离,减少了脚本编程过程中的错误同时避免了脚本插件之间的冲突与不兼容。图1是本发明实施例提供的脚本内核管理方法的实现流程图;图2是本发明实施例提供的脚本内核管理系统的结构图具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。在本发明实施例中,通过为每个用户创建一脚本命名空间,并为创建的脚本命名空间设置约束,将不同用户提供的脚本插件的运行环境隔离,减少了脚本编程过程中的错误同时避免了脚本插件之间的冲突与不兼容。图1示出了本发明实施例提供的脚本内核管理方法的实现流程。在步骤S101中,创建对脚本编程以及脚本插件运行提供支持的底层函数以建立底层函数库。底层函数包括但不限于报错函数、面向对象的类的声明函数以及其它针对不同脚本编程语言的功能扩展函数。其中报错函数用于脚本编程过程中或者脚本插件运行出错时,输出足够详细的调试信息,使开发人员或者一部分用户能够较多的了解脚本出错的位置及原因,更好的调试脚本。面向对象的类的声明函数用于为编程人员在进行脚本编程时提供面向对象编程,对于已实现了面向对象的类声明的脚本编程语言,不需要创建面向对象的类的声明函数。功能扩展函数扩展不同脚本编程语言所支持的功能。针对不同的脚本编程语言,创建底层函数以建立底层函数库的过程以及复杂度略有不同。在本发明实施例中,以脚本编程语言Lua语言为例。由于Lua语言本身提供的支持脚本编程以及脚本插件运行的底层函数比较少,没有面向对象的类声明和实现方法,因而采用Lua语言创建底层函数以建立底层函数库的复杂度相对其它脚本编程语言要大。在本发明实施例中,以Lua语言为例创建报错函数。///报错函数_error(),指定报出当前Lua堆栈中第几层的定位信息function_error(err,index)ifnotindexthenindex=1enderror(err..″\n″..geterrorpos(index+3))end由于Lua语言没有面向对象的类声明和实现方法,根据Lua语言中表的语法机制,在底层函数库中实现面向对象的类的声明函数,以使编程人员在使用Lua语言进行脚本编程时,能够进行面向对象编程,提高脚本编程的方便性及安全性。根据脚本编程的需要以及系统开销可以有选择性的创建所需的面向对象的类的声明函数。针对Lua语言的其它一些功能扩展函数,例如Lua语言不支持设置只读属性的功能,通过创建声明只读值的函数并加入到底层函数库中,可以使Lua语言增加声明只读值的功能。在步骤S102中,声明脚本类对象以建立基础脚本类。建立了底层函数库后,即可声明脚本类对象,为图片、文字、界面框架等基础脚本界面建立相关的脚本类库。此过程建立类的框架,类的具体实现由程序代码完成,该程序代码可以是用C++语言或其它编程语言编写的程序代码。基础脚本类建立了程序与脚本之间的联系。在本发明实施例中,以声明图片的脚本类对象,建立图片基础脚本类为例。///声明一个名称为a的界面框架Frame脚本类对象locala=_Frame{}///定义界面框架Frame脚本类,此过程将使用步骤S101中创建的底层函数库中的底层函数,如_error函数报告非正常情况下的错误_ControlFrame=class(_Frame,function(self,o)self.init(self)self.baseFrame=niliftype(o.control)~=′function′then_error(″\′control\′fieldmustbefunction″,2)endlocalReval=o.control(o.Param)o.control=nilo.Param=nilifnotRevalthen_error(″_ControlFrameretisnil!″,2)endself.baseFrame=Revalo.baseFrame=nilobjcopy(Reval,o)self.id=′ControlFrame′end)在步骤S103中,为脚本插件创建脚本命名空间,即为每个脚本插件开发人员创建脚本命名空间,为每个脚本插件创建运行小环境,以将各脚本插件的运行环境隔离。此步骤与步骤S102没有先后顺序。当程序支持插件特别是脚本插件时,各脚本插件在运行时可能相互冲突,相互影响。通过为每个脚本开发者创建一脚本命名空间,即为每个脚本插件创建一脚本命名空间,同时为主应用程序创建一主应用脚本命名空间,为公用程序和变量建立一公用脚本命名空间。通过为每个创建的脚本命名空间加上约束,将各脚本开发者提供的脚本插件的运行环境隔离,避免各脚本插件之间的冲突和不兼容。如设置脚本命名空间的约束为在使用脚本命名空间中的变量之前进行声明,以避免在脚本编程过程中,由于变量未被声明即被使用而导致的不易发现的隐藏错误。在本发明实施例中,以Lua语言为例详述脚本命名空间的创建过程。在创建脚本命名空间时,首先判断该命名空间是否存在。例如functionusing_namespace(nsname)ifnotnsnamethenerror(″mustneednamespace″)end当判断结果为否时,则按下述步骤创建脚本命名空间A创建脚本命名空间的空间表,例如通过Lua脚本编程语言创建一名称为ns的空间表如下所述Localns={}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()functionreadOnly(t)localproxy={}localmt={--createmetatable_index=t,_newindex=function(t,k,v)error(″attempttoupdatearead-onlytable″,2)end}setmetatable(proxy,mt)returnproxyend脚本类对象声明单元13声明脚本类对象,为图片、文字、界面框架等基础脚本界面建立相关的脚本类库。脚本类对象声明单元13建立类的框架,类的具体实现由程序代码完成,该程序代码可以是用C++语言或其它编程语言编写的程序代码。在进行脚本编程过程中,可以通过脚本类对象声明单元13调用程序完成脚本类对象的具体实现。脚本命名空间创建单元14为每个用户建立脚本运行空间,将不同用户提供的脚本插件的运行环境隔离,避免各脚本插件之间的冲突。脚本命名空间判断单元141在命名空间被创建之前,判断即将创建的脚本命名空间是否已存在,如不存在则创建该脚本命名空间。空间表创建单元142为脚本命名空间创建空间表,脚本命名空间初始化单元143初始化创建的空间表,脚本命名空间规则设置单元144设置脚本运行空间的空间表的规则,为每个脚本命名空间加上约束,如设置脚本运行空间中的变量被使用前进行声明,避免变量因未声明即被使用而导致的隐藏错误。扩展函数库15存储脚本编程扩展函数,增加脚本编程对基础功能的支持,更好的方便开发人员进行脚本编程。如在扩展库中增加一些通用字体设置函数、常量声明函数、公共函数调用等。综上所述,在本发明实施例中,通过底层函数创建单元11创建了用于脚本编程的各种底层支持函数,方便了开发人员进行脚本编程,通过脚本命名空间创建单元14为每个用户创建一脚本命名空间,将不同用户提供的脚本插件的运行环境隔离,减少了脚本编程过程中的错误同时避免了脚本插件之间的冲突与不兼容。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。权利要求1.一种脚本内核管理方法,其特征在于,所述方法包括下述步骤创建对脚本编程以及脚本插件运行提供支持的底层函数以建立脚本编程的底层函数库;声明脚本类对象,建立脚本编程的基础脚本类;为脚本插件创建脚本命名空间,将不同脚本插件的运行环境隔离。2.如权利要求1所述的脚本内核管理方法,其特征在于,所述方法还包括下述步骤建立脚本编程的扩展函数库。3.如权利要求1所述的脚本内核管理方法,其特征在于,在所述为每个用户创建一脚本命名空间,将不同用户提供的脚本插件的运行环境隔离的步骤之前,所述方法包括判断所述脚本命名空间是否存在。4.如权利要求1所述的脚本内核管理方法,其特征在于,所述底层函数包括报错函数、面向对象的类的声明函数以及功能扩展函数。5.如权利要求1所述的脚本内核管理方法,其特征在于,所述步骤为每个用户创建一脚本命名空间,将不同用户提供的脚本插件的运行环境隔离具体为创建脚本命名空间的空间表;初始化脚本命名空间的空间表;设置脚本命名空间的规则,对脚本命名空间进行约束。6.一种脚本内核管理系统,其特征在于,所述系统包括底层函数创建单元,用于创建对脚本编程以及脚本插件运行提供支持的底层函数;底层函数库,用于存储所述底层函数;脚本类对象声明单元,用于声明脚本类对象,建立脚本编程的基础脚本类;以及脚本命名空间创建单元,为脚本插件创建脚本命名空间,将不同脚本插件的运行环境隔离。7.如权利要求6所述的脚本内核管理系统,其特征在于,所述系统还包括扩展函数库,用于存储对脚本编程提供支持的扩展函数。8.如权利要求6所述的脚本内核管理系统,其特征在于,所述系统还包括脚本命名空间判断单元,用于判断所述脚本命名空间是否存在。9.如权利要求6所述的脚本内核管理系统,其特征在于,所述底层函数包括报错函数、面向对象的类的声明函数以及功能扩展函数。10.如权利要求6所述的脚本内核管理系统,其特征在于,所述系统还包括空间表创建单元,用于创建脚本命名空间的空间表;脚本命名空间初始化单元,用于初始化脚本命名空间的空间表;脚本命名空间规则设置单元,用于设置脚本命名空间的规则,对脚本命名空间进行约束。全文摘要本发明适用于计算机应用领域,提供了一种脚本内核管理方法及系统,所述方法包括下述步骤创建对脚本编程以及脚本插件运行提供支持的底层函数以建立脚本编程的底层函数库;声明脚本类对象,建立脚本编程的基础脚本类;为脚本插件创建脚本命名空间,将不同脚本插件的运行环境隔离。所述系统包括底层函数创建单元、底函数库、脚本类对象声明单元以及脚本命名空间创建单元。在本发明实施例中,通过为每个用户创建一脚本命名空间,并为创建的脚本命名空间设置约束,将不同用户提供的脚本插件的运行环境隔离,避免了脚本编程过程中的错误及脚本插件之间的冲突与不兼容。文档编号G06F9/44GK101071372SQ20071007379公开日2007年11月14日申请日期2007年3月30日优先权日2007年3月30日发明者谢昕虬申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1