WO2001006357A1 - Metalangage pour applications commerciales en c?++¿ - Google Patents
Metalangage pour applications commerciales en c?++¿ Download PDFInfo
- Publication number
- WO2001006357A1 WO2001006357A1 PCT/US1999/016770 US9916770W WO0106357A1 WO 2001006357 A1 WO2001006357 A1 WO 2001006357A1 US 9916770 W US9916770 W US 9916770W WO 0106357 A1 WO0106357 A1 WO 0106357A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- script
- recited
- stack machine
- user
- language
- 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.)
- Ceased
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
Definitions
- microfiche appendix having 3 microfiche and 262 frames is included herewith containing the detailed design specification for the present invention.
- the present invention is directed to a meta-language for C++ business software applications. More particularly, to a C++ metalanguage that can access C++ objects and interface to a run-time type identification mechanism that enables the changing of a C++ meta- language scripts without the need to recompile C++ source code or for the user to be familiar with a programming language.
- Meta-languages were developed to eliminate the programmer from the loop, but did not offer access to C++ objects.
- CML C++ Meta- Language
- CML C++ Meta- Language
- CML C++ Meta-Language
- the CML provides a scripting layer on top of and interfacing to a C++ layer.
- the use of a meta-language allows to control the functionality at run-time, using conditions and processing rules, stored in reference data or plain text files.
- Business functionality, implemented using the CML can be changed without recompilation of C++ code and due to the higher level of abstraction of the CML, non-technical staff can maintain meta-language scripts.
- Figure 1 is an overall software configuration of the present invention.
- Figure 2 is a diagram showing the interaction between the CML source script, the CML Framework and the business application in the present invention.
- Figure 3 is a flowchart showing the method of creating and executing a CML script as shown in figure 2 as practiced by an embodiment of the present invention.
- Figure 4 is a diagram showing the architecture of the stack- machine in the present invention.
- a scripting language is a high-level language providing basic programming constructs.
- a meta-language is a high-level language that is directly tied to a specific application.
- Reference data is usually stored on a permanent storage such as a database and is used by processing the data as reference values for validation or conditional logic.
- Business logic is the implementation of a business process using rules and processing logic. If a business process or associated rules need to be changed, the business logic must also be modified.
- a class is a program module that combines logic and state.
- An example of a « class is the Event class that is used to represent telephone calls.
- An object is a specific instance of a class.
- An example of an object is the instance of a Event object that represents a specific telephone call.
- the Event object is an instance of the Event class, its state represents the data of the specific telephone call.
- An attribute is part of an object's state and defines some property of the class.
- An example of an attribute in an Event object is the originating phone number of the telephone call that is represented by the object.
- a method is part of a class or object and performs specific operations. Methods can be called by other objects or by the object itself.
- An example of a method in an Event object is a method providing the call duration. The duration can either be calculated (from start and end time) or simply provide access to a duration attribute in the Event object.
- a reflection layer provides a mechanism to browse objects at runtime for their type, attributes and methods. This facilitates late binding where it is determined at runtime what operations are executed.
- a strongly typed system allows the use of typed data in programs to be checked when the program is compiled. For example it can be verified whether a return value of a certain type can be assigned to a variable of a certain type.
- a type inference in a language providing type inference, the types of literals, values, and expressions in a program do not have to be declared by the programmer but are calculated once the program is compiled.
- the C++ Meta-Language (CML) framework 34 shown in Figure 2 comprises compiler 120 and stack machine 100 and provides applications with tools necessary to compile and execute metalanguage scripts.
- the CML framework is coupled with a C++ reflection layer, also referred to as run-time type identification ("RTTI")
- meta-language layer 10 without the existence of the metalanguage layer 10, all business application logic would be traditionally implemented in the application core layer 20 in form of C++ business objects. In order to change to the business logic, C++ code would have to be modified, the application core layer would have to be recompiled and re-tested. Non-technical staff, familiar with the business process, could not perform these modifications. However, with meta-language layer 10, business logic can be implemented in the meta-language layer 10 by the non-technical staff. The metalanguage 10 provides a higher level of abstraction than C++ and can more easily be maintained by non-technical staff. Business logic contained in meta-language 10 can be modified without the extensive effort of rebuilding the application. A drawback of the meta-language layer 10 is performance. Processing implemented in meta-language 10 is executed more slowly than processing implemented in application core 20 C++ objects. Therefore, a balance of flexibility and performance needs to be considered when planning where to place business logic.
- meta-language layer 10 contains the specification of the business logic. This meta-language layer 10 covers the functionality that is subject to frequent change such as the output formats or processing rules. The meta-language layer 10 is based on building blocks provided by the application core 20. Most of the complex logic of the business functions is contained in the meta- language layer 10.
- the application core layer 20 includes application-specific C++ classes. This application core layer 20 also contains the hard-coded business functionality that is not embedded in the meta-language layer 10. The application core layer 20 is built on top of the infrastructure layer 30 for the particular kind of application (batch, online, server) intended. Performance critical processing has to be carried out by low level C++ objects and is implemented in the application core layer 20.
- the infrastructure layer 30 provides services that can be used by all applications.
- the infrastructure offers a standard interface to the operating system 40 including additional services such database access, logging, messaging, and profiling.
- the infrastructure layer 30 provides common services that can be used by ail applications built on top of the infrastructure.
- the infrastructure layer 30 also provides a reflection layer (RTTI) 32 that allows for access to attributes and methods of C++ objects by name as required by the scripting layer.
- RTTI reflection layer
- a reflection layer is a conventional mechanism for changing structure and behavior of software systems dynamically.
- the reflection layer provides information and access to system properties and makes the software self-aware.
- Programming languages, such as JAVA contain reflection layers as a feature of the language itself. Implementation of reflection layers is described in A SYSTEM OF PATTERNS, by Frank Buschman et. al., Wiley and
- CML C++ meta-language
- the CML framework 34 shown in Figure 1 uses a combination of techniques to provide the meta-language layer 10 on top of application core layer 20.
- the main features of the CML framework 34 comprises:
- CML is a strongly-typed compiled language, as illustrated in the discussion of table 1 below.
- the target of the compilation is not machine code, but a sequence of instructions for a small virtual machine (stack machine 100 shown in Figure 2).
- this stack machine program 80 (SMP 80) is contained in a C++ structure and executed by a stack machine 100 realized in C++ when executing the program.
- This approach ensures that most of the burden of translating the CML source script 60, shown in Figure 2, can be carried out before actually executing the program.
- the compiler 120 shown in Figure 2, can check the types of all operations avoiding type errors during the execution of the program.
- the compiler can generate typed operations for the stack machine 100 that can be executed much faster than dynamically typed operations.
- Table 1 below depicts a simple CML script 60, shown in figure 2, provided for illustrative purposes only dealing with a very simple example of bill formatting.
- the purpose of this script is to print all events contained in the given document sorted by start time. It also has to compute the total duration as well as the total charge grouped by "event group”. As a final operation the sample program prints the results.
- C++ classes In the sample program shown in table 1 , it is assumed that three C++ classes have been defined with run-time type information using the RTTI mechanism. These three C++ classes are the Document class, Invoice class, and Event class.
- the Document class contains a list of events which is simply called events.
- the Invoice class extends the Document class by an integer attribute number.
- An Event class has four attributes, the start time, the duration, the charge, and the group. Moreover, it provides a method getDestination which returns the destination (called number) as a string.
- Lines 2-4 of table 1 define the first program printEvent which contains the print commands for a single event.
- the argument type declaration uses a Pascal-like style.
- Event is the C++ class supplied with run-time type information so that its attributes and methods can be used from CML as shown in Line 3.
- Lines 7-8 of table 1 show how the Invoice number attribute can be used.
- a type-check condition such as "is Invoice” automatically changes the type of the variable within the associated block (here, the "then” block of the if-statement). In this way attributes of derived classes can be accessed without any additional type casting.
- Line 11 of table 1 introduces a new variable. Variables do not have to be declared. They are created with the first assignment, and their type is the type of the value which is assigned to it (here an integer).
- Line 12 of table 1 defines another new variable which is a list of events. The right hand side of the assignment creates this list.
- container types such as lists, vectors, tuples and maps, the contained types have to be specified to allow for compile-time type checking.
- Line 13 of table 1 defines a map (also called associative array) of decimals indexed by strings. For maps, both, the type of the keys and the type of the values, have to be provided.
- Line 15 of table 1 shows the sort statement for lists. It is one of the CML commands which have been built in for convenience.
- Line 17 of table 1 starts a loop through the list of event contained in the document.
- the syntax for the control statements has been chosen to be short but readable (no begin-end, no curly brackets as in some programming languages).
- Line 18 of table 1 calls the first program printEvent with the current event.
- Line 19 of table 1 shows the with statement which (as in most scripting languages) allows for using attributes names directly ("duration” instead of "event.duration”).
- Figure 2 is a diagrams illustrating the data and processing flow in the present invention as well as illustrating the different phases of compilation and execution.
- Figure 3 is a flowchart showing the method of creating or modifying and executing a CML source script. Both figures will be discussed together to illustrate the processing flow of the present invention.
- the CML source script 60 is stored on a Datastore (e.g. database or file system) 55 external to the CML source script 60 .
- a Datastore e.g. database or file system
- the CML source script 60 can be created and modified with standard text editing tools.
- An Application intending to execute a CML program contained in a CML source script 60 loads the corresponding CML source script 60 from the Datastore 55 in operation 210 of figure 3.
- the Compiler 120 is invoked which is part of the CML Framework 34. Compilation is organized into two operations within operation 220.
- the syntactical analysis of the CML source script 60 is performed that transforms the source text into a parse tree 70, shown in figure 2, reflecting the syntactical structure of the program and the actual translation of the parse tree into the stack machine program 100.
- Second, a translation process transforms the parse tree 70 into a Stack-Machine Program SMP 80.
- the implementation of the CML translation uses a set of translator objects, one for each type of parse node (not shown) (e.g., a translator for if-statements, another one for assignments, etc.).
- a translator for if-statements, another one for assignments, etc.
- An essential part of the translation process is the handling of types.
- the CML compiler 120 uses bindings and environments.
- a binding gives a path (such as "event.duration") a specific meaning (such as "field of type int"). More precisely, a binding maps a path to a variable, field (attribute of an object variable), method, or a CML program that is part of another CML module.
- An environment manages the bindings during the compilation process. Besides keeping the bindings, the environment also handles the scope of variables and the logic for "with" statements.
- the environment changes during the compilation as new variables are created or existing ones go out of scope. Those changes are kept in a history that allows for recovering the state of the environment. The history is implemented as stacks (detailed further below) for each bound variable and another stack containing the paths that have been changed.
- the application calls the stack machine 100 with the SMP 80 and the input data 90.
- the stack machine 100 executes the SMP 80 and returns the output data 110 to the application. If the CML source script 60 was modified, the application loads the modified version of the script and recompiles it before executing it.
- the CML framework uses a stack 160 to hold temporary values and a frame 150 to hold variables accessible by an index.
- the virtual stack machine 100 operates by copying data between stack 160 and frame 150 or act on the stack 160 itself as depicted in Figure 4.
- frame 150 and stack 160 use vectors of generic values.
- a stack machine program (SMP) 80 is a sequence of operations 140 which determine the actions carried out with stack 160, frame 150, and output stream 110.
- the stack 160 is a LIFO system (Last-In, First-Out). Values are retrieved (or popped) from the stack in the reverse order they were added (or pushed) onto it.
- LIFO system Last-In, First-Out
- the frame 150 is an indexed storage system, i.e., it can be viewed as a set of numbered cells. Moving a value from or to the frame requires to know the index number of the cell from which a value is read or to which it is written. From the CML point of view, the frame manages the variables used in a program.
- a called program will always have its own local Frame 150.
- a Frame 150 is associated with one instance of a SMP 80 only. At startup, it only contains the objects that are the parameters of that program (Input Data 90 shown in figure 2).
- the output stream 110 is the piace where text is sent to for output. From a CML program, the output stream 110 is the target of print statements. Alternate Embodiments
- any number of computer languages may be used.
- Java may be used instead of C++.
- Different version of UNIX may also be used as well as any comparable operating system.
- Almost any processor or computer may be used such as a Sun computer.
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
Priority Applications (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| AU52275/99A AU5227599A (en) | 1999-07-15 | 1999-07-26 | Meta-language for c++ business applications |
| CA002302306A CA2302306A1 (fr) | 1999-07-15 | 1999-07-26 | Langage meta pour application de transactions en c++ |
| EP99937436A EP1196846A1 (fr) | 1999-07-15 | 1999-07-26 | Metalangage pour applications commerciales en c++ |
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US35339499A | 1999-07-15 | 1999-07-15 | |
| US09/353,394 | 1999-07-15 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| WO2001006357A1 true WO2001006357A1 (fr) | 2001-01-25 |
Family
ID=23388903
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| PCT/US1999/016770 Ceased WO2001006357A1 (fr) | 1999-07-15 | 1999-07-26 | Metalangage pour applications commerciales en c?++¿ |
Country Status (4)
| Country | Link |
|---|---|
| EP (1) | EP1196846A1 (fr) |
| AU (1) | AU5227599A (fr) |
| CA (1) | CA2302306A1 (fr) |
| WO (1) | WO2001006357A1 (fr) |
Cited By (9)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6883144B2 (en) | 2001-06-26 | 2005-04-19 | Siemens Medical Solutions Health Services Corporation | System supporting use of customizable expressions by applications |
| EP1249743B1 (fr) * | 2001-04-11 | 2006-11-02 | ALSTOM Technology Ltd | Procédé et programme d'ordinateur pour la simulation statique des rapports non-linéaires dans des réseaux thermodynamiques |
| US7392237B2 (en) | 2001-04-26 | 2008-06-24 | Siemens Medical Solutions Usa, Inc. | Identifier code translation system |
| US7873592B2 (en) | 2007-04-20 | 2011-01-18 | Microsoft Corporation | Type inference for object-oriented languages |
| US10318635B2 (en) | 2012-09-28 | 2019-06-11 | Cerner Innovation, Inc. | Automated mapping of service codes in healthcare systems |
| US10403391B2 (en) | 2012-09-28 | 2019-09-03 | Cerner Health Services, Inc. | Automated mapping of service codes in healthcare systems |
| US10490306B2 (en) | 2015-02-20 | 2019-11-26 | Cerner Innovation, Inc. | Medical information translation system |
| US10565315B2 (en) | 2012-09-28 | 2020-02-18 | Cerner Innovation, Inc. | Automated mapping of service codes in healthcare systems |
| CN115686470A (zh) * | 2022-11-02 | 2023-02-03 | 四川大学 | 基于CAX软件录制用户操作自动生成Python脚本的方法和装置 |
Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| EP0722140A1 (fr) * | 1994-07-12 | 1996-07-17 | Jr East Japan Information Systems Co., Ltd. | Procede d'ecriture d'un programme pour une entreprise specifique |
| GB2320111A (en) * | 1996-12-06 | 1998-06-10 | Jba Holdings Plc | Data processing system and method for software development/configuration |
-
1999
- 1999-07-26 CA CA002302306A patent/CA2302306A1/fr not_active Abandoned
- 1999-07-26 AU AU52275/99A patent/AU5227599A/en not_active Abandoned
- 1999-07-26 EP EP99937436A patent/EP1196846A1/fr not_active Withdrawn
- 1999-07-26 WO PCT/US1999/016770 patent/WO2001006357A1/fr not_active Ceased
Patent Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| EP0722140A1 (fr) * | 1994-07-12 | 1996-07-17 | Jr East Japan Information Systems Co., Ltd. | Procede d'ecriture d'un programme pour une entreprise specifique |
| GB2320111A (en) * | 1996-12-06 | 1998-06-10 | Jba Holdings Plc | Data processing system and method for software development/configuration |
Non-Patent Citations (2)
| Title |
|---|
| BREUER P T ET AL: "A PRETTIER COMPILER-COMPILER: GENERATING HIGHER-ORDER PARSERS IN C", SOFTWARE PRACTICE & EXPERIENCE,GB,JOHN WILEY & SONS LTD. CHICHESTER, vol. 25, no. 11, 1 November 1995 (1995-11-01), pages 1263 - 1297, XP000655547, ISSN: 0038-0644 * |
| HOEVE VAN F ET AL: "AN OBJECT-ORIENTED APPROACH TO APPLICATION GENERATION", SOFTWARE PRACTICE & EXPERIENCE,GB,JOHN WILEY & SONS LTD. CHICHESTER, vol. 17, no. 9, 1 September 1987 (1987-09-01), pages 623 - 645, XP000001704, ISSN: 0038-0644 * |
Cited By (10)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| EP1249743B1 (fr) * | 2001-04-11 | 2006-11-02 | ALSTOM Technology Ltd | Procédé et programme d'ordinateur pour la simulation statique des rapports non-linéaires dans des réseaux thermodynamiques |
| US7392237B2 (en) | 2001-04-26 | 2008-06-24 | Siemens Medical Solutions Usa, Inc. | Identifier code translation system |
| US6883144B2 (en) | 2001-06-26 | 2005-04-19 | Siemens Medical Solutions Health Services Corporation | System supporting use of customizable expressions by applications |
| US7873592B2 (en) | 2007-04-20 | 2011-01-18 | Microsoft Corporation | Type inference for object-oriented languages |
| US10318635B2 (en) | 2012-09-28 | 2019-06-11 | Cerner Innovation, Inc. | Automated mapping of service codes in healthcare systems |
| US10403391B2 (en) | 2012-09-28 | 2019-09-03 | Cerner Health Services, Inc. | Automated mapping of service codes in healthcare systems |
| US10565315B2 (en) | 2012-09-28 | 2020-02-18 | Cerner Innovation, Inc. | Automated mapping of service codes in healthcare systems |
| US10490306B2 (en) | 2015-02-20 | 2019-11-26 | Cerner Innovation, Inc. | Medical information translation system |
| US11978541B2 (en) | 2015-02-20 | 2024-05-07 | Cerner Innovation, Inc. | Medical information translation system |
| CN115686470A (zh) * | 2022-11-02 | 2023-02-03 | 四川大学 | 基于CAX软件录制用户操作自动生成Python脚本的方法和装置 |
Also Published As
| Publication number | Publication date |
|---|---|
| AU5227599A (en) | 2001-02-05 |
| CA2302306A1 (fr) | 2001-01-15 |
| EP1196846A1 (fr) | 2002-04-17 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| Clifton et al. | MultiJava: Design rationale, compiler implementation, and applications | |
| US5586328A (en) | Module dependency based incremental compiler and method | |
| US8850409B2 (en) | Notification-based constraint set translation to imperative execution | |
| US7272821B2 (en) | System and method of universal programming language conversion | |
| EP1258805B1 (fr) | Placement d'une instruction de signalisation d'exception dans du code compilé | |
| US6823504B1 (en) | Method and apparatus for interfacing a javascript interpreter with library of host objects implemented in java | |
| Snyder | CommonObjects: an overview | |
| US20040268301A1 (en) | Adding new compiler methods to an integrated development environment | |
| EP0789875A1 (fr) | Procede et appareil de traduction d'un code source d'un langage informatique evolue a un autre | |
| US6951014B1 (en) | Method and apparatus for representation of a JavaScript program for execution by a JavaScript interpreter | |
| Gisi et al. | Extending a tool integration language | |
| US6898786B1 (en) | Javascript interpreter engine written in Java | |
| Buro et al. | On multi-language abstraction: Towards a static analysis of multi-language programs | |
| US20040268307A1 (en) | Representing type information in a compiler and programming tools framework | |
| EP1196846A1 (fr) | Metalangage pour applications commerciales en c++ | |
| Biboudis et al. | Recaf: Java dialects as libraries | |
| Brandis et al. | The Oberon system family | |
| US20070074185A1 (en) | Identifier expressions | |
| Ghuloum | An incremental approach to compiler construction | |
| Holt et al. | The Turing language report | |
| Gregor et al. | Concepts for C++ 0x (revision 1) | |
| Sostaks et al. | The implementation of MOLA to L3 compiler | |
| Beevi et al. | MetaJC++: A flexible and automatic program transformation technique using meta framework | |
| Hicks | Types and intermediate representations | |
| Wielemaker | SWI-Prolog 2.9. 6 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| ENP | Entry into the national phase |
Ref document number: 2302306 Country of ref document: CA |
|
| WWE | Wipo information: entry into national phase |
Ref document number: 1999937436 Country of ref document: EP |
|
| AK | Designated states |
Kind code of ref document: A1 Designated state(s): AL AM AT AU AZ BA BB BG BR BY CA CH CN CU CZ DE DK EE ES FI GB GE GH GM HR HU ID IL IN IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MD MG MK MN MW MX NO NZ PL PT RO RU SD SE SG SI SK SL TJ TM TR TT UA UG US UZ VN YU ZW |
|
| AL | Designated countries for regional patents |
Kind code of ref document: A1 Designated state(s): GH GM KE LS MW SD SL SZ UG ZW AM AZ BY KG KZ MD RU TJ TM AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE BF BJ CF CG CI CM GA GN GW ML MR NE SN TD TG |
|
| DFPE | Request for preliminary examination filed prior to expiration of 19th month from priority date (pct application filed before 20040101) | ||
| 121 | Ep: the epo has been informed by wipo that ep was designated in this application | ||
| WWP | Wipo information: published in national office |
Ref document number: 1999937436 Country of ref document: EP |
|
| REG | Reference to national code |
Ref country code: DE Ref legal event code: 8642 |
|
| WWW | Wipo information: withdrawn in national office |
Ref document number: 1999937436 Country of ref document: EP |