Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Atlas Autocode
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{short description|1960s computer programming language}} {{More citations needed|date=September 2009}} {{Infobox programming language | name = Atlas Autocode | logo = <!-- Filename only --> | logo caption = | screenshot = <!-- Filename only --> | screenshot caption = | paradigms = [[Procedural programming|Procedural]], [[Imperative programming|imperative]], [[Structured programming|structured]] | family = [[ALGOL]] | designers = [[Tony Brooker]], Derrick Morris | developer = [[University of Manchester]] | released = {{Start date and age|1963}}<!-- If known, add |mm|dd|df=yes --> | latest release version = | latest release date = <!-- {{Start date and age|1965|mm|dd|df=yes}} --> | typing = [[Static type|Static]], [[Strong and weak typing|strong]] | scope = [[Scope (computer science)|Lexical]] | programming language = [[ALGOL 60]] | discontinued = Yes | platform = [[Atlas (computer)|Atlas]]<br/>[[English Electric KDF9]] | operating system = Supervisor | license = | file ext = | file format = <!-- or: | file formats = --> | website = <!-- {{URL|www.example.com}} --> | implementations = [[Edinburgh IMP]] | dialects = | influenced by = [[ALGOL 60]] | influenced = }} '''Atlas Autocode''' ('''AA''')<ref name="AA">{{Cite web |last=Brooker |first=R.A. |last2=Rohl |first2=J.S. |date=1965 |url=https://history.dcs.ed.ac.uk/archive/docs/Atlas_Autocode_1965.pdf |title=Atlas Autocode Reference Manual |publisher=University of Manchester Computer Science Department }} ([http://history.dcs.ed.ac.uk/archive/scans/atlas_autocode_manual/ Original scans] {{Webarchive|url=https://web.archive.org/web/20190116114819/http://history.dcs.ed.ac.uk/archive/scans/atlas_autocode_manual/ |date=2019-01-16 }})</ref><ref name="AA_ED">{{Cite web |last=Schofoeld |first=P.D. |last2=Osbourne |first2=M.R. |date=1965 |url=http://history.dcs.ed.ac.uk/archive/docs/CU-Rep-1-AA.pdf |title=Programming in Atlas Autocode, Computer Unit Report No. 1 |publisher=University of Edinburgh |access-date=2006-04-12 |archive-date=2020-05-15 |archive-url=https://web.archive.org/web/20200515162223/http://history.dcs.ed.ac.uk/archive/docs/CU-Rep-1-AA.pdf |url-status=dead }} ([http://compsoc.nuigalway.ie/~bfoley/edhist/CU-Rep-1-AA/CU-Rep-1-AA.html Original scans] {{Webarchive|url=https://web.archive.org/web/20110721125558/http://compsoc.nuigalway.ie/~bfoley/edhist/CU-Rep-1-AA/CU-Rep-1-AA.html |date=2011-07-21 }})</ref> is a [[programming language]] developed around 1963 at the [[University of Manchester]]. A variant of the language [[ALGOL]], it was developed by [[Tony Brooker]] and Derrick Morris for the [[Atlas (computer)|Atlas]] computer. The initial AA and AB compilers were written by Jeff Rohl and Tony Brooker using the Brooker-Morris [[Compiler Compiler |Compiler-compiler]], with a later hand-coded non-CC implementation (ABC) by Jeff Rohl.<ref>{{cite web|url=https://curation.cs.manchester.ac.uk/atlas/docs/Brooker%20Atlas%20CC%20rev%20April%202016bb.pdf |title=Tony Brooker and the Atlas Compiler Compiler |date=February 2014 |access-date=2024-02-16 }}</ref> The word ''[[Autocode]]'' was basically an early term for ''programming language''. Different autocodes could vary greatly. ==Features== AA was a [[Block (programming)|block structured]] language that featured explicitly typed [[Variable (computer science)|variables]], [[subroutine]]s, and functions. It omitted some ALGOL features such as ''[[Call by name#Call by name|passing parameters by name]]'', which in [[ALGOL 60]] means passing the [[memory address]] of a short subroutine (a ''[[thunk]]'') to recalculate a parameter each time it is mentioned. The AA [[compiler]] could generate range-checking for [[Array data structure|array]] accesses, and allowed an array to have dimensions that were determined at [[Runtime (program lifecycle phase)|runtime]], i.e., an array could be declared as <code><u>integer</u> <u>array</u> Thing (i:j)</code>, where <code>i</code> and <code>j</code> were calculated values. AA high-level routines could include [[machine code]], either to make an [[inner loop]] more efficient or to effect some operation which otherwise cannot be done easily.<ref name="AA"/> AA included a <code><u>complex</u></code> data type<ref name="AA"/> to represent [[complex number]]s, partly because of pressure from the [[electrical engineering]] department, as complex numbers are used to represent the behavior of [[alternating current]]. The [[imaginary unit]] square root of -1 was represented by <code><u>i</u></code>, which was treated as a fixed complex constant = ''i''. The <code><u>complex</u></code> data type was dropped when Atlas Autocode later evolved into the language [[Edinburgh IMP]]. IMP was an extension of AA and was used to write the [[Edinburgh Multiple Access System]] (EMAS) [[operating system]]. In addition to being notable as the progenitor of IMP and EMAS, AA is noted for having had many of the features of the original ''[[Compiler-compiler|Compiler Compiler]]''. A variant of the AA compiler included run-time support for a top-down [[recursive descent parser]]. The style of [[parser]] used in the Compiler Compiler was in use continuously at Edinburgh from the 60's until almost the year 2000. Other [[Autocode]]s were developed for the [[Titan (1963 computer)|Titan computer]], a prototype Atlas 2 at Cambridge, and the [[Ferranti]] Mercury. ==Syntax== Atlas Autocode's [[Syntax (programming languages)|syntax]] was largely similar to ALGOL, though it was influenced by the output device which the author had available, a [[Friden Flexowriter]]. Thus, it allowed symbols like <code>Β½</code> for <code>.5</code> and the superscript <code><sup>2</sup></code> for ''to the power of 2''. The Flexowriter supported overstriking and thus, AA did also: up to three characters could be overstruck as a single symbol. For example, the character set had no <code>β</code> symbol, so exponentiation was an overstrike of <code>|</code> and <code>*</code>. The aforementioned underlining of [[reserved word]]s (keywords) could also be done using overstriking. The language is described in detail in the Atlas Autocode Reference Manual.<ref name="AA"/> Other Flexowriter characters that were found a use in AA were: <code>Ξ±</code> in floating-point numbers, ''e.g.'', <code>3.56Ξ±-7</code> for modern <code>3.56e-7</code> ; <code>Ξ²</code> to mean ''the second half of a [[48-bit computing|48-bit]] Atlas memory [[Word (computer architecture)|word]]''; <code>Ο</code> for the mathematical constant [[pi]]. When AA was ported to the [[English Electric KDF9]] computer, the character set was changed to [[International Organization for Standardization]] (ISO). That compiler has been recovered from an old paper tape by the Edinburgh Computer History Project and is available online, as is a high-quality scan of the original Edinburgh version of the Atlas Autocode manual.<ref name="AA_ED"/> Keywords in AA were distinguishable from other text by being underlined, which was implemented via overstrike in the Flexowriter (compare to bold in ALGOL). There were also two [[Stropping (syntax)|stropping]] regimes. First, there was an "uppercasedelimiters" mode where all uppercase letters (outside strings) were treated as underlined lowercase. Second, in some versions (but not in the original Atlas version), it was possible to strop keywords by placing a "<code>%</code>" sign in front of them, for example the keyword <code><u>endofprogramme</u></code> could be typed as <code>%end %of %programme</code> or <code>%endofprogramme</code>. This significantly reduced typing, due to only needing one character, rather than overstriking the whole keyword. As in ALGOL, there were no [[reserved word]]s in the language as keywords were identified by underlining (or stropping), not by recognising reserved character sequences. In the statement <code><u>if</u> token=if <u>then</u> <u>result</u> = token</code>, there is both a keyword <code><u>if</u></code> and a variable named <code>if</code>. As in ALGOL, AA allowed spaces in variable names, such as <code><u>integer</u> previous value</code>. Spaces were not significant and were removed before parsing in a trivial pre-lexing stage called "[[line reconstruction]]". What the compiler would see in the above example would be "<code><u>if</u>token=if<u>thenresult</u>=token</code>". Spaces were possible due partly to keywords being distinguished in other ways, and partly because the source was processed by [[scannerless parsing]], without a separate lexing phase, which allowed the lexical syntax to be context-sensitive. The syntax for expressions let the multiplication operator be omitted, e.g., <code>3a</code> was treated as <code>3*a</code>, and <code>a(i+j)</code> was treated as <code>a*(i+j)</code> if <code>a</code> was not an array. In ambiguous uses, the longest possible name was taken ([[maximal munch]]), for example <code>ab</code> was not treated as <code>a*b</code>, whether or not <code>a</code> and <code>b</code> had been declared. ==References== {{Reflist}} ==External links== * [https://academic.oup.com/comjnl/article-pdf/8/4/303/1121480/8-4-303.pdf The main features of Atlas Autocode], By R. A. Brooker, J. S. Rohl, and S. R. Clark * [https://www.ancientgeek.org.uk/EMAS/Miscellaneous/Atlas_Autocode_Mini_Manual.pdf The Atlas Autocode Mini-Manual] by W. F. Lunnon, G. Riding (July 1965) * [https://www.ancientgeek.org.uk/EMAS/Miscellaneous/Atlas_Autocode_Reference_Manual.pdf Atlas Autocode Reference Manual] by R.A. Brooker, J.S.Rohl (March 1965) * [http://curation.cs.manchester.ac.uk/Atlas50/atlas50.cs.manchester.ac.uk/docs/Vic%20Forrington%20final.pdf Mercury Autocode, Atlas Autocode and some Associated Matters.] by Vic Forrington (Jan 2014) * [https://history.dcs.ed.ac.uk/archive/kdf9/AA_Compiler/ Flowcharts for Atlas Autocode compiler on KDF9.] {{ALGOL programming}} [[Category:Ferranti]] [[Category:History of computing in the United Kingdom]] [[Category:Structured programming languages]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:ALGOL programming
(
edit
)
Template:Cite web
(
edit
)
Template:Infobox programming language
(
edit
)
Template:More citations needed
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Webarchive
(
edit
)