HOME

TheInfoList




APL (named after the book ''A Programming Language'') is a
programming language A programming language is a formal language In logic, mathematics, computer science, and linguistics, a formal language consists of string (computer science), words whose symbol (formal), letters are taken from an alphabet (computer science) ...

programming language
developed in the 1960s by Kenneth E. Iverson. Its central datatype is the
multidimensional array In computer science, an array type is a data type that represents a collection of ''elements'' (value (computer science), values or variable (computer science), variables), each selected by one or more indices (identifying keys) that can be comput ...
. It uses a large range of special graphic symbols to represent most functions and operators, leading to very concise code. It has been an important influence on the development of concept modeling,
spreadsheet A spreadsheet is a computer application for organization, analysis, and storage of data in tabular form. Spreadsheets were developed as computerized analogs of paper accounting worksheets. The program operates on data entered in cells of a table ...

spreadsheet
s,
functional programming In computer science Computer science deals with the theoretical foundations of information, algorithms and the architectures of its computation as well as practical techniques for their application. Computer science is the study of , ...
, and computer math packages. It has also inspired several other programming languages.


History


Mathematical notation

A
mathematical notation Mathematical notation is a system of symbol A symbol is a mark, sign, or word In linguistics, a word of a spoken language can be defined as the smallest sequence of phonemes that can be uttered in isolation with semantic, objective or prag ...
for manipulating arrays was developed by Kenneth E. Iverson, starting in 1957 at
Harvard University Harvard University is a Private university, private Ivy League research university in Cambridge, Massachusetts. Founded in 1636 as Harvard College and named for its first benefactor, the History of the Puritans in North America, Puritan cler ...

Harvard University
. In 1960, he began work for
IBM International Business Machines Corporation (IBM) is an American multinational technology company headquartered in Armonk, New York, with operations in over 170 countries. The company began in 1911, founded in Endicott, New York, as the C ...

IBM
where he developed this notation with
Adin Falkoff Adin D. Falkoff (19 December 1921 – 13 August 2010) was an engineer and computer systems and programming systems designer who was mostly known for his work on the programming language APL (programming language), APL and systems for IBM. Career ...
and published it in his book ''A Programming Language'' in 1962. The preface states its premise: This notation was used inside IBM for short research reports on computer systems, such as the
Burroughs B5000Burroughs may refer to: * Former spelling of boroughs *Burroughs, Georgia, a historically African American community now a neighborhood of Savannah, Georgia * Burroughs Corporation, a maker of adding machines and computers * Burroughs (surname), peo ...
and its stack mechanism when
stack machine In computer science Computer science deals with the theoretical foundations of information, algorithms and the architectures of its computation as well as practical techniques for their application. Computer science is the study of comp ...
s versus
register machine Register or registration may refer to: Arts entertainment, and media Music * Register (music) A register is the "height" or range Range may refer to: Geography * Range (geographic)A range, in geography, is a chain of hill A hill is a ...
s were being evaluated by IBM for upcoming computers. Iverson also used his notation in a draft of the chapter ''A Programming Language'', written for a book he was writing with
Fred Brooks Frederick Phillips "Fred" Brooks Jr. (born April 19, 1931) is an American computer architect, software engineer A software engineer is a person who applies the principles of software engineering to the design, development, maintenance, testin ...

Fred Brooks
, ''Automatic Data Processing'', which would be published in 1963. In 1979, Iverson received the
Turing Award The ACM A. M. Turing Award is an annual prize given by the Association for Computing Machinery The Association for Computing Machinery (ACM) is a US-based international for . It was founded in 1947 and is the world's largest scientific and e ...
for his work on APL.


Development into a computer programming language

As early as 1962, the first attempt to use the notation to describe a complete computer system happened after Falkoff discussed with William C. Carter his work to standardize the instruction set for the machines that later became the
IBM System/360 The IBM System/360 (S/360) is a family of mainframe computer A mainframe computer, informally called a mainframe or big iron, is a computer A computer is a machine that can be programmed to carry out sequences of arithmetic or ...
family. In 1963, Herbert Hellerman, working at the IBM Systems Research Institute, implemented a part of the notation on an
IBM 1620 The IBM 1620 was announced by IBM International Business Machines Corporation (IBM) is an American multinational technology company headquartered in Armonk, New York, with operations in over 170 countries. The company began in 1911, found ...

IBM 1620
computer, and it was used by students in a special high school course on calculating transcendental functions by series summation. Students tested their code in Hellerman's lab. This implementation of a part of the notation was called Personalized Array Translator (PAT). In 1963, Falkoff, Iverson, and Edward H. Sussenguth Jr., all working at IBM, used the notation for a formal description of the
IBM System/360 The IBM System/360 (S/360) is a family of mainframe computer A mainframe computer, informally called a mainframe or big iron, is a computer A computer is a machine that can be programmed to carry out sequences of arithmetic or ...
series machine architecture and functionality, which resulted in a paper published in ''
IBM Systems Journal ''IBM Journal of Research and Development'' is a former, peer-reviewed Peer review is the evaluation of work by one or more people with similar competencies as the producers of the work ( peers). It functions as a form of self-regulation by qu ...
'' in 1964. After this was published, the team turned their attention to an implementation of the notation on a computer system. One of the motivations for this focus of implementation was the interest of John L. Lawrence who had new duties with
Science Research Associates Science Research Associates (SRA) was a Chicago-based publisher of educational materials and schoolroom reading comprehension products. The company was acquired by McGraw-Hill Education in the early 2000s. History Science Research Associates Inc. ...
, an educational company bought by IBM in 1964. Lawrence asked Iverson and his group to help use the language as a tool to develop and use computers in education. After Lawrence M. Breed and Philip S. Abrams of Stanford University joined the team at IBM Research, they continued their prior work on an implementation programmed in
FORTRAN IV Fortran (; formerly FORTRAN) is a general-purpose, compiled language, compiled imperative programming, imperative programming language that is especially suited to numerical analysis, numeric computation and computational science, scientific com ...
for a part of the notation which had been done for the
IBM 7090 The IBM 7090 is a second-generation transistorized upright=1.4, gate A gate or gateway is a point of entry to or from a space enclosed by walls. The word derived from old Norse "gat" meaning road A road is a thoroughfare, route, or way ...
computer running on the
IBSYS IBSYS is the discontinued tape-based operating system An operating system (OS) is system software System software is software designed to provide a platform for other software. Examples of system software include operating systems like macO ...
operating system. This work was finished in late 1965 and later named IVSYS (for Iverson system). The basis of this implementation was described in detail by Abrams in a Stanford University Technical Report, "An Interpreter for Iverson Notation" in 1966, the academic aspect of this was formally supervised by
Niklaus Wirth Niklaus Emil Wirth (born 15 February 1934) is a Swiss . He has designed several s, including , and pioneered several classic topics in software engineering. In 1984, he won the , generally recognized as the highest distinction in , for developin ...

Niklaus Wirth
. Like Hellerman's PAT system earlier, this implementation did not include the APL character set but used special English reserved words for functions and operators. The system was later adapted for a
time-sharing In computing Computing is any goal-oriented activity requiring, benefiting from, or creating computing machinery. It includes the study and experimentation of algorithmic processes and development of both computer hardware , hardware and sof ...
system and, by November 1966, it had been reprogrammed for the
IBM System/360 Model 50 The IBM System/360 Model 50 is a member of the IBM System/360 The IBM System/360 (S/360) is a family of mainframe computer A mainframe computer, informally called a mainframe or big iron, is a computer A computer is a machine that c ...
computer running in a time sharing mode and was used internally at IBM.


Hardware

A key development in the ability to use APL effectively, before the wide use of cathode ray tube (
CRT CRT may refer to: Science and technology Medicine * Calreticulin, a protein *Capillary refill time, the rate at which blood refills empty capillaries *Cardiac resynchronization therapy, a treatment for heart failure, and CRT defibrillator (CRT-D ...

CRT
) terminals, was the development of a special
IBM Selectric typewriter The IBM Selectric typewriter was a highly successful line of electric typewriter File:Typewriter.ogv, Video showing the operation of a typewriter A typewriter is a machine, mechanical or electromechanical machine for typing characters. T ...

IBM Selectric typewriter
interchangeable typing element with all the special APL characters on it. This was used on paper printing terminal workstations using the Selectric typewriter and typing element mechanism, such as the
IBM 1050 IBM 1050 Data Communications System is a computer terminal subsystem to send data to and receive data from another 1050 subsystem or IBM computer in the IBM 1400 The IBM 1400 series were second-generation (transistor computer, transistor) mid-r ...
and
IBM 2741 The IBM 2741 is a printing computer terminal A computer terminal is an electronic or electromechanical hardware device that can be used for entering data into, and transcribing data from, a computer A computer is a machine that can be p ...
terminal. Keycaps could be placed over the normal keys to show which APL characters would be entered and typed when that key was struck. For the first time, a programmer could type in and see proper APL characters as used in Iverson's notation and not be forced to use awkward English keyword representations of them. Falkoff and Iverson had the special APL Selectric typing elements, 987 and 988, designed in late 1964, although no APL computer system was available to use them.Breed, Larry
"The First APL Terminal Session"
''APL Quote Quad'', Association for Computing Machinery, Volume 22, Number 1, September 1991, p.2-4.
Iverson cited Falkoff as the inspiration for the idea of using an IBM Selectric typing element for the APL character set. Many APL symbols, even with the APL characters on the Selectric typing element, still had to be typed in by over-striking two extant element characters. An example is the ''grade up'' character, which had to be made from a ''delta'' (shift-H) and a ''
Sheffer stroke In Boolean functions and propositional calculus, the Sheffer stroke denotes a logical operation that is equivalent to the logical negation, negation of the logical conjunction, conjunction operation, expressed in ordinary language as "not both". ...
'' (shift-M). This was necessary because the APL character set was much larger than the 88 characters allowed on the typing element, even when letters were restricted to upper-case (capitals).


Commercial availability

The first APL interactive login and creation of an APL workspace was in 1966 by Larry Breed using an IBM 1050 terminal at the IBM Mohansic Labs near
Thomas J. Watson Research Center The Thomas J. Watson Research Center is the headquarters for IBM Research IBM Research is the research and development division for IBM, an American Multinational corporation, multinational information technology company headquartered in Armonk, ...
, the home of APL, in
Yorktown Heights, New York Yorktown Heights is a census-designated place A census-designated place (CDP) is a Place (United States Census Bureau), concentration of population defined by the United States Census Bureau for statistical purposes only. CDPs have been used in ...
. IBM was chiefly responsible for introducing APL to the marketplace. APL was first available in 1967 for the
IBM 1130 The IBM 1130 Computing System, introduced in 1965, was IBM International Business Machines Corporation (IBM) is an American multinational technology company headquartered in Armonk, New York, with operations in over 170 countries. The co ...
as ''APL\1130''. It would run in as little as 8k 16-bit words of memory, and used a dedicated 1 megabyte hard disk. APL gained its foothold on mainframe timesharing systems from the late 1960s through the early 1980s, in part because it would support multiple users on lower-specification systems that had no dynamic address translation hardware. Additional improvements in performance for selected
IBM System/370 The IBM System/370 (S/370) is a model range of IBM mainframe computers announced on June 30, 1970 as the successors to the IBM System/360, System/360 family. The series mostly maintains backward compatibility with the S/360, allowing an easy ...
mainframe systems included the ''APL Assist Microcode'' in which some support for APL execution was included in the processor's
firmware In computing Computing is any goal-oriented activity requiring, benefiting from, or creating computing machinery. It includes the study and experimentation of algorithmic processes and development of both computer hardware , hardware and soft ...
, as distinct from being implemented entirely by higher-level software. Somewhat later, as suitably performing hardware was finally growing available in the mid- to late-1980s, many users migrated their applications to the personal computer environment. Early IBM APL interpreters for IBM 360 and IBM 370 hardware implemented their own multi-user management instead of relying on the host services, thus they were their own timesharing systems. First introduced in 1966, the ''APL\360''Falkoff, Adin; Iverson, Kenneth E.
"APL\360 Users Guide"
, IBM Research, Thomas J. Watson Research Center, Yorktown Heights, NY, August 1968.
system was a multi-user interpreter. The ability to programmatically communicate with the operating system for information and setting interpreter system variables was done through special privileged "I-beam" functions, using both monadic and dyadic operations. In 1973, IBM released ''APL.SV'', which was a continuation of the same product, but which offered shared variables as a means to access facilities outside of the APL system, such as operating system files. In the mid-1970s, the IBM mainframe interpreter was even adapted for use on the
IBM 5100 The IBM 5100 Portable Computer is a portable computer , one of the first portable IBM PC compatible systems Image:MIT Suitcase Computer 1975.jpg, The MIT Suitcase Computer, MIT Digital Systems Laboratory, 1975 A portable computer is a com ...

IBM 5100
desktop computer, which had a small CRT and an APL keyboard, when most other small computers of the time only offered
BASIC BASIC (Beginners' All-purpose Symbolic Instruction Code) is a family of general-purpose, high-level programming language In computer science Computer science deals with the theoretical foundations of information, algorithms and the ar ...

BASIC
. In the 1980s, the ''VSAPL'' program product enjoyed wide use with
Conversational Monitor System The Conversational Monitor System (CMS – originally: "Cambridge Monitor System") is a simple interactiveAcross the many fields concerned with interactivity, including information science, computer science, human-computer interaction, communic ...
(CMS),
Time Sharing Option Time Sharing Option (TSO) is an interactive time-sharing In computing, time-sharing is the sharing of a computing resource among many users at the same time by means of multiprogramming and computer multitasking, multi-tasking.DEC Timesharing (1 ...
(TSO), VSPC,
MUSIC/SP ''MUSIC/SP (Multi-User System for Interactive Computing/System Product''; originally "McGill University System for Interactive Computing") was developed at McGill University McGill University is a public university, public research university in ...
, and
CICS IBM CICS (Customer Information Control System) is a family of mixed-language application servers that provide online transaction management and connectivity for applications on IBM mainframe IBM mainframes are large computer systems produced by ...

CICS
users. In 1973–1974, Patrick E. Hagerty directed the implementation of the University of Maryland APL interpreter for the 1100 line of the Sperry
UNIVAC 1100/2200 series The UNIVAC 1100/2200 series is a series of compatible 36-bit 36-bit computers were popular in the early mainframe computer A mainframe computer, informally called a mainframe or big iron, is a computer A computer is a machine that can ...
mainframe computers. At the time, Sperry had nothing. In 1974, student Alan Stebbens was assigned the task of implementing an internal function. Xerox APL was available from June 1975 for Xerox 560 and Sigma 6, 7, and 9 mainframes running CP-V and for
Honeywell CP-6 CP-6 is a discontinued computer operating system developed by Honeywell, Inc. in 1976. It was a Backward compatibility, backward-compatible work-alike of the Xerox Corporation, Xerox Universal Time-Sharing System, CP-V fully rewritten for Honeywel ...
. In the 1960s and 1970s, several timesharing firms arose that sold APL services using modified versions of the IBM APL\360 interpreter. In North America, the better-known ones were I. P. Sharp Associates, Scientific Time Sharing Corporation (STSC), Time Sharing Resources (TSR), and The Computer Company (TCC). CompuServe also entered the market in 1978 with an APL Interpreter based on a modified version of Digital Equipment Corp and Carnegie Mellon's, which ran on DEC's KI and KL 36-bit machines. CompuServe's APL was available both to its commercial market and the consumer information service. With the advent first of less expensive mainframes such as the
IBM 4300 The IBM 4300 series were mid-range systems compatible with System/370 The IBM System/370 (S/370) is a model range of IBM mainframe computers announced on June 30, 1970 as the successors to the IBM System/360, System/360 family. The series m ...
, and later the personal computer, by the mid-1980s, the timesharing industry was all but gone. ''Sharp APL'' was available from I. P. Sharp Associates, first as a timesharing service in the 1960s, and later as a program product starting around 1979. ''Sharp APL'' was an advanced APL implementation with many language extensions, such as ''packages'' (the ability to put one or more objects into a single variable), file system, nested arrays, and shared variables. APL interpreters were available from other mainframe and mini-computer manufacturers also, notably
BurroughsBurroughs may refer to: * Former spelling of boroughs *Burroughs, Georgia, a historically African American community now a neighborhood of Savannah, Georgia * Burroughs Corporation, a maker of adding machines and computers * Burroughs (surname), peo ...
,
Control Data Corporation Control may refer to: Basic meanings Economics and business * Control (management) Control is a function of management which helps to check errors in order to take corrective actions. This is done to minimize deviation from standards and ensur ...
(CDC),
Data General Data General was one of the first minicomputer firms of the late 1960s. Three of the four founders were former employees of Digital Equipment Corporation (DEC). Their first product, 1969's Data General Nova, was a 16-bit minicomputer intended to b ...
,
Digital Equipment Corporation Digital Equipment Corporation (DEC ), using the trademark A trademark (also written trade mark or trade-mark) is a type of intellectual property Intellectual property (IP) is a category of property Property is a system of rights ...
(DEC),
Harris Harris may refer to: Places Canada * Harris, Ontario * Northland Pyrite Mine (also known as Harris Mine) * Harris, Saskatchewan * Rural Municipality of Harris No. 316, Saskatchewan Scotland * Harris, Outer Hebrides (sometimes called the Isle of H ...
,
Hewlett-Packard The Hewlett-Packard Company, commonly shortened to Hewlett-Packard ( ) or HP, was an American multinational information technology company headquartered in Palo Alto, California Palo Alto (; Spanish language, Spanish for "tall stick" ...

Hewlett-Packard
(HP),
Siemens AG Siemens AG ( ) is a German multinational Multinational may refer to: * Multinational corporation, a corporate organization operating in multiple countries * Multinational force, a military body from multiple countries * Multinational state, ...
,
Xerox Xerox Holdings Corporation (; also known simply as Xerox) is an American corporation that sells print and digital document An electronic document is any electronic media content (other than computer program A computer program is a collectio ...
, and others. Garth Foster of
Syracuse University Syracuse University (Syracuse, 'Cuse, or SU) is a private Private or privates may refer to: Music * "In Private "In Private" was the third single in a row to be a charting success for United Kingdom, British singer Dusty Springfield, afte ...

Syracuse University
sponsored regular meetings of the APL implementers' community at Syracuse's Minnowbrook Conference Center in Blue Mountain Lake, New York. In later years, Eugene McDonnell organized similar meetings at the
Asilomar Conference Grounds Asilomar Conference Grounds is a conference center built for the Young Women's Christian Association (YWCA). It is located east of what was known as Moss Beach on the western tip of the Monterey Peninsula in Pacific Grove, California. Between 1913 a ...
near Monterey, California, and at Pajaro Dunes near Watsonville, California. The SIGAPL special interest group of the
Association for Computing Machinery The Association for Computing Machinery (ACM) is a US-based international learned society A learned society (; also known as a learned academy, scholarly society, or academic association) is an organization that exists to promote an discipl ...
continues to support the APL community.


Microcomputers

On microcomputers, which became available from the mid 1970s onwards,
BASIC BASIC (Beginners' All-purpose Symbolic Instruction Code) is a family of general-purpose, high-level programming language In computer science Computer science deals with the theoretical foundations of information, algorithms and the ar ...

BASIC
became the dominant programming language. Nevertheless, some microcomputers provided APL instead - the first being the
Intel 8008 The Intel 8008 ("''eight-thousand-eight''" or "''eighty-oh-eight''") is an early byte-oriented microprocessor A microprocessor is a computer processor where the data processing logic and control is included on a single integrated circuit ...

Intel 8008
-based
MCM/70 The MCM/70 was a pioneering microcomputer first built in 1973 in Toronto, Ontario, Canada and released the next year. This makes it one of the first microcomputers in the world, the second to be shipped in completed form, and the first portable comp ...
which was released in 1974 and which was primarily used in education. Another machine of this time was the
VideoBrain Family Computer The VideoBrain Family Computer (model 101) is an 8-bit home computer manufactured by Umtech Incorporated, starting in 1977. It is based on the Fairchild Semiconductor Fairchild F8, F8 central processing unit, CPU. It was not a large commercial succ ...
, released in 1977, which was supplied with its dialect of APL called APL/S. The Commodore SuperPET, introduced in 1981, included an APL interpreter developed by the
University of Waterloo The University of Waterloo (commonly referred to as Waterloo, UW, or UWaterloo) is a public In public relations Public relations (PR) is the practice of managing and disseminating information from an individual or an organization ...
. In 1976, Bill Gates claimed in his
Open Letter to Hobbyists The Open Letter to Hobbyists is a 1976 open letter An open letter is a letter Letter, letters, or literature may refer to: Characters typeface * Letter (alphabet) A letter is a segmental symbol A symbol is a mark, sign, or word that ...
that
Microsoft Corporation Microsoft Corporation is an American multinational corporation, multinational technology company, technology corporation which produces Software, computer software, consumer electronics, personal computers, and related services. Its best-know ...
was implementing APL for the
Intel 8080 The Intel 8080 (''"eighty-eighty"'') is the second 8-bit In computer architecture In computer engineering, computer architecture is a set of rules and methods that describe the functionality, organization, and implementation of compute ...
and
Motorola 6800 The 6800 ("''sixty-eight hundred''") is an 8-bit microprocessor designed and first manufactured by Motorola in 1974. The MC6800 microprocessor was part of the M6800 Microcomputer System that also included serial and parallel interface integrated c ...

Motorola 6800
but had "very little incentive to make available to hobbyists" because of
software piracy Copyright infringement (at times referred to as piracy) is the use of Copyright#Scope, works protected by copyright law without permission for a usage where such permission is required, thereby infringing certain exclusive rights granted to the ...
. It was never released.


APL2

Starting in the early 1980s, IBM APL development, under the leadership of
Jim Brown Jim or JIM may refer to: * Jim, a diminutive form of the given name James * Jim, a short form of the given name Jimmy * OPCW-UN Joint Investigative Mechanism * ''Jim'' (comics), a series by Jim Woodring * ''Jim'' (album), by soul artist Jamie ...
, implemented a new version of the APL language that contained as its primary enhancement the concept of ''nested arrays'', where an array can contain other arrays, and new language features which facilitated integrating nested arrays into program workflow. Ken Iverson, no longer in control of the development of the APL language, left IBM and joined I. P. Sharp Associates, where one of his major contributions was directing the evolution of Sharp APL to be more in accord with his vision. As other vendors were busy developing APL interpreters for new hardware, notably
Unix Unix (; trademarked as UNIX) is a family of multitasking, multiuser Multi-user software is computer software Software is a collection of Instruction (computer science), instructions that tell a computer how to work. This is in contrast t ...

Unix
-based
microcomputer A microcomputer is a small, relatively inexpensive computer with a microprocessor as its central processing unit (CPU). It includes a microprocessor, Computer memory, memory and minimal input/output (I/O) circuitry mounted on a single printed ci ...
s, APL2 was almost always the standard chosen for new APL interpreter developments. Even today, most APL vendors or their users cite APL2 compatibility, as a selling point for those products. ''APL2'' for IBM mainframe computers is still available. IBM cites its use for problem solving, system design, prototyping, engineering and scientific computations, expert systems, for teaching mathematics and other subjects, visualization and database access and was first available for
CMS #REDIRECT CMS #REDIRECT CMS CMS may refer to: Computing * Collection management system for a museum collection * Color management system, a system for computers to control the representation of colors * Content management system A content manage ...
and TSO in 1984. The APL2 Workstation edition (Windows,
OS/2 OS/2 (Operating System/2) is a series of computer operating systems, initially created by Microsoft and IBM under the leadership of IBM software designer Ed Iacobucci. As a result of a feud between the two companies over how to position OS/2 re ...
,
AIX AIX (Advanced Interactive eXecutive, pronounced , “ay-eye-ex”) is a series of Proprietary software, proprietary Unix operating systems developed and sold by IBM for several of its computer platforms. Originally released for the IBM RT P ...
,
Linux Linux ( or ) is a family of open-source Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use the source code, design documents, or content of the product ...

Linux
, and Solaris) followed much later in the early 1990s.


Modern implementations

Various implementations of APL by APLX, Dyalog, et al., include extensions for
object-oriented programming Object-oriented programming (OOP) is a programming paradigm Programming paradigms are a way to classify programming languages based on their features. Languages can be classified into multiple paradigms. Some paradigms are concerned mai ...
, support for
.NET Framework The .NET Framework (pronounced as "''dot net"'') is a software framework In computer programming Computer programming is the process of designing and building an executable computer program to accomplish a specific computing result or t ...
, XML-array conversion primitives, graphing, operating system interfaces, and
lambda calculus Lambda calculus (also written as ''λ''-calculus) is a formal system A formal system is an used for inferring theorems from axioms according to a set of rules. These rules, which are used for carrying out the inference of theorems from axioms, ar ...
expressions.


Derivative languages

APL has formed the basis of, or influenced, the following languages: * A and A+, an alternative APL, the latter with graphical extensions. * FP, a functional programming language. *Ivy, an interpreter for an APL-like language developed by
Rob Pike Robert "Rob" C. Pike (born 1956) is a Canadian programmer A computer programmer, sometimes called a software developer, a programmer or more recently a coder (especially in more informal contexts), is a person who creates computer software ...
, and which uses
ASCII ASCII ( ), abbreviated from American Standard Code for Information Interchange, is a character encoding Character encoding is the process of assigning numbers to graphical Graphics (from Greek Greek may refer to: Greece Anything of, ...
as input. * J, which was also designed by Iverson, and which uses
ASCII ASCII ( ), abbreviated from American Standard Code for Information Interchange, is a character encoding Character encoding is the process of assigning numbers to graphical Graphics (from Greek Greek may refer to: Greece Anything of, ...
with
digraphs Digraph may refer to: * Digraph (orthography) A digraph or digram (from the el, δίς ', "double" and ', "to write") is a pair of characters used in the orthography An orthography is a set of conventions for writing Writing is a m ...
instead of special symbols. * K, a proprietary variant of APL developed by Arthur Whitney. * LYaPAS, a
Soviet The Soviet Union,. officially the Union of Soviet Socialist Republics. (USSR),. was a socialist state A socialist state, socialist republic, or socialist country, sometimes referred to as a workers' state or workers' republic, is a sove ...
extension to APL. *
MATLAB MATLAB (an abbreviation of "MATrix LABoratory") is a and environment developed by . MATLAB allows manipulations, plotting of and data, implementation of s, creation of s, and interfacing with programs written in other languages. Althoug ...
, a numerical computation tool. * Nial, a high-level array programming language with a functional programming notation. * Polymorphic Programming Language, an interactive, extensible language with a similar base language. * S (programming language), S, a statistical programming language (usually now seen in the open-source version known as R_(programming language), R). * Speakeasy (computational environment), Speakeasy, a numerical computing interactive environment. * Wolfram Language, the programming language of Mathematica.


Language characteristics


Character set

APL has been both criticized and praised for its choice of a unique, non-standard character set. Some who learn it become ardent adherents, suggesting that there is some weight behind Iverson's idea that the notation used does make a difference. In the 1960s and 1970s, few terminal devices and even display monitors could reproduce the APL character set. The most popular ones employed the IBM Selectric print mechanism used with a special APL type element. One of the early APL Computer terminal, line terminals (line-mode operation only, ''not'' full screen) was the Texas Instruments TI Model 745 (circa 1977) with the full APL character set which featured Duplex (telecommunications), half and full duplex telecommunications modes, for interacting with an APL
time-sharing In computing Computing is any goal-oriented activity requiring, benefiting from, or creating computing machinery. It includes the study and experimentation of algorithmic processes and development of both computer hardware , hardware and sof ...
service or remote mainframe to run a remote computer job, Remote job entry, called an RJE. Over time, with the universal use of high-quality graphic displays, printing devices and Unicode support, the APL character font problem has largely been eliminated. However, entering APL characters requires the use of input method editors, keyboard mappings, virtual/on-screen APL symbol sets, or easy-reference printed keyboard cards which can frustrate beginners accustomed to other programming languages. With beginners who have no prior experience with other programming languages, a study involving high school students found that typing and using APL characters did not hinder the students in any measurable way. In defense of APL use, APL requires less coding to type in, and keyboard mappings become memorized over time. Also, special APL keyboards are manufactured and in use today, as are freely available downloadable fonts for operating systems such as Microsoft Windows. The reported productivity gains assume that one will spend enough time working in APL to make it worthwhile to memorize the symbols, their semantics, and keyboard mappings, not to mention a substantial number of idioms for common tasks.


Design

Unlike traditionally structured programming languages, APL code is typically structured as chains of unary operation, monadic or binary operation, dyadic function (programming), functions, and higher-order function, operators acting on array data type, arrays. APL has many nonstandard ''primitives'' (functions and operators) that are indicated by a single symbol or a combination of a few symbols. All primitives are defined to have the same operator precedence, precedence, and always associate to the right. Thus, APL is ''read'' or best understood from APL syntax and symbols#Syntax rules, right-to-left. Early APL implementations (circa 1970 or so) had no programming loop-control flow, flow control structures, such as do or while loops, and if-then-else constructs. Instead, they used array operations, and use of structured programming constructs was often not necessary, since an operation could be performed on a full array in one statement. For example, the iota function (ι) can replace for-loop iteration: ιN when applied to a scalar positive integer yields a one-dimensional array (vector), 1 2 3 ... N. More recent implementations of APL generally include comprehensive control structures, so that data structure and program control flow can be clearly and cleanly separated. The APL environment is called a ''workspace''. In a workspace the user can define programs and data, i.e., the data values exist also outside the programs, and the user can also manipulate the data without having to define a program. In the examples below, the APL interpreter first types six spaces before awaiting the user's input. Its own output starts in column one. The user can save the workspace with all values, programs, and execution status. APL uses a set of non-
ASCII ASCII ( ), abbreviated from American Standard Code for Information Interchange, is a character encoding Character encoding is the process of assigning numbers to graphical Graphics (from Greek Greek may refer to: Greece Anything of, ...
symbols, which are an extension of traditional arithmetic and algebraic notation. Having single character names for single instruction, multiple data (SIMD) vector functions is one way that APL enables compact formulation of algorithms for data transformation such as computing Conway's Game of Life in one line of code. In nearly all versions of APL, it is theoretically possible to express any computable function in one expression, that is, in one line of code. Because of the unusual character set, many programmers use special computer keyboard, keyboards with APL keytops to write APL code. Although there are various ways to write APL code using only ASCII characters, in practice it is almost never done. (This may be thought to support Iverson's thesis about Linguistic relativity, notation as a tool of thought.) Most if not all modern implementations use standard keyboard layouts, with special mappings or input method editors to access non-ASCII characters. Historically, the APL font has been distinctive, with uppercase italic alphabetic characters and upright numerals and symbols. Most vendors continue to display the APL character set in a custom font. Advocates of APL claim that the examples of so-called ''write-only code'' (badly written and almost incomprehensible code) are almost invariably examples of poor programming practice or novice mistakes, which can occur in any language. Advocates also claim that they are far more productive with APL than with more conventional computer languages, and that working software can be implemented in far less time and with far fewer programmers than using other technology. They also may claim that because it is compact and terse, APL lends itself well to larger-scale software development and complexity, because the number of lines of code can be reduced greatly. Many APL advocates and practitioners also view standard programming languages such as COBOL and Java (programming language), Java as being comparatively tedious. APL is often found where time-to-market is important, such as with trading systems.


Terminology

APL makes a clear distinction between ''functions'' and ''operators''. Functions take arrays (variables or constants or expressions) as arguments, and return arrays as results. Operators (similar to higher-order functions) take functions or arrays as arguments, and derive related functions. For example, the ''sum'' function is derived by applying the ''reduction'' operator to the ''addition'' function. Applying the same reduction operator to the ''maximum'' function (which returns the larger of two numbers) derives a function which returns the largest of a group (vector) of numbers. In the J language, Iverson substituted the terms ''verb'' for ''function'' and ''adverb'' or ''conjunction'' for ''operator''. APL also identifies those features built into the language, and represented by a symbol, or a fixed combination of symbols, as ''primitives''. Most primitives are either functions or operators. Coding APL is largely a process of writing non-primitive functions and (in some versions of APL) operators. However a few primitives are considered to be neither functions nor operators, most noticeably assignment. Some words used in APL literature have meanings that differ from those in both mathematics and the generality of computer science.


Syntax

APL has explicit representations of functions, operators, and syntax, thus providing a basis for the clear and explicit statement of extended facilities in the language, and tools to experiment on them.


Examples


Hello, World

This displays "Hello, world": 'Hello, world' 'Hello World,' sample user session on YouTube A design theme in APL is to define default actions in some cases that would produce syntax errors in most other programming languages. The 'Hello, world' string constant above displays, because display is the default action on any expression for which no action is specified explicitly (e.g. assignment, function parameter).


Exponentiation

Another example of this theme is that exponentiation in APL is written as "", which indicates raising 2 to the power 3 (this would be written as "" in some other languages and "" in FORTRAN and Python): many languages use * to signify multiplication as in 2*3 but APL uses for that. However, if no base is specified (as with the statement "" in APL, or "" in other languages), in most other programming languages one would have a syntax error. APL however assumes the missing base to be the natural logarithm constant e (mathematical constant), e (2.71828....), and so interpreting "" as "".


Simple statistics

Suppose that is an array of numbers. Then gives its average. Reading ''right-to-left'', gives the number of elements in X, and since is a dyadic operator, the term to its left is required as well. It is in parenthesis since otherwise X would be taken (so that the summation would be of , of each element of X divided by the number of elements in X), and adds all the elements of X. Building on this, calculates the standard deviation. Further, since assignment is an operator, it can appear within an expression, so would place suitable values into T, AV and SD. Naturally, one would make this expression into a function for repeated use rather than retyping it each time.


''Pick 6'' lottery numbers

This following immediate-mode expression generates a typical set of ''Pick 6'' lottery numbers: six pseudo-random integers ranging from 1 to 40, ''guaranteed non-repeating'', and displays them sorted in ascending order: x[⍋x←6?40] The above does a lot, concisely; although it seems complex to a new wiktionary:APLer, APLer. It combines the following APL ''functions'' (also called ''primitives'' and ''glyphs''): * The first to be executed (APL executes from rightmost to leftmost) is dyadic function ? (named deal when dyadic) that returns a array data structure, vector consisting of a select number (left argument: 6 in this case) of random integers ranging from 1 to a specified maximum (right argument: 40 in this case), which, if said maximum ≥ vector length, is guaranteed to be non-repeating; thus, generate/create 6 random integers ranging from 1-40. * This vector is then ''assigned'' () to the variable x, because it is needed later. * This vector is then ''sorted'' in ascending order by a monadic function, which has as its right argument everything to the right of it up to the next unbalanced ''close-bracket'' or close-parenthesis. The result of is the indices that will put its argument into ascending order. * Then the output of is used to index the variable x, which we saved earlier for this purpose, thereby selecting its items in ''ascending'' sequence. Since there is no function to the left of the left-most x to tell APL what to do with the result, it simply outputs it to the display (on a single line, separated by spaces) without needing any explicit instruction to do that. ? also has a monadic equivalent called roll, which simply returns one random integer between 1 and its sole operand [to the right of it], inclusive. Thus, a role-playing game program might use the expression ?20 to roll a twenty-sided die.


Prime numbers

The following expression finds all prime numbers from 1 to R. In both time and space, the calculation complexity is O(R^2)\,\! (in Big O notation). (~R∊R∘.×R)/R←1↓ιR Executed from right to left, this means: * ''Iota'' ι creates a vector containing integers from 1 to R (if R= 6 at the start of the program, ιR is 1 2 3 4 5 6) * ''Drop'' first element of this vector ( function), i.e., 1. So 1↓ιR is 2 3 4 5 6 * ''Set'' R to the new vector (, ''assignment'' primitive), i.e., 2 3 4 5 6 * The / ''replicate'' operator is dyadic (binary) and the interpreter first evaluates its left argument (fully in parentheses): * Generate ''outer product'' of R multiplied by R, i.e., a matrix that is the ''multiplication table'' of R by R (°.× operator), i.e., * Build a vector the same length as R with 1 in each place where the corresponding number in R is in the outer product matrix (, ''set inclusion'' or ''element of'' or ''Epsilon'' operator), i.e., 0 0 1 0 1 * Logically negate (''not'') values in the vector (change zeros to ones and ones to zeros) (, logical ''not'' or ''Tilde'' operator), i.e., 1 1 0 1 0 * Select the items in R for which the corresponding element is 1 (/ ''replicate'' operator), i.e., 2 3 5 (Note, this assumes the APL origin is 1, i.e., indices start with 1. APL can be set to use 0 as the origin, so that ι6 is 0 1 2 3 4 5, which is convenient for some calculations.)


Sorting

The following expression sorting, sorts a word list stored in matrix X according to word length: X[⍋X+.≠' ';]


Game of Life

The following function "life", written in Dyalog APL, takes a boolean matrix and calculates the new generation according to Conway's Game of Life. It demonstrates the power of APL to implement a complex algorithm in very little code, but it is also very hard to follow unless one has advanced knowledge of APL. life←


HTML tags removal

In the following example, also Dyalog, the first line assigns some HTML code to a variable txt and then uses an APL expression to remove all the HTML tags
explanation
: txt←'

This is emphasized text.

' txt This is emphasized text.


Use

APL is used for many purposes including financial software, financial and insurance applications, artificial intelligence, neural networks and robotics. It has been argued that APL is a calculation tool and not a programming language; its symbolic nature and array capabilities have made it popular with domain experts and data scientists who do not have or require the skills of a computer programmer. APL is well suited to image manipulation and computer animation, where graphic transformations can be encoded as matrix multiplications. One of the first commercial computer graphics houses, Digital Effects (studio), Digital Effects, produced an APL graphics product named ''Visions'', which was used to create television commercials and animation for the 1982 film ''Tron''. Latterly, th
Stormwind
Simulation video game, boating simulator uses APL to implement its core logic, its interfacing to the rendering pipeline middleware and a major part of its physics engine. Today, APL remains in use in a wide range of commercial and scientific applications, for example investment management, asset management, health care, and DNA profiling, and by hobbyists.


Notable implementations


APL\360

The first implementation of APL using recognizable APL symbols was APL\360 which ran on the
IBM System/360 The IBM System/360 (S/360) is a family of mainframe computer A mainframe computer, informally called a mainframe or big iron, is a computer A computer is a machine that can be programmed to carry out sequences of arithmetic or ...
, and was completed in November 1966 though at that time remained in use only within IBM. In 1973 its implementors, Lawrence M. Breed, Larry Breed, Richard H. Lathwell, Dick Lathwell and Roger Moore (computer scientist), Roger Moore, were awarded the Grace Murray Hopper Award from the
Association for Computing Machinery The Association for Computing Machinery (ACM) is a US-based international learned society A learned society (; also known as a learned academy, scholarly society, or academic association) is an organization that exists to promote an discipl ...
(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." In 1975, the
IBM 5100 The IBM 5100 Portable Computer is a portable computer , one of the first portable IBM PC compatible systems Image:MIT Suitcase Computer 1975.jpg, The MIT Suitcase Computer, MIT Digital Systems Laboratory, 1975 A portable computer is a com ...

IBM 5100
microcomputer 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. Significant developments to APL\360 included CMS/APL, which made use of the Virtual memory, virtual storage capabilities of
CMS #REDIRECT CMS #REDIRECT CMS CMS may refer to: Computing * Collection management system for a museum collection * Color management system, a system for computers to control the representation of colors * Content management system A content manage ...
and APLSV, which introduced shared variables, system variables and system functions. It was subsequently ported to the
IBM System/370 The IBM System/370 (S/370) is a model range of IBM mainframe computers announced on June 30, 1970 as the successors to the IBM System/360, System/360 family. The series mostly maintains backward compatibility with the S/360, allowing an easy ...
and Virtual Storage Personal Computing, VSPC platforms until its final release in 1983, after which it was replaced by APL2.


APL\1130

In 1968, APL\1130 became the first publicly available APL system, created by IBM for the
IBM 1130 The IBM 1130 Computing System, introduced in 1965, was IBM International Business Machines Corporation (IBM) is an American multinational technology company headquartered in Armonk, New York, with operations in over 170 countries. The co ...
. It became the most popular IBM Type-III Library software that IBM released.


APL*Plus and Sharp APL

APL*Plus and Sharp APL are versions of APL\360 with added business-oriented extensions such as data formatting and facilities to store APL arrays in external files. They were jointly developed by two companies, employing various members of the original IBM APL\360 development team. The two companies were I. P. Sharp Associates (IPSA), an APL\360 services company formed in 1964 by Ian Sharp, Roger Moore and others, and Scientific Time Sharing Corporation, STSC, a time-sharing and consulting service company formed in 1969 by Lawrence Breed and others. Together the two developed APL*Plus and thereafter continued to work together but develop APL separately as APL*Plus and Sharp APL. STSC ported APL*Plus to many platforms with versions being made for the VAX 11, PC and UNIX, whereas IPSA took a different approach to the arrival of the Personal Computer and made Sharp APL available on this platform using additional PC-based IBM-compatible mainframes, PC-XT/360 hardware. In 1993, Soliton Incorporated was formed to support Sharp APL and it developed Sharp APL into SAX (Sharp APL for Unix). , APL*Plus continues as APL2000 APL+Win. In 1985, Ian Sharp, and Dan Dyer of STSC, jointly received the Iverson Award, Kenneth E. Iverson Award for Outstanding Contribution to APL.


APL2

APL2 was a significant re-implementation of APL by IBM which was developed from 1971 and first released in 1984. It provides many additions to the language, of which the most notable is nested (non-rectangular) array support. it is available for mainframe computers running z/OS or z/VM and workstations running
AIX AIX (Advanced Interactive eXecutive, pronounced , “ay-eye-ex”) is a series of Proprietary software, proprietary Unix operating systems developed and sold by IBM for several of its computer platforms. Originally released for the IBM RT P ...
,
Linux Linux ( or ) is a family of open-source Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use the source code, design documents, or content of the product ...

Linux
, Solaris (operating system), Sun Solaris, and Microsoft Windows. The entire APL2 Products and Services Team was awarded the Iverson Award in 2007.


APLGOL

In 1972, APLGOL was released as an experimental version of APL that added structured programming language constructs to the language framework. New statements were added for interstatement control, conditional statement execution, and statement structuring, as well as statements to clarify the intent of the algorithm. It was implemented for Hewlett-Packard in 1977.


Dyalog APL

Dyalog APL was first released by United Kingdom, British company Dyalog Ltd. in 1983 and, , is available for
AIX AIX (Advanced Interactive eXecutive, pronounced , “ay-eye-ex”) is a series of Proprietary software, proprietary Unix operating systems developed and sold by IBM for several of its computer platforms. Originally released for the IBM RT P ...
,
Linux Linux ( or ) is a family of open-source Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use the source code, design documents, or content of the product ...

Linux
(including on the Raspberry Pi), macOS and Microsoft Windows platforms. It is based on APL2, with extensions to support
object-oriented programming Object-oriented programming (OOP) is a programming paradigm Programming paradigms are a way to classify programming languages based on their features. Languages can be classified into multiple paradigms. Some paradigms are concerned mai ...
and
functional programming In computer science Computer science deals with the theoretical foundations of information, algorithms and the architectures of its computation as well as practical techniques for their application. Computer science is the study of , ...
. Licences are free for personal/non-commercial use. In 1995, two of the development team - John M. Scholes (computer scientist), John Scholes and Peter Donnelly - were awarded the Iverson Award for their work on the interpreter. Gitte Christensen and Morten Kromberg were joint recipients of the Iverson Award in 2016.


NARS2000

NARS2000 is an open-source APL interpreter written by Bob Smith, a prominent APL developer and implementor from Scientific Time Sharing Corporation, STSC in the 1970s and 1980s. NARS2000 contains advanced features and new datatypes and runs natively on Microsoft Windows, and other platforms under Wine (software), Wine.


APLX

APLX is a cross-platform Programming language dialect, dialect of APL, based on APL2 and with several extensions, which was first released by United Kingdom, British company MicroAPL in 2002. Although no longer in development or on commercial sale it is now available free of charge from Dyalog.


GNU APL

GNU APL is a free implementation of Extended APL as specified in ISO/IEC 13751:2001 and is thus an implementation of APL2. It runs on GNU/Linux, MacOS X, Raspberry Pi, several BSD dialects, and on Windows (either using Cygwin for full support of all its system functions or as a native 64-bit Windows binary with some of its system functions missing). GNU APL uses Unicode internally and can be scripted. It was written by Jürgen Sauermann. Richard Stallman, founder of the GNU Project, was an early adopter of APL, using it to write a text editor as a high school student in the summer of 1969.


Interpretation and compilation of APL

APL is traditionally an interpreted language, having language characteristics such as Strong and weak typing, weak variable typing not well suited to compiler, compilation. However, with arrays as its core data structure it provides opportunities for performance gains through Data parallelism, parallelism, parallel computing, Massively parallel (computing), massively parallel applications, and very-large-scale integration (VLSI), and from the outset APL has been regarded as a high-performance language - for example, it was noted for the speed with which it could perform complicated matrix operations "because it operates on arrays and performs operations like matrix inversion internally". Nevertheless, APL is rarely purely interpreted and compilation or partial compilation techniques that are, or have been, used include the following:


Idiom recognition

Most APL interpreters support Programming idiom, idiom recognition and evaluate common idioms as single operations. For example, by evaluating the idiom BV/⍳⍴A as a single operation (where BV is a Boolean vector and A is an array), the creation of two intermediate arrays is avoided.


Optimised bytecode

Weak typing in APL means that a name may reference an array (of any datatype), a function or an operator. In general, the interpreter cannot know in advance which form it will be and must therefore perform analysis, syntax checking etc. at run-time. However, in certain circumstances, it is possible to deduce in advance what type a name is expected to reference and then generate bytecode which can be executed with reduced run-time overhead. This bytecode can also be optimised using compilation techniques such as constant folding or common subexpression elimination. The interpreter will execute the bytecode when present and when any assumptions which have been made are met. Dyalog APL includes support for optimised bytecode.


Compilation

Compiler, Compilation of APL has been the subject of research and experiment since the language first became available; the first compiler is considered to be the Burroughs APL-700 which was released around 1971. In order to be able to compile APL, language limitations have to be imposed. APEX is a research APL compiler which was written by Robert Bernecky and is available under the GNU Public License. The STSC APL Compiler is a hybrid of a bytecode optimiser and a compiler - it enables compilation of functions to machine code provided that its sub-functions and globals are Declaration (computer programming), declared, but the interpreter is still used as a runtime library and to execute functions which do not meet the compilation requirements.


Standards

APL has been standardized by the American National Standards Institute (ANSI) working group X3J10 and International Organization for Standardization (ISO) and International Electrotechnical Commission (IEC), ISO/IEC Joint Technical Committee 1 Subcommittee 22 Working Group 3. The Core APL language is specified in ISO 8485:1989, and the Extended APL language is specified in ISO/IEC 13751:2001.


References


Further reading


''An APL Machine''
(1970 Stanford doctoral dissertation by Philip Abrams)
''A Personal History Of APL''
(1982 article by Michael S. Montalbano) * *
''A Programming Language''
by Kenneth E. Iverson
''APL in Exposition''
by Kenneth E. Iverson * Brooks, Frederick P.; Kenneth Iverson (1965). ''Automatic Data Processing, System/360 Edition''. . * * * ''History of Programming Languages'', chapter 14 * * * * * *


Video


The Origins of APL
- a 1974 talk show style interview with the original developers of APL.
APL demonstration
- a 1975 live demonstration of APL by Robert Spence (engineer), Professor Bob Spence, Imperial College London.
Conway's Game Of Life in APL
- a 2009 tutorial by John Scholes of Dyalog Ltd. which implements Conway's Game of Life in a single line of APL.
50 Years of APL
- a 2009 introduction to APL by Graeme Robertson.


External links


Online resources


TryAPL.org
an online APL primer
APL Wiki
*

a source of links to APL compilers


Providers


IBM APL2

Dyalog APL



APL2000

NARS2000

GNU APL

OpenAPL


User groups and societies

* Finland
Finnish APL Association (FinnAPL)
* France
APL et J
* Germany
APL-Germany e.V.
* Japan
Japan APL Association (JAPLA)
* Sweden
Swedish APL User Group (SwedAPL)
* Switzerland
Swiss APL User Group (SAUG)
* United Kingdom
The British APL Association
* United States: Association for Computing Machinery, ACM]
SIGPLAN chapter on Array Programming Languages (SIGAPL)
{{List of International Electrotechnical Commission standards .NET programming languages APL programming language family Array programming languages Command shells Dynamic programming languages Dynamically typed programming languages Functional languages IBM software Programming languages created in 1964 Programming languages with an ISO standard Programming languages