A configurable processing framework based on the Web Assembly component model

The configurable processing framework using a WebAssembly component model addresses the challenge of integrating fragmented software components by enabling custom code in preferred languages, reducing glue code needs and enhancing application performance and scalability.

JP7739362B2Active Publication Date: 2025-09-16エスアーペーエスエー
View PDF 2 Cites 0 Cited by

Patent Information

Application Number
JP2023113076
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2023-03-07
Filing Date
2023-07-10
Publication Date
2025-09-16
Estimated Expiration
2043-07-10

AI Technical Summary

Technical Problem

Software application development is hindered by the need for extensive 'glue code' to integrate fragmented components, which is time-consuming and requires rewriting when reused code is not in the host programming language, and changes to services necessitate changes to the code as well.

Method used

A configurable processing framework using a WebAssembly component model allows developers to create custom code in their preferred language, compiled into bytecode format, and utilize a language-independent notation like Core Query Notation, with interfaces defined by WIT Bindgen to automate host language bindings, enabling efficient cross-language and service communication.

Benefits of technology

This approach reduces the need for glue code, allows reuse of custom code across applications, enhances application performance, and maintains modular structure while leveraging the strengths of different programming languages, facilitating efficient and scalable development.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 0007739362000001
    Figure 0007739362000001
  • Figure 0007739362000002
    Figure 0007739362000002
  • Figure 0007739362000003
    Figure 0007739362000003
Patent Text Reader

Abstract

To provide a composable processing framework based on a web assembly component model.SOLUTION: In an example embodiment, a common, composable abstraction is provided that allows components to work efficiently across programming languages and services without the need to write glue code. Application developers can concentrate on the application logic itself. The functionality of services can be developed by framework developers only once, using the programming language of their choice.SELECTED DRAWING: Figure 1
Need to check novelty before this filing date? Find Prior Art

Description

[Technical Field]

[0001] This document relates generally to computer software application development. More particularly, this document relates to using a configurable processing framework based on a web assembly component model. [Background technology]

[0002] Today, software application code is often highly fragmented, including a combination of one or more programming languages, outbound services (e.g., databases, message brokers, etc.), and inbound services (Hypertext Transfer Protocol (HTTP) services (including protocols such as GraphQL and OData) and message brokers, etc.). As a result, application developers must write a lot of what is called "glue code." Glue code refers to code that connects separate software components or systems together to coordinate their interactions and facilitate communication. Glue code acts as the "glue" that holds components together and enables them to work as a single, integrated system. Glue code is commonly used to integrate different APIs, data formats, and protocols and is often written in low-level programming languages ​​such as C or C++. Glue code is typically minimal and simple, and focuses on facilitating the integration of components rather than providing any significant functionality of its own. Summary of the Invention [Means for solving the problem]

[0003] The present disclosure is illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings in which like reference numerals indicate similar elements. [Brief explanation of the drawings]

[0004] [Figure 1] FIG. 1 is a block diagram illustrating a system including a configurable processing framework, according to one exemplary embodiment. [Figure 2] 1 is a flow diagram illustrating a method for creating custom code in a software environment, according to one example embodiment. [Figure 3] FIG. 1 illustrates a method for using custom code in a software environment, according to one example embodiment. [Figure 4] FIG. 1 is a block diagram illustrating a software architecture that may be installed on any one or more of the devices described above. [Figure 5] 1 is a diagrammatic representation of a machine in the form of a computer system upon which a set of instructions may be executed to cause the machine to perform any one or more of the methodologies discussed herein, according to one exemplary embodiment. DETAILED DESCRIPTION OF THE INVENTION

[0005] The following description discusses exemplary systems, methods, techniques, instruction sequences, and computer program products. In the following description, for purposes of explanation, numerous details are set forth in order to provide an understanding of various exemplary embodiments of the present subject matter. However, it will be apparent to those skilled in the art that various exemplary embodiments of the present subject matter may be practiced without these specific details.

[0006] Writing a lot of glue code can be time-consuming for application developers, not only during the development phase but also at later stages. If the reused code is not written in the host programming language, for example, the code needs to be rewritten even though it is itself being reused. If a service client (inbound or outbound) is not available for the host programming language, a service client needs to be built. Furthermore, changes to the service then require changes to that code as well.

[0007] In one exemplary embodiment, components provide a common, composable abstraction that allows them to work efficiently across programming languages ​​and services without having to write glue code. Application developers can focus on the application logic itself. Service functionality can be developed once by framework developers using the programming language of their choice.

[0008] More specifically, the configurable processing framework provides a general-purpose server capable of processing operations defined by a data model created by an application developer. The configurable processing framework may utilize a language-independent notation, such as Core Query Notation. Core Query Notation is a syntax used to express queries in a structured, standard manner. Core Query Notation may be used within database management systems and search engines to enable users to search and retrieve specific information from large datasets in an organized and efficient manner. The syntax generally includes elements such as keywords, operators, and logical statements, which are combined to form queries that can then be executed to retrieve relevant information from the dataset. However, fundamentally, the syntax may be used as an abstract way to encode intent in terms of queries (e.g., SELECT, CREATE, etc.).

[0009] While many aspects of a service can be defined using the data model itself, in many cases the data model alone is insufficient to create a complete service. Therefore, some level of custom code from the application developer is required. However, it can be difficult for application developers to create that custom code when they are limited to doing so by simply using the programming language utilized by the general-purpose server (the host language, often called Java). Therefore, in one exemplary embodiment, a configurable processing framework allows application developers to create custom code in their programming language of choice, as long as that programming language is compilable into a bytecode format such as WebAssembly. The custom code is compiled into that bytecode format and then loaded into the configurable processing framework, where it can be interacted with via core query notation commands.

[0010] WebAssembly (WASM) is a low-level binary instruction format for a stack-based virtual machine designed to run within web browsers. In one exemplary embodiment, a WebAssembly runtime is used to run WebAssembly modules on a server, allowing these modules to be composed using interfaces based on the WebAssembly component model.

[0011] These interfaces can be written in WIT (WebAssembly Interfaces), a WASM specification that defines a set of rules and contracts for describing the interface between WASM modules and host environments, allowing them to communicate and interoperate.

[0012] More technically, WIT is a set of types and functions that define how data passes between WebAssembly modules and the host environment, as well as how functions are invoked and results are returned. The specification provides a way for WASM modules to declare the types of their functions and the types of data they expect and return, enabling safe and efficient communication between modules and the host environment.

[0013] More specifically, WIT Bindgen can be used. WIT Bindgen is a tool that generates host bindings for a WebAssembly module based on its interface description using the WIT specification. Essentially, WIT Bindgen takes a WebAssembly module that has been annotated with WIT type information and generates host language bindings that can be used to invoke the module's functions and access its data.

[0014] WIT Bindgen is part of the WebAssembly tooling ecosystem for the Rust programming language. WIT Bindgen is designed to work alongside the WASM-Bindgen tool, which provides similar capabilities for generating JavaScript bindings for WebAssembly modules.

[0015] One of the main benefits of WIT Bindgen is that it automates the process of generating host language bindings, which can be time-consuming and error-prone when done manually. By using WIT Bindgen, developers can avoid the need to write and maintain custom host bindings for their WebAssembly modules and instead focus on writing the module's logic in the target language.

[0016] The WebAssembly component model is a portable, load- and runtime-efficient binary format that enables web applications to be built from reusable components written in WASM, which are then assembled into a larger whole to form the final application. This approach allows developers to take advantage of WASM's benefits, such as performance and security, while still providing a modular and maintainable structure for their applications. The component model enables developers to write reusable code in WASM that can be shared across multiple applications, reducing the amount of duplication and improving overall code quality. Additionally, the component model may improve overall application performance by allowing developers to write high-performance components in WASM while using JavaScript for parts of the application that benefit from its dynamic and expressive nature.

[0017] FIG. 1 is a block diagram illustrating a system 100 including a configurable processing framework 102 according to one exemplary embodiment. An application developer creates a data model 104, which can then be compiled into application logic 106 within the configurable processing framework 102. In one exemplary embodiment, the data model 104 can be created within data and service objects, such as a Core Data and Services (CDS) model. CDS models are plain JavaScript objects that conform to Core Schema Notation. CDS models are written in the CDS data modeling language. CDS enables a central definition of enterprise entities and their relationships, as well as the definition of services that affect those entities. This enables developers to build applications that can share and reuse business data and logic, reducing duplication of work and increasing data consistency and accuracy across the enterprise.

[0018] In some exemplary embodiments, a CDS component (not shown) may be provided with a common set of domain-specific languages ​​(DSLs) and services that may enable the definition and consumption of semantically rich data models as an integral part of the database structure, thereby enabling data modeling and data retrieval and processing to be elevated to a higher semantic level that is closer to the conceptual thinking of domain experts.

[0019] In particular, CDS components implement higher-level domain-specific languages ​​(DSLs) and services based on an entity-relationship model (ERM). A data definition language (DDL) is used to define a semantically rich data model, including data types, associated metadata, and database configurations (e.g., columns and tables). A query language (QL) is used to conveniently and efficiently read data based on the data model. The QL is also used to define views within the data model. An expression language (EL) is used to specify computed fields, default values, constraints, etc. within queries. Computed fields, default values, and constraints are similarly specified for elements within the data model.

[0020] As explained above, while the data model 104 itself can be used to create services within the application logic 106, the data model 104 cannot be used to create all functionality for many services. Therefore, some level of custom code is required. Therefore, in one exemplary embodiment, the application developer also creates the custom code 108 in a user language 110. The user language 110 may be any language that can be compiled into a compiled bytecode format 112, such as WebAssembly. Other examples of compiled bytecode formats include Java bytecode, Python bytecode, .NET bytecode, and Lua bytecode.

[0021] In some cases, the component model 114 may be used to generate one or more interfaces that may be utilized by application developers when creating custom code 108, or may be used directly in their original or reversed form by configurable processing formats.

[0022] More particularly, the component model may produce one or more interfaces that can be used to convert between the core query notation and other formats utilized by services or entities interacting with the configurable processing framework 102.

[0023] A developer of the configurable processing framework 102 may create one or more triggers, such as an HTTP trigger 116 and / or an Advanced Message Queuing Protocol (AMQP) trigger 118. AMQP is an open-standard application layer protocol for message-oriented middleware. AMQP provides a way for applications to communicate with each other reliably and asynchronously by exchanging messages through a message broker. AMQP is designed to support a wide range of messaging use cases, including queuing, publish / subscribe, and request / reply, and has become a popular choice for integrating systems in the financial, healthcare, and logistics industries. AMQP defines a standard wire-level protocol for message-oriented middleware, including a set of rules for encoding and decoding messages and specifications for message broker behavior. This allows different implementations of AMQP to interoperate and enables applications written in different programming languages ​​to communicate with each other.

[0024] Triggers 116 and 118 listen for corresponding messages to be received, at which point an action is triggered. For example, HTTP trigger 116 listens for HTTP commands, such as HTTP ODATA requests, to be received, and AMQP trigger 118 listens for AMQP messages, such as AMQP message cloud events, to be received. These triggers may prompt a corresponding transformer (here, HTTP->CQN transformer 120 or AMQP->CQN transformer 122) to convert the corresponding command or message into a CQN format to be used by application logic.

[0025] It should be noted that the component model 114 may have defined the interface in the opposite direction (e.g., CQN->HTTP and / or CQN->AMQN), in which case the configurable processing framework may create the HTTP->CQN transformer 120 and the AMQP->CQN transformer 122, essentially inverting the interfaces defined by the component model 114.

[0026] Similar interfaces may be used on the output side of the application logic 106 to convert the CQN output to a desired protocol, where, for example, a CQN-to-HTTP transformer 124 may convert the CQN output to HTTP format for use by a defined HTTP client 126 or a similar endpoint defined on the configurable processing framework 102. Similarly, a CQN-to-AMQP transformer 128 may convert the CQN output to AMQP format for use by a defined AMQP client 130 or a similar endpoint defined on the configurable processing framework 102.

[0027] In one example embodiment, the component model 114 may utilize the WebAssembly component model.

[0028] The WebAssembly component model is a way to organize and structure applications built using WebAssembly (WASM). The WebAssembly component model provides a modular and composable approach to building web applications, allowing developers to decompose their applications into smaller, reusable components that can be combined to build complete applications.

[0029] In the WebAssembly component model, each component is packaged as a WASM module and designed to expose a well-defined set of APIs. These modules can then be imported and used by other modules, allowing developers to build applications by composing smaller, reusable components.

[0030] One of the main benefits of the WebAssembly component model is that it allows developers to write code in a variety of programming languages, including C, C++, Rust, and others, and then compile it to WASM. This makes it possible to leverage existing codebases and libraries and take advantage of the strengths of different programming languages.

[0031] Additionally, the WebAssembly component model provides a way to isolate components from each other and help ensure that a failure in one component does not affect the overall safety of the application, making large, complex applications easier to build and maintain.

[0032] Overall, the WebAssembly component model provides a flexible and scalable approach to building web applications, allowing developers to build applications from smaller, reusable components and do so using a variety of programming languages.

[0033] The compiled bytecode format 112 of the custom code 108 may then be loaded into the configurable processing framework 102 as part of the application logic 106 .

[0034] In another exemplary embodiment, the speed and isolation capabilities of the WebAssembly (or similar) component model are leveraged to enable application developers to create multi-tenant applications. Isolation prevents one tenant from reading data, subverting code, or reading from another tenant's file system.

[0035] Note also that recent developments in allowing WASM to run outside of the browser (allowing WASM to make system calls) and support for various languages ​​to be compiled into WASM may make WASM suitable for running in a serverless fashion.

[0036] 2 is a flow diagram illustrating a method 200 for creating custom code in a software environment, according to one example embodiment. The operations of FIG. 2 may be performed by a configurable processing framework, such as configurable processing framework 102 of FIG. 1.

[0037] At operation 202, a data model is accessed. The data model may have been created by an application developer using, for example, CDS. At operation 204, the data model is compiled into a component model. The component model may be, for example, a WebAssembly component model.

[0038] In operation 206, the component model is compiled into a user language. The user language can be any language chosen by the application designer, as long as the user language can be compiled into a bytecode format such as WebAssembly. An example of a user language is Rust.

[0039] At this point, although not shown in the flow diagram because the operations of the flow diagram are performed by a configurable processing framework, the application developer uses the compiled component model to create custom code in a user language, which the application developer then compiles into a bytecode format such as WebAssembly.

[0040] In operation 208, the configurable processing framework loads the compiled custom code (compiled in bytecode format) as a generic server written in a host language capable of processing the operations defined by the data model. The host language is any language chosen by the framework developer. An example of a host language is Core Query Notation.

[0041] At this stage, the application logic (such as application logic 106 of FIG. 1) is set up and ready to execute. This execution may include receiving a request and generating a request or event based on the received request. FIG. 3 illustrates a method 300 for using custom code in a software environment, according to one exemplary embodiment. At operation 302, a request in a first protocol is received. At operation 304, a first transformer is used to transform the request in the first protocol into a host language. This first transformer is specifically designed to transform the request in the first protocol into the host language. In one exemplary embodiment, the first protocol is HTTP and the host language is Core Query Notation.

[0042] In operation 306, the compiled custom code loaded into the configurable processing framework in operation 208 of Figure 2 processes the request that has been converted to the host language using a first transformer. The output from this is some action, such as a database or other data request. In operation 308, a second transformer is used to convert this output to a first protocol. The second transformer is specifically designed to convert the host language to the first protocol. In operation 310, a first client operating on the message in the first protocol processes the converted output.

[0043] At operation 312, a request in a second protocol is received. At operation 314, the request in the second protocol is transformed into the host language using a third transformer. The third transformer is specifically designed to transform the request in the second protocol into the host language. In one exemplary embodiment, the second protocol is AMQP.

[0044] At operation 316, the compiled custom code processes the request, which has been converted to the host language using a third transformer. The output from this is some action, such as a database or other data request. At operation 318, a fourth transformer is used to convert this output to a second protocol. The fourth transformer is specifically designed to convert the host language to the second protocol. At operation 320, a second client operating on messages in the second protocol processes the converted output.

[0045] In view of the above disclosure, various examples are described below. It should be noted that one or more features of the examples, either independently or in combination, should be considered to be within the present disclosure of the present application.

[0046] Example 1. At least one hardware processor; a computer-readable medium having instructions stored thereon; the instructions, when executed by the at least one hardware processor, cause the at least one hardware processor to: Accessing the data model; Compiling the data model into a component model; compiling the component model into a user programming language, the user programming language being a programming language that can be compiled into a bytecode format; accessing custom code written in a user language, the custom code including a compiled component model; Compiling the custom code into bytecode format; loading the compiled custom code into a framework that executes a host programming language; Running compiled custom code to create a server process A system that causes an operation including

[0047] Example 2. The system of example 1, wherein the server process further includes at least one interface based on the component model that converts input to the custom code from a first format to a host programming language, and at least one interface based on the component model that converts output from the custom code from the host programming language to the first format.

[0048] Example 3. The system of example 2, wherein the first format is Hypertext Transfer Protocol (HTTP).

[0049] Example 4. The system of any of Examples 1 to 3, wherein the bytecode format is WebAssembly.

[0050] Example 5. The system of example 4, wherein the component model is a WebAssembly component model (WASM).

[0051] Example 6. The system of any of Examples 1 to 5, wherein the host programming language is Core Query Notation.

[0052] Example 7. The system of any of Examples 1 to 6, wherein the framework compiles the compiled component model into an interface that conforms to a host programming language.

[0053] Example 8. Accessing a data model; Compiling the data model into a component model; compiling the component model into a user programming language, the user programming language being a programming language that can be compiled into a bytecode format; accessing custom code written in a user programming language, the custom code including a compiled component model; Compiling the custom code into a bytecode format; loading the compiled custom code into a framework that executes a host programming language; Execute the compiled custom code to create a server process. A method comprising:

[0054] Example 9. The method of example 8, wherein the server process further includes at least one interface based on the component model that converts input to the custom code from the first format to the host programming language, and at least one interface based on the component model that converts output from the custom code from the host programming language to the first format.

[0055] Example 10. The method of Example 9, wherein the first format is Hypertext Transfer Protocol (HTTP).

[0056] Example 11. The method of any of examples 8 to 10, wherein the bytecode format is WebAssembly.

[0057] Example 12. The method of example 11, wherein the component model is the WebAssembly Component Model (WASM).

[0058] Example 13. The method of any of Examples 8 to 12, wherein the host programming language is Core Query Notation.

[0059] Example 14. The method of any of Examples 8-13, wherein the framework compiles the compiled component model into an interface that conforms to the host programming language.

[0060] Example 15. A non-transitory machine-readable medium having stored thereon instructions, the instructions, when executed by one or more processors, causing the one or more processors to: Accessing the data model; Compiling the data model into a component model; compiling the component model into a user programming language, the user programming language being a programming language that can be compiled into a bytecode format; accessing custom code written in a user language, the custom code including a compiled component model; Compiling the custom code into bytecode format; loading the compiled custom code into a framework that executes a host programming language; Running compiled custom code to create a server process A non-transitory machine-readable medium for causing an operation to be performed, including

[0061] Example 16. The non-transitory machine-readable medium of example 15, wherein the server process further includes at least one interface based on the component model that converts input to the custom code from a first format to a host programming language, and at least one interface based on the component model that converts output from the custom code from the host programming language to the first format.

[0062] Example 17. The non-transitory machine-readable medium of Example 16, wherein the first format is Hypertext Transfer Protocol (HTTP).

[0063] Example 18. The non-transitory machine-readable medium of any of Examples 15 to 17, wherein the bytecode format is WebAssembly.

[0064] Example 19. The non-transitory machine-readable medium of example 18, wherein the component model is the WebAssembly Component Model (WASM).

[0065] Example 20. The non-transitory machine-readable medium of any of Examples 15 to 19, wherein the host programming language is Core Query Notation.

[0066] FIG. 4 is a block diagram 400 illustrating a software architecture 402 that may be installed on any one or more of the devices described above. It will be appreciated that FIG. 4 is merely a non-limiting example of a software architecture and that many other architectures may be implemented to facilitate the functionality described herein. In various embodiments, software architecture 402 is implemented by hardware, such as machine 500 of FIG. 5, which includes processor 510, memory 530, and input / output (I / O) components 550. In this exemplary architecture, software architecture 402 may be conceptualized as a stack of layers, with each layer providing specific functionality. For example, software architecture 402 includes layers such as operating system 404, libraries 406, framework 408, and applications 410. Optionally, applications 410 invoke API calls 412 through the software stack and receive messages 414 in response to API calls 412, according to some embodiments.

[0067] In various implementations, operating system 404 manages hardware resources and provides common services. Operating system 404 includes, for example, kernel 420, services 422, and drivers 424. Kernel 420, according to some embodiments, acts as an abstraction layer between the hardware and other software layers. For example, kernel 420 provides memory management, processor management (e.g., scheduling), component management, networking, and security configuration, among other functionality. Services 422 may provide other common services to other software layers. Drivers 424, according to some embodiments, are responsible for controlling or interacting with the underlying hardware. For example, drivers 424 may include a display driver, a camera driver, a Bluetooth® or Bluetooth® Low-Energy driver, a flash memory driver, a serial communications driver (e.g., a Universal Serial Bus (USB) driver), a Wi-Fi® driver, an audio driver, a power management driver, etc.

[0068] In some embodiments, libraries 406 provide a low-level common infrastructure utilized by applications 410. Libraries 406 may include system libraries 430 (e.g., the C standard library), which may provide functions such as memory allocation functions, string manipulation functions, mathematical functions, etc. Additionally, libraries 406 may include API libraries 432, such as media libraries (e.g., libraries for supporting the presentation and manipulation of various media formats, such as Moving Picture Expert Group 4 (MPEG4), Advanced Video Coding (H.264 or AVC), Moving Picture Expert Group Layer 3 (MP3), Advanced Audio Coding (AAC), Adaptive Multi-Rate (AMR) audio codec, Joint Photographic Expert Group (JPEG or JPG), or Portable Network Graphics (PNG)), graphics libraries (e.g., an OpenGL framework used for rendering in 2D and 3D within a graphics context on a display), database libraries (e.g., SQLite for providing various relational database functions), web libraries (e.g., WebKit for providing web browsing functionality), etc. The library 406 may include a wide variety of other libraries 434 for providing many other APIs to the application 410 .

[0069] Framework 408, according to some embodiments, provides a high-level common infrastructure that applications 410 can utilize. For example, framework 408 provides various graphical user interface (GUI) functionality, high-level resource management, high-level location services, etc. Framework 408 may provide a wide spectrum of other APIs that applications 410 can utilize, some of which may be specific to a particular operating system 404 or platform.

[0070] In one exemplary embodiment, applications 410 include a wide variety of other applications, such as a home application 450, a contacts application 452, a browser application 454, a book reader application 456, a location application 458, a media application 460, a messaging application 462, a game application 464, and third-party applications 466. According to some embodiments, applications 410 are programs that perform functions defined therein. Various programming languages ​​may be employed to create one or more of applications 410, structured in various ways, such as object-oriented programming languages ​​(e.g., Objective-C, Java, or C++) or procedural programming languages ​​(e.g., C or assembly language). In particular examples, third-party applications 466 (e.g., applications developed using the Android™ or iOS™ Software Development Kit (SDK) by entities other than the particular platform vendor) may be mobile software that runs on a mobile operating system, such as iOS™, Android™, Windows Phone, or another mobile operating system. In this example, the third party application 466 can invoke API calls 412 provided by the operating system 404 to facilitate the functionality described herein.

[0071] FIG. 5 shows a diagrammatic representation of a machine 500 in the form of a computer system within which a set of instructions may be executed to cause the machine 500 to perform any one or more of the methodologies discussed herein, according to one exemplary embodiment. Specifically, FIG. 5 shows a diagrammatic representation of a machine 500 in the exemplary form of a computer system within which instructions 516 (e.g., software, programs, applications, applets, apps, or other executable code) may be executed to cause the machine 500 to perform any one or more of the methodologies discussed herein. For example, the instructions 516 may cause the machine 500 to perform the method of FIGS. 2-3. Additionally, or alternatively, the instructions 516 may implement FIGS. 1-3, etc. The instructions 516 transform a general, non-programmable machine 500 into a specific machine 500 programmed to perform the described and illustrated functions in the described manner. In alternative embodiments, the machine 500 may operate as a standalone device or be coupled (e.g., networked) to other machines. In a networked deployment, machine 500 may operate in the capacity of a server machine or a client machine in a server-client network environment, or as a peer machine in a peer-to-peer (or distributed) network environment. Machine 500 may include, but is not limited to, a server computer, a client computer, a personal computer (PC), a tablet computer, a laptop computer, a netbook, a set-top box (STB), a personal digital assistant (PDA), an entertainment media system, a cellular phone, a smartphone, a mobile device, a wearable device (e.g., a smart watch), a smart home device (e.g., a smart appliance), other smart devices, a web appliance, a network router, a network switch, a network bridge, or any machine capable of executing, serially or otherwise, instructions 516 that specify activities performed by machine 500.Additionally, although only a single machine 500 is shown, the term "machine" should still be understood to include a collection of machines 500 that individually or together execute instructions 516 to perform any one or more of the methodologies discussed herein.

[0072] Machine 500 may include a processor 510, memory 530, and I / O components 550, which may be configured to communicate with one another, such as via a bus 502. In one exemplary embodiment, processor 510 (e.g., a central processing unit (CPU), a reduced instruction set computer (RISC) processor, a complex instruction set computer (CISC) processor, a graphics processing unit (GPU), a digital signal processor (DSP), an application specific integrated circuit (ASIC), a radio frequency integrated circuit (RFIC), another processor, or any suitable combination thereof) may include, for example, processor 512 and processor 514, which may execute instructions 516. The term “processor” is intended to include multi-core processors, which may include two or more independent processors (sometimes referred to as “cores”) that may execute instructions 516 simultaneously. Although FIG. 5 shows multiple processors 510, the machine 500 may include a single processor 512 with a single core, a single processor 512 with multiple cores (e.g., a multi-core processor 512), multiple processors 512, 514 with a single core, multiple processors 512, 514 with multiple cores, or some combination thereof.

[0073] Memory 530 may include a main memory 532, a static memory 534, and a storage unit 536, each accessible to processor(s) 510, such as via bus 502. Main memory 532, static memory 534, and storage unit 536 store instructions 516 that implement any one or more of the methodologies or functions described herein. The instructions 516 may reside, completely or partially, in main memory 532, in static memory 534, in storage unit 536, within at least one of processors 510 (e.g., within a processor's cache memory), or any suitable combination thereof during their execution by machine 500.

[0074] I / O components 550 may include a wide variety of components for receiving input, providing output, generating output, transmitting information, exchanging information, capturing measurements, etc. The specific I / O components 550 included within a particular machine will depend on the type of machine. For example, a portable machine such as a mobile phone will likely include a touch input device or other such input mechanism, while a headless server machine will likely not include such a touch input device. It will be appreciated that I / O components 550 may include many other components not shown in FIG. 5 . I / O components 550 are grouped according to functionality solely to simplify the following discussion, and this grouping is in no way limiting. In various exemplary embodiments, I / O components 550 may include an output component 552 and an input component 554. Output components 552 may include visual components (e.g., a plasma display panel (PDP), a light-emitting diode (LED) display, a liquid crystal display (LCD), a projector, or a cathode ray tube (CRT)), acoustic components (e.g., speakers), haptic components (e.g., vibration motors, resistive mechanisms), other signal generators, etc. Input components 554 may include alphanumeric input components (e.g., a keyboard, a touchscreen configured to receive alphanumeric input, a photo-optical keyboard, or other alphanumeric input component), point-based input components (e.g., a mouse, touchpad, trackball, joystick, motion sensor, or another pointing instrument), tactile input components (e.g., physical buttons, a touchscreen that provides the location and / or force of a touch or touch gesture, or other tactile input component), audio input components (e.g., a microphone), etc.

[0075] In further exemplary embodiments, I / O component 550 may include a biometric component 556, a motion component 558, an environmental component 560, or a position component 562, among other components. For example, biometric component 556 may include components for detecting expressions (e.g., hand expressions, facial expressions, voice expressions, body gestures, or eye movements), measuring biosignals (e.g., blood pressure, heart rate, body temperature, sweat, or brain waves), identifying a person (e.g., voice identification, retinal identification, facial identification, fingerprint identification, or electroencephalogram-based identification), etc. Motion component 558 may include an acceleration sensor component (e.g., an accelerometer), a gravity sensor component, a rotation sensor component (e.g., a gyroscope), etc. The environmental component 560 may include, for example, a lighting sensor component (e.g., a photometer), a temperature sensor component (e.g., one or more thermometers that detect ambient temperature), a humidity sensor component, a pressure sensor component (e.g., a barometer), an acoustic sensor component (e.g., one or more microphones that detect background noise), a proximity sensor component (e.g., an infrared sensor that detects nearby objects), a gas sensor (e.g., a gas detection sensor for detecting concentrations of harmful gases for safety purposes or for measuring pollutants in the air), or other components that may provide indications, measurements, or signals corresponding to the surrounding physical environment. The position component 562 may include a location sensor component (e.g., a global positioning system (GPS) receiver component), an altitude sensor component (e.g., an altimeter or a barometer that detects air pressure, which may be a derived source of altitude), an orientation sensor component (e.g., a magnetometer), etc.

[0076] Communications may be implemented using a wide variety of technologies. I / O component 550 may include a communications component 564 operable to couple machine 500 to network 580 or device 570 via coupling 582 and coupling 572, respectively. For example, communications component 564 may include a network interface component or another suitable device for interfacing with network 580. In further examples, communications component 564 may include a wired communications component, a wireless communications component, a cellular communications component, a near-field communication (NFC) component, a Bluetooth® component (e.g., Bluetooth® Low Energy), a Wi-Fi® component, and other communications components for providing communications via other modalities. Device 570 may be another machine or any of a wide variety of peripheral devices (e.g., coupled via USB).

[0077] Moreover, the communication component 564 may detect an identifier or may include a component operable to detect an identifier. For example, the communication component 564 may include a radio frequency identification (RFID) tag reader component, an NFC smart tag detection component, an optical reader component (e.g., an optical sensor for detecting one-dimensional barcodes such as Universal Product Code (UPC) barcodes, multidimensional barcodes such as QR Code, Aztec Code, Data Matrix, Dataglyph, MaxiCode, PDF417, UltraCode, UCC RSS-2D barcodes, and other optical codes), or an acoustic detection component (e.g., a microphone for identifying tagged audio signals). Additionally, various information may be derived via the communication component 564, such as location via Internet Protocol (IP) geolocation, location via Wi-Fi signal triangulation, location by detection of NFC beacon signals that may indicate a particular location, etc.

[0078] Various memories (i.e., 530, 532, 534, and / or memory of processor 510) and / or storage units 536 may store one or more sets of instructions 516 and data structures (e.g., software) that perform or are utilized by any one or more of the methodologies or functions described herein. These instructions (e.g., instructions 516), when executed by processor 510, cause various operations to implement the disclosed embodiments.

[0079] As used herein, the terms “mechanical storage medium,” “device storage medium,” and “computer storage medium” mean the same thing and may be used interchangeably. These terms refer to single or multiple storage devices and / or media (e.g., central or distributed databases, and / or associated caches and servers) that store executable instructions and / or data. These terms should therefore be understood to include optical and magnetic media, including, but not limited to, solid-state memory and memory internal or external to a processor. Specific examples of mechanical storage media, computer storage media, and / or device storage media include, by way of example, semiconductor memory devices, e.g., non-volatile memory including erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EEPROM), field programmable gate arrays (FPGA), and flash memory devices; magnetic disks, such as internal hard disks and removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. The terms "machine storage medium," "computer storage medium," and "device storage medium" specifically exclude carrier waves, modulated data signals, and other such media, at least some of which fall under the scope of the term "signal media," discussed below.

[0080] In various exemplary embodiments, one or more portions of network 580 may be an ad-hoc network, an intranet, an extranet, a virtual private network (VPN), a local area network (LAN), a wireless LAN (WLAN), a wide area network (WAN), a wireless WAN (WWAN), a metropolitan area network (MAN), the Internet, a portion of the Internet, a portion of the public switched telephone network (PSTN), a plain old telephone service (POTS) network, a cellular telephone network, a wireless network, a Wi-Fi network, another type of network, or a combination of two or more such networks. For example, network 580 or a portion of network 580 may include a wireless or cellular network, and coupling 582 may be a code division multiple access (CDMA) connection, a global system for mobile communications (GSM) connection, or another type of cellular or wireless coupling. In this example, the coupling 582 may implement any of various types of data transfer technologies, such as single carrier radio transmission technology (1xRTT), Evolution Data Optimized (EVDO) technology, General Packet Radio Service (GPRS) technology, Enhanced Data Rates for GSM Evolution (EDGE) technology, Third Generation Partnership Project (3GPP®) including 3G, Fourth Generation Wireless (4G) networks, Universal Mobile Telecommunications System (UMTS), High Speed ​​Data Packet Access (HSPA), Worldwide Interoperability for Microwave Access (WiMAX), Long Term Evolution (LTE) standards, other technologies defined by various standards-setting organizations, other long-range protocols, or other data transfer technologies.

[0081] The instructions 516 may be transmitted or received over the network 580 using a transmission medium via a network interface device (e.g., a network interface component included in the communications component 564) and utilizing any one of several well-known transfer protocols (e.g., Hypertext Transfer Protocol [HTTP]). Similarly, the instructions 516 may be transmitted or received using a transmission medium via a connection 572 (e.g., a peer-to-peer connection) to the device 570. The terms “transmission medium” and “signal medium” mean the same thing and may be used interchangeably in this disclosure. The terms “transmission medium” and “signal medium” should be understood to include any intangible medium capable of storing, encoding, or carrying instructions 516 for execution by the machine 500, including digital or analog communications signals or other intangible media for facilitating the communication of such software. Accordingly, the terms “transmission medium” and “signal medium” should be understood to include any form of modulated data signal, carrier wave, etc. The term “modulated data signal” means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal.

[0082] The terms "machine-readable medium," "computer-readable medium," and "device-readable medium" mean the same thing and may be used interchangeably in this disclosure. These terms are defined to include both mechanical storage media and transmission media. Thus, these terms include both storage devices / media and carrier / modulated data signals. [Explanation of symbols]

[0083] 100 systems 102 Configurable Processing Framework 104 Data Model 106 Application Logic 108 Custom Code 110 User Language 112 Byte Code Format 114 Component Model 116 HTTP Trigger 118 Advanced Message Queuing Protocol (AMQP) Triggers 120 HTTP->CQN transformer 122 AMQP->CQN transformer 124 CQN->HTTP Transformer 126 HTTP Client 128 CQN->AMQP transformer 130 AMQP Client 400 Block Diagram 402 Software Architecture 404 Operating System 406 Library 408 Framework 410 Application 412 API call 414 Message 420 kernel 422 Service 424 Driver 430 System Library 432 API Library 434 Other Libraries 450 Home Applications 452 Contact Application 454 Browser Application 456 Book Reader Application 458 Location Applications 460 Media Applications 462 messaging applications 464 Game Applications 466 Third Party Applications 500 Non-programmable machines 502 Bus 510 Multiple Processors 512 processors 514 processor 516 Command 530 memory 532 main memory 534 Static Memory 536 Storage Unit 550 Input / Output (I / O) Components 552 Output Component 554 Input Component 556 Biometric Components 558 Movement Components 560 Environmental Components 562 Position Component 564 Communication Components 570 devices 572 Combine 580 Network 582 Combine

Claims

1. at least one hardware processor; a computer-readable medium having instructions stored thereon; Equipped with The instructions, when executed by the at least one hardware processor, cause the at least one hardware processor to: Accessing the data model; compiling the data model into a component model; compiling the component model into a user programming language, the user programming language being a programming language that can be compiled into a bytecode format; accessing custom code written in the user programming language, the custom code including the compiled component model; compiling the custom code into the bytecode format; loading the compiled custom code into a framework that executes a host programming language; executing the compiled custom code to create a server process; A system that causes an operation including

2. The server process: at least one interface based on the component model that converts input to the custom code from a first format to the host programming language; at least one interface based on the component model that converts output from the custom code from the host programming language to the first format; The system of claim 1 further comprising:

3. The system of claim 2 , wherein the first format is Hypertext Transfer Protocol (HTTP).

4. The system of claim 1 , wherein the bytecode format is WebAssembly.

5. 5. The system of claim 4, wherein the component model is the WebAssembly Component Model (WASM).

6. The system of claim 1 , wherein the host programming language is Core Query Notation.

7. The system of claim 1 , wherein the framework compiles the compiled component model into an interface compatible with the host programming language.

8. A method executed by at least one hardware processor, comprising: accessing a data model; compiling the data model into a component model; compiling the component model into a user programming language, the user programming language being a programming language that can be compiled into a bytecode format; accessing custom code written in the user programming language, the custom code including the compiled component model; compiling the custom code into the bytecode format; loading the compiled custom code into a framework that executes a host programming language; executing the compiled custom code to create a server process; A method comprising:

9. The server process: at least one interface based on the component model that converts input to the custom code from a first format to the host programming language; at least one interface based on the component model that converts output from the custom code from the host programming language to the first format; 9. The method of claim 8, further comprising:

10. 10. The method of claim 9, wherein the first format is Hypertext Transfer Protocol (HTTP).

11. The method of claim 8 , wherein the bytecode format is WebAssembly.

12. The method of claim 11 , wherein the component model is the WebAssembly Component Model (WASM).

13. The method of claim 8 , wherein the host programming language is Core Query Notation.

14. The method of claim 8 , wherein the framework compiles the compiled component model into an interface compatible with the host programming language.

15. A non-transitory machine-readable medium having instructions stored thereon, The instructions, when executed by one or more processors, cause the one or more processors to: Accessing the data model; compiling the data model into a component model; compiling the component model into a user programming language, the user programming language being a programming language that can be compiled into a bytecode format; accessing custom code written in the user programming language, the custom code including the compiled component model; compiling the custom code into the bytecode format; loading the compiled custom code into a framework that executes a host programming language; executing the compiled custom code to create a server process; A non-transitory machine-readable medium for causing an operation to be performed, including

16. The server process: at least one interface based on the component model that converts input to the custom code from a first format to the host programming language; at least one interface based on the component model that converts output from the custom code from the host programming language to the first format; 16. The non-transitory machine-readable medium of claim 15, further comprising:

17. 17. The non-transitory machine-readable medium of claim 16, wherein the first format is Hypertext Transfer Protocol (HTTP).

18. 16. The non-transitory machine-readable medium of claim 15, wherein the bytecode format is WebAssembly.

19. 20. The non-transitory machine-readable medium of claim 18, wherein the component model is the WebAssembly Component Model (WASM).

20. 16. The non-transitory machine-readable medium of claim 15, wherein the host programming language is Core Query Notation.

Citation Information

Patent Citations

  • Precompiler and compiler calling control system

    JP1987216040A

  • Method and apparatus for data exchange using run-time code generator and translator

    JP2003518291A