当前位置: 首页 > 专利查询>微软公司专利>正文

用于静态主机的动态语言制造技术

技术编号:6972420 阅读:193 留言:0更新日期:2012-04-11 18:40
本发明专利技术揭示了用于静态主机的动态语言,与应用程序主机的一个或多个静态可扩展性点一同使用语言插件。方法包括在用户代码存储中搜索用户代码。在用户代码存储中发现某些用户代码。从多个预定义的语言中作出有关用户代码的语言的确定。向语言提供方提供用户代码以获得所确定的语言。从应用程序主机接收函数调用。该函数调用匹配于用户代码的至少一部分。通过语言提供方执行对应于函数调用的用户代码的至少一部分。

【技术实现步骤摘要】
用于静态主机的动态语言的方法和系统
本专利技术涉及用于静态主机的动态语言,尤其涉及与应用程序主机的一个或多个静态可扩展性点一同使用语言插件。
技术介绍
背景和相关技术计算机和计算系统已经影响了现代生活的几乎每个方面。计算机在工作、消遣、保健、运输、娱乐、家政管理等中通常都有涉及。计算机应用程序通常包括可扩展性功能。具体而言,除了支持本机函数,应用程序可被优化为由单一的已编译语言插入静态函数。主机应用程序,例如可从华盛顿州雷蒙德市的微软公司获得的和支持本机函数。中本机函数的示例包括SUM、MAX、MIN、VLOOKUP等。主机应用程序,例如可从华盛顿州雷蒙德市的微软公司获得的和允许使用Visual代码以扩展上述应用程序的基本功能。具体而言,它们包括Visual界面,该界面允许程序员为已编译代码提供执行对于主机应用程序而言非本机的函数的功能。但是,典型地每次只能使用单一的已编译语言。这使得难以使用例如M、R和Python的动态语言来提供可扩展性。在此要求保护的主题不限于解决任何缺点或仅在诸如上述环境中操作的各个实施例。相反,提供该背景仅用以示出在其中可实践在此描述的部分实施例的一个示例性

技术实现思路
此处示出的一个实施例包括与应用程序主机的一个或多个静态可扩展性点一同使用语言插件的方法。该方法包括在用户代码存储中搜索用户代码。在用户代码存储中查找某些用户代码。从多个预定义的语言中作出有关用户代码的语言的确定。向语言提供方提供用户代码以获得所确定的语言。从应用程序主机接收函数调用。该函数调用匹配于用户代码的至少一部分。通过语言提供方执行该对应于函数调用的用户代码的至少一部分。提供本
技术实现思路
以便以简化形式介绍将在以下的具体实施方式中进一步描述的一些概念。本
技术实现思路
并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。另外的特征和优点将在以下的描述中阐述,并且部分可从该描述中显而易见,或者可以从此处的教示实践中习得。本专利技术的特征和优点可以通过在所附权利要求中特别指出的手段和组合来实现并获取。本专利技术的特征将从以下描述和所附权利要求书中变得完全显而易见,或者可通过如下所述对本专利技术的实践而获知。附图说明为了描述能够获得上述和其它优点和特征的方式,将通过参考附图中示出的各具体实施例来呈现对以上简述的主题的更为具体的描述。应该理解,这些附图仅描绘了各典型实施例,因此其不应被认为是对范围的限制,各实施例将通过使用附图用附加附加特征和细节来描述并解释,在附图中:图1示出与应用程序主机使用语言扩展的系统的图形表示;以及图2示出与应用程序主机的一个或多个静态可扩展性点一同使用语言插件的方法。具体实施方式各个实施例允许多个语言通过过程函数来扩展应用程序主机(例如),即使该语言具有运行时动态变化的资源,以及将多个可扩展性点定位目标于静态定义的或导出的函数。例如,的全多线程模型仅被设计为与处理持续期间被固定的一组入口点一起被本机已编译代码直接使用。但是,即使函数是动态被添加、移除、更新或改变其签名,但各个实施例允许多个动态语言被插入。这使得即使使用动态代码也能获得多线程功能。具体而言,各个实施例可由动态代码编译静态代码,该动态代码可与允许多线程的界面一同被使用。动态代码是运行时可动态变化、运行时之前不能被静态编译的代码。此外,各个实施例可使用动态代码生成,以使函数可被添加、移除、更新或改变签名,即使应用程序主机期望这些在处理持续期间保持不变。例如,应用程序主机可能期望函数被静态定义。但是,各实施例允许函数被动态定义并且对应用程序主机立即可用,无需等待静态编译。现在参考图1,示出了一个示例实施例。图1示出应用程序主机102。应用程序主机的示例之前已被例如应用程序和示出。这些仅是示例,可以使用带有可扩展性界面的其他应用程序主机102。图1还示出主机函数接口104。主机函数接口104是由应用程序主机102提供的用于注册函数的接口。主机函数接口104典型地依赖于静态的函数。静态是指函数被编译时其接口和实现是固定的,并且在使用该函数的处理持续期间不能以任何方式发生改变(例如,会话持续期间)。中主机函数接口的示例包括VBA、COM、VSTO和XLL。图1还示出主机插件组件106。这是应用程序主机102的插件组件,其执行使用动态函数的工作并将其展示给静态的主机函数接口104。一个专用的已实现的实施例中,主机插件组件106是扩展功能—本机XLL和COM插件的紧耦合对。所示的示例中,主机插件组件106通过主机函数接口104与应用程序主机102双向调用。如将在下面展示的,主机插件组件106还通过动态函数接口110与语言管理器108双向调用。动态函数接口110是多个函数的平面集合的抽象,该多个函数可被连续添加、移除、更新或改变其签名。提供各个API以枚举函数、描述各函数签名并执行它们。在函数集变化时还可提供通知。语言管理器108是一个组件,管理一组被插入语言适配器(语言提供方A、B、C,分别即112A、112B、112C)和动态的用户代码存储114,其与主机插件106对话以提供和执行函数的动态集合。语言管理器108与主机插件组件106双向调用。语言管理器108与用户代码存储114双向调用。语言管理器108调用语言提供方112A、112B和112C的集合。语言接口116是语言提供的服务,用以基于源代码枚举函数及其签名,并执行这些函数。用户代码存储114是用户代码的存储,带有检测变化的事件。在所示的实现中,这是包含源代码文件的目录列表以及监视组件以检测变化的文件系统。用户代码存储114与语言管理器108双向调用。语言提供方被统称为112,语言提供方112A、112B和112C在图1中被专门示出。对于插入系统的每种语言,语言提供方112实现可枚举函数和签名并执行函数的简单的接口层。语言管理器108调用语言提供方112。语言提供方112调用语言专用服务。现在示出一具体示例。具体而言,实施例示出使用M语言动态生成在中使用的用户定义的函数(UDF),如马萨诸塞州纳提克市的公司所实现的。为提供了若干可扩展性模型。VBA是最著名的。COM支持允许使用支持IDispatch组件的任何语言来开发UDF。VSTO是构建于COM支持之上的基于的编程模型。XLL表示Excel的另一个扩展性点选择。当前所示的实施例包括三个组件。第一个是VSTA组件,此处被称为“DynamicAddin.dll”,其组织UDF的动态更新。在图1所示的示例中,DynamicAddin.dll是主机插件106一部分的实现。第二个组件是此处被称为“DynamicRuntime.xll”的本机组件,其定义入口点,并构建形实转换程序以回调托管代码。该第二个组件可以是组件插件106一部分的实现。第三个组件此处被称为“DynamicServer.exe”,在当前示例中是主机M。DynamicServer.exe可以是语言管理器108的实现。DynamicAddin.dll是集成的驱动程序。其任务是查找预定义文件系统路径上的全部UDF,并将这些UDF展示给开始,DynamicAddin.dll首先初始化DynamicRruntime。然后建立连接至语言专用部本文档来自技高网
...
用于静态主机的动态语言

【技术保护点】
1.一种与应用程序主机的一个或多个静态可扩展性点一同使用语言插件的方法,所述方法包括:在用户代码存储中搜索用户代码(202);在所述用户代码存储中查找某些用户代码(204);从多个预定义的语言中确定所述用户代码的语言(206);向语言提供方提供用户代码以获得所确定的语言(208);接收来自应用程序主机的函数调用(210);将所述函数调用与所述用户代码的至少一部分进行匹配;以及通过所述语言提供方,执行对应于所述函数调用的所述用户代码的至少一部分(214)。

【技术特征摘要】
2010.06.15 US 12/816,2401.一种与应用程序主机的一个或多个静态可扩展性点一同使用语言插件的方法,所述方法包括:解析用户代码存储以在所述用户代码存储中搜索用户代码(202);在所述用户代码存储中查找某些用户代码(204);从多个预定义的语言中确定所述用户代码的语言(206);通过将所述用户代码注册到语言管理器来向所确定的语言的语言提供方提供用户代码,所述语言管理器管理一组被插入语言适配器,其中所述语言管理器提供了在所述语言管理器和应用程序主机之间的双向通信;接收来自所述应用程序主机的函数调用(210);将所述函数调用与所述用户代码的至少一部分进行匹配;通过所述语言提供方,执行对应于所述函数调用的所述用户代码的至少一部分(214);将执行所述用户代码的至少一部分的结果提供给所述应用程序主机,其中所述应用程序主机将所述结果用于依赖于所述结果的数据;确定所述用户代码存储由于所述用户代码改变也改变;作为所述用户代码存储改变的结果,重新分析所述用户代码存储并将所述用户代码重新注册到所述语言管理器;以及通知所述应用程序主机对所述用户代码的改变,以便所述应用程序主机可以重新计算依赖于执行所述用户代码的结果的任何数据。2.如权利要求1所述的方法,其特征在于,还包括将执行所述用户代码至少一部分的结果返回至所述应用程序主机。3.如权利要求1所述的方法,其特征在于,所述用户代码是动态用户代码。4.如权利要求3所述的方法,其特征在于,还包括生成与所述应用程序主机的静态可扩展性点一同使用的运行时的静态代码,以允许所述静态可扩展性点被初始化以与动态用户代码一同使用。5.如权利要求1所述的方法,其特征在于,还包括:接收改变所述用户代码存储中的所述用户代码的用户输入;使用所述语言提供方来执行已改变的用户代码,导致执行所述用户代码的已改变的结果;以及作为执行的已改变的结果的结果,将结果中的变化传播回所述应用程序主机,以便依赖于执行所述用户代码的数据被更新为依赖于已改变的用户代码。6.如权利要求1所述的方法,其特征在于,所述用户代码存储包括电子表格的至少一部分。7.如权利要求1所述的方法,其特征在于,所述用户代码存储包括网站的至少一部分。8.如权利要求1所述的方法,...

【专利技术属性】
技术研发人员:C·O·哈根洛赫A·摩尔J·拉姆
申请(专利权)人:微软公司
类型:发明
国别省市:US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1