WO2022151114A1 - 一种软件动态链接的实现方法 - Google Patents

一种软件动态链接的实现方法 Download PDF

Info

Publication number
WO2022151114A1
WO2022151114A1 PCT/CN2021/071623 CN2021071623W WO2022151114A1 WO 2022151114 A1 WO2022151114 A1 WO 2022151114A1 CN 2021071623 W CN2021071623 W CN 2021071623W WO 2022151114 A1 WO2022151114 A1 WO 2022151114A1
Authority
WO
WIPO (PCT)
Prior art keywords
dmpf
software
ndf
dlf
fdlf
Prior art date
Application number
PCT/CN2021/071623
Other languages
English (en)
French (fr)
Inventor
王志平
Original Assignee
王志平
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 王志平 filed Critical 王志平
Priority to PCT/CN2021/071623 priority Critical patent/WO2022151114A1/zh
Publication of WO2022151114A1 publication Critical patent/WO2022151114A1/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Definitions

  • the invention relates to the field of software design and computer technology, in particular to a method for realizing software dynamic linking.
  • Computers can be divided into two categories, namely "hardware” and “software”. Then, whether it is “hardware” or “software” that can represent the development direction of computers, perhaps, this question cannot be given an exact and generally accepted conclusion. However, the point of this article is that “hardware” technology will theoretically go to the end, while “software” technology will theoretically go to the other extreme, that is, infinite divergence, or infinite expansion. It's actually not that hard to prove, it's just a matter of time. In an objective sense, the human brain is "computer hardware” composed of carbohydrates, while “computer hardware” in our eyes is composed of chips and other components. In fact, from the objective point of view of evolution, the evolution of human organisms is not more and more strong and more secure.
  • the acrobat control is loaded in the word of the Microsoft office software. Then the first prerequisite is to install the application software of acrobat, and secondly, you need to load the dynamic link library of acrobat in word and make it one of the controls of word. Therefore, acrobat must have a special dynamic link library for other programs to achieve such application requirements as word. However, it is obvious that this is encapsulated into a dynamic link library, and all its internal functions have been implemented in acrobat application software. Although we can't see any inconvenience in the process of using it, it is nothing more than taking up some more disk space, or doing more operations in the process of linking the functions we need.
  • Inter-process communication realizes the outward expansion of software, which is closer to the possibility of “infinite expansion” from a logical point of view, but “inter-process communication” is relatively inefficient for execution inside the processor, so it is impossible to implement it in all areas of the software.
  • the "inter-process communication” method is used to complete the needs of software expansion. In practical applications, the method of "inter-process communication” is only applicable when the processing scale is large, when the consumption of "process communication” is small compared to the processing time. Therefore, the method of software expansion used by the overwhelming majority of actual software applications running inside the processor is “dynamic link library".
  • the existing software background technology cannot make the software truly move towards AI, because the existing software background technology cannot build a basic software framework, so that all software can actively and infinitely expand under this basic framework.
  • the definition of the program entry of the software in the present invention will have a default, which is the same as the program entry of the main function in the existing software background technology. However, this default program entry will not be the only program entry for a software. Therefore, for the "software" under the technical conditions of the present invention, when it starts to run with the default program entry, the "software” can be regarded as starting a certain software under the existing background technology conditions. And when it starts running with a non-default program entry, the "software” automatically becomes a "dynamic link library" dynamically linked by other "software".
  • the "software” does not need to compile a "dynamic link library” for some other application software, and when the "software” is used by other application software to use a certain functional unit, the "software” First of all, there is no need to declare the so-called API for a functional unit during the compilation process. Secondly, all functional units in “software” can be called directly by "other software” without going through any other functional units in the category of "software” (including the default entry program of "software”, so it can also be considered that "software” internal Each of the functional units has its own API).
  • DMPF Dynamic Main Process file
  • DDMF default dynamic main function
  • DMPF dynamic linking
  • DDMF dynamic linking
  • NDF chained NDF
  • each DMPF can be regarded as a point. Inside a computer, or even in a network, there may be many DMPF points, and all DMPF points may form a link relationship directly or indirectly.
  • their internal NDFs can directly call each other (that is, NDFs within different DMPFs can be directly linked without passing through the DDMF API interface).
  • a link relationship does not depend on the API interface declared in the compilation process. Any DMPF only needs to compile all NDF source codes directly into machine code during the process of being designed and compiled, without any preparation for linking or being linked.
  • the key information that can form a link relationship with other DMPFs will be stored in a text file.
  • This text file is called a "dynamic library file”, abbreviated as DLF, which is the English abbreviation of Dynamic Library File.
  • DLF Dynamic Library File
  • the path where the DLF of a DMPF is located is called PDLF, which is the abbreviation of Path to DLF, and PDLF is a string.
  • PDLF will be part of DMPF and placed in the header of DMPF file, with the character ";" or other characters as the separator between PDLF and DMPF binary machine code. Therefore, in the head of DMPF, starting from the first byte after encountering the first delimiter, it is the starting address of DMPF and all other NDFs. And the offset address of all NDFs in DMPF (including DDMF) in MDPF takes this start address as the base address (DDMF offset address is 0). DMPF can be compiled without inserting PDLF, that is, the first byte of DMPF is the binary machine code.
  • PDLF can be inserted into the header of the DMPF file manually or by a tool (PDLF can also be used when compiling DMPF.
  • PDLF is inserted by the compiler by default).
  • DLF is also a text file.
  • the compiler automatically generates a default DLF, and the DLF file records necessary relevant information for each NDF.
  • the record information corresponding to each NDF is called "DMPF Information Record Entry", abbreviated as DIRE, which is the abbreviation of DMPF Information Record Entry.
  • DIRE contains the following necessary information:
  • DLS Dynamic Link Symbol
  • DLS is the unique identifier for NDF to find the specific NDF code location during operation.
  • the compiler assigns each NDF a default DLS that does not overlap with other NDFs.
  • DLS is a digital string. During the process of loading DLF into memory, DLS will be converted into a specific binary value;
  • PDL Dynamic Link Path
  • DMPF can have an NDF whose actual execution code is empty. Only the "function and input and output description information" of the NDF is described in the source code of the NDF, indicating that the NDF exists in other DMPFs, and the PDL is Path to this DMPF. If the NDF described by the current DIRE does exist in the outer DMPF, the compiler makes the PDL a special character (such as " ⁇ ") to indicate that the NDF described by the current DIRE exists in the outer DMPF.
  • special character
  • the PDL can be modified manually or by dedicated software, or by itself while the DMPF is running. If the NDF described by the current DIRE exists in the local DMPF, the compiler makes the PDL empty (or other specific characters) to indicate that the NDF described by the current DIRE exists in the local DMPF;
  • FDLF Extra DLF
  • FDLF External DLF
  • the FDLF file has the same structure and function as the DLF file, but the FDLF describes the information of the external DMPF.
  • the PDL of DIRE is not empty (or other specific characters), it means that the NDF described by the DIRE exists in the outer DMPF.
  • the external DMPF also has its DLF for recording the information of the external DMPF.
  • the compiler completes the compilation of DMPF, it does not specify the value of the FDLF field, but makes it empty.
  • the FDLF field can be modified manually or by special software.
  • the FDLF field in DIRE is only a file name and does not contain a directory path, that is to say, the FDLF file must be in the current directory where DMPF is located. Because in fact the FDLF here is not the source DLF of the external DMPF, but a copy of the source DLF of the external DMPF, the DLS in the FDLF and the DLS in the current DLF cannot be duplicated.
  • the DDMF will automatically find the specific external DMPF according to the PDL information during the process of loading the DLF, and then find the source DLF of the external DMPF, and The replication of the external DMPF source DLF is completed, and the allocation of the DLS in the FDLF is completed.
  • DDMF loads DLF during operation, it will load the information of FDLF at the same time (but will not load the information of the source DLF of the external DMPF.
  • the "loading” mentioned in this article refers to loading software resources into the memory or cache of the processor.
  • Uninstall refers to releasing the memory or cache resources occupied by the software);
  • NDFI "Function and input and output description information", abbreviated as NDFI, the abbreviation of NDF Information, NDFI is to describe the functions implemented by the NDF described by the current DIRE according to certain rules or protocols, as well as the input data structure and output data of the NDF structure.
  • the function description information and input and output data structure information of NDF are embodied in the NDF source code, so NDFI will be completed synchronously when the compiler completes the compilation of DMPF.
  • DDMF loads DLF, ie FDLF, it associates DLS with the pointer to the NDF call inside the software through the information of NDFI;
  • Offset address abbreviated as NDFO, the abbreviation of NDF Offset, NDFO represents the offset address of NDF described by DIRE in DMPF.
  • DDMF needs to load the information in DLF and FDLF files at the beginning of startup, and build its necessary data structure inside its software to save the loaded information, but it does not mean that DDMF needs to load all DIRE files.
  • the described NDF program is loaded.
  • the software will load a specific NDF before the NDF needs to be used, and the loaded NDF will remain in the memory until the DDMF unloads it from the memory (unloading). After that, if it is used again next time, it can still be loaded again).
  • the solution of the present invention can quickly achieve the dynamic link between different modules of the software without losing any efficiency.
  • the solution of the present invention can link the required function modules without any manual intervention based on the software "automatic search". Therefore, under the premise that the software only describes a framework and realizes that DDMF has the relevant search function, and there is no actual execution content in each of the above NDFs, start DDMF, and the software can be independent without any manual intervention. "Make" a complete self. Moreover, the software can completely use the search algorithm based on the text description of the higher-level language, and the software can complete the function expansion by itself, and its expansion space is not limited, so that the machine code and the algorithm with a certain way of thinking can jointly realize the real meaning. AI.
  • DMPF A three DMPFs A, B, and C with a mutual ring link relationship are respectively illustrated, as shown in the figure, DMPF A , DMPF B , and DMPF C respectively.
  • A1 ⁇ A9, B1 ⁇ B9, and C1 ⁇ C9 these arrowed lines respectively represent the link relationship generated in actual operation as the main process entry (DMPF A , DMPF B , and DMPF C ).
  • any DDMF among DMPF A , DMPF B , and DMPF C can become the software entry of the example);
  • DLF A , DLF B , and DLF C are respectively represented as source DLFs corresponding to DMPF A , DMPF B , and DMPF C in the example;
  • FDLF A1 represents the FDLF generated by linking DMPF A to DMPF B when DDMF in DMPF A is used as the software entry;
  • FDLF A2 represents the FDLF generated by linking DMPF A to DMPF C when DDMF in DMPF A is used as the software entry;
  • FDLF B1 represents the FDLF generated by linking DMPF B to DMPF A when DDMF in DMPF B is used as the software entry;
  • FDLF B2 represents the FDLF generated by linking DMPF B to DMPF C when DDMF in DMPF B is used as the software entry;
  • FDLF C1 represents the FDLF generated by linking DMPF C to DMPF A when DDMF in DMPF C is used as the software entry;
  • FDLF C2 represents the FDLF generated by linking DMPF C to DMPF B when DDMF in DMPF C is used as the software entry;
  • the "program code” shown refers to the software code (including DDMF) including all NDFs in DMPF A.
  • the shown character ";” is the separator between PDLF and “program code” in this example. In the technical solution of the present invention, it is not limited that the separator can only be ";”, and can also be other characters in practical applications. ;
  • each row of DIRE shown represents the information description for a certain NDF (including the necessary fields such as DLS, PDL, FDLF, NDFI, and NDFO mentioned above).
  • the character ":” shown is a separator between fields. In the technical solution of the present invention, it is not limited that the separator can only be “:”, and can also be other characters in practical applications.
  • the shown character ";” is used as the terminator of each line of DIRE. In the technical solution of the present invention, it is not limited that the terminator can only be ";”, and may also be other characters in practical applications.
  • the displayed characters "::” indicate that the fields in the successive positions are empty;
  • A1-A9, B1-B9, and C1-C9 have the same link logic.
  • DMPF A as an example to illustrate the link relationship shown in the figure, as follows:
  • DMPF A When DMPF A is used by a process (that is, the parent process of DMPF A ) as the object of the new child process (that is, when the parent process links DMPF A , the DDMF in DMPF A is used as the program entry of the child process), the parent process first starts from The file header of DMPF A obtains the PDLF information, starts the DDMF of DMPF A , and transmits the PDLF information as input to the DDMF. As shown in A1, DDMF finds DLF A files based on PDLF. DDMF loads DLF A into the memory, and constructs the most basic link relation data structure according to the original DLS in DLF A (that is, the allocated DLS recorded in DLF A );
  • A2 After the DDMF completes the loading of DLF A , it sequentially queries the DIREs belonging to the external DMPF, as shown in DLF A in Figure 1, where DLS 1 and DLS 2 are located. As shown in A2 and A6, find DMPF B and DMPF C respectively;
  • A3, A7 DDMF finds PDL B and PDL C respectively according to the PDLF information recorded in the DMPF B and DMPF C file headers, as shown in A3 and A7;
  • A4 and A8 DDMF loads external DMPF related information (ie DMPF B and DMPF C related information). If FDLF A1 or FDLF A2 in DLF A is empty at this time, copy the DIRE in DLF B or DLF C file, and assign DLS to each DIRE. As shown in A4 and A8, create FDLF A1 or FDLF A2 in the directory where DLF A is located, respectively record the DIRE information obtained from DLF B and DLF C , and record the file name of FDLF A1 or FDLF A2 to the corresponding location of DLF A .
  • DMPF related information ie DMPF B and DMPF C related information
  • DDMF finds that the DIRE from the external DLF (such as the DIRE corresponding to DLS 1 in DLF B ) points to the NDF as the local NDF, then DDMF will ignore the DIRE from the external DLF, and will DIRE is copied to the corresponding position in the corresponding FDLF (as shown in FDLF A1 , the DIRE corresponding to DLS 0 is copied from the DIRE corresponding to DLS 0 in DLF A );
  • A9 DDMF loads external DMPF related information (that is, DMPF B and DMPF C related information). If both FDLF A1 and FDLF A2 in DLF A are not empty at this time, as shown in A5 and A9, DDMF directly loads FDLF A1 and FDLF A2 .
  • compiling the software source code includes the steps:
  • the compiler compiles the source code, generates DMPF, sets the offset address of DDMF in the "program code” to 0, generates an inherent DLF file corresponding to DMPF (DLF A as shown in Figure 1), and converts The DLF file name, namely PDLF, is placed in the DMPF file header in the form of string encoding (which can be ASCII or other string encoding), and the character ";” or other characters are used as separators to separate PDLF and "program code”. .
  • An embodiment of the present invention realizes the basic initialization of the first operation of the DDMF in the DMPF in the technical solution of the present invention, including the steps:
  • a process is ready to start another process (child process), and links DDMF in DMPF as the program entry, the parent process reads the PDLF information in the DMPF file header, uses PDLF as the input of DDMF, and starts DDMF ;
  • DDMF finds DLF files based on PDLF. DDMF loads the DLF into the memory, and constructs the most basic "link relational data structure" based on the original DLS in the DLF (that is, the allocated DLS recorded in the DLF);
  • the technical solution of the present invention implements one of the initialization scenarios for the first operation of the DDMF in the DMPF.
  • the precondition of this scenario is that the DMPF belongs to the external DMPF.
  • NDFs have been assigned specific PDLs, including steps:
  • DDMF After DDMF finishes loading the DLF, it queries the DIRE belonging to the external DMPF in turn, and finds the external DMPF corresponding to the PDL respectively;
  • the DDMF loads the external DMPF related information (at this time, the FDLF information in the DLF is empty). Copy the DIRE in the DLF file corresponding to the external DMPF, and assign DLS to each DIRE. Create an FDLF in the directory where the DMPF is located, record the DIRE information obtained from the DLF corresponding to the external DMPF, and record the file name of the FDLF to the corresponding location of the DLF.
  • the DDMF ignores the DIRE in the DLF corresponding to the external DMPF, and the corresponding local part The DIRE is copied to the corresponding position in the corresponding FDLF;
  • the technical solution of the present invention implements one of the initialization scenarios for the first operation of the DDMF in the DMPF.
  • the precondition of this scenario is that the DMPF belongs to the external DMPF.
  • NDF is not specified a specific PDL, including steps:
  • the DDMF loads the external DMPF related information (at this time, the PDL in the DLF is " ⁇ ", or other specific characters, to indicate that the NDF from the external DMPF described by the current DIRE does not specify a specific PDL).
  • DDMF detects that the value of PDL indicates that the current DIRE does not have a specific PDL, and starts to search for a matching NDF in the local specified directory and in the directory of the specified network address according to the NDFI information in DIRE;
  • DDMF searches for a matching NDF, and records its address information in the PDL of the corresponding location;
  • the FDLF information in the DLF is still empty, copy the DIRE in the DLF file corresponding to the external DMPF, and assign DLS to each DIRE.
  • Create an FDLF in the directory where the DMPF is located record the DIRE information obtained from the DLF corresponding to the external DMPF, and record the file name of the FDLF to the corresponding location of the DLF.
  • the DDMF ignores the DIRE in the DLF corresponding to the external DMPF, and the local phase The corresponding DIRE is copied to the corresponding position in the corresponding FDLF.
  • the technical solution of the present invention realizes that NDF n in operation dynamically links NDF n+1 in the external DMPF, including steps:
  • NDF n obtains the DIRE information of NDF n+1 according to DLS from the "link relation data structure" after loading FDLF;
  • NDF n judges that the PDL in the obtained DIRE is non-empty, indicating that NDF n+1 is under the jurisdiction of the external DMPF, and loads the NDF n +1 in the external DMPF according to the PDL information and the NDFO information;

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

人工智能(后文简称AI)是未来ICT的主要技术体现形式,其中最为关键的因素"学习"几乎是AI中的"智"的全部体现。AI的"学习"并非基于"记忆"的学些,而是基于"方法"的学习。因此功能再强大的芯片都不可能会是AI,只有在芯片上运行的软件才可能是AI。当我们习惯于从main函数开始去定义软件的时候,当我们认为动态链接库必须拥有main函数的情况下才是"活的",我们限制了软件作为唯一可能成为AI的绝大部分的空间。本发明将为软件走向AI提供无限的发挥空间,让软件可以拓展的思维空间与我们所认知的AI所需要的思维拓展空间一致。

Description

一种软件动态链接的实现方法 技术领域
本发明涉及软件设计及计算机技术领域,尤其指一种软件动态链接的实现方法。
背景技术
客观地说,计算机技术存在的意义是要解决“问题”,准确地说是要解决我们需要解决的关于脑力劳动的问题。在假设时间足够,以及精力足够,并且每个人都愿意无限提供脑力劳动的话,那么自然界并不需要计算机。但是,很显然不需要计算机是不可能的,那么计算机的未来将如何发展,或者说计算机技术的终极目标是什么呢,很显然,这没有具体的答案。但可以肯定的是,计算机技术会很自然地去替代人类的脑力。换句话说,计算机技术的发展可能永远都没有具体的终极目标,但是计算机技术的发展会永远地走向AI(Artificial Intelligence的缩写)。
构成计算机的,可分为两大类,即“硬件”和“软件”。那么,能代表计算机发展方向的是“硬件”还是“软件”,或许,这个问题现在还无法给出确切的被普遍接受的定论。但本文的观点是,“硬件”技术会在理论上走向终极,而“软件”技术在理论上却是会走向另外一个极端,即无限发散,或者说无限拓展。这其实并不难被证明,只是时间问题。在客观意义上,人类大脑是由碳水化合物组成的“计算机硬件”,而我们眼中的“计算机硬件”由芯片及其它元件所组成。事实上,从进化的客观角度看,人类的生物体进化走向的不是越来越强壮和越来越安全。但在我们脑中运行的“软件”,即人类的智慧,却在一个极度发散的空间里得到了不可思议的进化。人类生物体终会走向终极(或者退化),而人类智慧会走向更大的拓展空间。因此,也许根本就不需要一个被普遍接受的定论,因为计算机技术走向AI的不会是“硬件”,而是“软件”。
然而,在现有软件背景技术条件下,“硬件”往往被更多地认为实现了AI的功能。这并非毫无理由,其一是,在现有AI应用场景中,处于AI定义的边缘,浅显的应用几乎占据AI实用技术的全部,换句说,现有AI技术并不要求软件自身具有“思考”的能力;其二是,任何软件(包括动态链接库)在应用场景中的角色是,拥有唯一API接口(Application Program Interface,即输入输出接口),但在软件内部封装了数量巨大的功能处理单元,相反,硬件在实现的过程中却并非如此,硬件之间的接口事实上依据应用的不同会具有更多形式的输入输出。关于第一点,很显然,现有软件背景技术条件下,软件在实际AI应用中,从软件框架上看,事实上完成的只是控制操作。关于第二点,很显然,软件在实现其所需实现的 功能的时候,将一个开放而发散的需求空间扎成了一个API的口子,然后经过这个狭小的口子再一步一步地分散到相应的具体的功能实现单元,如果需要更形象地描述,那么它就如同一个计时的沙漏。
可以更细致地来看现有软件背景技术,依然是存在两大方面的弊端:
其一,举例在微软office软件的word中加载acrobat控件。那么首先的前提条件是需要安装acrobat的应用软件,其次需要在word中加载acrobat的动态链接库,并使之成为word的控件之一。所以,acrobat必须要专门的动态链接库用于其它程序实现如同word的这种应用需求。然而,很明显的是这种被封装成动态链接库的,其内部所有的功能在acrobat的应用软件中已经实现过了。虽然在我们使用的过程中看不出有什么不便之处,无非是显得多占用了一些磁盘空间,或者在链接我们所需功能的过程中多了一些操作。但是,如果这些多出来资源占用以及操作,需要软件在毫无人工操作干预的情况下自己完成(即acrobat的设计者认为世界上根本就不存在word这一软件),情况恐怕将会变得很难堪。因此,当某一软件能实现对外无限拓展的时候,所能依赖的应该只能是对以下问题的解决:“我是谁”、“我需要什么”、“我能做什么”。而如果需要在拓展的问题上考虑具体的目标时,则意味着被永远限定了其所能拓展的范围(这将决定软件不能达到“思考”的目标,或者说软件无法成为AI。人类大脑之所以具有思考的能力,是因为客观上,不能限制人类大脑可以或者不可以想象哪些问题,以及不能限制人类大脑对具体问题想象的方向);
其二,在现有软件背景技术条件下,软件向外拓展的方式有两种:“进程间通信”和“动态链接库”。“进程间通信”实现软件向外拓展,从逻辑上看更接近“无限拓展”的可能,但“进程间通信”对于在处理器内部执行而言,效率较为低下,因此不可能在软件所有范围内都采用“进程间通信”的方式去完成软件向外拓展的需求。在实际应用中,往往只有处理规模较大时,当“进程通信”消耗相较于处理时间而言所占比重较小的时候,才适用于“进程间通信”的方式。因此,在处理器内部运行的绝对多数的实际软件应用采用的软件对外拓展的方法是“动态链接库”。但是,不管是“进程间通信”还是“动态链接库”的方式,在所拓展的软件功能内部,即被封装成为的“进程”或“动态链接库”,必须加载所有其可能用到的,但并非实时用到的功能实现单元(函数或动态链接函数)。因此,在处理器内部会在某一时刻重复地加载相当多数量的具有相同功能的功能实现单元,比如,如同printf这样的函数,或者其它通用控件。但在软件的实际运行中,这些被迫加载的功能实现单元被使用或者说被同时使用的几率非常小。软件能够进行对外无限拓展或者说近似无限拓展,一个绝对性的目标是硬件资源能否被循环使用,或者说合理使用。我们可以想象,如果人类大脑将我 们皮肤中的每个神经末梢细胞的功能同时,且每时都加载在大脑中,恐怕我们的脑容量不足以完成这一件事情,而且恐怕必须为我们的大脑安装合适的制冷设备才能保证我们的大脑不长时间“发烧”。
很显然,现有的软件背景技术并不能令软件真正走向AI,因为现有软件背景技术不能构建基础的软件框架,使所有的软件都能在这一基础框架下主动无限拓展。
发明内容
本发明对于软件的程序入口的定义将存在一个默认的,如同现有软件背景技术中的main函数的程序入口。但是,这一默认的程序入口将并不是作为某一软件的唯一程序入口。因此,对于本发明技术条件下的“软件”而言,在以默认程序入口开始运行时,该“软件”可以认为是启动了现有背景技术条件下的某一软件。而当以非默认程序入口开始运行时,该“软件”则自动成为被其它“软件”动态链接的“动态链接库”。所以,在本发明技术条件下“软件”并不需要特定为某一其它应用软件编译出一个“动态链接库”,而当“软件”被其它应用软件使用其中某一功能单元时,“软件”首先并不需要在编译过程中为某一功能单元申明所谓的API。其次“软件”中的所有功能单元可以直接被“其它软件”调用,而不需要经过“软件”范畴内的任何其它功能单元(包括“软件”的默认入口程序,所以也可以认为“软件”内部的任意一个功能单元都具有自己的API)。对于本发明技术而言,“软件”仅仅是一种封装,即在一个文件内封装了一个或多个可以动态链接的函数,后文将这种封装的文件称之为“动态主进程文件”,简写为DMPF,即Dynamic Main Process File的英文缩写,而将DMPF中的默认程序入口所在的函数称之“默认动态主函数”,简写为DDMF,即Default Dynamic Main Function的英文缩写。
封装于DMPF内的函数均以动态链接的形式使用(包括DDMF在内),所有的函数在本文中将被称之为“内嵌动态函数”,简写为NDF,即Nested Dynamic Function的英文缩写(对于DDMF而言,可以认为是在DMPF中的一个特殊的NDF,或者说是默认被链接的NDF)。在本发明技术方案中,每个DMPF可以被看作为一个点。在一台计算机内部,甚至是在一个网络中可以有很多个DMPF点,所有的DMPF点之间可以直接形成链接关系,也可以间接形成链接关系。并且,在两个直接形成链接关系的DMPF点之间,其内部的NDF可以直接相互调用(即不同DMPF内部的NDF之间可以直接链接,不需要通过DDMF的API接口)。
本发明技术方案中,形成“链接关系”并不依赖于编译过程中申明的API接口。任意一个DMPF只需要在其被设计及被编译的过程中,直接将所有的NDF源代码编译形成机 器代码,并不需要为链接或者被链接做任何准备。关于能够与其它DMPF形成链接关系的关键信息则会保存在文本文件中,这一文本文件被称之为“动态库文件”,简写为DLF,即Dynamic Library File的英文缩写。某一DMPF的DLF所在路径被称之为PDLF,即Path to DLF的缩写,PDLF为字符串。PDLF会是DMPF的一部分,并且置于DMPF的文件头部,在PDLF与DMPF二进制机器代码之间以字符“;”或者其它字符作为分隔符。所以,在DMPF的头部,从遇到第一个分隔符之后的第一个字节开始,才是DMPF以及其它所有NDF的起始地址。并且DMPF中所有NDF(包括DDMF在内)在MDPF中的偏移地址以该起始地址作为基地址(DDMF偏移地址为0)。DMPF可以在编译的时候并不插入PDLF,即DMPF的第一个字节便是二进制的机器代码,在完成编译后手动或者由工具在DMPF文件头部插入PDLF(PDLF也可以在编译DMPF的时候就由编译器默认插入PDLF)。DLF同样也是文本文件,在MDPF编译完成后,编译器自动生成一个默认的DLF,DLF文件为每个NDF记录必要的相关信息。每个NDF所对应的记录信息被称之为“DMPF信息记录条目”,简写为DIRE,即DMPF Information Record Entry的缩写,DIRE包含以下必要信息:
1、“动态链接符号”,简写为DLS,即Dynamic Link Symbol的缩写,DLS是NDF在运行中对于查找具体NDF代码位置的唯一标识。编译器在完成DMPF编译的过程中,为每个NDF分配一个默认且与其它NDF不重复的DLS。DLS为数字字符串,在DLF被载入内存的过程中,DLS会被转换成具体的二进制数值;
2、“动态链接路径”,简写为PDL,即Path to Dynamic Link的缩写,PDL是指向一个外部DMPF的路径。DMPF可以在其内部拥有实际执行代码为空的NDF,在该NDF的源代码中只对该NDF的“功能及输入输出描述信息”进行描述,表示该NDF存在于其它的DMPF中,PDL即为指向该DMPF的路径。如果当前DIRE所描述的NDF确实存在于外部DMPF时,编译器令PDL为特定字符(比如“~”),以表示当前DIRE所描述的NDF存在于外部DMPF。在DMPF编译完成后,PDL可以被手动修改或者由专用软件修改,或者在DMPF运行中被自己修改。如果当前DIRE所描绘的NDF存在于本部DMPF之中时,编译器令PDL为当空(或者其它特定字符),以表示当前DIRE所描述的NDF存在于本部DMPF;
3、“外部DLF”,简写为FDLF,即Foreign DLF的缩写。除了在FDLF文件中不存在FDLF字段以外,FDLF文件与DLF文件具有相同的结构和功能,但是FDLF描述的是外部DMPF的信息。当DIRE的PDL不为空时(或其它特定字符)时,表示该DIRE所描述的NDF存在于外部DMPF。那么同样,该外部DMPF也拥有其DLF,用于记录该外部DMPF的信息。编译器在完成对DMPF的编译后,并不会指定FDLF字段的值,而是令其为空,FDLF字段 可以被手动修改或者有专用软件修改。但必须强调的是,DIRE中的FDLF字段仅仅是一个文件名,并不包含目录路径,也就是说FDLF文件一定是在DMPF所在的当前目录。因为事实上这里的FDLF并不是外部DMPF的源DLF,而是外部DMPF源DLF的复制件,在FDLF中的DLS与在当前DLF中的DLS不能重复。因此,当DMPF在运行过程中发现FDLF为空,且PDL指示为外部DMPF时,DDMF在加载DLF的过程中会自动依据PDL的信息找到具体的外部DMPF,随后再找到外部DMPF的源DLF,并完成对外部DMPF源DLF的复制,以及完成对FDLF中DLS的分配。DDMF在运行中加载DLF时,会同时加载FDLF的信息(但不会加载外部DMPF的源DLF的信息。本文所述“加载”是指将软件资源加载进入处理器的内存或者缓存,所述“卸载”是指将软件占用的内存或者缓存资源释放);
4、“功能及输入输出描述信息”,简写为NDFI,即NDF Information的缩写,NDFI为依据一定规则或协议描述当前DIRE所描述的NDF所实现的功能,以及该NDF的输入数据结构和输出数据结构。NDF的功能描述信息、输入输出数据结构信息均在NDF源代码中具体体现,因此NDFI会在编译器完成对DMPF的编译时同步完成。DDMF在加载DLF即FDLF时,通过NDFI的信息将DLS与软件内部对于NDF调用的指针进行关联;
5、“偏移地址”,简写为NDFO,即NDF Offset的缩写,NDFO表示DIRE所描述的NDF在DMPF中的偏移地址。
综上所述,DDMF在启动之初需要对DLF及FDLF文件中信息进行加载,并在其软件内部构建其必要的数据结构用于保存所加载的信息,但是并不意味着DDMF需要对所有DIRE所描述的NDF的程序进行加载。在本发明技术方案中,软件对于某一具体NDF加载的时间是在该NDF需要被使用之前才会被加载,被加载后的NDF会保留在内存中,直到DDMF将其从内存中卸载(卸载后,如果下次再被使用依然可以也必须再次加载)。所以,本发明技术方案,在使用某一个DMPF时,并不意味在任何时候都需要将DMPF所包含的所有NDF都加载到内存中,而只需要加载所需要使用的NDF,且对于长时间不被使用但已加载的NDF可以及时卸载,以达到对硬件资源的高效循环使用。
综上所述,在具有良好人工干预的情况下,本发明方案可以实现不损失任何效率的情况下快速达成软件的不同模块之间的动态链接。
综上所述,本发明方案可以基于软件“自动搜索”的方式在没有任何人工干预的情况下链接上自己所需的功能模块。所以,在当软件仅仅描绘了一个框架,并实现DDMF具有相关搜索功能的前提下,上述每个NDF中没有任何实际执行内容的情况下,启动DDMF, 软件可以在没有任何人工干预的情况下独立“制造”一个完备的自己。并且,软件完全可以依据更高级语言的文字描述,使用搜索算法,软件自己完成功能拓展,且其拓展空间并不受限制,从而让机器代码与具有某种思维方式的算法共同实现具有真实意义的AI。
附图说明
图1所示,分别示例了A、B、C三个存在相互环形链接关系的DMPF,分别如图中所示DMPF A、DMPF B、DMPF C。图中所示,A1~A9、B1~B9、以及C1~C9,这些带箭头线分别表示DMPF A、DMPF B、DMPF C作为主进程入口而在实际运行中产生的链接关系(图1中所示的连接关系中,DMPF A、DMPF B、DMPF C当中的任意一个DDMF都可以成为示例的软件入口);
图1所示,DLF A、DLF B、DLF C分别表示为示例中DMPF A、DMPF B、DMPF C相对应的源DLF;
图1所示,FDLF A1表示以DMPF A当中的DDMF作为软件入口时,DMPF A链接到DMPF B所产生的FDLF;
图1所示,FDLF A2表示以DMPF A当中的DDMF作为软件入口时,DMPF A链接到DMPF C所产生的FDLF;
图1所示,FDLF B1表示以DMPF B当中的DDMF作为软件入口时,DMPF B链接到DMPF A所产生的FDLF;
图1所示,FDLF B2表示以DMPF B当中的DDMF作为软件入口时,DMPF B链接到DMPF C所产生的FDLF;
图1所示,FDLF C1表示以DMPF C当中的DDMF作为软件入口时,DMPF C链接到DMPF A所产生的FDLF;
图1所示,FDLF C2表示以DMPF C当中的DDMF作为软件入口时,DMPF C链接到DMPF B所产生的FDLF;
图1所示,以DMPF A为例,所示“程序代码”即指包含DMPF A内部所有NDF在内的软件代码(包括DDMF在内)。所示字符“;”为本示例中PDLF与“程序代码”之间的分隔符,在本发明技术方案中并不限定该分隔符只能为“;”,在实际应用中也可以是其它字符;
图1所示,以DLF A为例,所示每行DIRE,表示对于某一NDF的信息描述(包含前文所述DLS、PDL、FDLF、NDFI、NDFO这些必要字段)。所示字符“:”为字段之间的分隔符,在本发明技术方案中并不限定该分隔符只能为“:”,在实际应用中也可以是其它字符。所示字符“;”为作为每行DIRE的结束符,在本发明技术方案中并不限定该结束符只能为“;”, 在实际应用中也可以是其它字符。所示字符“::”表示依次所在位置的字段为空;
图1所示,A1~A9、B1~B9、以及C1~C9具有相同的链接逻辑,以下将以DMPF A为例,阐述图中所示链接关系,具体如下:
A1:当DMPF A被某一进程(即DMPF A的父进程)作为新建子进程的对象(即父进程链接DMPF A时,以DMPF A中的DDMF作为子进程的程序入口),父进程首先从DMPF A的文件头获取PDLF信息,启动DMPF A的DDMF,并将PDLF信息作为输入传给DDMF。如A1所示,DDMF依据PDLF找到DLF A文件。DDMF将DLF A加载到内存中,并依据DLF A中原有的DLS(即记录在DLF A中的已分配的DLS)构建最基本的链接关系数据结构;
A2、A6:DDMF完成对DLF A的加载之后,依次查询属于外部DMPF的DIRE,如图1中的DLF A所示DLS 1及DLS 2所在的DIRE。如A2、A6所示,分别找到DMPF B和DMPF C
A3、A7:DDMF依据DMPF B及DMPF C文件头所记录的PDLF信息,如A3、A7所示,分别找到PDL B和PDL C
A4、A8:DDMF加载外部DMPF相关信息(即DMPF B和DMPF C相关信息)。如果此时DLF A中FDLF A1或FDLF A2为空,则复制DLF B或DLF C文件中的DIRE,为每条DIRE分配DLS。如A4、A8所示,分别在DLF A所在目录创建FDLF A1或FDLF A2,分别记录从DLF B和DLF C中获取的DIRE信息,并将FDLF A1或FDLF A2的文件名记录到DLF A相应位置。在创建FDLF A1或者FDLF A2的过程中,以创建FDLF A1为例,其获取的是DLF B中的信息,如DLF B所示的DLS 1所对应的DIRE,其指向的是DLF A中的本部的NDF,因此当DDMF发现来自外部DLF的DIRE(如来自DLF B中的DLS 1所对应的DIRE)指向的NDF为本部NDF,那么DDMF会忽略来自外部DLF中的DIRE,而将本部相对应的DIRE复制到相应的FDLF中的相应位置(如FDLF A1中所示DLS 0所对应的DIRE为复制来自DLF A中DLS 0所对应的DIRE);
A5、A9:DDMF加载外部DMPF相关信息(即DMPF B和DMPF C相关信息)。如果此时DLF A中FDLF A1和FDLF A2均非空,如A5、A9所示,DDMF直接加载FDLF A1和FDLF A2
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图,并获得其它的实施方式。
为了使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们不代表其 作为产品的实际结构或流程。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。
实施例1
本发明的一个实施例,本发明技术方案中实现对软件源代码的编译,包括步骤:
1、编译前准备,对于每一个NDF的源代码,申明该NDF的功能、输入数据格式、输出数据格式、是否来自外部DMPF、是否指定PDL、以及是否为DDMF;
2、编译器对源代码进行编译,生成DMPF,令DDMF在“程序代码”中的偏移地址为0,生成与DMPF对应的、固有的DLF文件(如图1所示DLF A),并将DLF文件名,即PDLF,以字符串编码的方式(可以是ASCII或者其它字符串编码)置于DMPF文件头,并以字符“;”或者其它字符作为分隔符将PDLF与“程序代码”隔开。
实施例2
本发明的一个实施例,在实施例1的基础上,本发明技术方案中实现DMPF中的DDMF第一次运行的基本初始化,包括步骤:
1、某一进程(父进程)准备启动另一进程(子进程),并链接DMPF中的DDMF作为程序入口,父进程读取DMPF文件头中的PDLF信息,以PDLF作为DDMF的输入,启动DDMF;
2、DDMF依据PDLF找到DLF文件。DDMF将DLF加载到内存中,并依据DLF中原有的DLS(即记录在DLF中的已分配的DLS)构建最基本的“链接关系数据结构”;
实施例3
本发明的一个实施例,在实施例1和实施例2的基础上,本发明技术方案中实现DMPF中的DDMF第一次运行的初始化场景之一,该场景前提条件为DMPF所隶属外部DMPF的NDF均已被指定具体的PDL,包括步骤:
1、DDMF完成对DLF的加载之后,依次查询属于外部DMPF的DIRE,分别找到PDL所对应的外部DMPF;
2、DDMF加载外部DMPF相关信息(此时DLF中的FDLF信息均为空)。复制外部DMPF所对应的DLF文件中的DIRE,为每条DIRE分配DLS。分别在DMPF所在目录创建FDLF,记录从外部DMPF所对应的DLF中所获得的DIRE信息,并将FDLF的文件名记录到DLF相应位置。在创建FDLF的过程中,如果外部DMPF所对应的DLF所指的DLS所对应的 DIRE指向的是本部DMPF中的NDF,那么DDMF忽略来自外部DMPF所对应的DLF中的DIRE,而将本部相对应的DIRE复制到相应的FDLF中的相应位置;
3、加载所有FDLF,完善“链接关系数据结构”。
实施例4
本发明的一个实施例,在实施例1和实施例2的基础上,本发明技术方案中实现DMPF中的DDMF第一次运行的初始化场景之一,该场景前提条件为DMPF所隶属外部DMPF的NDF未被指定具体的PDL,包括步骤:
1、DDMF完成对DLF的加载之后,依次查询属于外部DMPF的DIRE;
2、DDMF加载外部DMPF相关信息(此时DLF中的PDL为“~”,或其它特定字符,以表示当前DIRE所描述的来自于外部DMPF的NDF未被指定具体的PDL)。DDMF检测到PDL的值指示当前DIRE没有具体的PDL,开始在本地指定目录下,以及在指定网络地址的目录下,依据DIRE中NDFI的信息搜索匹配的NDF;
3、DDMF搜索到匹配的NDF,将其地址信息记录于相应位置的PDL;
4、此时DLF中的FDLF信息依然为空,复制外部DMPF所对应的DLF文件中的DIRE,为每条DIRE分配DLS。分别在DMPF所在目录创建FDLF,记录从外部DMPF所对应的DLF中所获得的DIRE信息,并将FDLF的文件名记录到DLF相应位置。在创建FDLF的过程中,如过外部DMPF所对应的DLF所示的DLS所对应的DIRE指向的是本部DMPF中的NDF,那么DDMF忽略来自外部DMPF所对应的DLF中的DIRE,而将本部相对应的DIRE复制到相应的FDLF中的相应位置。
3、加载所有FDLF,完善“链接关系数据结构”。
实施例5
本发明的一个实施例,在实施例3或者实施例4的基础上,本发明技术方案中实现处于运行中的NDF n动态链接外部DMPF当中的NDF n+1,包括步骤:
1、NDF n从加载FDLF之后的“链接关系数据结构”,依据DLS获取NDF n+1的DIRE信息;
2、NDF n判断所得到DIRE中的PDL为非空,表示NDF n+1为外部DMPF所辖,依据PDL信息及NDFO信息加载外部DMPF中的NDF n+1

Claims (4)

  1. 实现在DMPF文件头指明构建软件“链接关系数据结构”的DLF文件位置,其特征在于:在DMPF文件头插入PDLF,PDLF中字符以ASCII进行编码,但不限制只能使用ASCII进行编码;
    和/或
    在PDLF与二进制可执行代码之间以特定字符“;”,但不限定只能使用字符“;”作为分隔符将PDLF与二进制可执行代码隔开。
  2. 根据权力要求1,实现构建软件“链接关系数据结构”,其特征在于:
    构建DLF文件格式,构建其格式所表述的数据结构,构建所表述数据结构中的各数据单元之间的关联关系;
    和/或
    构建FDLF文件格式,构建其格式所表述的数据格式,构建所表述数据结构中的各数据单元之间的关联关系;
    和/或
    构建DLF文件与FDLF文件之间的关联关系。
  3. 根据权力要求1和权力要求2,实现DMPF在仅有软件框架而没有实际软件执行功能内容的情况下通过非人工干预的方法自主完成软件执行功能的完善,其特征在于:
    DLF文件及FDLF文件内容可以被DMPF中的NDF修改;
    和/或
    NDF通过NDFI记录的信息搜索具有DMPF所需软件执行功能的外部DMPF,并将该外部DMPF内的NDF资源信息纳入软件的“链接关系数据结构”。
  4. 根据权力要求1和权力要求2,实现软件在运行中对所需软件功能单元的实时动态加载,其特征在于:
    当前NDF在加载DLF文件、加载FDLF文件、构建“链接关系数据结构”之后,在调用DMPF中的其它目标NDF之前,并不对该目标NDF的程序进行加载;
    和/或
    当前NDF发现需要调用DMPF中的其它目标NDF时,才对该目标NDF进行加载;
    和/或
    在完成目标NDF加载后,目标NDF可以被当前NDF卸载。
PCT/CN2021/071623 2021-01-14 2021-01-14 一种软件动态链接的实现方法 WO2022151114A1 (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/CN2021/071623 WO2022151114A1 (zh) 2021-01-14 2021-01-14 一种软件动态链接的实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2021/071623 WO2022151114A1 (zh) 2021-01-14 2021-01-14 一种软件动态链接的实现方法

Publications (1)

Publication Number Publication Date
WO2022151114A1 true WO2022151114A1 (zh) 2022-07-21

Family

ID=82446703

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/CN2021/071623 WO2022151114A1 (zh) 2021-01-14 2021-01-14 一种软件动态链接的实现方法

Country Status (1)

Country Link
WO (1) WO2022151114A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117875264A (zh) * 2024-03-13 2024-04-12 江苏中威科技软件系统有限公司 一种dlf文件动态标示的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101908119A (zh) * 2010-08-12 2010-12-08 浙江中控软件技术有限公司 一种动态链接库dll文件的处理方法和装置
EP3035191A1 (en) * 2014-12-17 2016-06-22 Semmle Limited Identifying source code used to build executable files
CN107341010A (zh) * 2017-06-26 2017-11-10 华中科技大学 一种C/C++与COStream混合编程方法和可视化编译系统
CN112363780A (zh) * 2020-11-29 2021-02-12 王志平 一种软件动态链接的实现方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101908119A (zh) * 2010-08-12 2010-12-08 浙江中控软件技术有限公司 一种动态链接库dll文件的处理方法和装置
EP3035191A1 (en) * 2014-12-17 2016-06-22 Semmle Limited Identifying source code used to build executable files
CN107341010A (zh) * 2017-06-26 2017-11-10 华中科技大学 一种C/C++与COStream混合编程方法和可视化编译系统
CN112363780A (zh) * 2020-11-29 2021-02-12 王志平 一种软件动态链接的实现方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117875264A (zh) * 2024-03-13 2024-04-12 江苏中威科技软件系统有限公司 一种dlf文件动态标示的方法
CN117875264B (zh) * 2024-03-13 2024-05-24 江苏中威科技软件系统有限公司 一种dlf文件动态标示的方法

Similar Documents

Publication Publication Date Title
US7197512B2 (en) Type bridges
JP4855656B2 (ja) 複数のオブジェクトをシリアライズする方法
US5752034A (en) Apparatus and method for providing an event detection notification service via an in-line wrapper sentry for a programming language
US6154765A (en) Distributed digital rule processor for single system image on a clustered network and method
US7207002B2 (en) Serialization and preservation of objects
US5644770A (en) Coupling rules to an object-oriented program
US5557776A (en) Apparatus which allows data sharing amongst computer program from different program environments
US7856618B2 (en) Adaptively generating code for a computer program
US20070300238A1 (en) Adapting software programs to operate in software transactional memory environments
CN111949650A (zh) 一种多语言融合查询方法及多模数据库系统
US6092079A (en) Apparatus and method for updating an object without affecting the unique identity of the object
CN112363780A (zh) 一种软件动态链接的实现方法
WO2022151114A1 (zh) 一种软件动态链接的实现方法
US5764949A (en) Query pass through in a heterogeneous, distributed database environment
WO2022099888A1 (zh) 一种实现编译型嵌入式Python的方法
US20230289187A1 (en) Method and apparatus for rectifying weak memory ordering problem
JP4884480B2 (ja) Sqlプロシージャを配備するためのシステム及び方法
US20040054987A1 (en) System and method of an incremental file audit in a computer system
Dingel et al. Towards a formal treatment of implicit invocation using rely/guarantee reasoning
Lipkind et al. Object views: Language support for intelligent object caching in parallel and distributed computations
CN108399068B (zh) 函数程序持久化的方法、电子设备及存储介质
US11762640B2 (en) Program, information conversion device, and information conversion method
Kaiser et al. Multiple concurrency control policies in an object-oriented programming system
CN109656539B (zh) 一种基于面向对象编程的软件自适应改造方法
US20040010779A1 (en) Multi-module interpreter

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 21918329

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 21918329

Country of ref document: EP

Kind code of ref document: A1