The difference between standards and programming languagesCreated by Stuart Yeates (University of Oxford) on September 11, 2006
I've seen some confusion recently about the differences between standards and programming languages. StandardsA standard is a document which describes the structure, layout and meaning of something. Materials that follow the description are said to comply with the standard. The The Chicago Manual of Style is a standard for laying out certain kinds of print on the page. ASCII and Unicode are standards for representing strings of characters. SGML and HTML which is based on it, are standards, as are their successors XML and XHTML respectively. Open standards are standards under the control of ``impartial'' groups and freely usable without patent infringement or licencing costs. Organisations such as the International Organization for Standardization/International Standardization Organization (ISO), the International Telecommunication Union (ITU) and the Institute of Electrical and Electronics Engineers (IEEE) define open standards. Open standards you may use regularly include: the design of electrical plugs, which allow different manufacturer's appliances to plug into each other; international telephone system, which allows you to dial telephones across the world irrespective of the manufacturers of telephone at the other end or the exchanges between you; and DES/AES encryption which allow banks to communicate securely, and enable wire rather than physical money transfers. Closed standards are standards under the control of a company or partisan group and are commonly limited through the use of copyright, trade secrets, encryption, patents and licence fees. The line between impartial and partisan is not clean-cut, and even impartial groups can be the subject of lobbying and politics. Only very rarely does a standard (usually a closed standard) specify a licence under which instances (usually documents) may be distributed. SoftwareThe programming languages C, C++ and Scheme have standards specifying their structure layout and meaning. The programming language Perl is not a standard, because the implementation rather than a document defines the structure, layout and meaning of the language. All programming languages with a standard (that I'm aware of) use other standards by reference. The C language uses the ASCII standard. Java uses the more modern Unicode standard. The XSLT programming language goes one step further and uses the XML standard. There is quite a body of theoretical and practical research on programming languages, one key result is the Church-Turing thesis, which illustrates that all possible programming languages belong to an equivalence class and thus give us a test to determine what is (or is not) a programming language. Informally the Church-Turing thesis states that our notion of algorithm can be made precise and programming languages can encode those algorithms. Furthermore, an algorithm can be represented in any programming language; in other words, all ordinary programming languages are equivalent to each other in terms of theoretical computational power, and it is not possible to build a programming language that is more powerful than the simplest programming language. (Note that this formulation of power disregards practical factors such as speed or memory capacity; it considers all that is theoretically possible, given unlimited time and memory.) [Adapted from Church-Turing thesis on Wikipedia, on the basis that a programming language is a form of virtual machine.]
Software written in programming languages largely falls into two categories, programs which are end-user useful pieces of software and libraries which are collections of tools used by one or more program or library to get work done. Thunderbird, Word and AutoCAD are programs. NAG and libstdc++ are libraries. Some of these distinctions get broken down on the Web, where users don't necessarily see the difference between JavaScript (a language) and CSS (not a language), until they release that the current palaver over AJAX arose precisely because JavaScript is a programming language and was embedded at the ``right place'' in the browser to be extended in ways never thought of by the original authors. This property of apparent infinite extensibility is common to all programming languages. The following formats used on the Internet are programming languages: JavaScript, XSLT, Flash, Microsoft Word files (with macros), OpenOffice files (with macros), PostScript, Java and AJAX (actually a use of JavaScript). The following formats used on the Internet are not programming languages: CSS, HTML, XHTML, XML (even though XSLT, which is written in XML is a programming language), DocBook., TEI, Microsoft Word files (without macros), OpenOffice files (without macros) and PDF (Portable Document Format). cheers, stuart |