{{Short description|High-level computer programming language}} {{Update|date=December 2021}} {{Infobox programming language | name = Turing | logo = Turing logo.gif | paradigm = [[Multi-paradigm programming language|multi-paradigm]]: [[Procedural programming|procedural]], [[Object-oriented programming|object-oriented]] | designer = [[Ric Holt]], [[James Cordy]] | developer = Holt Software Associates | released = {{Start date and age|1982}} | latest release version = 4.1.1 | latest release date = {{End date and age|2007|11|25}} | discontinued = Yes | typing = [[Static typing|static]], [[Manifest typing|manifest]] | operating system = [[Microsoft Windows]] | license = | file ext = | website = <!-- {{URL|www.example.com}} --> | implementations = Turing, [[#TPlus|TPlus]], [[#OpenT|OpenT]] | dialects = [[#Object-Oriented Turing|Object-Oriented Turing]], [[#Turing+|Turing+]] | influenced by = [[Euclid (programming language)|Euclid]], [[Pascal (programming language)|Pascal]], [[SP/k]] | influenced = }}

'''Turing''' is a [[High-level programming language|high-level]], [[General-purpose programming language|general purpose]] [[programming language]] developed in 1982 by [[Ric Holt]] and [[James Cordy]], at [[University of Toronto]] in Ontario, Canada. It was designed to help students taking their first [[computer science]] course learn how to code. Turing is a descendant of [[Pascal (programming language)|Pascal]], [[Euclid (programming language)|Euclid]], and [[SP/k]] that features a clean [[Syntax (programming languages)|syntax]] and precise machine-independent [[Semantics (programming languages)|semantics]].

Turing 4.1.0 is the latest stable version. Versions 4.1.1 and 4.1.2 do not emit [[standalone program]] [[.exe]] files. Versions pre-4.1.0 have outdated syntax and functions.

==Overview== Named after British computer scientist [[Alan Turing]], Turing is used mainly as a teaching language at the high school and university level.<ref>{{cite journal |last1=Fluck |first1=A. |last2=Webb |first2=M. |last3=Cox |first3=M. |last4=Angeli |first4=C. |last5=Malyn-Smith |first5=J. |last6=Voogt |first6=J. |last7=Zagami |first7=J. |date=2016 |title=Arguing for computer science in the school curriculum |journal=Journal of Educational Technology & Society |volume=19 |issue=3 |pages=38–46}}</ref> Two other versions exist, [[#Object-Oriented Turing|Object-Oriented Turing]] and [[#Turing+|Turing+]], a systems programming variant. In September 2001, "Object Oriented Turing" was renamed "Turing" and the original Turing was renamed "Classic Turing". Turing is now unsupported by Holt Software Associates in [[Toronto, Ontario]]. Turing was widely used in high schools in [[Ontario]] as an introduction to programming.<ref>{{Cite web|url=http://compsci.ca/holtsoft/|title=Download Turing & RTP (Ready to Program)|last=info@compsci.ca|website=compsci.ca|access-date=2018-08-21}}</ref>

On November 28, 2007, Turing, which was previously a commercial programming language, became freeware, available to download from the developer's website free of charge for personal, commercial, and educational use.<ref name=holtsoft>{{cite web |url=http://www.holtsoft.com |title=Holt Software Associates |date=January 2008 |access-date=2010-04-10 |url-status=dead |archive-url=https://web.archive.org/web/20100405101149/http://www.holtsoft.com/ |archive-date=2010-04-05}}</ref><ref name="holtsoft/old_index">{{cite web |url=http://www.holtsoft.com/old_index.html |title=Holt Software Associates (old) |date=2007-11-25 |access-date=2010-04-10 |url-status=dead |archive-url=https://web.archive.org/web/20100417185823/http://www.holtsoft.com/old_index.html |archive-date=2010-04-17}}</ref><ref>{{Cite web |url=http://compsci.ca/blog/download-turing-411/ |title=Download Turing 4.1.1 |access-date=2009-01-10 |publisher=compsci.ca Blog |date=2007-11-28}}</ref>

The makers of Turing, Holt Software Associates, have since ceased operations, and Turing has seen no further development since November 25, 2007.<ref name="holtsoft/old_index"/>

==Syntax== Turing is designed to have a very lightweight, readable, intuitive [[Syntax (programming languages)|syntax]]. Here is the entire [["Hello, World!" program]] in Turing with [[syntax highlighting]]:

'''put''' <span style="color:red">"Hello World!"</span>

Turing avoids [[semicolon]]s and [[Curly brackets|braces]], using explicit end markers for most language constructs instead, and allows [[Declaration (computer programming)|declarations]] anywhere. Here is a complete program defining and using the traditional [[Recursion|recursive]] function to calculate a [[factorial]].

<span style="color:green">[[Comment (computer programming)|%]] Accepts a number and calculates its factorial</span> '''function''' <span style="color:blue">factorial</span> (<span style="color:blue">n</span>: '''int''') : '''real''' '''if''' <span style="color:blue">n</span> = 0 '''then''' '''result''' 1 '''else''' '''result''' <span style="color:blue">n</span> * <span style="color:blue">factorial</span> (<span style="color:blue">n</span> - 1) '''end if''' '''end''' <span style="color:blue">factorial</span> '''var''' <span style="color:blue">n</span>: '''int''' '''loop''' '''put''' <span style="color:red">"Please input an integer: "</span> .. '''get''' <span style="color:blue">n</span> '''exit when''' <span style="color:blue">n</span> >= 0 '''put''' <span style="color:red">"Input must be a non-negative integer."</span> '''end loop''' '''put''' <span style="color:red">"The factorial of "</span>, <span style="color:blue">n</span>, <span style="color:red">" is "</span>, <span style="color:blue">factorial</span> (<span style="color:blue">n</span>)

==Open implementations==

Currently, there are two open source alternative implementations of Turing: Open Turing, an open source version of the original [[Interpreter (computing)|interpreter]], and [[#TPlus|TPlus]], a native compiler for the concurrent system programming language variant [[#Turing+|Turing+]]. [[#OpenT|OpenT]], a project to develop a Turing compiler, was discontinued.

===Open Turing===

Open Turing is an open-source implementation of the original Turing interpreter for Windows written by Tristan Hume. It includes speed improvements, new features such as OpenGL 3D and a new code editor. It is fully backwards compatible with the closed-source implementation.<ref>{{cite web|last=Hume|first=Tristan|title=Open Turing|url=https://tristan.hume.ca/openturing/|access-date=6 May 2012}}</ref>

===TPlus=== TPlus is an open-source implementation of original (non-Object-Oriented) Turing with systems programming extensions developed at the University of Toronto and ported to [[Linux]], [[Oracle Solaris|Solaris]], and [[macOS|Mac OS X]] at [[Queen's University at Kingston|Queen's University]] in the late 1990s.<ref>{{cite web|last=Cordy|first=James|title=Turing+ 6.1|url=https://txl.ca/txl-tplusdownload.html|access-date=11 December 2020}}</ref> TPlus implements [[#Turing+|Turing+]] (Turing Plus), a concurrent systems programming language based on the original Turing programming language. Some, but not all, of the features of Turing Plus were eventually subsumed into the present [[#Object-Oriented Turing|Object-Oriented Turing]] language. Turing Plus extends original Turing with [[Process (computing)|processes]], [[Monitor (synchronization)|monitors]] (as specified by [[C.A.R. Hoare]]), and language constructs needed for system programming such as binary input-output, separate compiling, variables at absolute addresses, type converters and other features.

== Turing+ == {{Infobox programming language | name = Turing+ | logo = | paradigm = [[Multi-paradigm programming language|multi-paradigm]]: [[Procedural programming|procedural]], [[Object-oriented programming|object-oriented]], [[Concurrent programming|concurrent]] | designer = [[Ric Holt]], [[James Cordy]] | developer = [[Ric Holt]], [[James Cordy]] | released = {{Start date and age|1987}} | latest release version = <!--x.y.z --> | latest release date = <!-- {{Start date and age|202y|mm|dd|mf=yes}} --> | typing = [[Static typing|static]], [[Manifest typing|manifest]] | operating system = | license = | file ext = | website = | implementations = | dialects = | influenced by = [[Concurrent Euclid]], Turing | influenced = [[#Object-Oriented Turing|Object-Oriented Turing]] }}

'''Turing+''' (Turing Plus) is a [[concurrent system]]s programming language based on the Turing programming language designed by [[James Cordy]] and [[Ric Holt]], then at the [[University of Toronto]], Canada, in 1987. Some, but not all, of the features of Turing+ were eventually subsumed into [[#Object-Oriented Turing|Object-Oriented Turing]]. Turing+ extended original Turing with processes and [[Monitor (synchronization)|monitor]]s (as specified by [[C.A.R. Hoare]]) as well as language constructs needed for systems programming such as binary input-output, separate compiling, variables at absolute addresses, type converters, and other features.

Turing+ was explicitly designed to replace [[Concurrent Euclid]] in systems-programming applications. The [[TUNIS]] operating system, originally written in Concurrent Euclid, was recoded to Turing+ in its [[MiniTunis]] implementation. Turing+ has been used to implement several production software systems, including the language [[TXL (programming language)|TXL]].

== Object-Oriented Turing == {{Infobox programming language | name = Object-Oriented Turing | logo = | paradigm = [[Multi-paradigm programming language|multi-paradigm]]: [[Procedural programming|procedural]], [[Object-oriented programming|object-oriented]], [[Concurrent programming|concurrent]] | designer = [[Ric Holt]] | developer = [[Ric Holt]] | released = {{Start date and age|1991}} | latest release version = <!--x.y.z --> | latest release date = <!-- {{Start date and age|202y|mm|dd|mf=yes}} --> | typing = [[Static typing|static]], [[Manifest typing|manifest]] | operating system = [[Cross-platform]]: [[Sun-4]], [[MIPS architecture|MIPS]], [[IBM System p|RS-6000]] | license = | file ext = | website = | implementations = | dialects = | influenced by = Turing | influenced = }}

'''Object-Oriented Turing''' is an extension of the Turing programming language and a replacement for [[#Turing Plus|Turing Plus]] created by [[Ric Holt]]<ref>{{cite book | last1=Mancoridis | first1=Spiros | last2=Holt | first2=Richard C. | last3=Penny | first3=David A. | title=Proceedings of the 1993 ACM conference on Computer science - CSC '93 | chapter=A conceptual framework for software development | date=1993 | pages=74–80 | doi=10.1145/170791.170806 | isbn=0-89791-558-5 | chapter-url=https://doi.org/10.1145/170791.170806 }}</ref><ref>{{cite book |title=Turing reference manual|last=Holt|first=RC|author-link=Ric Holt|edition=3rd.|year=1992|publisher=Holt Software Associates|location=[[Toronto]]|isbn=978-0-921598-15-2|oclc=71476276}}</ref> of the [[University of Toronto]], Canada, in 1991. It is [[Imperative programming|imperative]], [[Object-oriented programming|object-oriented]], and [[Concurrency (computer science)|concurrent]]. It has [[Modularity (programming)|modules]], [[Class (programming)|classes]], single [[Inheritance (object-oriented programming)|inheritance]], [[Process (computing)|processes]], [[exception handling]], and optional [[machine-dependent]] programming.

There is an [[integrated development environment]] under the [[X Window System]] and a demo version.{{citation needed|date=October 2013}} Versions exist for [[Sun-4]], [[MIPS architecture|MIPS]], [[IBM System p|RS-6000]], [[NeXTSTEP]], [[Windows 95]], and others.

==References== {{Reflist}}

==Further reading== *{{cite book |last=Grogono |first=Peter |date=1995 |title=Programming with Turing and Object Oriented Turing |url=https://www.springer.com/gp/book/9780387945170 |publisher=Springer-Verlag|isbn=978-0-387-94517-0}} *{{cite journal |last1=Holt |first1=Richard C. |author1-link=Ric Holt |last2=Cordy |first2=James R. |author2-link=James Cordy |date=December 1983 |title=The Turing language report |journal=Annual Progress Report |publisher=Computer Systems Research Institute, [[University of Toronto]] |location=Canada |issn=0316-6295}} *{{cite journal |last1=Holt |first1=Richard C. |author1-link=Ric Holt |last2=Cordy |first2=James R. |author2-link=James Cordy |date=December 1988 |title=The Turing programming language |journal=[[Communications of the ACM]] |volume=31 |issue=12 |pages=1410–1423 |doi=10.1145/53580.53581 |s2cid=40859457 |doi-access=free}} *{{cite book |last1=Holt |first1=Richard C. |author1-link=Ric Holt |last2=Matthews |first2=Philip A. |last3=Rosselet |first3=J. Alan |last4=Cordy |first4=James R. |author4-link=James Cordy |year=1988 |title=The Turing programming language: design and definition |publisher=[[Prentice Hall]] |location=[[Englewood Cliffs, New Jersey|Englewood Cliffs, N.J.]] |isbn=978-0-13-933136-7 |oclc=17377539}}

==External links== {{Wikibooks|Turing}} * {{GitHub|Open-Turing-Project/OpenTuring}}

{{Authority control}}

[[Category:1982 establishments in Ontario]] [[Category:Academic programming languages]] [[Category:Algol programming language family]] [[Category:Articles with example code]] [[Category:Educational programming languages]] [[Category:Programming languages created in 1982]] [[Category:Statically typed programming languages]] [[Category:Structured programming languages]] [[Category:University of Toronto software]] [[Category:Alan Turing]]