Authors disagree on the precise definition, but traits often considered important requirements and objectives of the language to be characterized as a programming language:
Function: A programming language is a language used to write computer programs, which instruct a computer to perform some kind of computation, and/or organize the flow of control between external devices (such as a printer, a robot, or any peripheral).
Target: Programming languages differ from natural languages in that natural languages are only used for interaction between people, while programming languages also allow humans to communicate instructions to machines. In some cases, programming languages are used by one program or machine to program another; PostScript source code, for example, is frequently generated programmatically to control a computer printer or display.
Constructs: Programming languages may contain constructs for defining and manipulating data structures or for controlling the flow of execution.
Expressive power: The theory of computation classifies languages by the computations they can express (see Chomsky hierarchy). All Turing complete languages can implement the same set of algorithms. ANSI/ISO SQL and Charity are examples of languages that are not Turing complete yet often called programming languages.
Non-computational languages, such as markup languages like HTML or formal grammars like BNF, are usually not considered programming languages. It is a usual approach to embed a programming language into the non-computational (host) language, to express templates for the host language.