||This article has an unclear citation style. (August 2011)|
In computer science, a software engine refers to the core of a computer program. Software engines drive the functionality of the program, and are distinct from peripheral aspects of the program, such as look and feel.
The term Engine when used to describe a piece of software is frequently used by developers when speaking to a wider, layman audience, to describe what they would otherwise refer to as library, platform, SDK or object, to denote an encapsulated block of functionality.
The term most frequently shows up in marketing material that need to describe software internals, as well as in product names. (see http://www.ableton.com/live-7-whats-new, http://www.alphaworks.ibm.com/tech/streamingengine, http://embird.com/sw/embird/fonteng.htm)
Distinct definitions have however become established in certain fields, such as 3D rendering engines or game engines. Many of these engines have in common that they describe an input/output system where the output is of a different order than the input, such as the conversion of HTML to a rendered page. In contrast, something like spell checking components take input and produce output of the same order, only slightly different. But it is not a rule, just a tendency.
Mental Model of a Software Engine
The field of computer science uses the term Engine to provide a mental model of software components an order of magnitude more complex than an ordinary modules of software, such as a libraries, platforms, SDKs or objects. Software modules remain static until called upon by another module. In response to the call, the instruction pointer of the computer begins tracing its way through the code in the called upon module. The mental model of a software module is a Turing machine, which changes its state based on the algorithms that it contains.
In contrast, the mental model a software engine is a mechanical engine, which one can start and stop, and which may run idle for periods of time. Examples of software engines include relational database engines, workflow engines, and search engines. A common characteristic of software engines is metadata that provides models of the real data that the engine processes. Software modules pass data to the engine, and the engine uses its metadata models to transform the data into a different state.
Another characteristic of software engines consistent with their mental model is the ability to tune software engines for optimal performance. In contrast, software modules can be "tuned" only by rewriting them.
|This software article is a stub. You can help Wikipedia by expanding it.|