US20130125101A1 - Hostable compiler utilizing type information from a host applciation - Google Patents
Hostable compiler utilizing type information from a host applciation Download PDFInfo
- Publication number
- US20130125101A1 US20130125101A1 US13/293,150 US201113293150A US2013125101A1 US 20130125101 A1 US20130125101 A1 US 20130125101A1 US 201113293150 A US201113293150 A US 201113293150A US 2013125101 A1 US2013125101 A1 US 2013125101A1
- Authority
- US
- United States
- Prior art keywords
- type
- compiler
- host application
- hostable
- computer
- 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
- 238000000034 method Methods 0.000 claims abstract description 44
- 230000014509 gene expression Effects 0.000 claims abstract description 33
- 238000004891 communication Methods 0.000 claims description 12
- 239000012634 fragment Substances 0.000 claims description 10
- 238000010586 diagram Methods 0.000 description 8
- 238000004590 computer program Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
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/436—Semantic checking
- G06F8/437—Type checking
Definitions
- Extending the functionality of a software application may be easier than creating a new software application that has the additional capabilities.
- An extension programming language is often embedded in an existing software application so that additional program code may be added to the software application to provide additional capabilities.
- the extension programming language may be a scripting language whose interpreter is embedded as a library into the software application.
- the scripting language code is interpreted at runtime thereby bypassing compilation.
- the additional capabilities may be incorporated into the software application quickly and in a cost-efficient way.
- the runtime performance of the software application degrades due to the additional time consumed by the scripting language interpreter.
- semantic errors are not detected before execution of the software application thereby increasing the likelihood of erroneous calculations.
- a host application may be configured to execute interpreted source code and to utilize a hostable compiler to execute compiled source code.
- the hostable compiler runs as a plugin to the host application.
- the host application and the hostable compiler exchange data through an interface that allows the hostable compiler to receive type information pertaining to the value of expressions used in the interpreted source code. This type information may then be used by the hostable compiler in the compilation of the compiled source code to infer a type for the value of an expression not explicitly declared in the compiled source code yet associated with a value in the interpreted source code.
- FIG. 1 illustrates an exemplary system having a hostable compiler utilizing type information from a host application.
- FIG. 2 is a flow diagram illustrating an exemplary method of a hostable compiler and a host application.
- FIG. 3 is a flow diagram illustrating an exemplary compilation process.
- FIG. 4 is a block diagram illustrating a first operating environment.
- FIG. 5 is a block diagram illustrating an exemplary computing device.
- FIG. 6 is a block diagram illustrating a second operating environment.
- Various embodiments are directed to a compiler configured to execute within the same process as a host application.
- the compiler may be associated with a strongly typed functional programming language that supports type inference.
- the software application may execute source code written in an interpreted programming language and source code written in a strongly typed functional programming language.
- the hostable compiler includes an interface that receives type information from the host application pertaining to data elements used in the interpreted source code. The hostable compiler is then able to utilize this type information to infer a type for values of expressions missing an associated type during the compilation of the compiled source code.
- Data used by a software application is classified in accordance with a type.
- a type identifies an attribute associated with the data such as integer, Boolean, floating point, character, array and the like. Every data element used in a program, such as a variable, constant, method, and expression that generates a value, has a type. Every method has a type for its input parameters and its return value. Types are used to ensure that operations are performed without errors thereby guaranteeing the runtime behavior of the software application.
- a compiler performs type checking to verify that the type of a value of an expression is compatible and consistent with the type system of the programming language.
- a type system is the set of types supported by a programming language and the relationships between the types and elements of the programming language.
- the compiler performs type checking using the type system of a programming language to verify that the source code is in compliance with the type system of the programming language.
- Type checking may be performed during compilation and is referred to as static typing.
- Programming languages performing static typing are referred to as strongly type languages.
- Examples of strongly typed languages are functional programming languages, such as C# and F#, as well as Java, Fortran, Ada, Pascal, Visual Basic for Applications, and the like.
- Type checking may be performed during runtime and is referred to as dynamic typing.
- Programming languages performing dynamic typing are referred to as dynamic type languages and include Lisp, JavaScript, Prolog, Perl, Luna, and the like.
- Some programming languages support type inference which is when a compiler infers a missing type based on contextual information. For example, the value of an expression may not have a declared type yet the two operands in the expression are associated with an integer type. From the context of the expression using two integer operands, the compiler may infer an integer type as the type of the value of the expression.
- a type environment is the set of type systems known by the compiler.
- the type environment typically includes the types explicitly declared in the source code.
- the source code may contain a type declarlation, int x, y, z, which declares variables x, y, and z with an integer type.
- the source code may reference external types which are also included in the type environment.
- the source code may contain a code segment, #include types.dll, where types.dll contains a type declaration, int a,b,c, that declares variables a, b, and c with an integer type.
- the compiler described herein utilizes the types declared in an interpreted source code to infer a missing type for the value of an expression used in the compiled source code executing within the host application process.
- FIG. 1 illustrates a block diagram of a host application 102 .
- the system 100 as shown in FIG. 1 has a limited number of elements in a certain configuration, it may be appreciated that the system 100 may include more or less elements in alternate configurations as desired for a given implementation.
- the host application 102 may contain internal data structures 104 , an interface 106 , and a hostable compiler 108 .
- the host application 102 may be a software application configured to execute program code.
- the host application 102 may be a web browser that executes the HTML code representing a web page.
- the host application's internal data structures 104 may represent the HTML code and metadata including type information pertaining to the data elements in the HTML code.
- the interface 106 may be used to transfer data, such as the host application's internal data structures 104 , from the host application 102 to the hostable compiler 108 .
- the interface 106 may contain a host application plugin application programming interface (API) 110 and a hostable compiler plugin interface 112 .
- the host application plugin API 110 packages the host application's data structures into a format that is recognizable by the hostable compiler.
- the hostable compiler plugin interface 112 receives the packaged data structures and converts them into a format recognizable by the hostable compiler 108 .
- the host application 102 , the interface 106 , and the hostable compiler 108 may be a sequence of computer program instructions, that when executed by a processor, causes the processor to perform methods and/or operations in accordance with a prescribed task.
- the host application 102 , the interface 106 , and the hostable compiler 108 may be implemented as program code, programs, procedures, module, code segments, program stacks, middleware, firmware, methods, routines, and so on.
- the executable computer program instructions may be implemented according to a predefined computer language, manner or syntax, for instructing a computer to perform a certain function.
- the instructions may be implemented using any suitable high-level, low-level, object-oriented, visual, compiled and/or interpreted programming language.
- the hostable compiler 108 may be a compiler configured to execute within the .NET framework.
- the .NET framework is a common software execution environment that provides tools and libraries to execute applications written in different programming languages.
- the .NET framework includes a Common Language Runtime (CLR), a Common Type System (CTS), and a Framework Class Library (FCL).
- CLR is a common virtual machine that converts intermediate language (IL) code or managed code into machine instructions of an intended target processor.
- the CTS is a standardized common type system that defines how types are declared, managed, and used in the runtime and supports any programming language within the .NET framework.
- the FCL is a large library of reusable data elements such as classes, namespaces, interfaces, and the like.
- the hostable compiler 108 may be a configured as a plugin to the host application 102 .
- the hostable compiler 108 registers with the host application 102 to determine a protocol for communicating with the host application 102 .
- the protocol may specify the data that the hostable compiler needs from the host application 102 and the manner in which data is passed between the hostable compiler 108 and host application 102 .
- the protocol may consist of the host application plugin API 110 and the hostable compiler plugin interface 112 .
- the host application 102 may utilize the host application plugin API 110 to package some of the host application's internal data structures 104 into a format recognizable by the hostable compiler 108 .
- the format may be a Common Object Model (COM) object, an Extensible Markup Language (XML) text, a Java Script Object Notation (JSON) file, a .NET object, or any other predefined format that is agreed upon between the host application 102 and the hostable compiler 108 .
- COM Common Object Model
- XML Extensible Markup Language
- JSON Java Script Object Notation
- the hostable compiler plugin interface 112 may convert the COM object into a .NET object that may be utilized by the hostable compiler 108 .
- Common Object Model is a common data format used to model objects which is recognized by different programming environments.
- the COM object may represent a file of source code, code fragments, and so forth.
- a COM object is recognized within the .NET framework.
- the COM object is associated with metadata that describes a type associated with each data element contained therein.
- FIG. 2 illustrates a flow diagram of an exemplary method. It should be noted that the method 200 may be representative of some or all of the operations executed by one or more embodiments described herein and that the method can include more or less operations than that which is described in FIG. 2 .
- the hostable compiler 108 may register with the host application 102 as a plugin and request that the host application 102 pass certain of the host application's internal data structures 104 to the hostable compiler 108 .
- the host application 102 may package the data structures 104 into a format which is passed to the host application through the hosted application plugin API 110 (block 202 ).
- the packaged data structures 104 may be passed as a COM object 204 through an API call (block 202 ).
- the hostable compiler plugin interface 112 maps the data elements in the COM object 204 into a corresponding .NET type.
- the hostable compiler plugin interface 112 may utilize System.Reflection.Emit classes available in the FCR library of the .NET framework to associate .NET types 206 to each data element in the .COM object.
- the .NET types 206 may then be included into the type environment used by the hostable compiler 108 (block 208 ).
- the host application 102 may then provide the compilation functions of the hostable compiler 108 as a feature of the host application 102 .
- Source code 206 requiring compilation may then be passed to the hostable compiler 108 .
- the hostable compiler 108 compiles the source code into machine code using a type environment that includes the type information obtained from the host application 102 (block 210 ). If compilation errors are detected (block 212 -yes), then the compilation error may be passed to the hostable compiler plugin interface 112 .
- the hostable compiler plugin interface 112 converts the error message into a COM object 214 which is passed to the host application 102 through the host application plugin API 110 (block 222 ).
- the machine code is executed (block 216 ) and a return value is computed (block 218 ).
- the hostable compiler plugin interface 112 passes the return value back as a COM object 220 to the host application 102 by calling the host application plugin API 110 (block 224 ).
- the host application 102 is a web browser and the hostable compiler 108 is a F# compiler.
- the F# compiler is configured to execute as a plugin to the web browser.
- the F# compiler and the web browser agree to a protocol for exchanging data which utilizes a web browser plugin API and a F# compiler plugin interface.
- the F# compiler requests that the web browser provide to the F# compiler, the HyperText Markup Language (HTML) text of a web page prior to the browser rendering the web page.
- the web browser may pass the HTML text to the F# compiler plugin interface by packaging the HTML text as a COM object which is passed to the F# compiler plugin through an API call.
- HTML HyperText Markup Language
- the F# compiler plugin interface receives the COM object and finds a corresponding .NET type for each data element in the HTML text which is then represented by a new .NET object. This conversion may be facilitated using System.Refllection.Emit classes.
- the .NET object and its corresponding string of .NET types are included in the type environment that the F# compiler uses when performing type checking and type inference.
- F# source code may contain data elements that have not been declared yet may have been used in the web page's HTML text.
- the F# compiler may use the type information from the HTML text to infer the missing types of values of expressions used in the F# source code that are not declared.
- FIG. 3 illustrates an exemplary method that may be used by the hostable compiler in compiling source code.
- the hostable compiler performs lexical analysis which scans the source code line-by-line and character-by-character to create a string of tokens (block 302 ).
- the parsing phase takes the string of tokens and generates an abstract syntax tree representing the syntactic structure of the program in accordance with the grammar of the programming language (block 304 ).
- the semantic analysis phase takes the abstract syntax tree and checks the program for semantic correctness (block 306 ).
- typing checking and type inference is performed.
- Type checking ensures that expressions in the abstract syntax tree are in compliance with the grammar of the programming language.
- type inference is used to deduce a type for the value of an expression.
- the type inference process may utilize the type environment 320 which contains type information from the host application 322 , type information from the source code 324 , and type information from external references 326 (block 308 ).
- a symbol table may be generated containing the data elements used in the source code and their corresponding type.
- the abstract syntax tree and the symbol table take may then be used to generate an intermediate language assembly code of the source code (block 310 ).
- Code optimizations may be performed on the intermediate language assembly code, register allocations may be made and executable machine code may then be generated (block 312 ).
- FIG. 4 illustrates a first operating environment 400 .
- the operating environment 400 is exemplary and is not intended to suggest any limitation as to the functionality of the embodiments.
- the embodiment may be applied to an operating environment 400 having one or more client(s) 402 in communication through a communications framework 404 with one or more server(s) 406 .
- the operating environment 400 may be configured in a network environment, a distributed environment, a multiprocessor environment, or as a stand-alone computing device having access to remote and/or local storage devices.
- a client 402 may be embodied as a hardware device, a software module, or as a combination thereof. Examples of such hardware devices may include, but are not limited to, a computer (e.g., server, personal computer, laptop, etc.), a cell phone, a personal digital assistant, or any type of computing device, and the like.
- a client 402 may also be embodied as a software module having instructions that execute in a single execution path, multiple concurrent execution paths (e.g., thread, process, etc.), or in any other manner.
- a server 406 may be embodied as a hardware device, a software module, or as a combination thereof. Examples of such hardware devices may include, but are not limited to, a computer (e.g., server, personal computer, laptop, etc.), a cell phone, a personal digital assistant, or any type of computing device, and the like.
- a server 406 may also be embodied as a software module having instructions that execute in a single execution path, multiple concurrent execution paths (e.g., thread, process, etc.), or in any other manner.
- the communications framework 404 facilitates communications between the client 402 and the server 406 .
- the communications framework 404 may embody any type of communications medium, such as wired or wireless networks, utilizing any communication protocol.
- Each client(s) 402 may be coupled to one or more client data store(s) 408 that store information local to the client 402 .
- Each server(s) 406 may be coupled to one or more server data store(s) 410 that store information local to the server 406 .
- FIG. 5 illustrates a block diagram of an exemplary client 402 .
- the client 402 may have a processor 502 , a user input interface 504 , a memory 506 , and a network interface 508 .
- the processor 502 may be any commercially available processor and may include dual microprocessors and multi-processor architectures.
- the user input interface 504 facilitates communications between the client 402 and input devices, such as a keyboard, mouse, touch screen, etc.
- the network interface 508 facilitates wired or wireless communications between the client and a communications framework.
- the memory 506 may be any computer-readable storage media that may store executable procedures, applications, and data.
- the computer-readable media does not pertain to propagated signals, such as modulated data signals transmitted through a carrier wave. It may be any type of memory device (e.g., random access memory, read-only memory, etc.), magnetic storage, volatile storage, non-volatile storage, optical storage, DVD, CD, floppy disk drive, and the like.
- the memory 506 may also include one or more external storage devices or remotely located storage devices.
- the memory may 506 contain instructions and data as follows:
- FIG. 6 illustrates a second operating environment.
- a system 600 having client 602 , client 604 , web site or server 608 , all coupled to a communication framework 606 .
- Client 602 illustrates a configuration where the hostable compiler is an F# compiler and the host application is a web browser.
- Client 604 illustrates a configuration where the hostable compiler is an F# compiler and the host application is an excel spreadsheet.
- operating environment 600 is shown in a certain arrangement, it is understood that the operating environment 600 may include more or less elements in alternate arrangements as desired for a given implementation.
- clients 602 and 604 are shown in a certain configuration, it is understood that client 602 and client 604 may include more or less elements in alternate configurations as desired for a given implementation.
- operating environment 600 is not constrained to the use of client 602 and client 604 together. The embodiments may utilize any configuration of clients for an intended implementation.
- Client 602 may have a web browser 612 that includes a web browser application (web browser app) 614 and an F# compiler 620 .
- the web browser application 614 has a plugin API 616 that interacts with a compiler plugin interface 618 .
- the F# compiler 620 runs in the same process as the web browser 612 .
- the web browser 612 may navigate to web site 608 and fetch the web site's HTML web page which may be rendered onto display 622 .
- the web site's HTML web page may contain an expression that is declared with a particular type.
- the web browser's internal data structures that are used to represent the web site's HTML web page may be passed to the F# compiler 620 .
- the web page may then accept user input in the form of F# source code 624 .
- the web browser 612 may pass the F# source code 624 to the F# compiler 620 , as noted above.
- the F# compiler 620 compiles the F# source code 624 and then executes the F# code, if there are no compilation errors.
- the web browser 612 may receive either a compilation error message or a return value 626 from the F# compiler 620 which the web browser 612 displays.
- Client 604 may have an excel spreadsheet 638 that includes an excel application 630 and an F# compiler 636 .
- the excel application 630 has a plugin API 632 that interacts with a compiler plugin interface 634 .
- the F# compiler 636 runs in the same process as the excel application 630 .
- the excel application 630 may fetch an excel spreadsheet 638 which may be rendered onto a display 640 .
- the excel spreadsheet may contain an expression that is declared with a particular type.
- the excel application's internal data structures are used to represent the excel spreadsheet that may be passed to the F# compiler.
- the excel spreadsheet 638 may then accept user input in the form of F# source code 642 .
- the excel app 630 may pass the F# source code 642 to the F# compiler 636 , as noted above.
- the F# compiler 636 compiles the F# source code 642 , as noted above, and then executes the F# code, if there are no compilation errors.
- the excel app 630 receives a compilation error message or a return value 644 from the F# compiler 636 which the excel app 630 displays in the excel spreadsheet 638 .
- Various embodiments may be implemented using hardware elements, software elements, or a combination of both.
- hardware elements may include devices, components, processors, microprocessors, circuits, circuit elements, integrated circuits, application specific integrated circuits, programmable logic devices, digital signal processors, field programmable gate arrays, memory units, logic gates and so forth.
- software elements may include software components, programs, applications, computer programs, application programs, system programs, machine programs, operating system software, middleware, firmware, software modules, routines, subroutines, functions, methods, procedures, software interfaces, application program interfaces, instruction sets, computing code, code segments, and any combination thereof.
- Determining whether an embodiment is implemented using hardware elements and/or software elements may vary in accordance with any number of factors, such as desired computational rate, power levels, bandwidth, computing time, load balance, memory resources, data bus speeds and other design or performance constraints, as desired for a given implementation.
- Some embodiments may comprise a storage medium to store instructions or logic.
- Examples of a storage medium may include one or more types of computer-readable storage media capable of storing electronic data, including volatile memory or non-volatile memory, removable or non-removable memory, erasable or non-erasable memory, writeable or re-writeable memory, and so forth.
- Examples of the logic may include various software elements, such as programs, procedures, module, applications, code segments, program stacks, middleware, firmware, methods, routines, and so on.
- a computer-readable storage medium may store executable computer program instructions that, when executed by a processor, cause the processor to perform methods and/or operations in accordance with the described embodiments.
- the executable computer program instructions may be implemented according to a predefined computer language, manner or syntax, for instructing a computer to perform a certain function.
- the instructions may be implemented using any suitable high-level, low-level, object-oriented, visual, compiled and/or interpreted programming language.
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
Description
- Extending the functionality of a software application, in some cases, may be easier than creating a new software application that has the additional capabilities. An extension programming language is often embedded in an existing software application so that additional program code may be added to the software application to provide additional capabilities. The extension programming language may be a scripting language whose interpreter is embedded as a library into the software application. The scripting language code is interpreted at runtime thereby bypassing compilation. In this manner, the additional capabilities may be incorporated into the software application quickly and in a cost-efficient way. However, the runtime performance of the software application degrades due to the additional time consumed by the scripting language interpreter. In addition, semantic errors are not detected before execution of the software application thereby increasing the likelihood of erroneous calculations.
- This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
- A host application may be configured to execute interpreted source code and to utilize a hostable compiler to execute compiled source code. The hostable compiler runs as a plugin to the host application. The host application and the hostable compiler exchange data through an interface that allows the hostable compiler to receive type information pertaining to the value of expressions used in the interpreted source code. This type information may then be used by the hostable compiler in the compilation of the compiled source code to infer a type for the value of an expression not explicitly declared in the compiled source code yet associated with a value in the interpreted source code.
- These and other features and advantages will be apparent from a reading of the following detailed description and a review of the associated drawings. It is to be understood that both the foregoing general description and the following detailed description are explanatory only and are not restrictive of aspects as claimed.
-
FIG. 1 illustrates an exemplary system having a hostable compiler utilizing type information from a host application. -
FIG. 2 is a flow diagram illustrating an exemplary method of a hostable compiler and a host application. -
FIG. 3 is a flow diagram illustrating an exemplary compilation process. -
FIG. 4 is a block diagram illustrating a first operating environment. -
FIG. 5 is a block diagram illustrating an exemplary computing device. -
FIG. 6 is a block diagram illustrating a second operating environment. - Various embodiments are directed to a compiler configured to execute within the same process as a host application. The compiler may be associated with a strongly typed functional programming language that supports type inference. The software application may execute source code written in an interpreted programming language and source code written in a strongly typed functional programming language. The hostable compiler includes an interface that receives type information from the host application pertaining to data elements used in the interpreted source code. The hostable compiler is then able to utilize this type information to infer a type for values of expressions missing an associated type during the compilation of the compiled source code.
- Data used by a software application is classified in accordance with a type. A type identifies an attribute associated with the data such as integer, Boolean, floating point, character, array and the like. Every data element used in a program, such as a variable, constant, method, and expression that generates a value, has a type. Every method has a type for its input parameters and its return value. Types are used to ensure that operations are performed without errors thereby guaranteeing the runtime behavior of the software application.
- A compiler performs type checking to verify that the type of a value of an expression is compatible and consistent with the type system of the programming language. A type system is the set of types supported by a programming language and the relationships between the types and elements of the programming language. The compiler performs type checking using the type system of a programming language to verify that the source code is in compliance with the type system of the programming language.
- Type checking may be performed during compilation and is referred to as static typing. Programming languages performing static typing are referred to as strongly type languages. Examples of strongly typed languages are functional programming languages, such as C# and F#, as well as Java, Fortran, Ada, Pascal, Visual Basic for Applications, and the like. Type checking may be performed during runtime and is referred to as dynamic typing. Programming languages performing dynamic typing are referred to as dynamic type languages and include Lisp, JavaScript, Prolog, Perl, Luna, and the like.
- Some programming languages support type inference which is when a compiler infers a missing type based on contextual information. For example, the value of an expression may not have a declared type yet the two operands in the expression are associated with an integer type. From the context of the expression using two integer operands, the compiler may infer an integer type as the type of the value of the expression.
- A type environment is the set of type systems known by the compiler. The type environment typically includes the types explicitly declared in the source code. For example, the source code may contain a type declarlation, int x, y, z, which declares variables x, y, and z with an integer type. In addition, the source code may reference external types which are also included in the type environment. For example, the source code may contain a code segment, #include types.dll, where types.dll contains a type declaration, int a,b,c, that declares variables a, b, and c with an integer type. In addition, the compiler described herein utilizes the types declared in an interpreted source code to infer a missing type for the value of an expression used in the compiled source code executing within the host application process.
- Attention now turns to a discussion of an exemplary system utilizing a hostable compiler.
FIG. 1 illustrates a block diagram of ahost application 102. Although thesystem 100 as shown inFIG. 1 has a limited number of elements in a certain configuration, it may be appreciated that thesystem 100 may include more or less elements in alternate configurations as desired for a given implementation. - The
host application 102 may containinternal data structures 104, aninterface 106, and ahostable compiler 108. Thehost application 102 may be a software application configured to execute program code. For example, thehost application 102 may be a web browser that executes the HTML code representing a web page. The host application'sinternal data structures 104 may represent the HTML code and metadata including type information pertaining to the data elements in the HTML code. - The
interface 106 may be used to transfer data, such as the host application'sinternal data structures 104, from thehost application 102 to thehostable compiler 108. Theinterface 106 may contain a host application plugin application programming interface (API) 110 and a hostablecompiler plugin interface 112. The hostapplication plugin API 110 packages the host application's data structures into a format that is recognizable by the hostable compiler. The hostablecompiler plugin interface 112 receives the packaged data structures and converts them into a format recognizable by thehostable compiler 108. - The
host application 102, theinterface 106, and thehostable compiler 108 may be a sequence of computer program instructions, that when executed by a processor, causes the processor to perform methods and/or operations in accordance with a prescribed task. Thehost application 102, theinterface 106, and thehostable compiler 108 may be implemented as program code, programs, procedures, module, code segments, program stacks, middleware, firmware, methods, routines, and so on. The executable computer program instructions may be implemented according to a predefined computer language, manner or syntax, for instructing a computer to perform a certain function. The instructions may be implemented using any suitable high-level, low-level, object-oriented, visual, compiled and/or interpreted programming language. - In several embodiments, the
hostable compiler 108 may be a compiler configured to execute within the .NET framework. The .NET framework is a common software execution environment that provides tools and libraries to execute applications written in different programming languages. The .NET framework includes a Common Language Runtime (CLR), a Common Type System (CTS), and a Framework Class Library (FCL). The CLR is a common virtual machine that converts intermediate language (IL) code or managed code into machine instructions of an intended target processor. The CTS is a standardized common type system that defines how types are declared, managed, and used in the runtime and supports any programming language within the .NET framework. The FCL is a large library of reusable data elements such as classes, namespaces, interfaces, and the like. - In several embodiments, the
hostable compiler 108 may be a configured as a plugin to thehost application 102. As a plugin, thehostable compiler 108 registers with thehost application 102 to determine a protocol for communicating with thehost application 102. The protocol may specify the data that the hostable compiler needs from thehost application 102 and the manner in which data is passed between thehostable compiler 108 andhost application 102. The protocol may consist of the hostapplication plugin API 110 and the hostablecompiler plugin interface 112. - The
host application 102 may utilize the hostapplication plugin API 110 to package some of the host application'sinternal data structures 104 into a format recognizable by thehostable compiler 108. The format may be a Common Object Model (COM) object, an Extensible Markup Language (XML) text, a Java Script Object Notation (JSON) file, a .NET object, or any other predefined format that is agreed upon between thehost application 102 and thehostable compiler 108. - For example, in the case of a
hostable compiler 108 configured to support the .NET framework, the hostablecompiler plugin interface 112 may convert the COM object into a .NET object that may be utilized by thehostable compiler 108. Common Object Model is a common data format used to model objects which is recognized by different programming environments. The COM object may represent a file of source code, code fragments, and so forth. A COM object is recognized within the .NET framework. The COM object is associated with metadata that describes a type associated with each data element contained therein. - Attention now turns to a discussion of the operations of a system utilizing the host application and the hostable compiler. Operations for the embodiments may be further described with reference to various exemplary methods. It may be appreciated that the representative methods do not necessarily have to be executed in the order presented, or in any particular order, unless otherwise indicated. Moreover, various activities described with respect to the methods can be executed in serial or parallel fashion, or any combination of serial and parallel operations. The methods can be implemented using one or more hardware elements and/or software elements of the described embodiments or alternative embodiments as desired for a given set of design and performance constraints. For example, the methods may be implemented as logic (e.g., computer program instructions) for execution by a logic device (e.g., a general-purpose or specific-purpose computer).
-
FIG. 2 illustrates a flow diagram of an exemplary method. It should be noted that themethod 200 may be representative of some or all of the operations executed by one or more embodiments described herein and that the method can include more or less operations than that which is described inFIG. 2 . - The
hostable compiler 108 may register with thehost application 102 as a plugin and request that thehost application 102 pass certain of the host application'sinternal data structures 104 to thehostable compiler 108. Thehost application 102 may package thedata structures 104 into a format which is passed to the host application through the hosted application plugin API 110 (block 202). In an embodiment, the packageddata structures 104 may be passed as aCOM object 204 through an API call (block 202). - The hostable
compiler plugin interface 112 maps the data elements in theCOM object 204 into a corresponding .NET type. The hostablecompiler plugin interface 112 may utilize System.Reflection.Emit classes available in the FCR library of the .NET framework to associate .NET types 206 to each data element in the .COM object. The .NET types 206 may then be included into the type environment used by the hostable compiler 108 (block 208). - The
host application 102 may then provide the compilation functions of thehostable compiler 108 as a feature of thehost application 102.Source code 206 requiring compilation may then be passed to thehostable compiler 108. Thehostable compiler 108 compiles the source code into machine code using a type environment that includes the type information obtained from the host application 102 (block 210). If compilation errors are detected (block 212-yes), then the compilation error may be passed to the hostablecompiler plugin interface 112. The hostablecompiler plugin interface 112 converts the error message into aCOM object 214 which is passed to thehost application 102 through the host application plugin API 110 (block 222). - If no compilation errors are detected (block 212—no), then the machine code is executed (block 216) and a return value is computed (block 218). The hostable
compiler plugin interface 112 passes the return value back as aCOM object 220 to thehost application 102 by calling the host application plugin API 110 (block 224). - For example, assume that the
host application 102 is a web browser and thehostable compiler 108 is a F# compiler. The F# compiler is configured to execute as a plugin to the web browser. The F# compiler and the web browser agree to a protocol for exchanging data which utilizes a web browser plugin API and a F# compiler plugin interface. The F# compiler requests that the web browser provide to the F# compiler, the HyperText Markup Language (HTML) text of a web page prior to the browser rendering the web page. The web browser may pass the HTML text to the F# compiler plugin interface by packaging the HTML text as a COM object which is passed to the F# compiler plugin through an API call. - The F# compiler plugin interface receives the COM object and finds a corresponding .NET type for each data element in the HTML text which is then represented by a new .NET object. This conversion may be facilitated using System.Refllection.Emit classes. The .NET object and its corresponding string of .NET types are included in the type environment that the F# compiler uses when performing type checking and type inference.
- A user may enter F# source code through the web browser that needs to be compiled. The F# source code may contain data elements that have not been declared yet may have been used in the web page's HTML text. During the compilation process, the F# compiler may use the type information from the HTML text to infer the missing types of values of expressions used in the F# source code that are not declared.
- Attention now turns to a discussion of the hostable compiler's use of the type information in the compilation process.
FIG. 3 illustrates an exemplary method that may be used by the hostable compiler in compiling source code. The hostable compiler performs lexical analysis which scans the source code line-by-line and character-by-character to create a string of tokens (block 302). The parsing phase takes the string of tokens and generates an abstract syntax tree representing the syntactic structure of the program in accordance with the grammar of the programming language (block 304). - The semantic analysis phase takes the abstract syntax tree and checks the program for semantic correctness (block 306). In particular, in the semantic analysis phase, typing checking and type inference is performed. Type checking ensures that expressions in the abstract syntax tree are in compliance with the grammar of the programming language. For those data elements and expressions not explicitly declared with a type, type inference is used to deduce a type for the value of an expression. The type inference process may utilize the
type environment 320 which contains type information from thehost application 322, type information from thesource code 324, and type information from external references 326 (block 308). A symbol table may be generated containing the data elements used in the source code and their corresponding type. - The abstract syntax tree and the symbol table take may then be used to generate an intermediate language assembly code of the source code (block 310). Code optimizations may be performed on the intermediate language assembly code, register allocations may be made and executable machine code may then be generated (block 312).
- Attention now turns to a discussion of exemplary operating environments. In order to provide a context for the subject matter disclosed herein, the following discussion and associated figures, provide a brief general description of suitable operating environments in which various embodiments may be implemented.
-
FIG. 4 illustrates afirst operating environment 400. It should be noted that the operatingenvironment 400 is exemplary and is not intended to suggest any limitation as to the functionality of the embodiments. The embodiment may be applied to anoperating environment 400 having one or more client(s) 402 in communication through acommunications framework 404 with one or more server(s) 406. The operatingenvironment 400 may be configured in a network environment, a distributed environment, a multiprocessor environment, or as a stand-alone computing device having access to remote and/or local storage devices. - A
client 402 may be embodied as a hardware device, a software module, or as a combination thereof. Examples of such hardware devices may include, but are not limited to, a computer (e.g., server, personal computer, laptop, etc.), a cell phone, a personal digital assistant, or any type of computing device, and the like. Aclient 402 may also be embodied as a software module having instructions that execute in a single execution path, multiple concurrent execution paths (e.g., thread, process, etc.), or in any other manner. - A
server 406 may be embodied as a hardware device, a software module, or as a combination thereof. Examples of such hardware devices may include, but are not limited to, a computer (e.g., server, personal computer, laptop, etc.), a cell phone, a personal digital assistant, or any type of computing device, and the like. Aserver 406 may also be embodied as a software module having instructions that execute in a single execution path, multiple concurrent execution paths (e.g., thread, process, etc.), or in any other manner. - The
communications framework 404 facilitates communications between theclient 402 and theserver 406. Thecommunications framework 404 may embody any type of communications medium, such as wired or wireless networks, utilizing any communication protocol. Each client(s) 402 may be coupled to one or more client data store(s) 408 that store information local to theclient 402. Each server(s) 406 may be coupled to one or more server data store(s) 410 that store information local to theserver 406. -
FIG. 5 illustrates a block diagram of anexemplary client 402. Theclient 402 may have aprocessor 502, a user input interface 504, amemory 506, and anetwork interface 508. Theprocessor 502 may be any commercially available processor and may include dual microprocessors and multi-processor architectures. The user input interface 504 facilitates communications between theclient 402 and input devices, such as a keyboard, mouse, touch screen, etc. Thenetwork interface 508 facilitates wired or wireless communications between the client and a communications framework. - The
memory 506 may be any computer-readable storage media that may store executable procedures, applications, and data. The computer-readable media does not pertain to propagated signals, such as modulated data signals transmitted through a carrier wave. It may be any type of memory device (e.g., random access memory, read-only memory, etc.), magnetic storage, volatile storage, non-volatile storage, optical storage, DVD, CD, floppy disk drive, and the like. Thememory 506 may also include one or more external storage devices or remotely located storage devices. The memory may 506 contain instructions and data as follows: -
- an
operating system 510; - a
host application 102 having a host applicationinternal data structures 104, a hostapplication plugin API 110, a hostablecompiler plugin interface 112, and ahostable compiler 108; and - various other applications and
data 512.
- an
-
FIG. 6 illustrates a second operating environment. Referring toFIG. 6 , there is shown a system 600 havingclient 602,client 604, web site orserver 608, all coupled to acommunication framework 606.Client 602 illustrates a configuration where the hostable compiler is an F# compiler and the host application is a web browser.Client 604 illustrates a configuration where the hostable compiler is an F# compiler and the host application is an excel spreadsheet. - It should be noted that although operating environment 600 is shown in a certain arrangement, it is understood that the operating environment 600 may include more or less elements in alternate arrangements as desired for a given implementation. Likewise, although
clients client 602 andclient 604 may include more or less elements in alternate configurations as desired for a given implementation. For example, operating environment 600 is not constrained to the use ofclient 602 andclient 604 together. The embodiments may utilize any configuration of clients for an intended implementation. -
Client 602 may have aweb browser 612 that includes a web browser application (web browser app) 614 and anF# compiler 620. Theweb browser application 614 has aplugin API 616 that interacts with acompiler plugin interface 618. TheF# compiler 620 runs in the same process as theweb browser 612. - The
web browser 612 may navigate toweb site 608 and fetch the web site's HTML web page which may be rendered ontodisplay 622. The web site's HTML web page may contain an expression that is declared with a particular type. The web browser's internal data structures that are used to represent the web site's HTML web page may be passed to theF# compiler 620. The web page may then accept user input in the form ofF# source code 624. Theweb browser 612 may pass theF# source code 624 to theF# compiler 620, as noted above. TheF# compiler 620 compiles theF# source code 624 and then executes the F# code, if there are no compilation errors. Theweb browser 612 may receive either a compilation error message or areturn value 626 from theF# compiler 620 which theweb browser 612 displays. -
Client 604 may have an excel spreadsheet 638 that includes an excelapplication 630 and an F# compiler 636. The excelapplication 630 has aplugin API 632 that interacts with acompiler plugin interface 634. The F# compiler 636 runs in the same process as the excelapplication 630. - The excel
application 630 may fetch an excel spreadsheet 638 which may be rendered onto adisplay 640. The excel spreadsheet may contain an expression that is declared with a particular type. The excel application's internal data structures are used to represent the excel spreadsheet that may be passed to the F# compiler. The excel spreadsheet 638 may then accept user input in the form ofF# source code 642. The excelapp 630 may pass theF# source code 642 to the F# compiler 636, as noted above. The F# compiler 636 compiles theF# source code 642, as noted above, and then executes the F# code, if there are no compilation errors. The excelapp 630 receives a compilation error message or areturn value 644 from the F# compiler 636 which the excelapp 630 displays in the excel spreadsheet 638. - Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.
- Various embodiments may be implemented using hardware elements, software elements, or a combination of both. Examples of hardware elements may include devices, components, processors, microprocessors, circuits, circuit elements, integrated circuits, application specific integrated circuits, programmable logic devices, digital signal processors, field programmable gate arrays, memory units, logic gates and so forth. Examples of software elements may include software components, programs, applications, computer programs, application programs, system programs, machine programs, operating system software, middleware, firmware, software modules, routines, subroutines, functions, methods, procedures, software interfaces, application program interfaces, instruction sets, computing code, code segments, and any combination thereof. Determining whether an embodiment is implemented using hardware elements and/or software elements may vary in accordance with any number of factors, such as desired computational rate, power levels, bandwidth, computing time, load balance, memory resources, data bus speeds and other design or performance constraints, as desired for a given implementation.
- Some embodiments may comprise a storage medium to store instructions or logic. Examples of a storage medium may include one or more types of computer-readable storage media capable of storing electronic data, including volatile memory or non-volatile memory, removable or non-removable memory, erasable or non-erasable memory, writeable or re-writeable memory, and so forth. Examples of the logic may include various software elements, such as programs, procedures, module, applications, code segments, program stacks, middleware, firmware, methods, routines, and so on. In an embodiment, for example, a computer-readable storage medium may store executable computer program instructions that, when executed by a processor, cause the processor to perform methods and/or operations in accordance with the described embodiments. The executable computer program instructions may be implemented according to a predefined computer language, manner or syntax, for instructing a computer to perform a certain function. The instructions may be implemented using any suitable high-level, low-level, object-oriented, visual, compiled and/or interpreted programming language.
Claims (20)
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/293,150 US9542168B2 (en) | 2011-11-10 | 2011-11-10 | Hostable compiler utilizing type information from a host application |
US15/401,497 US10521205B2 (en) | 2011-11-10 | 2017-01-09 | Hostable compiler utilizing type information from a host application |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/293,150 US9542168B2 (en) | 2011-11-10 | 2011-11-10 | Hostable compiler utilizing type information from a host application |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US15/401,497 Continuation US10521205B2 (en) | 2011-11-10 | 2017-01-09 | Hostable compiler utilizing type information from a host application |
Publications (2)
Publication Number | Publication Date |
---|---|
US20130125101A1 true US20130125101A1 (en) | 2013-05-16 |
US9542168B2 US9542168B2 (en) | 2017-01-10 |
Family
ID=48281925
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US13/293,150 Active 2032-03-23 US9542168B2 (en) | 2011-11-10 | 2011-11-10 | Hostable compiler utilizing type information from a host application |
US15/401,497 Active 2032-09-09 US10521205B2 (en) | 2011-11-10 | 2017-01-09 | Hostable compiler utilizing type information from a host application |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US15/401,497 Active 2032-09-09 US10521205B2 (en) | 2011-11-10 | 2017-01-09 | Hostable compiler utilizing type information from a host application |
Country Status (1)
Country | Link |
---|---|
US (2) | US9542168B2 (en) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140019947A1 (en) * | 2012-07-10 | 2014-01-16 | Oracle International Corporation | System and method for supporting compatibility checking for lambda expression |
US20150100947A1 (en) * | 2013-10-04 | 2015-04-09 | Microsoft Corporation | Build-time resolving and type checking references |
US9417842B2 (en) * | 2013-03-01 | 2016-08-16 | Empire Technology Development Llc | Idempotent representation of numbers in extensible languages |
US9921857B1 (en) | 2017-02-06 | 2018-03-20 | Red Hat Israel, Ltd. | Compiler extension for correcting error messages |
US10095508B2 (en) | 2014-09-25 | 2018-10-09 | Oracle International Corporation | System and method for supporting dynamic deployment of executable code in a distributed computing environment |
US10129361B2 (en) | 2015-07-01 | 2018-11-13 | Oracle International Corporation | System and method for multi-version remote function execution control in a distributed computing environment |
CN111290760A (en) * | 2020-03-03 | 2020-06-16 | 北京字节跳动网络技术有限公司 | Application program compiling method and device, electronic equipment and storage medium |
CN111309335A (en) * | 2020-02-28 | 2020-06-19 | 腾讯音乐娱乐科技(深圳)有限公司 | Plug-in application compiling method and device and computer readable storage medium |
CN111538505A (en) * | 2020-04-23 | 2020-08-14 | 保定康强医疗器械制造有限公司 | Slitting program editing and grammar checking system |
US11016743B2 (en) * | 2012-08-09 | 2021-05-25 | Apple Inc. | Runtime state based code re-optimization |
WO2022165285A1 (en) * | 2021-01-29 | 2022-08-04 | The Trustees Of Dartmouth College | Multi-core processing and memory arrangement |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110308908B (en) * | 2018-03-20 | 2023-07-18 | 北京小米移动软件有限公司 | Method and device for generating configuration file of application and displaying application page and storage medium |
US10891217B2 (en) * | 2018-12-10 | 2021-01-12 | Sap Se | Optimizing test coverage based on actual use |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030225935A1 (en) * | 2002-05-30 | 2003-12-04 | Microsoft Corporation | Interoperability of objects between various platforms |
US20070055978A1 (en) * | 2005-09-06 | 2007-03-08 | Microsoft Corporation | Type inference and type-directed late binding |
US20070234288A1 (en) * | 2006-01-20 | 2007-10-04 | Aptana, Inc. | Type inference system and method |
US20080005547A1 (en) * | 2006-06-20 | 2008-01-03 | Papakipos Matthew N | Systems and methods for generating reference results using a parallel-processing computer system |
US20080320444A1 (en) * | 2007-06-21 | 2008-12-25 | Microsoft Corporation | Late bound programmatic assistance |
US20090251475A1 (en) * | 2008-04-08 | 2009-10-08 | Shailendra Mathur | Framework to integrate and abstract processing of multiple hardware domains, data types and format |
US20110016449A1 (en) * | 2009-07-17 | 2011-01-20 | Yitao Yao | Method and system for integrating java and javascript technologies |
US20120096449A1 (en) * | 2010-07-22 | 2012-04-19 | Junfeng Yang | Methods, Systems, and Media for Protecting Applications from Races |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5640558A (en) * | 1995-05-31 | 1997-06-17 | International Business Machines Corporation | Identifying and analyzing multiple level class relationships in an object oriented system by parsing source code without compilation |
US5875334A (en) * | 1995-10-27 | 1999-02-23 | International Business Machines Corporation | System, method, and program for extending a SQL compiler for handling control statements packaged with SQL query statements |
AU2002245226A1 (en) * | 2001-01-09 | 2002-07-24 | Topcoder, Inc. | Systems and methods for coding competitions |
US7966608B2 (en) * | 2005-10-26 | 2011-06-21 | Hewlett-Packard Development Company, L.P. | Method and apparatus for providing a compiler interface |
US20080320453A1 (en) | 2007-06-21 | 2008-12-25 | Microsoft Corporation | Type inference and late binding |
US20090024986A1 (en) * | 2007-07-19 | 2009-01-22 | Microsoft Corporation | Runtime code modification |
US8281288B1 (en) * | 2011-10-20 | 2012-10-02 | Google Inc. | Integrated development environment with network-based compilation and sandboxed native machine-language capabilities |
WO2013106947A1 (en) * | 2012-01-18 | 2013-07-25 | Metrologic Instruments, Inc. | Web-based scan-task enabled system. and method of and apparatus for developing and deploying the same on a client-server network |
-
2011
- 2011-11-10 US US13/293,150 patent/US9542168B2/en active Active
-
2017
- 2017-01-09 US US15/401,497 patent/US10521205B2/en active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030225935A1 (en) * | 2002-05-30 | 2003-12-04 | Microsoft Corporation | Interoperability of objects between various platforms |
US20070055978A1 (en) * | 2005-09-06 | 2007-03-08 | Microsoft Corporation | Type inference and type-directed late binding |
US20070234288A1 (en) * | 2006-01-20 | 2007-10-04 | Aptana, Inc. | Type inference system and method |
US20080005547A1 (en) * | 2006-06-20 | 2008-01-03 | Papakipos Matthew N | Systems and methods for generating reference results using a parallel-processing computer system |
US20080320444A1 (en) * | 2007-06-21 | 2008-12-25 | Microsoft Corporation | Late bound programmatic assistance |
US20090251475A1 (en) * | 2008-04-08 | 2009-10-08 | Shailendra Mathur | Framework to integrate and abstract processing of multiple hardware domains, data types and format |
US20110016449A1 (en) * | 2009-07-17 | 2011-01-20 | Yitao Yao | Method and system for integrating java and javascript technologies |
US20120096449A1 (en) * | 2010-07-22 | 2012-04-19 | Junfeng Yang | Methods, Systems, and Media for Protecting Applications from Races |
Non-Patent Citations (3)
Title |
---|
Chang, Mason, et al. "Efficient just-in-time execution of dynamically typed languages via code specialization using precise runtime type inference" Technical Report ICS-TR-07-10, Donald Bren School of Information and Computer Science, University of California, Irvine, 2007.14 Pages * |
Furr et al., "Polymorphic Type Inference for the JNI ∗", November 4, 2005, University of Maryland, College Park, 22 pages * |
Michael Salib, "Starkiller: A Static Type Interference and Compiler for Python", May 2004, Department of Electrical Engineering and Computer Science at the Massachusetts Institute of Technology, 96 pages. * |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10528330B2 (en) | 2012-07-10 | 2020-01-07 | Oracle International Corporation | System and method for supporting compatibility checking for lambda expression |
US20140019948A1 (en) * | 2012-07-10 | 2014-01-16 | Oracle International Corporation | System and method for compiling lambda expression in a programming language environment |
US9195442B2 (en) * | 2012-07-10 | 2015-11-24 | Oracle International Corporation | System and method for compiling lambda expression in a programming language environment |
US9557974B2 (en) * | 2012-07-10 | 2017-01-31 | Oracle International Corporation | System and method for supporting compatibility checking for lambda expression |
US20140019947A1 (en) * | 2012-07-10 | 2014-01-16 | Oracle International Corporation | System and method for supporting compatibility checking for lambda expression |
US10209970B2 (en) * | 2012-07-10 | 2019-02-19 | Oracle International Corporation | System and method for supporting compatibility checking for lambda expression |
US11016743B2 (en) * | 2012-08-09 | 2021-05-25 | Apple Inc. | Runtime state based code re-optimization |
US9417842B2 (en) * | 2013-03-01 | 2016-08-16 | Empire Technology Development Llc | Idempotent representation of numbers in extensible languages |
US20150100947A1 (en) * | 2013-10-04 | 2015-04-09 | Microsoft Corporation | Build-time resolving and type checking references |
CN105723336A (en) * | 2013-10-04 | 2016-06-29 | 微软技术许可有限责任公司 | Build-time resolving and type checking references |
US9772826B2 (en) * | 2013-10-04 | 2017-09-26 | Microsoft Technology Licensing, Llc | Build-time resolving and type checking references |
US10095508B2 (en) | 2014-09-25 | 2018-10-09 | Oracle International Corporation | System and method for supporting dynamic deployment of executable code in a distributed computing environment |
US10129361B2 (en) | 2015-07-01 | 2018-11-13 | Oracle International Corporation | System and method for multi-version remote function execution control in a distributed computing environment |
US9921857B1 (en) | 2017-02-06 | 2018-03-20 | Red Hat Israel, Ltd. | Compiler extension for correcting error messages |
CN111309335A (en) * | 2020-02-28 | 2020-06-19 | 腾讯音乐娱乐科技(深圳)有限公司 | Plug-in application compiling method and device and computer readable storage medium |
CN111290760A (en) * | 2020-03-03 | 2020-06-16 | 北京字节跳动网络技术有限公司 | Application program compiling method and device, electronic equipment and storage medium |
CN111538505A (en) * | 2020-04-23 | 2020-08-14 | 保定康强医疗器械制造有限公司 | Slitting program editing and grammar checking system |
WO2022165285A1 (en) * | 2021-01-29 | 2022-08-04 | The Trustees Of Dartmouth College | Multi-core processing and memory arrangement |
US11741043B2 (en) | 2021-01-29 | 2023-08-29 | The Trustees Of Dartmouth College | Multi-core processing and memory arrangement |
US12066976B2 (en) | 2021-01-29 | 2024-08-20 | The Trustees Of Dartmouth College | Multi-core processing and memory arrangement |
Also Published As
Publication number | Publication date |
---|---|
US9542168B2 (en) | 2017-01-10 |
US10521205B2 (en) | 2019-12-31 |
US20170115971A1 (en) | 2017-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10521205B2 (en) | Hostable compiler utilizing type information from a host application | |
Bichhawat et al. | Information flow control in WebKit’s JavaScript bytecode | |
US8819649B2 (en) | Profile guided just-in-time (JIT) compiler and byte code generation | |
US8191042B2 (en) | Continuation based declarative definition and composition | |
Karim et al. | Platform-independent dynamic taint analysis for javascript | |
US9569342B2 (en) | Test strategy for profile-guided code execution optimizers | |
US8365280B2 (en) | System, method, and program for determining validity of string | |
US8572554B2 (en) | Method and system for integrating Java and JavaScript technologies | |
CN106462406B (en) | Interactive viewer for intermediate representation of client-side code | |
US10296313B2 (en) | Safely consuming dynamically-typed code from a statically-typed programming language | |
Bolz et al. | Back to the future in one week—implementing a Smalltalk VM in PyPy | |
US8516457B2 (en) | Method, system and program storage device that provide for automatic programming language grammar partitioning | |
US9141356B2 (en) | Process for generating dynamic type | |
Boudol et al. | Reasoning about Web applications: An operational semantics for HOP | |
Anand | Techniques to facilitate symbolic execution of real-world programs | |
US8875089B2 (en) | Workspace model for interrelated projects | |
US11599478B2 (en) | Reduced instructions to generate global variable addresses | |
Kersten et al. | ResAna: a resource analysis toolset for (real‐time) JAVA | |
Lee et al. | Debugging mixed‐environment programs with Blink | |
Camphuijsen et al. | Soft typing PHP | |
Petersen et al. | GC-safe interprocedural unboxing | |
US11226888B1 (en) | Systems and methods for function argument checking | |
US20170103011A1 (en) | Information processing apparatus and system | |
Hlopko et al. | On the integration of Smalltalk and Java | |
Rasheed | Security analyses for detecting deserialisation vulnerabilities: a thesis presented in partial fulfilment of the requirements for the degree of Doctor of Philosophy in Computer Science at Massey University, Palmerston North, New Zealand |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: MICROSOFT CORPORATION, WASHINGTON Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:PAMER, JOSEPH;REEL/FRAME:027203/0798 Effective date: 20111107 |
|
AS | Assignment |
Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC, WASHINGTON Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:MICROSOFT CORPORATION;REEL/FRAME:034544/0001 Effective date: 20141014 |
|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 4TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1551); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY Year of fee payment: 4 |
|
MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 8TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1552); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY Year of fee payment: 8 |