Toy programming language
|This article does not cite any sources. (July 2010) (Learn how and when to remove this template message)|
A toy language is a computer programming language that lacks the requirements to create reliable, maintainable computer programs in a production environment. Which programming systems to categorize as toy languages is difficult, however, as the definition of is or is not a "toy" is often subjective. Also, a "toy" language should be distinguished from domain-specific languages and esoteric programming languages. A "problem domain" language is a limited programming language which may be specifically tuned for the problem to be solved, such as the PostScript language used in PDF documents, or the limited instruction set used to program the multiple core graphics processing unit in a video card. An "esoteric language" is a programming language designed to test the boundaries of computer programming language design, as a proof of concept, as software art, or as a joke, such as Befunge or LOLCODE.
Toy languages should exclude "one time" use compilers and interpreters such as bootstrapping compilers which are used to create the initial compiler for a language which is not available on the target machine, as the bootstrap compiler changes the source into something which can be used on the bootstrap machine; once the bootstrap compiler has created the initial compiler, it can then be used to compile itself.
One way to consider if a language is not a toy is to consider if the language would be capable of answering in the affirmative, the question, "would a professional programmer with several years of experience seriously consider using the language as a means to provide a reasonable, cost effective solution for a customer's problem?" Also, as human beings have learned more about programming concepts, language translation, and problem domains, the range of expected capabilities of programming languages is likely to increase and some languages which are or were considered professional-class may become "downgraded" to toy-class languages, as some older languages of the 1960s and 1970s may not be adequate to solve today's problems. While a language that could do simple sequential file read and file write with some processing of the material read may have been adequate for production use twenty or thirty years ago, it is probably likely that programming languages without either random-access file capabilities or SQL might now be considered "toy" languages.
Also, older versions of languages may be considered "toy" languages because people not familiar with the current state of the language may be unaware of the latest features. The original BASIC programming language lacked a number of features (e.g. longer variable names, multiline functions and procedures), but was a considerably less capable language than current dialects of BASIC such as Microsoft Visual Basic, Gambas or Free Basic. Also, the original Pascal language lacked some essential features such as strings, but current Object Pascal compilers such as Delphi or Free Pascal provide a complete professional language system capable of solving any problem which could be handled by C or C++.
Languages such as Brainfuck and Whitespace are both considered esoteric programming languages. They are Turing complete, which means they are able to compute any computable function. Logo is an example of a toy language. Its goal was originally to create a math land where children could play with words and sentences. For a long time, the GNU Compiler Collection was shipped with a toy programming language called Treelang which was essentially C without the advanced features such as pointers, arrays, and records.
Though a toy language may be mathematically complete, it is usually limited in one or several ways. It may not support a full range of programming constructs or concepts. It may lack a full set of support libraries considered to be required for creating production-quality programs.
The main use of a toy language is in computer languages research. Some uses are as frameworks for researching new programming constructs or as a prototype for new language concepts or paradigms. Other notable uses are as a learning or demonstration tool, e.g. in universities, for programming constructs and techniques not available in mainstream languages and as an exercise in building a language from scratch.