Jump to content

TRAC (programming language): Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
More specific dates, and distinguish between T64 and T84.
m v2.05b - Bot T20 CW#61 - Fix errors for CW project (Reference before punctuation)
(37 intermediate revisions by 25 users not shown)
Line 1: Line 1:
{{Short description|Programming language (1964)}}
'''TRAC''' (for '''T'''ext '''R'''eckoning '''A'''nd '''C'''ompiling) '''Language''' is a [[programming language]] developed between 1959-1964 by [[Calvin Mooers]] and implemented on a PDP-10 in 1964 by [[L. Peter Deutsch]]<ref>http://wayback.archive.org/web/20010408052535/http://tracfoundation.org/t64tech.htm</ref>. It was one of three "first languages" recommended by [[Ted Nelson]] in ''[[Computer Lib]]''. TRAC T64 was used until 1984, when Mooers updated it to TRAC T84<ref>http://wayback.archive.org/web/20010408052535/http://tracfoundation.org/t64tech.htm</ref>.
{{Infobox programming language
| name = TRAC
| logo =
| paradigm = [[general-purpose macro processor]]
| year = 1964
| designer = [[Calvin Mooers]]
| developer =
| latest_release_version =
| latest_release_date =
| implementations =
| typing =
| influenced_by = Macro SAP<ref name="hopl">{{cite encyclopedia |title=TRAC – A man-machine string manipulating language |encyclopedia=HOPL: Online Historical Encyclopaedia of Programming Languages |url=http://hopl.murdoch.edu.au/showlanguage.prx?exp=276|archive-url=https://web.archive.org/web/20090813125040/http://hopl.murdoch.edu.au/showlanguage.prx?exp=276 |archive-date=August 13, 2009}}</ref>
| influenced = [[SAM76]], [[ML/I]]<ref name="hopl"/>
| operating_system =
| license =
| website =
}}
'''TRAC''' (for '''T'''ext '''R'''eckoning '''A'''nd '''C'''ompiling) '''Language''' is a [[programming language]] developed between 1959–1964 by [[Calvin Mooers]] and first implemented on the [[PDP-1]] in 1964 by [[L. Peter Deutsch]].<ref name="T64">{{Cite web|url=http://tracfoundation.org/t64tech.htm|archive-url = https://web.archive.org/web/20010408052535/http://tracfoundation.org/t64tech.htm|archive-date = 2001-04-08|title = Coding Supply — Everything a Programmer Needs}}</ref> It was one of three "first languages" recommended by [[Ted Nelson]] in ''[[Computer Lib]]''. TRAC T64 was used until at least 1984, when Mooers updated it to TRAC T84.<ref name="T64"/>


== Language description ==
TRAC is a purely text-based language—a kind of macro language. Unlike traditional ''ad hoc'' macro languages of the time, such as those found in assemblers, TRAC is well planned, consistent, and in many senses complete. It has explicit input and output operators, unlike the typical implicit I/O at the outermost macro level, which makes it simultaneously simpler and more versatile than older macro languages.
TRAC is a purely text-based language — a kind of [[General-purpose macro processor|macro language]]. Unlike traditional ''ad hoc'' macro languages of the time, such as those found in assemblers, TRAC is well planned, consistent, and in many senses complete. It has explicit input and output operators, unlike the typical implicit I/O at the outermost macro level, which makes it simultaneously simpler and more versatile than older macro languages.


It also differs from traditional macro languages in that TRAC numbers are strings of digits, with integer arithmetic (without specific limits on maximum values) being provided through built-in ("primitive") functions. Arguably, one aspect of its completeness is that the concept of error is limited to events like lack of file space and requesting expansion of a string longer than the interpreter's working storage; what would in many languages be described as illegal operations are dealt with in TRAC by defining a result (often a null string) for every possible combination of a function's argument strings.
It also differs from traditional macro languages in that TRAC numbers are strings of digits, with integer arithmetic (without specific limits on maximum values) being provided through built-in ("primitive") functions. Arguably, one aspect of its completeness is that the concept of error is limited to events like lack of file space and requesting expansion of a string longer than the interpreter's working storage; what would in many languages be described as illegal operations are dealt with in TRAC by defining a result (often a null string) for every possible combination of a function's argument strings.

TRAC is a text-processing language,<ref>
David Walden.
[http://walden-family.com/texland/macro-memories-v07.pdf "Macro Memories, 1964–2013"].
2014.
</ref>
also called a string processing language.<ref>
Carol Loeb Mir.
[https://files.eric.ed.gov/fulltext/ED082489.pdf "A Comparison of String Handling in Four Programming Languages"].
1972.
</ref>


The emphasis on strings as strings is so strong that TRAC provides mechanisms for handling the language's own syntactic characters either in their syntactic roles or like any other character, and [[self-modifying code]] has more the feel of a natural consequence of typical TRAC programming techniques than of being a special feature.
The emphasis on strings as strings is so strong that TRAC provides mechanisms for handling the language's own syntactic characters either in their syntactic roles or like any other character, and [[self-modifying code]] has more the feel of a natural consequence of typical TRAC programming techniques than of being a special feature.


TRAC is, like [[APL programming language|APL]] or [[LISP]], an [[expression orientation|expression oriented]] language (in contrast to more typical [[procedure orientation|procedure-oriented]] languages), but unlike APL, it completely lacks operators. In most respects, it is a case of pure [[functional programming]].
TRAC is, like [[APL programming language|APL]] or [[LISP]], an [[expression orientation|expression oriented]] language (in contrast to more typical [[procedure orientation|procedure-oriented]] languages), but unlike APL, it completely lacks operators. In most respects, it is a case of pure [[functional programming]].

TRAC is [[homoiconic]].<ref name="trac_paper">
{{cite book |first1=C.N. |last1=Mooers |author-link=Calvin Mooers |first2=L.P. |last2=Deutsch |author-link2=L. Peter Deutsch |chapter=TRAC, A Text-Handling Language |title=Proceeding ACM '65 Proceedings of the 1965 20th national conference |pages=229–246 |year=1965 |doi=10.1145/800197.806048 |s2cid=40013081 }}
</ref><ref name="kay_thesis">
{{cite thesis |author-link=Alan Kay |first=Alan |last=Kay |url=http://www.mprove.de/diplom/gui/kay69.html |title=The Reactive Engine |type=PhD |year=1969 |publisher=University of Utah }}
</ref><ref>
Klaas van Schelven.
[http://www.expressionsofchange.org/dont-say-homoiconic/ "Don't say 'Homoiconic'"].
</ref>


TRAC has in common with LISP a syntax that generally involves the presence of many levels of nested parentheses.
TRAC has in common with LISP a syntax that generally involves the presence of many levels of nested parentheses.


The main inspiration for TRAC came from three papers by [[Douglas McIlroy]].<ref name="trac_paper"/><ref>[[Douglas McIlroy|McIlroy, M.D.]], Macro Instruction Extensions of Compiler Languages. CACM 3, No. 4 (1960), 214–220.</ref><ref>Eastwood, D.E. and McIlroy, M.D., Macro Compiler Modification of SAP. Bell Telephone Laboratories Computation Center, 1959.</ref><ref>McIlroy, M.D., Using SAP Macro Instructions to Manipulate Symbolic Expressions. Bell Telephone Laboratories Computation Center (1960)</ref>
Mooers trademarked the name TRAC in an effort to maintain his control over the definition of the language, an unusual and pioneering action at the time. At one point, he brought an intellectual property infringement suit against [[Digital Equipment Corporation|DEC]], alleging that a contract to deliver a mini-computer with a TRAC interpreter violated his rights. However, despite the trademark status, the name has been used several times for unrelated [[information technology]] projects, including a current [[open source]] project management system called [[Trac]].

== Intellectual property ==
Mooers trademarked the name TRAC in an effort to maintain his control over the definition of the language, an unusual and pioneering action at the time. At one point, he brought an intellectual property infringement suit against [[Digital Equipment Corporation|DEC]], alleging that a contract to deliver a mini-computer with a TRAC interpreter violated his rights. "The first issue of [[Dr. Dobb's Journal]], one of the early publications in the personal computer field, has a vitriolic editorial against Mooers and his rapacity in trying to charge people for his computing language."<ref>{{cite journal|last1=Mooers|first1=Calvin|title=Oral history interview with Calvin N. Mooers and Charlotte D. Mooers|url=http://conservancy.umn.edu/handle/11299/107510|website=Charles Babbage Institute|date=22 June 1993}}</ref><ref>{{cite web | url=https://archive.org/stream/dr_dobbs_journal_vol_01#page/n121/mode/2up/ | title=Dr. Dobb's Journal - Vol 1 | year=1976 }}</ref>
The name has since been used several times for unrelated [[information technology]] projects, including a current [[Open-source software|open source]] project management system called [[Trac]].

== Influence and usage ==
TRAC was later implemented on the [[PDP-8]], [[PDP-10]], and [[PDP-11]].


There have been various languages inspired by TRAC. To avoid any trouble with Mooers, they renamed primitives and/or used different metacharacters. In SAM76's case, primitives were added, according to Claude Kagan, "because TRAC is baby talk". In MINT's case, primitives were added to give access to a sophisticated text editor machinery.
There have been various languages inspired by TRAC. To avoid any trouble with Mooers, they renamed primitives and/or used different metacharacters. In SAM76's case, primitives were added, according to Claude Kagan, "because TRAC is baby talk". In MINT's case, primitives were added to give access to a sophisticated text editor machinery.
* one perceived shortcoming of TRAC was lack of full extensibility: some TRAC primitive functions are sensitive to the distinction between a null (zero-character) argument and a nonexistent (non-delimited) one, but beyond its last non-null argument, a user-defined function cannot make the distinction. [[SAM76]] was a TRAC-like language which eliminated that limitation.
* one perceived shortcoming of TRAC was lack of full extensibility: some TRAC primitive functions are sensitive to the distinction between a null (zero-character) argument and a nonexistent (non-delimited) one, but beyond its last non-null argument, a user-defined function cannot make the distinction. [[SAM76]] was a TRAC-like language which eliminated that limitation.
* [[Russ Nelson]] implemented an [[emacs]] extension language named MINT ('''M'''INT '''I'''s '''N'''ot '''T'''RAC). This language is used by the [[FreeDOS]] editor [[FreeMACS]].
* [[Russ Nelson]] implemented an [[emacs]] extension language named MINT ('''M'''INT '''I'''s '''N'''ot '''T'''RAC). This language is used by the [[FreeDOS]] editor [[FreeMACS]].
* [[John Walker (programmer)]] implemented an embeddable extension language library DIESEL <ref>https://www.fourmilab.ch/diesel/</ref> ('''D'''umb '''I'''nterpretively '''E'''valuated '''S'''tring '''E'''xpression '''L'''anguage) originally for menu macro processing in [[AutoCAD]].<ref>https://www.fourmilab.ch/nav/topics/components.html#diesel</ref>

TRAC was used by [[FTP Software]] in its PC/TCP product as the modem dialer scripting language.

TRAC was also used as a front end on Digital Productions Cray renderer for films, including ''[[The Last Starfighter]]''.


== Example program ==
TRAC was used by FTP Software in its PC/TCP product as the modem dialler scripting language.
TRAC T84 script to compute Fibonacci numbers:<ref>[http://www.thocp.net/software/languages/trac.html TRAC information page], at [[The History of Computing Project]], with small code sample and photo of C. M. Mooers.</ref>
<pre>:(s,fibo,(
:(ei,<1>, 1, 0,(
:(ei,<1>, 2, 1,(
:(aa, :(ri,fibo,:(as, <1>,1)),:(ri,fibo,:(as, <1>,2)))
))
))
))`
:(mw,fibo)'</pre>


==See also==
TRAC was also used as a front end on Digital Productions Cray renderer for films, including [[The Last Starfighter]].
* [[TTM (programming language)]], a programming language inspired by TRAC


== See also ==
==References==
{{Reflist}}
* [[TTM (programming language)|TTM]], a programming language inspired by TRAC


==External links==
==External links==
*[http://web.archive.org/web/20050324000031/http://tracfoundation.org/ The TRAC Foundation] (Archived)
*[https://web.archive.org/web/20050324000031/http://tracfoundation.org/ The TRAC Foundation] (Archived)
*[http://dl.acm.org/citation.cfm?id=365230.365270 TRAC, a procedure-describing language for the reactive typewriter] in the Communications of the ACM, Volume 9 Issue 3, March 1966.
*[http://world.std.com/~awalker/cnmlist.html Andrew Walker's TRAC Information page]
*[http://world.std.com/~awalker/cnmlist.html Andrew Walker's TRAC Information page]
*[http://hopl.murdoch.edu.au/showlanguage2.prx?exp=276 TRAC entry] in the [[HOPL]] [http://hopl.murdoch.edu.au/ Encyclopedia of Computer Languages]
*[http://hopl.info/showlanguage2.prx?exp=276 TRAC entry] in the [[HOPL]] [https://web.archive.org/web/20110220044217/http://hopl.murdoch.edu.au/ Encyclopedia of Computer Languages]
*[http://sourceforge.net/projects/trac2001 A TRAC implementation project] on [[SourceForge]].
*[http://www.thocp.net/software/languages/trac.html TRAC information page], at [[The History of Computing Project]], with small code sample and photo of C. M. Mooers.
*[http://sourceforge.net/projects/trac2001 A TRAC implementation project] on [[sourceforge]]. ''Sadly, this seems to be a dead project.''
*[http://purl.umn.edu/107510 Oral history interview with Calvin N. Mooers and Charlotte D. Mooers] at the [[Charles Babbage Institute]]. Interview discusses information retrieval and programming language research from World War II through the early 1990s.
*[http://purl.umn.edu/107510 Oral history interview with Calvin N. Mooers and Charlotte D. Mooers] at the [[Charles Babbage Institute]]. Interview discusses information retrieval and programming language research from World War II through the early 1990s.


[[Category:Macro programming languages]]
[[Category:Macro programming languages]]
[[Category:Text-oriented programming languages]]
[[Category:Homoiconic programming languages]]

Revision as of 09:18, 28 February 2024

TRAC
Paradigmgeneral-purpose macro processor
Designed byCalvin Mooers
First appeared1964
Influenced by
Macro SAP[1]
Influenced
SAM76, ML/I[1]

TRAC (for Text Reckoning And Compiling) Language is a programming language developed between 1959–1964 by Calvin Mooers and first implemented on the PDP-1 in 1964 by L. Peter Deutsch.[2] It was one of three "first languages" recommended by Ted Nelson in Computer Lib. TRAC T64 was used until at least 1984, when Mooers updated it to TRAC T84.[2]

Language description

TRAC is a purely text-based language — a kind of macro language. Unlike traditional ad hoc macro languages of the time, such as those found in assemblers, TRAC is well planned, consistent, and in many senses complete. It has explicit input and output operators, unlike the typical implicit I/O at the outermost macro level, which makes it simultaneously simpler and more versatile than older macro languages.

It also differs from traditional macro languages in that TRAC numbers are strings of digits, with integer arithmetic (without specific limits on maximum values) being provided through built-in ("primitive") functions. Arguably, one aspect of its completeness is that the concept of error is limited to events like lack of file space and requesting expansion of a string longer than the interpreter's working storage; what would in many languages be described as illegal operations are dealt with in TRAC by defining a result (often a null string) for every possible combination of a function's argument strings.

TRAC is a text-processing language,[3] also called a string processing language.[4]

The emphasis on strings as strings is so strong that TRAC provides mechanisms for handling the language's own syntactic characters either in their syntactic roles or like any other character, and self-modifying code has more the feel of a natural consequence of typical TRAC programming techniques than of being a special feature.

TRAC is, like APL or LISP, an expression oriented language (in contrast to more typical procedure-oriented languages), but unlike APL, it completely lacks operators. In most respects, it is a case of pure functional programming.

TRAC is homoiconic.[5][6][7]

TRAC has in common with LISP a syntax that generally involves the presence of many levels of nested parentheses.

The main inspiration for TRAC came from three papers by Douglas McIlroy.[5][8][9][10]

Intellectual property

Mooers trademarked the name TRAC in an effort to maintain his control over the definition of the language, an unusual and pioneering action at the time. At one point, he brought an intellectual property infringement suit against DEC, alleging that a contract to deliver a mini-computer with a TRAC interpreter violated his rights. "The first issue of Dr. Dobb's Journal, one of the early publications in the personal computer field, has a vitriolic editorial against Mooers and his rapacity in trying to charge people for his computing language."[11][12] The name has since been used several times for unrelated information technology projects, including a current open source project management system called Trac.

Influence and usage

TRAC was later implemented on the PDP-8, PDP-10, and PDP-11.

There have been various languages inspired by TRAC. To avoid any trouble with Mooers, they renamed primitives and/or used different metacharacters. In SAM76's case, primitives were added, according to Claude Kagan, "because TRAC is baby talk". In MINT's case, primitives were added to give access to a sophisticated text editor machinery.

  • one perceived shortcoming of TRAC was lack of full extensibility: some TRAC primitive functions are sensitive to the distinction between a null (zero-character) argument and a nonexistent (non-delimited) one, but beyond its last non-null argument, a user-defined function cannot make the distinction. SAM76 was a TRAC-like language which eliminated that limitation.
  • Russ Nelson implemented an emacs extension language named MINT (MINT Is Not TRAC). This language is used by the FreeDOS editor FreeMACS.
  • John Walker (programmer) implemented an embeddable extension language library DIESEL [13] (Dumb Interpretively Evaluated String Expression Language) originally for menu macro processing in AutoCAD.[14]

TRAC was used by FTP Software in its PC/TCP product as the modem dialer scripting language.

TRAC was also used as a front end on Digital Productions Cray renderer for films, including The Last Starfighter.

Example program

TRAC T84 script to compute Fibonacci numbers:[15]

:(s,fibo,(
:(ei,<1>, 1, 0,(
:(ei,<1>, 2, 1,(
:(aa, :(ri,fibo,:(as, <1>,1)),:(ri,fibo,:(as, <1>,2)))
))
))
))`
:(mw,fibo)'

See also

References

  1. ^ a b "TRAC – A man-machine string manipulating language". HOPL: Online Historical Encyclopaedia of Programming Languages. Archived from the original on August 13, 2009.
  2. ^ a b "Coding Supply — Everything a Programmer Needs". Archived from the original on 2001-04-08.
  3. ^ David Walden. "Macro Memories, 1964–2013". 2014.
  4. ^ Carol Loeb Mir. "A Comparison of String Handling in Four Programming Languages". 1972.
  5. ^ a b Mooers, C.N.; Deutsch, L.P. (1965). "TRAC, A Text-Handling Language". Proceeding ACM '65 Proceedings of the 1965 20th national conference. pp. 229–246. doi:10.1145/800197.806048. S2CID 40013081.
  6. ^ Kay, Alan (1969). The Reactive Engine (PhD). University of Utah.
  7. ^ Klaas van Schelven. "Don't say 'Homoiconic'".
  8. ^ McIlroy, M.D., Macro Instruction Extensions of Compiler Languages. CACM 3, No. 4 (1960), 214–220.
  9. ^ Eastwood, D.E. and McIlroy, M.D., Macro Compiler Modification of SAP. Bell Telephone Laboratories Computation Center, 1959.
  10. ^ McIlroy, M.D., Using SAP Macro Instructions to Manipulate Symbolic Expressions. Bell Telephone Laboratories Computation Center (1960)
  11. ^ Mooers, Calvin (22 June 1993). "Oral history interview with Calvin N. Mooers and Charlotte D. Mooers". Charles Babbage Institute.
  12. ^ "Dr. Dobb's Journal - Vol 1". 1976.
  13. ^ https://www.fourmilab.ch/diesel/
  14. ^ https://www.fourmilab.ch/nav/topics/components.html#diesel
  15. ^ TRAC information page, at The History of Computing Project, with small code sample and photo of C. M. Mooers.