CN101233485A - 从外部程序环境调用后绑定函数 - Google Patents
从外部程序环境调用后绑定函数 Download PDFInfo
- Publication number
- CN101233485A CN101233485A CN200680028333.9A CN200680028333A CN101233485A CN 101233485 A CN101233485 A CN 101233485A CN 200680028333 A CN200680028333 A CN 200680028333A CN 101233485 A CN101233485 A CN 101233485A
- Authority
- CN
- China
- Prior art keywords
- environment
- binding
- program
- bound
- program environment
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Abstract
本发明旨在将后绑定程序语言自动地集成到外部程序环境之中。外部程序环境可以是先绑定环境、后绑定环境或它们的组合。与后绑定程序环境相关的是模块化执行引擎和接口机构,其中的接口机构能够以与外部环境兼容的格式表达后绑定语义。
Description
相关申请
本申请要求于2005年6月2日递交的、序列号为11/144411的美国专利申请的权益,该申请的内容包括在本申请中一并作为参考。
技术领域
本发明涉及到应用以及软件组件,特别涉及从先绑定的应用中调用后绑定函数的方法与系统。
背景技术
在应用中绑定函数调用需要用真实的机器地址取代对该函数的符号地址。因此,绑定操作确定哪个函数(即实现该功能的代码部分)在运行时执行。当绑定发生在编译阶段时,该绑定为“先绑定”。与此相对应地,当绑定发生在运行时,该绑定为“后绑定”。通常可将编程语言分类为先绑定的或后绑定的。
函数调用绑定时间的选择(即是先绑定还是后绑定)是运行时的代码性能(先绑定在运行时更快)和程序员在编程时的便易性(后绑定程序更易于编写)之间的一种折衷。当前,程序员必须决定以下何种更为重要:程序员编写程序时所用的时间还是程序运行所用的时间。不幸的是,通常这是一种很难做出的选择。在现有的系统中还没有机制能有效地平衡这种折衷。
发明内容
本发明提供了一种将后绑定程序函数集成到外部程序环境之中的方法和系统。该外部程序环境可以是先绑定环境,也可以是后绑定环境,或者两种环境的组合。
根据本发明的第一个方面,提供了一种将后绑定应用集成到外部程序环境中的方法。提供后绑定程序和后绑定环境,随后加以检测以确定哪些后绑定调用存在于后绑定程序和环境中而应当使其为外部环境可用。然后生成一个接口,其中该接口允许将这些后绑定函数调用集成到该外部程序环境中。用于实现本发明的外部环境可以是后绑定环境、先绑定环境或者它们的组合。
在本发明的另一个方面中, 提供了一种用于将后绑定程序语言集成到外部环境中的系统,其中该系统包括一个外部环境,一个后绑定程序和程序环境。该外部环境可以是后绑定程序环境、也可以是先绑定程序环境、或者它们的某种组合。后绑定程序环境包括一个模块化执行引擎和一种接口机构,使得该接口机构允许用外部环境兼容的格式表达后绑定语义。
在本发明的又一个方面中,提供了一种将可执行的后绑定内容打包到与外部程序环境一起使用的可重新发布的应用之中的方法。该外部环境可以是后绑定程序环境、或是先绑定程序环境或者它们的某种组合。该方法包括以下步骤:首先检查后绑定内容,以确定后绑定内容中的哪些文件代表后绑定应用。然后提供后绑定模块化执行引擎,其中,模块化执行引擎仅包含那些支持后绑定应用所必需的函数。而且,模块化执行引擎被配置成仅执行那些支持后绑定应用所必需的函数。
在本发明的又一个方面中,提供了一种包括客户端与服务器的网络,其中服务器端能够执行后绑定程序环境和外部程序环境。一些合适的外部环境包括(但不局限于)后绑定程序环境,先绑定程序环境或者它们的组合。客户端通过网络与服务器进行通信。所生成的接口允许后绑定程序和程序环境与外部程序环境之间的数据交换,以使得能够将后绑定应用集成到外部程序环境中。
在本发明的一个可选择的方面中,描述了一种用于将后绑定应用集成到外部环境中的系统,其中分发服务器用于向客户端设备提供信息。此外,还提供了一种接口机构,其中该接口机构允许将后绑定函数调用集成到外部程序环境中。
附图说明
以下,结合附图来详细说明本发明的实施例,其中:
图1为对用于实现本发明的示意性实施例的电子设备进行说明的方框示意图;
图2描述了一种适于实现本发明的示意性实施例的客户端-服务器环境,其中后绑定函数能被合并到外部编程环境中;
图3描述了用于实现本发明的示意性实施例的组件;
图4是对示意性实施例中的组件交互进行详细说明的图例;
图5是说明用于实现确定对其它后绑定函数间的依赖性的步骤的流程图;
图6是用于将后绑定函数调用集成到后绑定程序环境中所必需的组件的一个示意性实施例。
具体实施方式
本发明的示意性实施例提供了一种机制,其对于存在于外部程序环境之中的应用调用在后绑定的语言中存在的函数。为了说明之目的,下面将参照将后绑定函数集成到先绑定外部程序环境进行描述。还存在一些可替代的外部环境,包括但不局限于那些包含先绑定语言、后绑定语言、或者它们的组合的环境。在本实施例中,将后绑定函数集成到先绑定环境之中允许程序员选择何时实现执行时间与编码便易性之间的折衷。因此,程序员可以采用先绑定函数调用来执行应用中那些关键部分,而对于难以编程的函数则采用后绑定函数调用。
将后绑定函数的调用集成到先绑定编程环境之中,除了提供前述的折衷平衡外,还具有很多其它的优点。首先,这种集成为先绑定编程环境提供了一种利用后绑定的表达能力之优点的方式。其次,这种集成使得先绑定编程环境能够将一个先绑定函数调用与一个或多个后绑定函数调用的集合相绑定。再次,它为大量的遗留系统提供了包括进更多现代编程方法的方式,例如所发现的采用后绑定函数调用的方式。
在替换实例中,将后绑定函数集成到后绑定程序环境中能提供大量的优点,而这些优点是在利用将后绑定函数集成到先绑定语言时并不容易被认识到的。例如,大多数后绑定程序语言专门用于在某一特殊问题领域中操作。例如,LISP后绑定语言特别适用于对字符串列表中的符号处理。与之相比,后绑定PROLOG编程语言则适用于原理的证明以及逻辑推理问题。与之相比,后绑定MATLAB编程语言适合于在数值线性代数领域中操作。上述的后绑定程序语言仅用于说明可用于本发明的可用的后绑定程序环境中的一些实例。这里所列出的例子并不是明确的,作为本领域的普通技术人员很容易理解,存在着大量的可适用于本发明的后绑定程序环境。
当将后绑定函数的调用集成到后绑定环境中时,本发明允许用户构造一种程序,其将对多种后绑定语言的调用组合起来,以便采用最合适的语言来解决存在的计算问题。
出于示例目的,本示意性的实施例将针对MATLAB的环境进行详细的说明。虽然本示意性实施例将会针对基于MATLAB的应用进行说明,但本发明可以被用来配置和发布在不同的编程和开发环境中所生成的应用,例如但不局限于由国家仪器公司(National Instruments,Inc)提供的Labview,LISP,或PROLOG。
MATLAB是一种直观高性能的语言和技术计算环境。MATLAB为数据分析、可视化以及程序的开发提供了数学和图形工具。MATLAB以一个易用环境集成了计算与编程,在所述的易用环境中,问题与解决方案用人们熟悉的数学符号表达。MATLAB是一种交互系统,该系统中的基本数据元素是无需定义维数的数组。这使得用户在解决许多技术性计算问题、特别是那些要用到矩阵和向量公式的问题时,编写程序所花费的时间仅是一种标量非交互语言(例如C和FORTRAN等)所花费时间的一小部分。MATLAB提供了包括MATLAB编译器在内的应用开发工具。用于COM的MATLAB编制器(Builder)和用于Excel工作的MATLAB编制器(Builder)与MATLAB编译器协同工作,以自动生成在COM和Excel环境中执行的对象。这些应用开发工具使得用户能够创建并分配MATLAB应用并与可能使用MATLAB或其他环境的同事共享MATLAB成果。
图1描述了适用本发明的描述性实施例的电子设备100的一个实施例。电子设备100代表许多不同的技术,例如个人电脑(PC),膝上型电脑,工作站,个人数字助理(PDA),因特网用具,蜂窝电话,以及类似的设备。在所示的实施例中,电子设备100包括中央处理单元(CPU)102以及显示设备104。显示设备104使得电子设备100通过视觉显示器直接与用户进行通信。电子设备100还包括键盘106以及例如鼠标器的输入设备108。其他未被描述的潜在输入设备包括但不局限于:指示笔,轨迹球,控制杆,触摸垫,触摸屏,以及其他类似的设备。电子设备100包括用于存储数据和指令的第一存储设备110和第二存储设备112。存储设备110和112包括但不局限于如下技术:软盘驱动器,硬盘驱动器,磁带驱动器,光盘驱动器,只读存储器(ROM),随机存取存储器(RAM),以及其他类似的设备。如浏览器,JAVA虚拟机之类的应用程序,以及其他实用程序和应用可以驻留在存储设备110和112之一或二者中。电子设备100还可以包括用于与一个或多个在图示的电子设备100之外的外部电子设备进行通信的网络接口114。调制解调器是用来实现与外部的电子设备或网络建立连接的网络接口114的一种形式。CPU102通过内部或外部方式连接到前述的一个或多个部件。除了前述的这些应用之外,可以在电子设备100上安装并运行例如MATLAB116的建模应用。
应当注意的是,电子设备100仅仅代表了实现本发明的一种结构。尽管如此,本领域普通技术人员将会认识到本发明并不局限于以上具体描述的设备100。可以采用其他类型的实现方式,包括部分或整体基于嵌入代码的实现方式,在此则不需要用户输入或显示设备;而且,处理器能够与其他处理器或设备直接进行通信。
图2是对用于实现本发明的分布式网络的示意性实施例。该系统包括与网络200相连的客户端设备202。网络上还连接有服务器设备204、接口机构210和存储设备206。接口机构210能够将后绑定函数调用集成到先绑定程序环境之中。
当在面向对象的环境中进行编程时,采用后绑定函数调用的优点之一在于,能够使得开发者在编写代码时无需就所要操作的对象的确切对象类型而作特殊的考虑。换句话说,后绑定函数调用可以支持多态。
利用本发明的接口机构210,当先绑定编译器在编译时遇到存在于后绑定环境中的后绑定函数时,,利用该接口机构210,先绑定环境中的编译器允许在运行时执行存在于后绑定环境中的后绑定函数。接口机构210作为一组后绑定函数的代理,该后绑定函数组中的某一个(根据在运行时输入的类型)将在运行时被调用。
此外,为了举例说明的目的,在本实施例中的接口机构是与网络200相连接的;但本领域的普通技术人员很容易理解,该接口机构210还能够连接到客户端设备202、服务器204或者它们的组合。本领域的普通技术人员还可以认识到,本实施例中的网络只是一个示例性的实例,它的功能可以以任意的方式分到整个网络中。例如,多个客户端可以与一个服务器连接,一个客户端也可以连接到多个服务器上,或者上述情况的一些组合。
图3描述了应用于本发明的示意性实施例中的组件。在图示实施例中所描述的组件用于将后绑定函数集成到先绑定环境300之中。在一个示例中,先绑定程序环境为由位于美国华盛顿州雷德蒙德市(Redmond)的微软公司所提供的Visual Studio程序环境,后绑定函数为MATLAB函数。选择MATLAB和Visual Studio只是出于举例说明的目的。对多种其它在先和后绑定语言的选择都可用于实现本发明。
在图示的实例中,当后绑定函数为MATLAB函数时,MATLAB编译器生成后绑定接口函数304和306,后者是位于先绑定环境300中的先绑定函数。这些接口函数304和306的名称与功能完全在编译时得到确定。在运行时内,这些接口函数304和306调用后绑定函数。具体的,后绑定接口函数304通过一个模块化后绑定执行引擎302(下文中将作详细说明)调用包含有一个或多个后绑定函数的集合308。类似的,后绑定接口函数306通过此模块化后绑定执行引擎302调用包含有一个或多个后绑定函数的集合310。从而,提供了一种使得先绑定环境300能够将函数的绑定延迟到所选定函数的运行时的机制。
正如图3所示,后绑定接口函数304和306可能会引起多于一个后绑定函数要被执行(参见308和310)。也可能存在这样的情况,一个后绑定接口函数与一个单独的后绑定函数相关联,也可能存在其他情况,多个后绑定函数与一个单独的后绑定接口函数相关联。此外,根据提供给接口函数的输入类型,每次调用会导致对所关联的集合中一个不同的后绑定函数的调用。
在一个实施例中,接口机构可通过应用程序接口(API)实现,该接口具有可以从先绑定应用调用的函数。API可被用于启动对在后绑定环境中的函数的调用。例如,在C程序环境下运行的API能够调用在MATLAB后绑定环境中的函数。可选择地,API可以是不需要其他辅助程序操作的独立可执行程序。从以先绑定C语言运行的应用程序的角度看,在后绑定MATLAB应用中所调用的函数,表现为例如是一种传统的函数调用,其中函数及其参数是不言自明的,其输出以与任何现有函数相类似的方式传递。
尽管将API作为接口机构的实例加以描述,但接口机构并不局限于采用API,例如还可以是运行于先绑定或后绑定环境中的软件或硬件组件。接口机构能够以先绑定编程环境在运行时易于识别的格式,自动表达后绑定编程环境的语义,并且如前面已经提出的,可以采用适当形式来表达所还语义。
模块化后绑定执行引擎302提供用于执行存在于后绑定环境中的函数的机制。由于这些函数是后绑定函数,它们在运行时被绑定在后绑定环境中。在后绑定环境为MATLAB环境的情况下,模块化后绑定执行引擎可以是MATLAB组件运行引擎(runtime engine)。MATLAB组件运行引擎是一种独立的共享库的集合,所述的共享库能够执行M-文件,MEX-文件以及其它类型的MATLAB可执行内容。采用MATLAB组件运行引擎作为模块化执行引擎,当在后绑定环境中执行函数时,无需在一个新的用户可视窗口中打开MATLAB组件运行引擎;而是由组件运行引擎以一种对用户不可见的方式在后台执行。
本发明并不仅仅局限于MATLAB应用以及MATLAB组件运行引擎,还可以用各种替代后绑定环境以及执行引擎来实现。
模块后绑定模块化后绑定执行引擎302跟随先绑定环境300中的后绑定接口函数调用304或306的执行,模块后绑定模块化后绑定执行引擎302既可以保持运行,也可以终止。允许模块后绑定模块化后绑定执行引擎302保持运行,可以使得从先绑定环境300中调用的后续的函数在后绑定环境中执行得更快,并且不再需要启动模块后绑定模块化后绑定执行引擎302。可选择地,在执行后绑定函数之后终止在先绑定环境300中受到控制的模块化后绑定执行引擎302,可以减少对处理器的需要和资源的分配,并且在模块化执行引擎300终止时,与模块后绑定模块化后绑定执行引擎302相关联的资源得以释放。
一个具体的实例有助于说明图示示意性实施例的操作。该实例是一个来自于后绑定程序环境(例如MATLAB)之中的MTALAB函数,该函数用于为任何的输入数字加10。该函数被称为plus 10并定义如下:
function s=plus10(x)
s=x+10;
disp([num2str(x)′+10=′num2str(s)]);
以下所描述的是由MATLAB编译器从包含函数plus 10的M类型的文件plus 10.m自动生成的C函数库的源文件。下面所列举的第一个文件是头文件libplus.h。该头文件之后跟随文件libplus.c。函数mlfPlus10是一个接口函数的实例,该接口函数是存取由plus 10函数提供的MATLAB功能的C程序调用。
以下为头文件:
#ifndef_libplus_h
#define_libplus_h 1
#include″mclmcr.h″
#ifdef_cplusplus
extern″C″{
#endif
extern bool libplusInitializeWithHandlers(mclOutputHandlerFcn error_handler,
mclOutputHandlerFcn print_handler);
extern bool libplusInitialize(void);
extern void libplusTerminate(void);
extern void mlxPlus10(int nlhs,mxArray *plhs[],int nrhs,mxArray *prhs[];
extern void mlfPlus 10(int nargout,mxArray **s,mxArray *x);
#ifdef_cplusplus
}
#endif
#endif
以下为libplus.c文件:
#include<stdioh>
#include″mclmcr.h″
#include″libplus.h″
#ifdef cplusplus
extern″C″{
#endif
extern const unsigned char_MCC COMPONENT_public data[];
extern const char*_MCC_COMPONENT_name_data;
extern const char*_MCC_COMPONENT_root_data;
extern const unsigned char_MCC_COMPONENT_session_data[];
extern const char*_MCC_COMPONENT_matlabpath_data[];
extern const int_MCC_COMPONENT_matlabpath_datacount;
extern const char*_MCC_COMPONENT_mcr_runtime_options[];
extern const int_MCC_COMPONENT_mcr_runtime_option_count;
extern const char*_MCC_COMPONENT_mcr_application_options[];
extern const int_MCC_COMPONENT_mcr_application_option_count;
#ifdef_cplusplus
}
#endif
static HMCRINSTANCE_mcr_inst=NULL;
static int mclDefaultErrorHandler(const char*s)
{
return fprintf(stderr,s);
}
static int mclDefaultPrintHandler(const char*s)
{
return fprintf(stdout,s);
}
boollibpluslnitializeWithHandlers(
mclOutputHandlerFcn error_handler,
mclOutputHandlerFcn print_handler
)
{
return(_mcr_inst==NULL?
mcllnitializeComponentlnstance(&_mcr_inst,
_MCC_COMPONENT_public_data,
_MCC_COMPONENT_name_data,
_MCC_COMPONENT_root_data,
_MCC_COMPONENT_session_data,
_MCC_COMPONENT_matlabpath_data,
_MCC_COMPONENT_matlabpath_data_count,
_MCC_COMPONENT_mcr_runtime_options,
_MCC_COMPONENT_mcr_runtime_option_count,
true,NoObjectType,LibTarget,
NULL,error_handler,print_handler)
:true);
}
boollibpluslnitialize(void)
{
return libpluslnitializeWithHandlers(mclDefaultErrorHandler,
mclDefaultPrintHandler);
}
void libplusTerminate(void)
{
if(_mcrinst!=NULL)
mclTerminatelnstance(&_mcr_inst);
}
void mlxPlus10(int nlhs,mxArray*plhs[],int nrhs,mxArray*prhs[])
{
mclFeval(mcr_inst,″plus10″,nlhs,plhs,nrhs,prhs);
}
void mlfPlus 10(int nargout,mxArray**s,mxArray*x)
{
mclMlfFeval(_mcr_inst,″plusiO″,nargout,l,l,s,x);
}
从一个先绑定编程环境(如C)之中调用前述接口函数mlxPlus10,在以下代码中描述:
#include<stdio.h>
#include″matrix.h″
#include″libplus.h″
void usage(char*name)
{
printf(″Usage:%s integer\n″,name);
printf(″\tAdds 10 to the given integer\n″);
exit(-1);
}
int main(int ac,char*av[])
{
mxArray*input=mxCreateDoubleScalar(atoi(av[1]));
mxArray*output=NULL;
double result;
if(ac!=2)usage(av[0]);
mcllnitializeApplication(NULL,0);
libpluslnitialize();
mlxPlus10(1,&output,1,&input);
libplusTerminate();
result=mxGetScalar(output);
prmtt(″%s+10=%.Of\n″,av[1],result);
mclTerminateApplication();
return 0;
}
前述的代码是用C编程语言编写的,但本领域的普通技术人员应当理解可选用各种其它先绑定环境实现本发明。
正如通过前述调用后绑定函数的方法所证明的,该处理被流水化,并同时提供了用最小的用户交互来实现将后绑定函数集成到先绑定环境中的这样一种合适的机制。对原始后绑定函数(plus10.m)的调用与对先绑定环境中的其它普通函数的调用看起来是类似的。此外,先绑定环境与往常一样继续处理先绑定函数,因而提供了更快的函数执行速度。
图4对在示意性实施例中组件的具体交互过程进行了详细说明。首先,用户采用后绑定环境400开发一个后绑定应用或组件。在图4中,这一后绑定应用或组件表示为用户编写的后绑定函数套件(function suite)402,其包括后绑定函数404A和404B。为了说明的目的,假设后绑定环境400是MATLAB,而后绑定函数是MATLAB函数。然后,用户调用MATLAB编译器406以生成其应用或组件的可调度形式。MATLAB编译器406检查输入文件以决定将要生成的用以调用后绑定函数404A和404B的先绑定接口文件的适当形式。进一步的,对先绑定环境的选择也会影响所生成的先绑定接口的形式。MATLAB编译器检查输入文件以确定在后绑定环境400中对其它后绑定函数的依赖性。MATLAB编译器然后将所有必需的后绑定函数打包到组件技术文件(CTF)档案410之中,并生成合适的先绑定接口函数408。CTF档案被用来包含与某一组件相关的所有可执行内容(即,M-文件或Mex-文件)。CTF档案也包含应用程序所必需的所有数据文件,以生成对程序执行所需的所有信息的快照。CTF档案的内容是经过加密的。
图5是用来描述确定对其它后绑定函数的依赖性所执行步骤的流程图。在一个实施例中,图5中所描述的步骤可用于计算函数调用树的传递闭包。这一过程起始于用户提供一个输入文件集合,该集合中的每个输入文件都包含一个或多个后绑定函数(步骤500)。MATLAB编译器检查步骤500所提供的输入文件集合中的每个后绑定函数,以确定哪些其它函数被该后绑定函数所调用(步骤502)。编译器查看在编译过程中所生成的函数调用树。在步骤502中所识别的每个函数可能包含有被明确记载在依赖数据库中的依赖关系。例如,该数据库可以指出某一特定函数为了正确运行需要的一个或多个其它函数。依赖性分析器将这些函数添加到必要函数清单中(步骤504)。步骤502和504重复执行直到没有其它的函数被添加到清单中(步骤506)为止。在步骤508中,某些函数或函数组被明确排除在清单之外。对函数的排除行为会由于诸多原因而被激发。例如,函数排除行为可基于预先确定的商业原因而发生,其中,特定文件或函数由于安全考虑或知识产权保护而不会伴随最终部署的文件而分发。此外,函数可能会因为防止对已知的非必要函数的无意包含而被加以排除。这些函数偶尔会因为一些依赖确定机制的内在不严密性而不经意间被包含到必要函数清单中(步骤504)。最后,“后绑定模块化执行引擎”典型地包含一个与模块化后绑定执行引擎相关的后绑定函数的固定的基本集合。准确地说,这些函数的基本集合在安装执行引擎的任何地方都是可用的,因此,在已部署的应用中并不需要包含这些函数。采用当前的排除机制,最终部署的应用在大小上会显著降低,并更容易被用户掌握。用户可以在步骤504和508提供输入,在上述步骤中用户明确地声明依赖性并明确地声明排除。此外,可由用户实现对必要函数列表的全部或局部控制。
依赖性分析器的输出是包含有该应用的后绑定函数的最终清单。这些函数由编译器结合用户定义的数据(如输入数据和分路选择)一起使用,以确定应当生成哪些接口函数以及所生成的函数的形式。
所生成的先绑定接口函数408(图4)与可选的用户编写的先绑定语言代码416以及数据类型创建API 418结合在一起,以生成先绑定应用或组件414。
在运行时最终用户应用或组件414调用数据类型创建API 418以创建数据,所创建的数据与包含在外部环境中的数据是后绑定环境兼容的。在本实施例中,所述的外部环境是一种先绑定编程环境。数据类型创建API418然后向最终用户应用或组件414标识这一新创建的数据。这一数据标识可以采用本领域普通技术人员所知的“句柄(handle)”或“代理”来实现。
最终用户应用程序或组件414然后调用先绑定接口函数408,该函数依次调用模块化后绑定执行引擎420。然后,从外部环境数据所创建的兼容数据、以及先绑定接口函数408的名称被传递到模块化执行引擎420,使得模块化执行引擎能够将该数据和函数名称结合起来(即后绑定),以使得从包含在CTF档案410中的集合中选择合适的函数。模块化后绑定执行引擎420的结果然后被送回到最终用户应用或组件414。
本发明的示意性实施例提供了使得后绑定函数能够从先绑定环境中被调用的数据类型。这些数据类型允许先绑定语言来表示用后绑定语言表示的数据类型。这些数据类型可以成为提供给用户的接口库中的一部分。
与编译器406的每次调用相关的还包括加密/解密模式。在一个实施例中,在调用编译器时,生成唯一的编密/解密密钥。该密钥可以采用公钥加密的方法进行保护,如美国政府所采用的高级加密标准(AES)。本领域的普通技术人员很容易理解到,现有的其它各种加密/解密方法可用于本发明。在运行时,该唯一的密钥被解密并用于对CTF档案中所需要的文件进行解密。在一个实施例中,对文件的解密仅仅发生在该文件被需要的时候,从而防止将已解密信息存储在磁盘上。
诸如上述的加密/解密模式的使用,为由那些创建应用所开发的代码提供了保护。由于在CTF档案中所使用的文件是加密的,因此这些文件在被共享和分配的同时也能对包含在其中的内容提供保护。例如,一个包含有公司商业秘密的文件可以以加密的方式被分发,使得这一交易秘密不会披露给用户。此外,由于在应用中所使用的文件被加密,因此终端客户无法轻易地对文件进行修改从而影响程序的执行。进一步的,由于文件的加密和解密是基于编译器所生成的唯一密钥,因此用于一个应用中的文件无法被用到另一个应用之中。最后,利用当前加密/解密机制可实现对盗版软件的追踪,因为能够分析每个生成的应用程序而确定该应用是由哪个编译器许可证密钥所生成的。因此,一旦知道编译器许可证密钥,就有可能在许可证清单中将该许可证密钥与被许可人清单进行对照参考,从而确定盗版软件的来源。
图6是一个将后绑定函数调用集成到后绑定程序环境600中所需的组件的示意性实施例。在一个实例中,后绑定程序环境为LISP程序环境,而后绑定函数为MATLAB函数。上述对后绑定函数和语言的选择仅仅作为描述的目的,因为本领域的普通技术人员很容易理解,可选用各种替代的现存的后绑定函数及语言。
在此示意性实例中,当后绑定函数为MATLAB函数时,MATLAB编译器生成后绑定接口函数604和606,这些函数是存在于后绑定环境600中的后绑定函数。在运行时,这些接口函数604和606被应用于利用模块化后绑定执行引擎602调用后绑定函数。正如图6中所进一步描述的,后绑定接口函数604和606可能会引发执行多于一个的后绑定函数(参见608和610)。可能存在这样一些情况,其中一个后绑定接口函数与一个单独的后绑定函数相关联,而且也可能存在其它情况,即多个后绑定函数与一个单独的后绑定接口函数相关联。此外,根据提供给接口函数的输入类型,每一调用操作可导致对相关集合中不同的后绑定函数的调用。
在一个实施例中,所述的接口机构可以是应用程序接口(API),该API具有可以从后绑定应用调用的函数。可选择地,该API可以是不需要辅助程序即可执行的独立可执行程序。此外,接口函数可以是软件或硬件组件。
模块化后绑定执行引擎602提供在运行时执行函数的机制,其中所述函数存在于后绑定环境中。在一个MATLAB环境中,模块化后绑定执行引擎可以是MATLAB组件运行引擎,该引擎能够执行M-文件、MEX-文件以及其它MATLAB可执行内容。本发明并不仅仅局限于MATLAB应用以及MATLAB组件运行引擎,也可以用很多替代的后绑定环境和执行引擎来实现。
模块化后绑定执行引擎602跟随后绑定环境600中的后绑定接口函数调用604或606的执行,模块化后绑定执行引擎602既可以保持运行以使得后续函数在后绑定环境中的执行随时发生,但也可以终止。
本发明已通过举例的方式加以说明,本领域的普通技术人员应当理解,在不脱离本发明技术方案的精神的前提下,可以对所描述的实施例进行修改和变动。上述实施例的各个方面与特征可以合并使用。所描述的实施例仅用于示意而不应被理解为限制性的。本发明的范围应当由附属的权利要求进行限定,而不是由前述的说明,对本发明的技术方案进行修改或者等同替换,均应涵盖在本发明的权利要求范围当中。
Claims (51)
1.一种在电子设备中将后绑定函数集成到外部程序环境中的方法,该方法包含以下步骤:
提供将在外部程序环境中执行的后绑定环境中的后绑定函数调用;
自动地检查后绑定程序以标识由所提供的后绑定函数调用所需的相关后绑定函数的集合;以及
自动地生成所述后绑定函数集合与所述外部程序环境之间的接口。
2.根据权利要求1所述的方法,其中所述的外部程序环境为先绑定编程环境。
3.根据权利要求2所述的方法,其中还包括利用所述接口在所述的先绑定外部编程环境中执行后绑定函数调用的步骤。
4.根据权利要求1所述的方法,其中所述的外部程序环境为后绑定编程环境。
5.根据权利要求4所述的方法,其中还包括利用所述接口在所述的后绑定外部编程环境中执行后绑定函数调用的步骤。
6.根据权利要求1所述的方法,其中所述的电子设备还包括后绑定执行引擎,所述的后绑定执行引擎执行后绑定函数。
7.根据权利要求6所述的方法,其中所述后绑定函数的内容是加密的。
8.根据权利要求7所述的方法,其中所述后绑定函数的内容采用公共密钥加密装置进行加密。
9.根据权利要求7所述的方法,其中所述的公共密钥加密装置是高级加密标准(AES)的公开密钥加密装置。
10.根据权利要求6所述的方法,其中所述后绑定执行引擎为了执行后绑定函数中的内容而对其进行解密。
11.根据权利要求10所述的方法,其中所述后绑定函数内容只有在运行时有需要时才进行解密。
12.根据权利要求6所述的方法,其中提供了一种加密/解密模式,用于在多个用户间进行文件的安全共享。
13.根据权利要求6所述的方法,其中所述加密/解密模式采用了由在执行后绑定函数中使用的由编译器所生成的唯一密钥。
14.根据权利要求13所述的方法,其中所述加密/解密模式通过采用在执行后绑定函数中使用的由编译器所生成的唯一密钥,提供对盗版软件的追踪。
15.根据权利要求6所述的方法,其中还包括在后绑定环境中执行后绑定函数调用后,终止后绑定执行引擎的步骤。
16.根据权利要求2所述的方法,其中,所述先绑定环境为C编程环境。
17.根据权利要求2所述的方法,其中所述先绑定环境为C++编程环境。
18.根据权利要求2所述的方法,其中所述先绑定环境为FORTRAN编程环境。
19.根据权利要求4所述的方法,其中所述后绑定环境为LISP编程环境。
20.根据权利要求4所述的方法,其中所述后绑定环境为Prolog编程环境。
21.根据权利要求4所述的方法,其中所述后绑定环境为MATLAB编程环境。
22.根据权利要求1所述的方法,其中所述接口为可用于外部程序环境的应用程序接口(API)。
23.根据权利要求22所述的方法,其中所述应用程序接口(API)用于在外部程序环境中调用后绑定环境中的函数。
24.根据权利要求1所述的方法,其中所述接口为在外部程序环境中可执行的软件组件。
25.根据权利要求1所述的方法,其中所述接口为在外部程序环境中可执行的软件应用。
26.根据权利要求1所述的方法,其中还包括在运行时在外部程序环境内执行后绑定函数调用的步骤。
27.一种用于将后绑定语言集成到外部程序环境中的系统,包括:
外部程序环境;
后绑定程序环境,其中所述的后绑定程序环境能够执行在该后绑定环境中的函数;以及
接口,其中所述接口机构自动地以与外部程序环境相兼容的格式表达后绑定程序环境的语义。
28.根据权利要求27所述的系统,其中所述外部程序环境为先绑定编程环境。
29.根据权利要求27所述的系统,其中所述外部程序环境为后绑定编程环境。
30.根据权利要求27所述的系统,其中所述的后绑定程序环境包含模块化执行引擎。
31.根据权利要求30所述的系统,其中所述后绑定执行引擎在外部程序环境中执行位于后绑定程序环境中的函数调用。
32.根据权利要求31所述的系统,其中在后绑定程序环境中的后绑定函数调用执行完毕后所述后绑定执行引擎被终止。
33.根据权利要求28所述的系统,其中所述先绑定程序环境为C编程环境。
34.根据权利要求28所述的系统,其中所述先绑定程序环境为C++编程环境。
35.根据权利要求28所述的系统,其中所述先绑定程序环境为FORTRAN编程环境。
36.根据权利要求28所述的系统,其中所述先绑定程序环境为VisualBasic编程环境。
37.根据权利要求29所述的系统,其中所述后绑定环境为LISP编程环境。
38.根据权利要求29所述的系统,其中所述后绑定环境为Prolog编程环境。
39.根据权利要求29所述的系统,其中所述后绑定环境为MATLAB编程环境。
40.根据权利要求27所述的系统,其中所述接口机构为在先绑定程序环境中运行的应用程序接口(API)。
41.根据权利要求40所述的系统,其中所述应用程序接口(API)用于在外部程序环境中调用后绑定程序环境中的函数。
42.根据权利要求27所述的系统,其中所述接口为在外部程序环境中可执行的软件组件。
43.根据权利要求27所述的系统,其中所述接口在运行时在外部程序环境中表达后绑定程序环境的语义。
44.一种用于将可执行的后绑定内容打包到在外部程序环境中使用的可重分配应用中的方法,该方法包括以下步骤:
检查后绑定内容;
提供后绑定模块化执行引擎,其中的模块化执行引擎仅仅执行那些支持后绑定应用程序所需要的函数;以及
配置模块化执行引擎,以仅执行那些支持后绑定应用所需要的函数。
45.根据权利要求44所述的方法,其中所述后绑定内容在打包成可重分配的格式之前被加密。
46.根据权利要求45所述的方法,其中所述后绑定内容在打包成可重分配的格式之后被解密。
47.根据权利要求44所述的方法,还包括将模块化执行引擎所执行的函数执行结果传送到外部程序环境的步骤。
48.根据权利要求47所述的方法,其中所述由模块化执行引擎所执行的函数结果为用于外部程序环境的后绑定调试指令。
49.根据权利要求47所述的方法,还包括采用在外部程序环境中所设计的用户接口对由模块化执行引擎所执行的函数输出结果用图像的方式进行显示的步骤。
50.根据权利要求47所述的方法,还包括以下步骤:采用在外部程序环境中所设计的用户接口对由模块化执行引擎所执行的函数输出结果用文本的方式进行显示的步骤。
51.一种用于计算函数调用树的传递闭包的方法,包括以下步骤:
提供包括一个或多个后绑定函数的输入文件集合;
检查每个所述的输入文件以确定函数调用依赖性是否存在;
自动地从依赖性数据库添加其它的函数调用依赖性;
自动地从函数调用树中去除一个预先确定的函数子集;
其中所述预先定义的函数子集被存储在一个单独的数据库中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/144,411 | 2005-06-02 | ||
US11/144,411 US8046777B2 (en) | 2005-06-02 | 2005-06-02 | Calling of late bound functions from an external program environment |
PCT/US2006/021591 WO2006130871A2 (en) | 2005-06-02 | 2006-06-02 | Calling of late bound functions from an external program environment |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010503801.1A Division CN102063315B (zh) | 2005-06-02 | 2006-06-02 | 从外部程序环境调用后绑定函数的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101233485A true CN101233485A (zh) | 2008-07-30 |
CN101233485B CN101233485B (zh) | 2010-12-08 |
Family
ID=37009192
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200680028333.9A Active CN101233485B (zh) | 2005-06-02 | 2006-06-02 | 将后绑定函数和语言集成到外部程序环境中的方法和系统 |
CN201010503801.1A Active CN102063315B (zh) | 2005-06-02 | 2006-06-02 | 从外部程序环境调用后绑定函数的方法和系统 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010503801.1A Active CN102063315B (zh) | 2005-06-02 | 2006-06-02 | 从外部程序环境调用后绑定函数的方法和系统 |
Country Status (7)
Country | Link |
---|---|
US (3) | US8046777B2 (zh) |
EP (3) | EP1889155B1 (zh) |
JP (1) | JP5412108B2 (zh) |
CN (2) | CN101233485B (zh) |
AT (1) | ATE476704T1 (zh) |
DE (1) | DE602006015949D1 (zh) |
WO (1) | WO2006130871A2 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105981339A (zh) * | 2014-02-12 | 2016-09-28 | 第三雷沃通讯有限责任公司 | 网络服务基于云的网络功能注入 |
CN106371838A (zh) * | 2016-08-31 | 2017-02-01 | 福建联迪商用设备有限公司 | 一种维护软件包依赖关系的方法及系统 |
CN106681714A (zh) * | 2016-12-07 | 2017-05-17 | 乐视控股(北京)有限公司 | 程序环境设置方法、装置及电子设备 |
CN107329843A (zh) * | 2017-06-30 | 2017-11-07 | 百度在线网络技术(北京)有限公司 | 应用程序语音控制方法、装置、设备以及存储介质 |
CN110795070A (zh) * | 2019-05-24 | 2020-02-14 | 杭州海兴电力科技股份有限公司 | 虚拟关口表平台及构建方法 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8838974B2 (en) * | 2005-07-15 | 2014-09-16 | The Mathworks, Inc. | System and method for verifying the integrity of read-only components in deployed mixed-mode applications |
WO2008130769A2 (en) * | 2007-04-20 | 2008-10-30 | Microsoft Corporation | Runtime translation from late-bound to early-bound expression |
US8255883B2 (en) | 2007-04-20 | 2012-08-28 | Microsoft Corporation | Translating late bound LINQ expressions into database queries |
CN102043663A (zh) * | 2009-10-26 | 2011-05-04 | 鸿富锦精密工业(深圳)有限公司 | 程序调用系统及其程序调用方法 |
US20110314256A1 (en) * | 2010-06-18 | 2011-12-22 | Microsoft Corporation | Data Parallel Programming Model |
US8589867B2 (en) | 2010-06-18 | 2013-11-19 | Microsoft Corporation | Compiler-generated invocation stubs for data parallel programming model |
US8769486B2 (en) | 2011-01-06 | 2014-07-01 | The Mathworks, Inc. | Dynamically generating statically-typed proxies for dynamically-typed functions |
US9135027B1 (en) | 2011-10-26 | 2015-09-15 | The Mathworks, Inc. | Code generation and execution for dynamic programming languages |
US8943474B1 (en) * | 2011-10-26 | 2015-01-27 | The Mathworks, Inc. | Code generation and execution for dynamic programming languages |
US9032380B1 (en) * | 2011-12-05 | 2015-05-12 | The Mathworks, Inc. | Identifying function calls and object method calls |
US9183120B1 (en) | 2013-06-04 | 2015-11-10 | The Mathworks, Inc. | Functional dependency analysis |
US9740505B2 (en) * | 2014-07-15 | 2017-08-22 | The Mathworks, Inc. | Accurate static dependency analysis via execution-context type prediction |
CN107402797A (zh) * | 2016-05-19 | 2017-11-28 | 中兴通讯股份有限公司 | 一种软件编译方法及装置 |
US10929160B1 (en) | 2018-12-12 | 2021-02-23 | The Mathworks, Inc. | Composite-trace just-in-time compilation |
Family Cites Families (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2666847B2 (ja) * | 1988-06-06 | 1997-10-22 | 日本電気株式会社 | 異種言語間連絡方式 |
US5381547A (en) * | 1989-11-29 | 1995-01-10 | Siemens Aktiengesellschaft | Method for dynamically linking definable program elements of an interactive data processing system |
JP2768073B2 (ja) * | 1991-08-12 | 1998-06-25 | 日本電気株式会社 | プログラム間相互呼出し方式 |
JPH06103075A (ja) * | 1992-07-06 | 1994-04-15 | Internatl Business Mach Corp <Ibm> | オブジェクト指向適用業務 |
JPH06103075B2 (ja) | 1992-10-30 | 1994-12-14 | 東北電力株式会社 | 燃料管付き小径管の取替方法 |
WO1997035258A1 (en) * | 1996-03-21 | 1997-09-25 | Mpath Interactive, Inc. | Network match maker for selecting clients based on attributes of servers and communication links |
US6393497B1 (en) * | 1998-03-20 | 2002-05-21 | Sun Microsystems, Inc. | Downloadable smart proxies for performing processing associated with a remote procedure call in a distributed system |
US5812855A (en) * | 1996-06-03 | 1998-09-22 | Silicon Graphics, Inc. | System and method for constaint propagation cloning for unknown edges in IPA |
US6041179A (en) | 1996-10-03 | 2000-03-21 | International Business Machines Corporation | Object oriented dispatch optimization |
US6463581B1 (en) * | 1996-10-03 | 2002-10-08 | International Business Machines Corporation | Method for determining reachable methods in object-oriented applications that use class libraries |
US6366958B1 (en) * | 1996-10-21 | 2002-04-02 | International Business Machines Corporation | NETBIOS protocol support for a DCE RPC mechanism |
US6401099B1 (en) * | 1996-12-06 | 2002-06-04 | Microsoft Corporation | Asynchronous binding of named objects |
US7324972B1 (en) | 1997-03-07 | 2008-01-29 | Clickshare Service Corporation | Managing transactions on a network: four or more parties |
US6026238A (en) | 1997-08-18 | 2000-02-15 | Microsoft Corporatrion | Interface conversion modules based upon generalized templates for multiple platform computer systems |
US6799320B1 (en) * | 1998-12-16 | 2004-09-28 | Microsoft Corporation | Providing binding options for component interfaces |
US6247175B1 (en) | 1998-12-22 | 2001-06-12 | Nortel Networks Limited | Method and apparatus for identifying and removing unused software procedures |
US6415434B1 (en) * | 1999-06-18 | 2002-07-02 | Hewlett-Packard Company | Apparatus and method for a runtime method overloading resolver |
US6442752B1 (en) * | 1999-08-26 | 2002-08-27 | Unisys Corporation | Method, apparatus, and computer program product for replacing a dynamic link library (dll) of a first computing environment with a dll of a second computing environment that can be invoked from the first computing environment in a transparent manner |
EP1117033A1 (en) * | 2000-01-14 | 2001-07-18 | Sun Microsystems, Inc. | Dynamic dispatch function |
US7100153B1 (en) | 2000-07-06 | 2006-08-29 | Microsoft Corporation | Compiler generation of a late binding interface implementation |
US20020078255A1 (en) | 2000-10-17 | 2002-06-20 | Shankar Narayan | Pluggable instantiable distributed objects |
US7000213B2 (en) | 2001-01-26 | 2006-02-14 | Northwestern University | Method and apparatus for automatically generating hardware from algorithms described in MATLAB |
US7171311B2 (en) * | 2001-06-18 | 2007-01-30 | Rosetta Inpharmatics Llc | Methods of assigning treatment to breast cancer patients |
JP2003076558A (ja) * | 2001-09-04 | 2003-03-14 | Hitachi Software Eng Co Ltd | プログラム実行制御方法及びプログラム実行制御プログラム |
US6901595B2 (en) * | 2001-09-29 | 2005-05-31 | Siebel Systems, Inc. | Method, apparatus, and system for implementing a framework to support a web-based application |
US7000238B2 (en) * | 2001-10-10 | 2006-02-14 | Borland Software Corporation | Development system providing extensible remoting architecture |
US7373406B2 (en) * | 2001-12-12 | 2008-05-13 | Valve Corporation | Method and system for effectively communicating file properties and directory structures in a distributed file system |
US7370075B2 (en) * | 2002-04-25 | 2008-05-06 | Digital Evolution | Method and apparatus for managing web services within a computer network system |
US7249174B2 (en) * | 2002-06-12 | 2007-07-24 | Bladelogic, Inc. | Method and system for executing and undoing distributed server change operations |
CN1280718C (zh) * | 2002-11-05 | 2006-10-18 | 中兴通讯股份有限公司 | 一种图形显示自动转换方法 |
US7308684B2 (en) * | 2003-06-16 | 2007-12-11 | Microsoft Corporation | Classifying software and reformulating resources according to classifications |
-
2005
- 2005-06-02 US US11/144,411 patent/US8046777B2/en active Active
-
2006
- 2006-06-02 CN CN200680028333.9A patent/CN101233485B/zh active Active
- 2006-06-02 EP EP06772051A patent/EP1889155B1/en active Active
- 2006-06-02 WO PCT/US2006/021591 patent/WO2006130871A2/en active Application Filing
- 2006-06-02 JP JP2008514937A patent/JP5412108B2/ja active Active
- 2006-06-02 EP EP10171749.4A patent/EP2312439A3/en not_active Withdrawn
- 2006-06-02 CN CN201010503801.1A patent/CN102063315B/zh active Active
- 2006-06-02 AT AT06772051T patent/ATE476704T1/de not_active IP Right Cessation
- 2006-06-02 DE DE602006015949T patent/DE602006015949D1/de active Active
- 2006-06-02 EP EP10185264.8A patent/EP2323031A3/en not_active Withdrawn
-
2007
- 2007-07-20 US US11/880,408 patent/US7802268B2/en active Active
-
2011
- 2011-10-20 US US13/277,844 patent/US8881178B2/en active Active
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105981339A (zh) * | 2014-02-12 | 2016-09-28 | 第三雷沃通讯有限责任公司 | 网络服务基于云的网络功能注入 |
CN106371838A (zh) * | 2016-08-31 | 2017-02-01 | 福建联迪商用设备有限公司 | 一种维护软件包依赖关系的方法及系统 |
CN106371838B (zh) * | 2016-08-31 | 2019-10-18 | 福建联迪商用设备有限公司 | 一种维护软件包依赖关系的方法及系统 |
CN106681714A (zh) * | 2016-12-07 | 2017-05-17 | 乐视控股(北京)有限公司 | 程序环境设置方法、装置及电子设备 |
CN107329843A (zh) * | 2017-06-30 | 2017-11-07 | 百度在线网络技术(北京)有限公司 | 应用程序语音控制方法、装置、设备以及存储介质 |
CN110795070A (zh) * | 2019-05-24 | 2020-02-14 | 杭州海兴电力科技股份有限公司 | 虚拟关口表平台及构建方法 |
CN110795070B (zh) * | 2019-05-24 | 2023-07-25 | 杭州海兴电力科技股份有限公司 | 虚拟关口表平台及构建方法 |
Also Published As
Publication number | Publication date |
---|---|
EP2312439A3 (en) | 2013-11-13 |
US20080052730A1 (en) | 2008-02-28 |
JP2008542927A (ja) | 2008-11-27 |
JP5412108B2 (ja) | 2014-02-12 |
WO2006130871A2 (en) | 2006-12-07 |
EP1889155A2 (en) | 2008-02-20 |
US8881178B2 (en) | 2014-11-04 |
US20120036519A1 (en) | 2012-02-09 |
US8046777B2 (en) | 2011-10-25 |
US7802268B2 (en) | 2010-09-21 |
WO2006130871A3 (en) | 2007-02-22 |
EP2312439A2 (en) | 2011-04-20 |
EP2323031A3 (en) | 2016-01-20 |
CN102063315A (zh) | 2011-05-18 |
US20060277526A1 (en) | 2006-12-07 |
CN102063315B (zh) | 2015-03-11 |
ATE476704T1 (de) | 2010-08-15 |
EP1889155B1 (en) | 2010-08-04 |
CN101233485B (zh) | 2010-12-08 |
DE602006015949D1 (de) | 2010-09-16 |
EP2323031A2 (en) | 2011-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101233485B (zh) | 将后绑定函数和语言集成到外部程序环境中的方法和系统 | |
CN110096338B (zh) | 智能合约执行方法、装置、设备及介质 | |
Bodden et al. | Spllift: Statically analyzing software product lines in minutes instead of years | |
Edwards | A framework for practical, automated black‐box testing of component‐based software | |
Hall et al. | Correctness by construction: Developing a commercial secure system | |
US8090959B2 (en) | Method and apparatus for protecting .net programs | |
CN102402451B (zh) | 用户定义类型的编译时边界检查 | |
CN101300584A (zh) | 防止软件逆向工程、未经授权修改以及运行时数据截取的方法 | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
Fourtounis et al. | Static analysis of java dynamic proxies | |
CN111832014A (zh) | 基于动态加载的Java SDK代码加解密方法及终端 | |
US7752138B1 (en) | Dynamic licensing in a distributed system | |
Gregersen et al. | A dependently typed library for static information-flow control in Idris | |
US20120240097A1 (en) | Method of providing software development services | |
Cipresso | Software reverse engineering education | |
Harrison et al. | CAT: A toolkit for assembling concerns | |
CN114174983A (zh) | 使用测试向量自动验证高级构造的优化 | |
Bodden et al. | SPLlift-Transparent and efficient reuse of IFDS-based static program analyses for software product lines | |
Cassel et al. | Uncovering information flow policy violations in C programs | |
Paccamiccio et al. | Reasoning about inter-procedural security requirements in IoT applications | |
Jeon et al. | SP-Fuzz: Fuzzing Soft PLC with Semi-automated Harness Synthesis | |
Dutertre | Yices Manual Version 2.6. 2 | |
Parihar et al. | Maintenance of Object-Oriented Design | |
Li et al. | Component-based Problem Solving Environments for Computational Science | |
Adams | An Introduction to the C++ Programming Language (Version: 2015-02-03) |
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 |