APL\360: Difference between revisions

Jump to navigation Jump to search
3,236 bytes added ,  20:17, 13 September 2021
Merge the two Computer History Museum links under "source code"
mNo edit summary
(Merge the two Computer History Museum links under "source code")
(20 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Infobox array language
{{DISPLAYTITLE:''APL''\360}}{{Infobox array language
| title                    = ''APL''\360
| array model              = [[flat array model|flat]] without [[box|boxes]]
| array model              = [[flat array model|flat]] without [[box|boxes]]
| index origin            = <source lang=apl inline>)ORIGIN</source> 0 or 1 (later <source lang=apl inline>⎕IO</source>)
| index origin            = <source lang=apl inline>)ORIGIN</source> 0 or 1 (later <source lang=apl inline>⎕IO</source>)
| function styles          = [[tradfn]]
| function styles          = [[defined function]]
| numeric types            = floats (64-bit [[wikipedia:IBM_hexadecimal_floating_point|HFP]])
| numeric types            = floats (64-bit [[wikipedia:IBM_hexadecimal_floating_point|HFP]])
| unicode support          = no
| unicode support          = no
| released                = 1967
| released                = 1968 (1966 within IBM)
| developer                = [[IBM]]
| developer                = [[IBM]]
| latest release version  = XM6 / 1972
| latest release version  = XM6 / 1972
| withdrawn                = 2012
| withdrawn                = 2012
| implementation languages = [[wikipedia:IBM_Basic_Assembly_Language_and_successors|BAL]]
| implementation language  = [[wikipedia:IBM_Basic_Assembly_Language_and_successors|BAL]]
| platforms                = S/360–z/Architecture, IBM 5100+
| platforms                = S/360–z/Architecture, IBM 5100+
| operating systems        = DOS/360–z/OS
| operating systems        = DOS/360–z/OS
| license                  = Free for non-commercial use / Open source commercial software
| license                  = Free for non-commercial use / Open source commercial software
| website                  = [https://computerhistory.org/blog/the-apl-programming-language-source-code/ Computer History Museum]
| source                  = [https://computerhistory.org/blog/the-apl-programming-language-source-code/ Computer History Museum] ([https://computerhistory.org/blogs/apl360-software-license-agreement/ license and download])
| source                  = [https://computerhistory.org/blogs/apl360-software-license-agreement/ Computer History Museum]
| documentation            = [https://www.jsoftware.com/papers/APL360TerminalSystem.htm ''The APL\360 Terminal System'']
| documentation            = [https://www.jsoftware.com/papers/APL360TerminalSystem.htm ''The APL\360 Terminal System'']
| run online              = [http://members.aon.at/nkehrer/ibm_5110/emu5110.html IBM 5110 emulator]
| run online              = [http://web.archive.org/web/20201111235017/http://members.aon.at/nkehrer/ibm_5110/emu5110.html IBM 5110 emulator]
| influenced by            = [[Iverson notation]]
| influenced by            = [[Iverson notation]]
| influenced              = [[ISO 8485:1989]], [[ISO/IEC 13751:2001]], [[APLSV]], [[APL*PLUS]], [[J]]
| influenced              = [[ISO 8485:1989]], [[ISO/IEC 13751:2001]], [[APL.SV]], [[APL*PLUS]], [[J]]
}}
}}


'''APL\360''' was the first implementation of APL using recognizable APL symbols. It ran on the [[IBM]] System/360, and was completed in November 1966 though at that time remained in use only within IBM. In 1973 its implementers, [[Larry Breed]], Dick Lathwell and [[Roger Moore]], were awarded the Grace Murray Hopper Award from the Association for Computing Machinery (ACM). It was given "for their work in the design and implementation of APL\360, setting new standards in simplicity, efficiency, reliability and response time for interactive systems."
'''APL\360''' (stylised as '''''APL''\360''') was the first implementation of APL using recognizable APL symbols. It ran on the [[IBM]] System/360, and was completed in November 1966 though at that time remained in use only within IBM. In 1973 its implementers, [[Larry Breed]], Dick Lathwell and [[Roger Moore]], were awarded the Grace Murray Hopper Award from the Association for Computing Machinery (ACM). It was given "for their work in the design and implementation of APL\360, setting new standards in simplicity, efficiency, reliability and response time for interactive systems."


Beginning in 1975, the IBM 5100 line of microcomputers offered APL\360 as one of two built-in ROM-based interpreted languages for the computer, complete with a keyboard and display that supported all the special symbols used in the language.
Beginning in 1975, the IBM 5100 line of microcomputers offered APL\360 as one of two built-in ROM-based interpreted languages for the computer, complete with a keyboard and display that supported all the special symbols used in the language.
Line 27: Line 27:
Significant developments to APL\360 included CMS/APL, which made use of the virtual storage capabilities of CMS, and [[APL.SV]], which introduced shared variables, [[system variable]]s and [[system function]]s. It was subsequently ported to the IBM System/370 and VSPC platforms until its final release in 1983, after which it was replaced by [[APL2]].  
Significant developments to APL\360 included CMS/APL, which made use of the virtual storage capabilities of CMS, and [[APL.SV]], which introduced shared variables, [[system variable]]s and [[system function]]s. It was subsequently ported to the IBM System/370 and VSPC platforms until its final release in 1983, after which it was replaced by [[APL2]].  
[[File:IBM 5110.jpg|thumb|right|IBM 5110]]
[[File:IBM 5110.jpg|thumb|right|IBM 5110]]
== Availability ==
APL\360's implementation was completed in 1966, and it was made available within IBM from the [[wikipedia:Thomas J. Watson Research Center|Watson Research Center]] lab in [[wikipedia:Yorktown Heights, New York|Yorktown Heights]] starting in November. From the beginning it was an interactive rather than a batch system, with programmers working directly from a terminal rather than submitting jobs to be run. It was generally available only for IBM projects, with IBM's emphasis on [[wikipedia:PL/I|PL/I]] blocking its release as a standalone product, but was used in a few external projects including a 20-person class at [[wikipedia:NASA|NASA]]'s [[wikipedia:Goddard Space Flight Center|Goddard Space Flight Center]], and at the [[wikipedia:University of Alberta|University of Alberta]].<ref>Harold A. Driscoll. [https://dl.acm.org/doi/10.1145/586003.586005 "An APL Historical Note"]. [[APL Quote Quad]] Volume 8 Issue 1. 1977-09.</ref> [[Syracuse University]] also connected a terminal to Yorktown Heights starting in late 1967.<ref>Dana E. Cartwright and Phyllis A. Kent. "SHARP APL Syracuse" at [[IPSA '80]].</ref> In this period [[wikipedia:SUNY Binghamton|SUNY Binghamton]] became the first facility outside IBM to have APL installed, due to its connection with [[wikipedia:Endicott, New York|IBM-Endicott]].<ref name="foster">[[Ray Polivka]] and Jon McGrew. [https://dl.acm.org/doi/10.1145/216800.216805 "A Quote Quad Interview: Garth Foster"]. Quote Quad Volume 26 Number 1. 1995-09.</ref>
IBM released APL\360 in August 1968 ([[APL\1130]] had been released that spring)<ref>[[Adin Falkoff]]. [https://doi.org/10.1145/800012.808128 "APL\360 History"] ([https://www.jsoftware.com/papers/apl360history.htm web]) at [[APL69]].</ref> as a [[wikipedia:IBM Type-III Library|Type-III]] or unsupported library. In 1969 it was offered as one of IBM's first program products, initially for [[wikipedia:DOS/360|DOS/360]], and next with support for [[wikipedia:OS/360 and successors#MVT|MVT]].<ref>[[Adin Falkoff]]. "The IBM family of APL systems". ''[[IBM]] Systems Journal'' Vol. 30 No. 4. 1991.</ref> These products were primarily used by universities, but also rapidly produced interest in [[time-sharing]] APL, with at least eight companies offering time-sharing in 1968. Business use of APL\360 was limited by its lack of support for reading and writing files, a problem that would only be addressed in IBM products with [[APL.SV]] in 1973. Many companies instead used a derivative system such as [[APL*PLUS]] modified to support files.<ref>[[Eric Iverson]]. "The Integration of APL into the Larger World of Data Processing" at [[IPSA '80]].</ref>
== Implementation ==
== Implementation ==


Line 38: Line 44:


== Primitives ==
== Primitives ==
APL\360 evolved rapidly during its early development within IBM and more slowly as it became available to outside users. Here we show the primitives described in its [http://www.softwarepreservation.org/projects/apl/Manuals/APL360CONTRIBUTEDPROGRAMLIBRARY/view documentation] in 1968 when it was first released as a stand-alone product (a [[wikipedia:IBM Type-III Library|Type-III Library]]). Later additions include [[Matrix Inverse]] and [[Matrix Divide]]; [[Execute]], [[Format]], and [[Scan]] introduced by [[APL.SV]]; and an [[Function axis|axis]] and [[Laminate]] form for the [[Catenate]] function.


=== Functions ===
=== Functions ===
Line 52: Line 60:
| <source lang=apl inline>÷</source> || [[Reciprocal]]        || [[Divide]]
| <source lang=apl inline>÷</source> || [[Reciprocal]]        || [[Divide]]
|-
|-
| <source lang=apl inline>|</source> || [[Magnitude]]         || [[Residue]]
| <source lang=apl inline></source> || [[Ceiling]]           || [[Maximum]]
|-
|-
| <source lang=apl inline>⌊</source> || [[Floor]]            || [[Minimum]]
| <source lang=apl inline>⌊</source> || [[Floor]]            || [[Minimum]]
|-
|-
| <source lang=apl inline></source> || [[Ceiling]]           || [[Maximum]]
| <source lang=apl inline>*</source> || [[Exponential]]       || [[Power]]
|-
|-
| <source lang=apl inline>?</source> || [[Roll]]             || [[Deal]]
| <source lang=apl inline></source> || [[Natural logarithm]] || [[Logarithm]]
|-
|-
| <source lang=apl inline>*</source> || [[Exponential]]       || [[Power]]
| <source lang=apl inline>|</source> || [[Magnitude]]         || [[Residue]]
|-
|-
| <source lang=apl inline></source> || [[Natural logarithm]] || [[General logarithm]]
| <source lang=apl inline>?</source> || [[Roll]]             || [[Deal]]
|-
|-
| <source lang=apl inline>○</source> || [[Pi times]]          || [[Circle function|Circular, hyperbolic, and pythagorean functions]]
| <source lang=apl inline>○</source> || [[Pi times]]          || [[Circle function|Circular]]
|-
|-
| <source lang=apl inline>!</source> || [[Factorial]]        || [[Binomial]]
| <source lang=apl inline>!</source> || [[Factorial]]        || [[Binomial coefficient]]
|-
|-
| <source lang=apl inline>~</source> || [[Not]]              ||
| <source lang=apl inline>~</source> || [[Not]]              ||
Line 90: Line 98:
| <source lang=apl inline>≠</source> ||                      || [[Not equal]]
| <source lang=apl inline>≠</source> ||                      || [[Not equal]]
|-
|-
| <source lang=apl inline>⍴</source> || [[Shape|Shape of]]   || [[Reshape]]
| <source lang=apl inline>⍴</source> || [[Shape|Size]]       || [[Reshape]]
|-
|-
| <source lang=apl inline>,</source> || [[Ravel]]            || [[Catenate|Catenate, Laminate]] (allows axis)
| <source lang=apl inline>,</source> || [[Ravel]]            || [[Catenate]]
|-
|-
| <source lang=apl inline></source> ||rowspan=2| [[Reverse]]<br>(allows axis) ||rowspan=2| [[Rotate]]<br>(allows axis)
| <source lang=apl inline>[]</source>||                       || [[Bracket indexing|Indexing]]
|-
|-
| <source lang=apl inline></source>
| <source lang=apl inline></source> || [[Index generator]]  || [[Index of]]
|-
| <source lang=apl inline>⍉</source> ||colspan=2| [[Transpose]]
|-
|-
| <source lang=apl inline>↑</source> ||                      || [[Take]]
| <source lang=apl inline>↑</source> ||                      || [[Take]]
|-
|-
| <source lang=apl inline>↓</source> ||                      || [[Drop]]
| <source lang=apl inline>↓</source> ||                      || [[Drop]]
|-
| <source lang=apl inline>⍋</source> || [[Grade up]]  (allows axis) ||
|-
| <source lang=apl inline>⍒</source> || [[Grade down]] (allows axis) ||
|-
|-
| <source lang=apl inline>/</source> ||                      ||rowspan=2| [[Compress]]<br>(allows axis)
| <source lang=apl inline>/</source> ||                      ||rowspan=2| [[Compress]]<br>(allows axis)
Line 112: Line 122:
| <source lang=apl inline>⍀</source> ||
| <source lang=apl inline>⍀</source> ||
|-
|-
| <source lang=apl inline>[]</source>||                       || [[Indexing]]
| <source lang=apl inline></source> ||rowspan=2| [[Reverse]]<br>(allows axis) ||rowspan=2| [[Rotate]]<br>(allows axis)
|-
| <source lang=apl inline>⊖</source>
|-
|-
| <source lang=apl inline></source> || [[Index generator]]  || [[Index of]]
| <source lang=apl inline></source> ||colspan=2| [[Transpose]]
|-
|-
| <source lang=apl inline>∊</source> ||                      || [[Membership]]
| <source lang=apl inline>∊</source> ||                      || [[Membership]]
|-
| <source lang=apl inline>⍋</source> || [[Grade up]]          ||
|-
| <source lang=apl inline>⍒</source> || [[Grade down]]        ||
|-
| <source lang=apl inline>⌹</source> || [[Matrix inverse]]    || [[Matrix division]]
|-
|-
| <source lang=apl inline>⊥</source> ||                      || [[Decode]]
| <source lang=apl inline>⊥</source> ||                      || [[Decode]]
|-
|-
| <source lang=apl inline>⊤</source> ||                      || [[Encode]]
| <source lang=apl inline>⊤</source> ||                      || [[Encode]]
|-
| <source lang=apl inline>⍎</source> ||                      || [[Execute]]
|-
| <source lang=apl inline>⍕</source> || [[Monadic format]]    || [[Dyadic format]]
|}
|}


Line 143: Line 145:
|-
|-
| <source lang=apl inline>⌿</source>  || Monadic ||
| <source lang=apl inline>⌿</source>  || Monadic ||
|-
| <source lang=apl inline>\</source>  || Monadic ||rowspan=2| [[Scan]]<br>(allows axis)      ||
|-
| <source lang=apl inline>⍀</source>  || Monadic ||
|-
|-
| <source lang=apl inline>.</source>  || Dyadic  ||                        || [[Inner product]]
| <source lang=apl inline>.</source>  || Dyadic  ||                        || [[Inner product]]
Line 155: Line 153:
|}
|}


=== External links ===
== References ==
<references/>
 
== External links ==
* Bitsavers: [http://www.bitsavers.org/pdf/ibm/apl/ APL]
* Bitsavers: [http://www.bitsavers.org/pdf/ibm/apl/ APL]
* Norbert Kehrer: [http://members.aon.at/nkehrer/ibm_5110/emu5110.html IBM 5110 Emulator]
* Norbert Kehrer: [http://web.archive.org/web/20201111235017/http://members.aon.at/nkehrer/ibm_5110/emu5110.html IBM 5110 Emulator]
* Bitsavers: [http://www.bitsavers.org/pdf/ibm/5110/ IBM 5110]
* Bitsavers: [http://www.bitsavers.org/pdf/ibm/5110/ IBM 5110]
{{APL dialects}}
* Jamie Raymond: [https://www.youtube.com/playlist?list=PLLonoeGbb9ol-SBD5SosK13k85s3Z8780 APL\360] ― a 2021 7-part video tutorial
{{APL dialects}}[[Category:IBM APL dialects]][[Category:Flat array languages]]

Navigation menu