商业化的轻量级脚本引擎的设计与实现(AtScript),带原码和demo

文章介绍了AtScript,一种基于JavaScript设计的轻量级脚本语言,旨在解决现有脚本引擎体积大、性能低等问题。AtScript引擎支持无缝集成到C++、Java、C#等应用程序,提供良好的执行性能和扩展性。文中通过示例展示了如何将AtScript嵌入代码中、扩展用户对象、设置常量和类,以及在多个实际项目中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 
目的:通过嵌入脚本引擎为应用程序提供脚本支持是实现应用程序可定制和可扩展的有效方法,但现存的脚本要么语法不方便,要么
引擎过于庞大使应用程序的效率降低,要么不方便跨平台,要么不容易扩展和修改,为了解决该问题,设计了语法简单易学的脚本
语言AtScript,实现了AtScript的轻量级脚本引擎。该引擎支持脚本无缝地使用应用程序实现的类和函数,并具有很好的执行性能和
扩展性,最主要是小巧,并方便于运行于各个系统或移动终端。


  AtScript 脚本语言凭借强大的扩展能力和灵活的语法结构类javascript,使得为应用程序提供脚本支持从而进行混合语言开发成为实现可扩展和
可定制的有效方案。出于稳定性和开发时间限制的考虑,开发人员倾向于嵌入现有脚本引擎的方法为应用程序提供脚本支持,
如嵌入Python引擎为应用程序提供Python脚本支持,或使用Microsoft提供的ActiveX Scripting技术为应用程序嵌入VBScript引擎或JavaScript引擎提供相应的脚本支持。
但是这样方法灵活性较差,应用程序必须接受现有脚本引擎的体积和性能要求,这对运行在低硬件条件下的应用程序,或者是只要求进行简单规则计算的小型应用程序来说,
这种方法在效率上没有优势。而且要进行统一部署也不方便。因此,需要一个轻型的脚本引擎,可以很方便得直接嵌入到代码中,针对以上问题,本文在自行设计的脚本
语言AtScript的基础上,开发实现了AtScript的轻型脚本引擎,支持脚本引擎被嵌入在C++, java , c# ... 等应用程序上。AtScript 语言语法简单,继承了在非专业程序员
中具有较高声誉的 JavaScript 语言,并且借鉴了 C#语言的部分功能,使得用户能够专注于问题的解决而不是语法的学习上。

  以下开始介绍 AtScript 的具体使用
1. 把 AtScript 嵌入到代码中实现功能的可扩展

       CAtsEngine        Eng;
    Eng.LoadScript( "function void Main() \r\n{\r\n MessageBox( \"hello\" ); \r\n}" );
    if( !Eng.RunSegment( "Main") )    
    {
        strPrompt.Format("Script is error, ErrorCode=%d,Line = %d,ErrorWord=%s" , Eng.m_nLastErrorCode , Eng.m_nErrorLine , Eng.m_strErrorWord );
        AfxMessageBox( strPrompt );
    }

2. 扩展用户自己的对象,以实现功能集成
       
        CAtsEngine        Eng;

    CMyAtsObj * pNewObj = new CMyAtsObj;
    pNewObj->m_pEngine = &Eng;
    Eng.AddObjIns( "MyObj" , pNewObj );
    Eng.LoadScript( script );
    if( !Eng.RunSegment( "Main") )    
    {
        strPrompt.Format("Script is error, ErrorCode=%d,Line = %d,ErrorWord=%s" , Eng.m_nLastErrorCode , Eng.m_nErrorLine , Eng.m_strErrorWord );
        AfxMessageBox( strPrompt );
    }

    其中 CMyAtsObj 是用户自己编写的扩展类,通过自己的扩展就可以方便的实现功能集成,以下为参考的脚本:
       function void Main()
       {
           var string a;
           a = myobj.getname();
           MessageBox(a);
       }

3. 扩展自己怕常量
        CAtsEngine        Eng;
    CMyAtsObj * pNewObj = new CMyAtsObj;
    pNewObj->m_pEngine = &Eng;
    Eng.SetConstVar("SS_INSTALL" , "1", ATSVAR_TYPE_INT );
    Eng.LoadScript( script );
    if( !Eng.RunSegment( "Main") )    
    {
        strPrompt.Format("Script is error, ErrorCode=%d,Line = %d,ErrorWord=%s" , Eng.m_nLastErrorCode , Eng.m_nErrorLine , Eng.m_strErrorWord );
        AfxMessageBox( strPrompt );
    }
     
     其中 SS_INSTALL 是用户的扩展常量,以下为参考的脚本:
       function void Main()
       {
           var int a;
           a = SS_INSTALL;
           MessageBox(a);
       }
     
 4. 扩展自己的类
    CAtsEngine        Eng;

    CMyAtsObj * pNewObj = new CMyAtsObj;
    pNewObj->m_pEngine = &Eng;
    Eng.AddClassTemplate( new CMyClass );
    Eng.LoadScript( script );
    if( !Eng.RunSegment( "Main") )    
    {
        strPrompt.Format("Script is error, ErrorCode=%d,Line = %d,ErrorWord=%s" , Eng.m_nLastErrorCode , Eng.m_nErrorLine , Eng.m_strErrorWord );
        AfxMessageBox( strPrompt );
    }
   其中 CMyClass  是用户的扩展的类,以下为参考的脚本:
    
     function void Main()
     {
      var CMyClass MyClass;
      MyClass.SetData( "abc" );
      MessageBox( MyClass.GetData() );
      }

* 原码下载: https://github.com/chenlingpeng1/atscript

其它语言: 如果需要C#, java , ios ,android 等语言的 atscript ,请与作者联系
  问题联系: 905309882@qq.com
  成功案例; NextInstaller  一个功能强大的安装包制作工具,内部使用了 AtScript 脚本引擎做为安装向导的驱动  
             website: http://ni.wanzqh.com

             firspider      一个运行于手机的二维游戏引擎,用于小游戏的制作,有助游戏开发的学习和启蒙,内部使用了 AtScript 脚本为
                            游戏作驱动
             website: http://firespider.wanzqh.com

             quickspider    一个页面数据抓取工具,使用 atscript 做为驱动引擎

             quickdove      一个企业单位即时通讯工具,内部使用 atscript 做为插件开发的脚本, 可用于与第三方用户认证系统进行集成
             website: http://www.quickdove.com
   版权说明:代码可用于学习和研究或用于共享软件的开发,如果要使用于商业应用,需要作者受权(905309882@qq.com)