APL (язык программирования)
Парадигма | Массив , функциональный , структурированный , модульный |
---|---|
Разработано | Кеннет Э. Айверсон |
Разработчик | Ларри Брид , Дик Лэтвелл , Роджер Мур и другие |
Впервые появился | 27 ноября 1966 г [1] |
Стабильная версия | ИСО/МЭК 13751:2001
/ 1 февраля 2001 г |
Typing discipline | Dynamic |
Platform | Cross platform |
License | Proprietary, open source |
Website | aplwiki |
Major implementations | |
| |
Influenced by | |
Mathematical notation | |
Influenced | |
APL (назван в честь книги «Язык программирования» ) [3] — язык программирования , разработанный в 1960-х годах Кеннетом Э. Айверсоном . Его центральным типом данных является многомерный массив . Он использует большой набор специальных графических символов. [4] для представления большинства функций и операторов, что приводит к очень краткому коду. Это оказало важное влияние на развитие концептуального моделирования, электронных таблиц , функционального программирования . [5] и пакеты компьютерной математики. [6] Он также вдохновил несколько других языков программирования. [7] [8]
История
[ редактировать ]Математические обозначения
[ редактировать ]A mathematical notation for manipulating arrays was developed by Kenneth E. Iverson, starting in 1957 at Harvard University. In 1960, he began work for IBM where he developed this notation with Adin Falkoff and published it in his book A Programming Language in 1962.[3] В предисловии изложена его предпосылка:
Applied mathematics is largely concerned with the design and analysis of explicit procedures for calculating the exact or approximate values of various functions. Such explicit procedures are called algorithms or programs. Because an effective notation for the description of programs exhibits considerable syntactic structure, it is called a programming language.
This notation was used inside IBM for short research reports on computer systems, such as the Burroughs B5000 and its stack mechanism when stack machines versus register machines 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, Automatic Data Processing, which would be published in 1963.[9][10]
In 1979, Iverson received the Turing Award for his work on APL.[11]
Development into a computer programming language
[edit]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 family.
In 1963, Herbert Hellerman, working at the IBM Systems Research Institute, implemented a part of the notation on an 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).[12]
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 series machine architecture and functionality, which resulted in a paper published in IBM Systems Journal 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, 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.[13]
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 for a part of the notation which had been done for the IBM 7090 computer running on the IBSYS 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.[14] 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 system and, by November 1966, it had been reprogrammed for the IBM System/360 Model 50 computer running in a time-sharing mode and was used internally at IBM.[15]
Hardware
[edit]A key development in the ability to use APL effectively, before the wide use of cathode ray tube (CRT) terminals, was the development of a special 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 and IBM 2741 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.[16] Iverson cited Falkoff as the inspiration for the idea of using an IBM Selectric typing element for the APL character set.[17]
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 (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
[edit]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 home of APL, in Yorktown Heights, New York.[16]
IBM was chiefly responsible for introducing APL to the marketplace. The first publicly available version of APL was released in 1968 for the IBM 1130. IBM provided APL\1130 for free but without liability or support.[18][19] 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.[20] Additional improvements in performance for selected IBM System/370 mainframe systems included the APL Assist Microcode in which some support for APL execution was included in the processor's firmware, 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 for use at IBM in 1966, the APL\360[21][22][23] 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.[24]
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 desktop computer, which had a small CRT and an APL keyboard, when most other small computers of the time only offered BASIC. In the 1980s, the VSAPL program product enjoyed wide use with Conversational Monitor System (CMS), Time Sharing Option (TSO), VSPC, MUSIC/SP, and 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 mainframe computers.[25] In 1974, student Alan Stebbens was assigned the task of implementing an internal function.[26] 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.[27]
In the 1960s and 1970s, several timesharing firms arose that sold APL services using modified versions of the IBM APL\360[23] interpreter. In North America, the better-known ones were IP 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, and later the personal computer, by the mid-1980s, the timesharing industry was all but gone.
Sharp APL was available from IP 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), a file system, nested arrays, and shared variables.
APL interpreters were available from other mainframe and mini-computer manufacturers also, notably Burroughs, Control Data Corporation (CDC), Data General, Digital Equipment Corporation (DEC), Harris, Hewlett-Packard (HP), Siemens, Xerox and others.
Garth Foster of 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 near Monterey, California, and at Pajaro Dunes near Watsonville, California. The SIGAPL special interest group of the Association for Computing Machinery continues to support the APL community.[28]
Microcomputers
[edit]On microcomputers, which became available from the mid-1970s onwards, BASIC became the dominant programming language.[29] Nevertheless, some microcomputers provided APL instead – the first being the Intel 8008-based MCM/70 which was released in 1974[30][31] and which was primarily used in education.[32] Another machine of this time was the VideoBrain Family Computer, released in 1977, which was supplied with its dialect of APL called APL/S.[33]
The Commodore SuperPET, introduced in 1981, included an APL interpreter developed by the University of Waterloo.[34]
In 1976, Bill Gates claimed in his Open Letter to Hobbyists that Microsoft Corporation was implementing APL for the Intel 8080 and Motorola 6800 but had "very little incentive to make [it] available to hobbyists" because of software piracy.[35] It was never released.
APL2
[edit]Starting in the early 1980s, IBM APL development, under the leadership of Jim Brown, 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.[36][37][38] APL2 was first released for CMS and TSO in 1984.[39] The APL2 Workstation edition (Windows, OS/2, AIX, Linux, and Solaris) followed later.[40][41]
As other vendors were busy developing APL interpreters for new hardware, notably Unix-based microcomputers, 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.[42][43] IBM cites its use for problem solving, system design, prototyping, engineering and scientific computations, expert systems,[44] for teaching mathematics and other subjects, visualization and database access.[45]
Modern implementations
[edit]Various implementations of APL by APLX, Dyalog, et al., include extensions for object-oriented programming, support for .NET, XML-array conversion primitives, graphing, operating system interfaces, and lambda calculus expressions. Freeware versions include GNU APL for Linux and NARS2000 for Windows (which runs on Linux under Wine). Both of these are fairly complete versions of APL2 with various language extensions.
Derivative languages
[edit]APL has formed the basis of, or influenced, the following languages:[citation needed]
- 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, and which uses ASCII as input.[46]
- J, which was also designed by Iverson, and which uses ASCII with digraphs instead of special symbols.[7]
- K, a proprietary variant of APL developed by Arthur Whitney.[8]
- MATLAB, a numerical computation tool.[6]
- 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, a statistical programming language (usually now seen in the open-source version known as R).
- Snap!, a low-code block-based programming language, born as an extended reimplementation of Scratch
- Speakeasy, a numerical computing interactive environment.
- Wolfram Language, the programming language of Mathematica.[47]
Language characteristics
[edit]Character set
[edit]APL has been criticized and praised for its choice of a unique, non-standard character set. In the 1960s and 1970s, few terminal devices or even displays 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 line terminals (line-mode operation only, not full screen) was the Texas Instruments TI Model 745 (c. 1977) with the full APL character set[48] which featured half and full duplex telecommunications modes, for interacting with an APL time-sharing service or remote mainframe to run a remote computer job, 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,[49][50] or easy-reference printed keyboard cards which can frustrate beginners accustomed to other programming languages.[51][52][53] 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.[54]
In defense of APL, it requires fewer characters to type, and keyboard mappings become memorized over time. Special APL keyboards are also made and in use today, as are freely downloadable fonts for operating systems such as Microsoft Windows.[55] The reported productivity gains assume that one spends enough time working in the language to make it worthwhile to memorize the symbols, their semantics, and keyboard mappings, not to mention a substantial number of idioms for common tasks.[citation needed]
Design
[edit]Unlike traditionally structured programming languages, APL code is typically structured as chains of monadic or dyadic functions, and operators[56] acting on arrays.[57] 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 precedence, and always associate to the right. Thus, APL is read or best understood from right-to-left.
Early APL implementations (c. 1970 or so) had no programming loop-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.[58] In the examples below, the APL interpreter first types six spaces before awaiting the user's input. Its own output starts in column one.
n ← 4 5 6 7
|
Assigns vector of values, {4 5 6 7}, to variable n , an array create operation. An equivalent yet more concise APL expression would be n ← 3 + ⍳4 . Multiple values are stored in array n , the operation performed without formal loops or control flow language.
|
n
4 5 6 7
|
Display the contents of n , currently an array or vector.
|
n+4
8 9 10 11
|
4 is now added to all elements of vector n , creating a 4-element vector {8 9 10 11}.As above, APL's interpreter displays the result because the expression's value was not assigned to a variable (with a ← ).
|
+/n
22
|
APL displays the sum of components of the vector n , i.e., 22 (= 4 + 5 + 6 + 7) using a very compact notation: read +/ as "plus, over..." and a slight change would be "multiply, over..."
|
m ← +/3+⍳4
m
22
|
These operations can be combined into one statement, remembering that APL evaluates expressions right to left: first ⍳4 creates an array, [1,2,3,4] , then 3 is added to each component, which are summed together and the result stored in variable m , finally displayed. In normal mathematical notation, it is equivalent to: . Recall that mathematical expressions are not read or evaluated from right-to-left.
|
The user can save the workspace with all values, programs, and execution status.
APL uses a set of non-ASCII 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.[59] 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.[citation needed]
Due to the unusual character set, many programmers use special keyboards with APL keytops to write APL code.[60] Although there are various ways to write APL code using only ASCII characters,[61] in practice it is almost never done. (This may be thought to support Iverson's thesis about notation as a tool of thought.[62]) 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[who?] 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.[citation needed]
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 as being comparatively tedious. APL is often found where time-to-market is important, such as with trading systems.[63][64][65][66]
Terminology
[edit]APL makes a clear distinction between functions and operators.[56][67] 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.
Term | Description |
---|---|
function | operation or mapping that takes zero, one (right) or two (left & right) arguments which may be scalars, arrays, or more complicated structures, and may return a similarly complex result. A function may be: |
множество | объект со значением данных, имеющий ноль или более ортогональных измерений в порядке строк , в котором каждый элемент представляет собой примитивный скалярный элемент данных или другой массив. [69] |
ниладический | не принимая и не требуя никаких аргументов, недействителен [70] |
монадический | требующий только одного аргумента; справа для функции, слева для оператора, унарный [70] |
диадический | требующий как левого, так и правого аргумента, двоичный [70] |
двойственный или монадический |
возможность использования в монадическом или диадическом контексте, что позволяет исключить левый аргумент [ необходимо определение ] [68] |
оператор | операция или отображение, которая принимает одну (слева) или две (слева и справа) функцию или аргументы (операнды) со значениями массива и производит функцию. Оператор может быть: |
Синтаксис
[ редактировать ]APL имеет явные представления функций, операторов и синтаксиса, обеспечивая тем самым основу для четкого и явного описания расширенных возможностей языка и инструментов для экспериментов с ними. [71]
Примеры
[ редактировать ]Привет, мир
[ редактировать ]Это отобразит « Привет, мир »:
'Hello, world'
Темой дизайна в APL является определение действий по умолчанию, которые в некоторых случаях могут привести к синтаксическим ошибкам в большинстве других языков программирования.
Выше отображается строковая константа «Hello, world», поскольку отображение является действием по умолчанию для любого выражения, для которого действие не указано явно (например, присвоение, параметр функции).
Возведение в степень
[ редактировать ]Другим примером этой темы является то, что возведение в степень в APL записывается как 2*3
, что означает возведение 2 в степень 3 (это будет записано как 2^3
или 2**3
в некоторых языках или относится к вызову функции, например pow(2, 3);
в других). Многие языки используют *
для обозначения умножения, как в 2*3
, но APL предпочитает использовать 2×3
. Однако, если база не указана (как в случае с оператором *3
в APL или ^3
в других языках), в большинстве языков программирования это можно рассматривать как синтаксическую ошибку. APL, однако, предполагает, что отсутствующее основание является константой натурального логарифма e , и интерпретирует *3
как 2.71828*3
.
Простая статистика
[ редактировать ]
Предположим, что X
представляет собой массив чисел. Затем (+/X)÷⍴X
дает свое среднее значение. Читая справа налево , ⍴X
дает количество элементов в X, и поскольку ÷
является двоичным оператором, также требуется термин слева от него. Оно заключено в круглые скобки, так как в противном случае было бы взято X (так что суммирование было бы X÷⍴X
- каждый элемент X, разделенный на количество элементов в X), и +/X
дает сумму элементов X. Основываясь на этом, следующее выражение вычисляет стандартное отклонение :
((+/((X - (+/X)÷⍴X)*2))÷⍴X)*0.5
Естественно, можно было бы определить это выражение как функцию для многократного использования, а не переписывать его каждый раз. Кроме того, поскольку присваивание является оператором, оно может появляться внутри выражения, поэтому следующее поместит подходящие значения в T, AV и SD:
SD←((+/((X - AV←(T←+/X)÷⍴X)*2))÷⍴X)*0.5
Выберите 6 лотерейных номеров
[ редактировать ]Следующее выражение немедленного режима генерирует типичный набор «Выбери 6» номеров лотереи : шесть псевдослучайных целых чисел в диапазоне от 1 до 40, гарантированно неповторяющихся , и отображает их, отсортированные в порядке возрастания:
x[⍋x←6?40]
Вкратце, вышеизложенное делает многое, хотя новичку APLer может показаться сложным . Он сочетает в себе следующие функции APL (также называемые примитивами [72] и глифы [73] ):
- Первой выполняется (APL выполняется слева направо) — это двоичная функция.
?
(названныйdeal
когда диадический), который возвращает вектор, состоящий из выбранного числа (левый аргумент: 6 в данном случае) случайных целых чисел в диапазоне от 1 до заданного максимума (правый аргумент: 40 в данном случае), который, если указанный максимум ≥ длины вектора, гарантированно неповторяющийся; таким образом сгенерируйте/создайте 6 случайных целых чисел в диапазоне от 1 до 40. [74] - Затем этому вектору присваивается (
←
) к переменнойx
, потому что это понадобится позже. - Затем этот вектор сортируется в порядке возрастания с помощью монадического алгоритма.
⍋
функция, правым аргументом которой является все, что находится справа от нее, вплоть до следующей несбалансированной закрывающей скобки или закрывающей круглой скобки. Результат⍋
это индексы, которые будут располагать его аргумент в порядке возрастания. - Затем вывод
⍋
используется для индексации переменнойx
, который мы сохранили ранее для этой цели, тем самым выбрав его элементы в возрастающей последовательности.
Поскольку слева от самого левого x нет функции, сообщающей APL, что делать с результатом, он просто выводит его на дисплей (в одной строке, разделенной пробелами), не требуя для этого каких-либо явных инструкций.
?
также имеет монадический эквивалент, называемый roll
, который просто возвращает одно случайное целое число от 1 до единственного операнда [справа от него] включительно. Таким образом, программа ролевой игры может использовать выражение ?20
бросить двадцатигранный кубик.
Простые числа
[ редактировать ]Следующее выражение находит все простые числа от 1 до R. Сложность вычислений как во времени, так и в пространстве равна (в обозначении Big O ).
(~R∊R∘.×R)/R←1↓⍳R
Выполнение справа налево означает:
- Йота
⍳
создает вектор, содержащий целые числа из1
кR
(еслиR= 6
в начале программы,⍳R
является1 2 3 4 5 6
) - Отбросьте первый элемент этого вектора (
↓
функция), т.е.1
. Так1↓⍳R
является2 3 4 5 6
- Набор
R
в новый вектор (←
, примитив присваивания ), т.е.2 3 4 5 6
- The
/
Оператор репликации является двоичным (двоичным), и интерпретатор сначала оценивает его левый аргумент (полностью в скобках): - Создать внешний продукт
R
умноженный наR
, т. е. матрица, представляющая собой таблицу умножения R на R (°.×
оператор), т.е.
4 | 6 | 8 | 10 | 12 |
6 | 9 | 12 | 15 | 18 |
8 | 12 | 16 | 20 | 24 |
10 | 15 | 20 | 25 | 30 |
12 | 18 | 24 | 30 | 36 |
- Постройте вектор такой же длины, как
R
с1
в каждом месте, где соответствующее число вR
находится во внешней матрице продуктов (∈
, установите включение или элемент оператора или оператора Epsilon ), т. е.0 0 1 0 1
- Логически инвертировать ( не ) значения в векторе (заменить нули на единицы, а единицы на нули) (
∼
, логическое «нет» или оператор «Тильда» ), т.е.1 1 0 1 0
- Выберите элементы в
R
для которого соответствующий элемент1
(/
оператор репликации ), т.е.2 3 5
(Обратите внимание: предполагается, что начало координат APL равно 1, т. е. индексы начинаются с 1. APL можно настроить на использование 0 в качестве начала координат, так что ι6
является 0 1 2 3 4 5
, что удобно для некоторых расчетов.)
Сортировка
[ редактировать ]Следующее выражение сортирует список слов, хранящийся в матрице X, по длине слова:
X[⍋X+.≠' ';]
Игра Жизни
[ редактировать ]Следующая функция «жизнь», написанная на Dyalog APL, [75] [76] берет булеву матрицу и вычисляет новое поколение в соответствии с «Игрой жизни» Конвея . Он демонстрирует возможности APL по реализации сложного алгоритма с помощью очень небольшого количества кода, но для его понимания требуются некоторые глубокие знания APL (как это делает одна и та же программа во многих языках).
life ← {⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ∘.⊖ ¯1 0 1 ⌽¨ ⊂⍵}
Удаление HTML-тегов
[ редактировать ]В следующем примере, также в Dyalog, первая строка присваивает переменной некоторый HTML-код. txt
а затем использует выражение APL для удаления всех тегов HTML:
txt←'<html><body><p>This is <em>emphasized</em> text.</p></body></html>'
{⍵ /⍨ ~{⍵∨≠\⍵}⍵∊'<>'} txt
This is emphasized text.
Мы
[ редактировать ]APL получил свое название от инициалов книги Айверсона «Язык программирования» . [3] даже несмотря на то, что в книге описывается математическая нотация Айверсона , а не реализованный язык программирования, описанный в этой статье. Имя используется только для реальных реализаций, начиная с APL\360 .
Адин Фалькофф придумал это название в 1966 году во время внедрения APL\360 в IBM :
Проходя мимо кабинета, в котором жили трое студентов, я услышал звуки происходящего спора. Я просунул голову в дверь, и Эрик спросил меня: «Разве не правда, что все знают, что используемая нами система обозначений называется APL?» Мне было жаль, что мне пришлось разочаровать его, признавшись, что я никогда не слышал, чтобы это называлось так. Откуда он взял, что это общеизвестно? И кто решил это так назвать? В самом деле, почему это нужно было как-то называть? Спустя некоторое время я услышал, как оно было названо. Когда в июне 1966 года начались работы по внедрению, началась и работа по документированию. Полагаю, когда им пришлось написать об «этом», Фалькофф и Айверсон поняли, что им придется дать «этому» имя. Вероятно, в то время было сделано много предложений, но я слышал только о двух. Группа SRA в Чикаго, которая разрабатывала учебные материалы с использованием этой записи, поддержала название «Mathlab». Это не прижилось. Другое предложение заключалось в том, чтобы назвать ее «Лучшая математика Айверсона», а затем позволить людям придумать подходящую аббревиатуру. Это было сочтено шуткой.
Затем однажды Адин Фалькофф вошел в офис Кена и написал на доске «Язык программирования», а под ним аббревиатуру «APL». Так оно и родилось. Примерно через неделю или около того Эрик Айверсон задал мне свой вопрос, в то время как это имя еще не продвинулось по тринадцати милям вверх по Таконик-Паркуэй от IBM Research до IBM Mohansic.
— Юджин МакДоннелл , [77]
APL иногда интерпретируется как язык программирования массивов или язык обработки массивов . [78] тем самым превратив APL в бэкроним .
Логотип
[ редактировать ]Между вендорами APL всегда существовало сотрудничество, и с 1969 по 2010 год регулярно проводились совместные конференции. [79] На таких конференциях продукция часто раздавалась APL с мотивами APL или коллекцией логотипов поставщиков. Распространенными были яблоки (каламбур на сходстве произношения яблок и APL ) и фрагмент кода. ⍺*⎕
это символы, создаваемые классической раскладкой клавиатуры APL APL , когда вы удерживаете клавишу-модификатор и набираете «APL».
Несмотря на все эти усилия сообщества, универсального логотипа языка программирования, не зависящего от поставщика, так и не появилось. Поскольку популярные языки программирования все чаще имеют узнаваемые логотипы, Fortran получит свой логотип в 2020 году. [80] Британская ассоциация APL во второй половине 2021 года запустила кампанию по созданию такого логотипа для APL, и после выборов сообщества и нескольких раундов отзывов в мае 2022 года логотип был выбран. [81]
Использовать
[ редактировать ]APL используется для многих целей, включая финансовые и страховые приложения. [82] искусственный интеллект , [83] [84] нейронные сети [85] и робототехника . [86] Утверждалось, что APL — это инструмент вычислений , а не язык программирования; [87] его символическая природа и возможности массивов сделали его популярным среди экспертов в предметной области и специалистов по обработке данных. [88] которые не имеют или не нуждаются в навыках программиста . [ нужна ссылка ]
APL хорошо подходит для манипулирования изображениями и компьютерной анимации , где графические преобразования могут быть закодированы как матричные умножения. Одна из первых компаний, занимающихся коммерческой компьютерной графикой, Digital Effects , выпустила графический продукт APL под названием Visions , который использовался для создания телевизионной рекламы и анимации для фильма «Трон» 1982 года . [89] В последнее время в Штормграде симулятор катания на лодках использует APL для реализации своей основной логики, взаимодействия с промежуточным программным обеспечением конвейера рендеринга и основной частью своего физического движка . [90]
Сегодня APL по-прежнему используется в широком спектре коммерческих и научных приложений, например управление инвестициями , [82] управление активами , [91] [ нужна ссылка ] здравоохранение , [92] и профилирование ДНК . [93] [94]
Известные реализации
[ редактировать ]АПЛ\360
[ редактировать ]Первой реализацией APL с использованием узнаваемых символов APL была APL\360, которая работала на IBM System/360 и была завершена в ноябре 1966 года. [1] хотя в то время использовался только внутри IBM. [39] В 1973 году его разработчики Ларри Брид , Дик Лэтвелл и Роджер Мур были удостоены премии Грейс Мюррей Хоппер от Ассоциации вычислительной техники (ACM). Она была вручена «за работу по разработке и внедрению APL\360, устанавливающую новые стандарты простоты, эффективности, надежности и времени отклика для интерактивных систем». [95] [96] [97]
В 1975 году микрокомпьютер IBM 5100 предлагал APL\360. [98] как один из двух встроенных интерпретируемых языков на основе ПЗУ для компьютера, оснащенный клавиатурой и дисплеем, поддерживающими все специальные символы, используемые в языке. [99]
Значительные разработки в APL\360 включали CMS/APL, в которой использовались виртуального хранилища возможности CMS , и APLSV, в котором были представлены общие переменные , системные переменные и системные функции. Впоследствии он был портирован на платформы IBM System/370 и VSPC до своего окончательного выпуска в 1983 году, после чего был заменен APL2. [39]
АПЛ\1130
[ редактировать ]В 1968 году APL\1130 стала первой общедоступной системой APL, созданной IBM для IBM 1130 . [100] Оно стало самым популярным программным обеспечением библиотеки IBM Type-III , выпущенным IBM. [101]
APL*Plus и Sharp APL
[ редактировать ]APL*Plus и Sharp APL — это версии APL\360 с добавленными бизнес-ориентированными расширениями, такими как форматирование данных и возможности хранения массивов APL во внешних файлах. Они были совместно разработаны двумя компаниями, в которых работали разные члены первоначальной команды разработчиков IBM APL\360. [102]
Этими двумя компаниями были IP Sharp Associates (IPSA), компания, оказывающая услуги APL\360, основанная в 1964 году Яном Шарпом, Роджером Муром и другими, и STSC , компания по предоставлению консультационных услуг и разделения времени, основанная в 1969 году Лоуренсом Бридом и другими. Вместе они разработали APL*Plus и после этого продолжили работать вместе, но разрабатывали APL отдельно как APL*Plus и Sharp APL. STSC портировала APL*Plus на многие платформы, при этом были созданы версии для VAX 11. [103] PC и UNIX, тогда как IPSA применила другой подход к появлению персональных компьютеров и сделала Sharp APL доступным на этой платформе с использованием дополнительного оборудования PC-XT/360 . В 1993 году для поддержки Sharp APL была создана компания Soliton Incorporated , которая превратила Sharp APL в SAX (Sharp APL для Unix). По состоянию на 2018 год [update], APL*Plus продолжается как APL2000 APL+Win.
В 1985 году Ян Шарп и Дэн Дайер из STSC совместно получили Премию Кеннета Э. Айверсона за выдающийся вклад в APL . [104]
АПЛ2
[ редактировать ]APL2 представлял собой значительную повторную реализацию APL от IBM, которая разрабатывалась с 1971 года и впервые была выпущена в 1984 году. Он предоставляет множество дополнений к языку, наиболее заметным из которых является поддержка вложенных (непрямоугольных) массивов. [39] Вся команда продуктов и услуг APL2 была награждена премией Айверсона в 2007 году. [104]
В 2021 году IBM продала APL2 компании Log-On Software, которая разрабатывает и продает продукт как Log-On APL2 . [105]
АПЛГОЛ
[ редактировать ]В 1972 году APLGOL был выпущен как экспериментальная версия APL, которая добавляла конструкции языка структурированного программирования в языковую среду. Были добавлены новые операторы для управления между операторами, выполнения условных операторов и структурирования операторов, а также операторы, поясняющие назначение алгоритма. [106] Он был реализован для Hewlett-Packard в 1977 году. [107]
Диалог APL
[ редактировать ]Dyalog APL был впервые выпущен британской компанией Dyalog Ltd. [108] в 1983 году [109] и по состоянию на 2018 год [update], доступен для AIX , Linux (в том числе на платформах Raspberry Pi ), macOS и Microsoft Windows . Он основан на APL2 с расширениями для поддержки объектно-ориентированного программирования . [110] функциональное программирование , [111] и неявное программирование . [112] Лицензии бесплатны для личного/некоммерческого использования. [113]
В 1995 году двое из команды разработчиков — Джон Скоулз и Питер Доннелли — были награждены премией Айверсона за работу над интерпретатором. [104] Гитте Кристенсен и Мортен Кромберг были совместными лауреатами премии Айверсона в 2016 году. [114]
НАРС2000
[ редактировать ]NARS2000 — это интерпретатор APL с открытым исходным кодом, написанный Бобом Смитом, известным разработчиком и разработчиком APL из STSC в 1970-х и 1980-х годах. NARS2000 содержит расширенные функции и новые типы данных и изначально работает в Microsoft Windows и других платформах под Wine . Он назван в честь инструмента разработки 1980-х годов — NARS (Система исследования вложенных массивов). [115]
АПЛХ
[ редактировать ]APLX — это кроссплатформенный диалект APL, основанный на APL2 и с несколькими расширениями, который был впервые выпущен британской компанией MicroAPL в 2002 году. Хотя он больше не находится в разработке и не продается в коммерческих целях, теперь он доступен бесплатно на сайте Dyalog. [116]
Йорк АПЛ
[ редактировать ]Йорк АПЛ [117] был разработан в Йоркском университете , Онтарио, примерно в 1968 году и работал на мэйнфреймах IBM 360. Одно заметное различие между ним и APL\360 заключалось в том, что он определял «форму» (ρ) скаляра как 1, тогда как APL\360 определял его как более математически правильный 0 — это облегчило написание функций, которые действовали бы одинаково с скаляры и векторы.
ГНУ АПЛ
[ редактировать ]GNU APL является свободной реализацией расширенного APL, как указано в ISO/IEC 13751:2001, и, таким образом, является реализацией APL2. Он работает в Linux , macOS, нескольких диалектах BSD и в Windows (либо с использованием Cygwin для полной поддержки всех своих системных функций, либо как собственный 64-битный двоичный файл Windows с отсутствием некоторых системных функций). GNU APL внутренне использует Unicode и может быть написан по сценарию. Ее написал Юрген Зауэрман. [118]
Ричард Столлман , основатель проекта GNU , был одним из первых, кто внедрил APL и использовал его для написания текстового редактора, будучи учеником средней школы, летом 1969 года. [119]
Интерпретация и составление APL
[ редактировать ]APL традиционно является интерпретируемым языком , имеющим такие языковые характеристики, как слабая типизация переменных, которые плохо подходят для компиляции . [120] Однако с массивами в качестве основной структуры данных [121] он предоставляет возможности для повышения производительности за счет параллелизма , [122] параллельные вычисления , [123] [124] массово параллельные приложения, [125] [126] и очень крупномасштабная интеграция (СБИС), [127] [128] и с самого начала APL считался высокопроизводительным языком. [129] - например, он был отмечен скоростью, с которой он мог выполнять сложные матричные операции, «поскольку он работает с массивами и выполняет такие операции, как инверсия матрицы, внутри себя». [130]
Тем не менее, APL редко интерпретируется чисто, и методы компиляции или частичной компиляции, которые используются или использовались, включают следующее:
Идиоматическое признание
[ редактировать ]Большинство интерпретаторов APL поддерживают идиом. распознавание [131] и оценивать распространенные идиомы как отдельные операции. [132] [133] Например, оценивая идиому BV/⍳⍴A
как одна операция (где BV
является логическим вектором и A
является массивом), можно избежать создания двух промежуточных массивов. [134]
Оптимизированный байт-код
[ редактировать ]Слабая типизация в APL означает, что имя может ссылаться на массив (любого типа данных), функцию или оператор. В общем, интерпретатор не может заранее знать, какая это будет форма, и поэтому должен выполнять анализ, проверку синтаксиса и т. д. во время выполнения. [135] Однако при определенных обстоятельствах можно заранее определить, на какой тип имя будет ссылаться, а затем сгенерировать байт-код , который можно выполнить с меньшими накладными расходами во время выполнения. Этот байт-код также можно оптимизировать с помощью таких методов компиляции, как свертывание констант или исключение общих подвыражений . [136] Интерпретатор выполнит байт-код, если он присутствует и когда выполняются любые сделанные предположения. Dyalog APL включает поддержку оптимизированного байт-кода. [136]
Сборник
[ редактировать ]Компиляция APL была предметом исследований и экспериментов с тех пор, как язык впервые стал доступен; первым компилятором считается Burroughs APL-700. [137] который был выпущен примерно в 1971 году. [138] Чтобы иметь возможность скомпилировать APL, необходимо наложить языковые ограничения. [137] [139] APEX — это исследовательский компилятор APL, написанный Робертом Бернеки и доступный по лицензии GNU General Public License . [140]
Компилятор STSC при условии , APL представляет собой гибрид оптимизатора байт-кода и компилятора. Он позволяет компилировать функции в машинный код его подфункции и глобальные переменные что объявлены , но интерпретатор по-прежнему используется в качестве библиотеки времени выполнения и для выполнения функций, которые не соответствуют требованиям компиляции. [141]
Стандарты
[ редактировать ]APL был стандартизирован Американского национального института стандартов (ANSI) рабочей группой X3J10 , Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC), рабочей группой 3 Объединенного технического комитета 1 ISO/IEC 22. Основной язык APL: указан в ISO 8485:1989, а расширенный язык APL указан в ISO/IEC 13751:2001.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Цитаты и анекдоты APL» . jsoftware.com . Проверено 14 апреля 2018 г.
- ^ "стд::йота" . cppreference.com .
- ^ Перейти обратно: а б с Кеннет Э. Айверсон (1 декабря 1962 г.). Язык программирования . Уайли . ISBN 978-0-471-43014-8 . ОЛ 26792153М . Викиданные Q105954505 . Проверено 6 августа 2023 г.
- ^ Макинтайр, Дональд Б. (1991). «Язык как интеллектуальный инструмент: от иероглифики до APL» . IBM Systems Journal . 30 (4): 554–581. дои : 10.1147/sj.304.0554 . Архивировано из оригинала 4 марта 2016 года . Проверено 9 января 2015 г.
- ^ «Цитата на премию ACM - Джон Бэкус» . Награды.acm.org. 1977. Архивировано из оригинала 12 февраля 2008 года . Проверено 3 февраля 2010 г.
- ^ Перейти обратно: а б Молер, Клив. «Рост MATLAB» (PDF) . Архивировано из оригинала (PDF) 11 апреля 2009 г. Проверено 3 февраля 2010 г.
- ^ Перейти обратно: а б Хуэй, Роджер. «Библиография APL и J» . jsoftware.com/jwiki . Проверено 2 марта 2010 г.
- ^ Перейти обратно: а б «Интервью с Артуром Уитни» . Кх Системы. 4 января 2004 года. Архивировано из оригинала 4 апреля 2009 года . Проверено 2 марта 2010 г.
- ^ Айверсон, Кеннет Э., «Автоматическая обработка данных: Глава 6: Язык программирования». Архивировано 4 июня 2009 г., в Wayback Machine , 1960 г., черновик книги Брукса и Айверсона 1963 г. «Автоматическая обработка данных» .
- ^ Брукс, Фред ; Айверсон, Кеннет (1963), Автоматическая обработка данных , John Wiley & Sons Inc.
- ^ «Цитирование премии Тьюринга 1979» . Награды.acm.org. Архивировано из оригинала 23 декабря 2009 г. Проверено 3 февраля 2010 г.
- ^ Хеллерман, Х. (июль 1964 г.). «Экспериментальная система персонализированного преобразователя массивов» . Коммуникации АКМ . 7 (7): 433–438. дои : 10.1145/364520.364573 . S2CID 2181070 .
- ^ Фалькофф, Адин Д.; Айверсон, Кеннет Э., «Эволюция APL» , Уведомления ACM SIGPLAN 13, 1978–08.
- ^ Абрамс, Филип С., Интерпретатор «нотации Айверсона» , Технический отчет: CS-TR-66-47, Факультет компьютерных наук, Стэнфордский университет, август 1966 г.;
- ^ Хей, Томас (2005). «Биографии: Кеннет Э. Айверсон». IEEE Анналы истории вычислений . дои : 10.1109/MAHC.2005.4 .
- ^ Перейти обратно: а б Брид, Ларри, «Первая терминальная сессия APL» , APL Quote Quad , Ассоциация вычислительной техники, том 22, номер 1, сентябрь 1991 г., стр. 2–4.
- ^ 19, 2009 Адин Фалькофф - Музей истории компьютеров. «Айверсон выразил ему благодарность за выбор названия APL и появление пишущей машинки IBM с мячом для гольфа со сменной печатной головкой, которая обеспечила знаменитый набор символов для представления программ».
- ^ Брид, Ларри (август 2006 г.). «Как мы добрались до APL\1130» . Вектор (Британская ассоциация APL) . 22 (3). ISSN 0955-1433 . Архивировано из оригинала 12 мая 2008 г. Проверено 2 апреля 2007 г.
- ^ Руководство APL \ 1130. Архивировано 21 февраля 2011 г. в Wayback Machine , май 1969 г.
- ^ «Вспоминая АПЛ» . Quadibloc.com . Проверено 17 июня 2013 г.
- ^ Фалькофф, Адин; Айверсон, Кеннет Э., «Руководство пользователя APL\360». Архивировано 29 февраля 2012 г. в Wayback Machine , IBM Research, Исследовательский центр Томаса Дж. Уотсона, Йорктаун-Хайтс, штат Нью-Йорк, август 1968 г.
- ^ «Терминальная система APL \ 360». Архивировано 11 июля 2010 г. в Wayback Machine , IBM Research, Исследовательский центр Томаса Дж. Уотсона, март 1967 г.
- ^ Перейти обратно: а б Пакин, Сандра (1968). Справочное руководство APL\360 . Science Research Associates, Inc. ISBN 978-0-574-16135-2 .
- ^ Фалькофф, Адин Д.; Айверсон, Кеннет Э., Проектирование APL , Журнал исследований и разработок IBM , Том 17, номер 4, июль 1973 г. «Эти функции, определяемые средой, были основаны на использовании еще одного класса функций, называемых «двутавровыми балками». из-за формы используемого для них символа, который обеспечивает более общие средства связи между программами APL и менее абстрактными частями системы. Функции двутаврового луча были впервые введены системными программистами, чтобы позволить им выполнять System/. 360 инструкций из программ APL и, таким образом, используют APL в качестве непосредственной помощи в своей программной деятельности. Очевидное удобство функций такого типа, которые оказались частью языка, привело к введению монадической двутавровой функции для. прямое использование кем-либо. Различные аргументы этой функции давали информацию об окружающей среде, такую как доступное пространство и время суток».
- ^ Минкер, Джек (январь 2004 г.). «2.3.4 Разработка компьютерного программного обеспечения в CSC, 1962–1973». Начало компьютерных и компьютерных наук в Университете Мэриленда (PDF) (Отчет). Университет Мэриленда. п. 38. Архивировано из оригинала (PDF) 10 июня 2011 года . Проверено 23 мая 2011 г.
- ^ Стеббенс, Алан. «Как все начиналось» . Архивировано из оригинала 4 марта 2016 г. Проверено 22 мая 2011 г.
- ^ «Справочное руководство по языку и операциям Xerox APL» (PDF) . Архивировано (PDF) из оригинала 9 октября 2022 г.
- ^ «СИГАПЛ» . Сигапл.орг . Проверено 17 июня 2013 г.
- ^ «Пятьдесят лет BASIC, языка программирования, сделавшего компьютеры персональными» . Время . 29 апреля 2014 года . Проверено 29 апреля 2018 г.
- ^ «МСМ Компьютерс М70/М700» . old-computers.com . Архивировано из оригинала 3 апреля 2018 года . Проверено 8 апреля 2018 г.
- ^ Стачняк, Стачняк (2011). Изобретение ПК: история MCM/70 . Издательство Университета Макгилла Куинса. ISBN 978-0-7735-3852-8 .
- ^ Миллер, Майкл (17 декабря 2014 г.). «ПК, проложившие путь к Альтаиру» . Журнал ПК . Зифф Дэвис . Проверено 29 апреля 2018 г.
- ^ «Семейный компьютер VideoBrain» , Popular Science , ноябрь 1978 г., реклама.
- ^ «Взгляд на SuperPet» . Вычислите! . Small System Services Inc., декабрь 1981 г. Проверено 29 апреля 2018 г.
- ^ Гейтс, Билл (31 января 1976 г.). «Открытое письмо любителям» . доморощенного компьютерного клуба Информационный бюллетень . Проверено 29 апреля 2018 г.
- ^ Хуэй, Роджер. «Вспоминая Кена Айверсона» . keiapl.org . КЕИАПЛ . Проверено 10 января 2015 г.
- ^ «Кеннет Э. Айверсон» . Премия Тьюринга ACM AM . АКМ . Проверено 10 января 2015 г.
- ^ «APL2: Ранние годы: можете и должны ли вы идти на компромисс по техническим вопросам?» . Глава SIGPLAN, посвященная языкам программирования массивов . АКМ . Проверено 10 января 2015 г.
- ^ Перейти обратно: а б с д Фалькофф, Адин Д. (1991). «Семейство систем APL IBM». IBM Systems Journal . 30 (4): 416–432. дои : 10.1147/sj.304.0416 . S2CID 19030940 .
- ^ «ИБМ АПЛ2» . ЭДМ2 . 09.10.2019. Архивировано из оригинала 17 ноября 2021 г. Проверено 17 ноября 2021 г.
- ^ «APL2: Что нового» . IBM.com . ИБМ . Проверено 22 апреля 2018 г.
- ^ Микро АПЛ. «Обзор системы APL» . microapl.com . Микро АПЛ . Проверено 10 января 2015 г.
- ^ Робертсон, Грэм. «Личный взгляд на APL2010» . archive.vector.org.uk . Вектор – журнал Британской ассоциации APL. Архивировано из оригинала 2 апреля 2015 года . Проверено 10 января 2015 г.
- ^ Родригес, П.; Рохас, Дж.; Альфонсека, М.; Бургос, Дж.И. (1989). «Экспертная система химического синтеза, написанная на APL2/PC». ACM SIGAPL APL Quote Quad . 19 (4): 299–303. дои : 10.1145/75144.75185 . S2CID 16876053 .
- ^ «APL2: язык программирования для решения проблем, визуализации и доступа к базам данных» . www-03.ibm.com . ИБМ . Проверено 10 января 2015 г.
- ^ Пайк, Роб (25 марта 2018 г.). «Плющ» . ГоДок . Архивировано из оригинала 13 августа 2019 г.
- ^ «Часто задаваемые вопросы по языку Wolfram» . Вольфрам . Проверено 20 февраля 2020 г.
LISP и APL оказали два первых влияния.
- ^ Техасские инструменты (1977). «Полностраничная реклама TI 745: представляем новый набор персонажей» . Компьютерный мир . 11 (27): 32 . Проверено 20 января 2015 г.
- ^ Диалог. «Шрифты и клавиатуры APL» . www.dyalog.com . Диалог . Проверено 19 января 2015 г.
- ^ Смит, Боб. «Клавиатура NARS2000» . www.sudleyplace.com . Боб Смит / NARS2000 . Проверено 19 января 2015 г.
- ^ «Введение в APL – символы APL» . www.microapl.co.uk . ООО «МикроАПЛ» . Проверено 8 января 2015 г.
- ^ Браун, Джеймс А.; Хоукс, Брент; Тримбл, Рэй (1993). «Расширение набора символов APL». ACM SIGAPL APL Quote Quad . 24 (1): 41–46. дои : 10.1145/166198.166203 .
- ^ Кромберг, Мортен. «Поддержка Unicode для APL» . archive.vector.org.uk . Вектор, журнал Британской ассоциации APL. Архивировано из оригинала 20 января 2015 года . Проверено 8 января 2015 г.
- ^ Сюй, Аарон. «Информатика и образование с помощью APL» . Дьялог, ООО Архивировано из оригинала 17 августа 2016 года . Проверено 15 июля 2016 г.
- ^ Dyalog, Inc. Шрифты и клавиатуры APL. https://www.dyalog.com/apl-font-keyboard.htm
- ^ Перейти обратно: а б МикроАПЛ. «Операторы» . www.microapl.co.uk . МикроАПЛ . Проверено 12 января 2015 г.
- ^ Примитивные функции. «Примитивные функции» . www.microapl.co.uk/ . Проверено 1 января 2015 г.
- ^ Рабочее пространство. «Рабочее пространство» . www.microapl.co.uk . Проверено 1 января 2015 г.
- ^ "пример" . Catpad.net. Архивировано из оригинала 8 июля 2013 года . Проверено 17 июня 2013 г.
- ^ «Ввод символов APL» . www.microapl.co.uk . Проверено 1 января 2015 г.
- ^ Дики, Ли (1993). «Список схем транслитерации APL» . Архивировано из оригинала 29 сентября 2006 г.
- ^ Айверсон, Кентукки (август 1980 г.). «Нотация как инструмент мышления» . Коммуникации АКМ . 23 (8): 444–465. дои : 10.1145/358896.358899 . Архивировано из оригинала 20 сентября 2013 г.
- ^ Батенбург. «Эффективность АПЛ» . www.ekevanbatenburg.nl . Проверено 1 января 2015 г.
- ^ Ваксман. «Великое программирование APL» (PDF) . www.vaxman.de . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 1 января 2015 г.
- ^ Янко, Вольфганг (май 1987 г.). «Исследование эффективности использования APL для программирования машины вывода». ACM SIGAPL APL Quote Quad . 17 (4): 450–456. дои : 10.1145/384282.28372 .
- ^ Бореалис. «Почему АПЛ?» . www.aplborealis.com . Проверено 1 января 2015 г.
- ^ Айверсон, Кеннет Э. (1987). «Словарь АПЛ» . www.jsoftware.com . Проверено 20 января 2015 г.
- ^ Перейти обратно: а б с д и ж «Концепции APL» . Microapl.co.uk . Проверено 3 февраля 2010 г.
- ^ «Теория вложенных массивов» . Ниал.com. Архивировано из оригинала 9 июля 2011 г. Проверено 3 февраля 2010 г.
- ^ Перейти обратно: а б с «Программирование на APL», Боман, Фрёберг, Студенческая литература , ISBN 91-44-13162-3
- ^ Айверсон, Кеннет Э. (1983). «Синтаксис и семантика APL» . www.jsoftware.com . ИП Шарп Ассошиэйтс . Проверено 11 января 2015 г.
- ^ МикроАПЛ. «Примитивы APL» . www.microapl.co.uk . МикроАПЛ . Проверено 11 января 2015 г.
- ^ «Шрифт APL — дополнительные глифы APL» . wiki.nars2000.org . НАРС2000 . Проверено 11 января 2015 г.
- ^ Фокс, Ральф Л. «Систематически случайные числа» . www.sigapl.org . СИГАПЛ . Проверено 11 января 2015 г.
- ^ Скоулз, Джон (26 января 2009 г.). Игра жизни Конвея в APL (видео). Ютуб . Проверено 20 ноября 2021 г.
- ↑ Дополнительные технические подробности можно найти в статье APL Wiki «Игра жизни Конвея» . Проверено 20 ноября 2021 г.
- ^ Макдоннелл, Э.Э. Введение в справочник в APL , APL Press, 1981. ( полный скан книги )
- ^ Ачарья, Р; Перейра, (904567457) NE Язык программирования APL. Архивировано 3 ноября 2021 г. в Wayback Machine . Статья по CS5314 (Концепции языков программирования) в Технологическом институте Вирджинии.
- ^ АПЛ Вики. Конференция АПЛ . Проверено 13 октября 2021 г.
- ^ Джейкоб Уильямс. Дегенеративная коника: Новая кровь . Проверено 13 октября 2021 г.
- ^ АПЛ Вики. Логотип АПЛ . Проверено 20 мая 2022 г.
- ^ Перейти обратно: а б «Годовой отчет за 2017 год» (PDF) . СимКорп. 1 февраля 2018 г. Архивировано (PDF) из оригинала 09 октября 2022 г. Проверено 3 апреля 2018 г.
София — это платформа прямого управления инвестициями, такая как SimCorp Dimension. ... София основана на языке кодирования APL, как и некоторые части SimCorp Dimension.
- ^ Ли, Жорж; Лелуш, Радди; Мейссонье, Винсент; Зарри, Джан Пьеро (1 сентября 1982 г.). «Использование APL в среде искусственного интеллекта» . ACM SIGAPL APL Quote Quad . 13 (1): 183–191. дои : 10.1145/390006.802242 . Проверено 3 апреля 2018 г.
- ^ Фордайс, К.; Салливан, Г. (1985). «Средства разработки искусственного интеллекта» . APL Котировка Quad . APL 85 Конф. Учеб. (15): 106–113. дои : 10.1145/255315.255347 .
- ^ Альфонсека, Мануэль (июль 1990 г.). «Нейронные сети в APL» . ACM SIGAPL APL Quote Quad . 20 (4): 2–6. дои : 10.1145/97811.97816 . Проверено 3 апреля 2018 г.
- ^ Кромберг, Мортен. «Программирование роботов в APL» . www.dyalog.com/ . Проверено 6 января 2015 г.
- ^ Холмс, WN (май 1978 г.). «Является ли APL языком программирования?» . Компьютерный журнал . 21 (2): 128–131. дои : 10.1093/comjnl/21.2.128 .
- ^ Сюй, Аарон (18 ноября 2017 г.). «Шаблоны проектирования против антишаблонов в APL» . www.functionconf.com . Архивировано из оригинала 23 марта 2018 года . Проверено 7 апреля 2018 г.
- ^ Магненат-Тальманн, Надя; Тельманн, Дэниел (1985). Теория и практика компьютерной анимации . Спрингер-Верлаг . п. 38. ISBN 9784431684336 . Проверено 3 апреля 2018 г.
Digital Effects — еще одна продюсерская компания, работавшая над «Троном». Они использовали систему лазерного сканирования для оцифровки, хранения и воспроизведения изображений. Джадсон Роузбуш, президент Digital Effects, является основным разработчиком APL VISION и FORTRAN VISION, двух пакетов компьютерной анимации, которые используются в настоящее время.
- ^ Гуцелл, Сэм (17 октября 2017 г.). «Симулятор Штормграда на Dyalog '16» . www.optima-systems.co.uk . Оптима Системы . Проверено 3 апреля 2018 г.
Stormwind — это [3D-симулятор лодки], вызвавший огромный интерес в сообществе APL.
- ^ «Плавное сотрудничество между OP-Pohjola и модификацией приложений с поддержкой Tieto» [Плавное сотрудничество между OP-Pohjola и модификацией приложений с поддержкой Tieto] (PDF) . www.tieto.com (на финском языке). Информация . Архивировано из оригинала (PDF) 9 октября 2022 г. Проверено 3 апреля 2018 г. [ постоянная мертвая ссылка ]
- ^ «Ви идаг» [Мы сегодня]. profdoccare.se (на шведском языке) . Проверено 3 апреля 2018 г.
Благодаря выбору APL в качестве технической платформы относительно легко быстро построить решение, которое можно назвать исполняемым прототипом (перевод с оригинала).
- ^ Бреннер, Чарльз. «Технология ДНК-идентификации и APL» . dna-view.com . Презентация на конференции пользователей APL 2005 года . Проверено 9 января 2015 г.
- ^ Бреннер, Чарльз. «ДНК повсюду – возможность для APL» . www.youtube.com . Ютуб. Архивировано из оригинала 14 ноября 2021 г. Проверено 9 января 2015 г.
- ^ «Награды – 1973 – Лоуренс Брид» . Ассоциация вычислительной техники. Архивировано из оригинала 2 апреля 2012 года.
- ^ «Награды – 1973 – Ричард Латвелл» . Ассоциация вычислительной техники. Архивировано из оригинала 2 апреля 2012 года.
- ^ «Награды – 1973 – Роджер Мур» . Ассоциация вычислительной техники. Архивировано из оригинала 2 апреля 2012 года.
- ^ «ИБМ 5100» . old-computers.com . Архивировано из оригинала 30 апреля 2018 года . Проверено 8 апреля 2018 г.
- ^ «Добро пожаловать, IBM, в персональные компьютеры» . Байт . Декабрь 1975 г. с. 90 . Проверено 29 апреля 2018 г.
- ^ «Хронология APL и его влияние на развитие компьютерного языка» . www.sigapl.org . АКМ . Проверено 29 апреля 2018 г.
- ^ Ларри Брид (август 2006 г.). «Как мы добрались до APL\1130» . Вектор (Британская ассоциация APL) . 22 (3). ISSN 0955-1433 . Архивировано из оригинала 12 мая 2008 года . Проверено 29 апреля 2018 г.
- ^ Роджер Мур (2005). «История разделения времени и сети IP Sharp Associates» . Роджердмур.ca . Роджер Мур. Архивировано из оригинала 4 апреля 2019 года . Проверено 7 марта 2018 г.
- ^ Блюменталь, Марсия (18 мая 1981 г.). «VAX-11 приобретают процессор APL» . Компьютерный мир . Проверено 22 апреля 2018 г.
- ^ Перейти обратно: а б с «Премия Кеннета Э. Айверсона за выдающийся вклад в APL» . Глава SIGPLAN, посвященная языкам программирования массивов (SIGAPL). Архивировано из оригинала 26 февраля 2012 года.
- ^ Марк Шора (26 января 2021 г.). «Программное обеспечение для входа в систему объявляет о входе в систему APL2» . Программное обеспечение для входа в систему . Проверено 17 ноября 2021 г.
- ^ Келли, Р.А. (1973). «APLGOL, экспериментальный язык структурированного программирования» . Журнал исследований и разработок IBM . 17 :69–73. дои : 10.1147/rd.171.0069 .
- ^ Джонстон, Рональд Л. (июль 1977 г.). «APLGOL: Средства структурированного программирования для APL» . Журнал Hewlett-Packard.
- ^ Сайт ООО «Диалог» . Проверено 6 июня 2018 г.
- ^ «Диалог в 25» (PDF) . Журнал «Вектор» . Британская ассоциация APL. Сентябрь 2008 года . Проверено 14 апреля 2018 г. [ постоянная мертвая ссылка ]
- ^ Кромберг, Мортен (22 октября 2007 г.). «Массивы объектов» (PDF) . Материалы симпозиума 2007 года по динамическим языкам . п. 20. дои : 10.1145/1297081.1297087 . ISBN 9781595938688 . S2CID 18484472 . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 27 августа 2018 г.
- ^ Скоулз, Джон. «D: Функциональное подмножество Dyalog APL» . Британская ассоциация APL.
- ^ Скоулз, Джон. «Перевод D-функций в неявную форму» . ООО "Диалог"
- ^ «Диалог – Цены и лицензии» .
- ^ «Премия Айверсона 2016 года присуждается генеральному директору и исполнительному директору Dyalog» . Проверено 6 июня 2018 г.
- ^ «Система исследования вложенных массивов - NARS2000: экспериментальный интерпретатор APL» . НАРС2000 . Программное обеспечение Садли Плейс . Проверено 10 июля 2015 г.
- ^ «APLX снят с коммерческой продажи, но его можно скачать бесплатно» . Microapl.com . Проверено 14 апреля 2018 г.
- ^ «Йорк АПЛ» .
- ^ «ГНУ АПЛ» . каталог.fsf.org . Каталог свободного программного обеспечения . Проверено 28 сентября 2013 г.
- ^ Столлман, Ричард М. «RMS Berättar» . Архивировано из оригинала 26 ноября 2018 года . Проверено 22 апреля 2018 г.
- ^ Бадд, Тимоти (1988). Компилятор APL . Спрингер-Верлаг. ISBN 978-0-387-96643-4 .
- ^ «Что такое АПЛ?» . www.sigapl.org . СИГАПЛ . Проверено 20 января 2015 г.
- ^ Цзюй, Цзы-Цзин; Чинг, Вай-Ми (1991). «Использование параллелизма данных APL на машине MIMD с общей памятью». Информационный бюллетень Уведомления ACM SIGPLAN . 26 (7): 61–72. дои : 10.1145/109625.109633 . S2CID 8584353 .
- ^ Сюй, Аарон В.; Боуман, Уильям Дж. «Возвращаясь к APL в современную эпоху» (PDF) . www.cs.princeton.edu . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 20 января 2015 г.
- ^ Чинг, В.-М.; Джу, Д. (1991). «Выполнение автоматически распараллеливаемых программ APL на RP3» . Журнал исследований и разработок IBM . 35 (5/6): 767–777. дои : 10.1147/rd.355.0767 . Архивировано из оригинала 3 марта 2016 года . Проверено 20 января 2015 г.
- ^ Блеллок, Гай Э.; Сабот, Гэри В. (1990). «Компиляция языков, ориентированных на коллекции, на массово-параллельных компьютерах». Журнал параллельных и распределенных вычислений . 8 (2): 119–134. CiteSeerX 10.1.1.51.5088 . дои : 10.1016/0743-7315(90)90087-6 .
Языки, ориентированные на коллекции, включают APL, APL2.
- ^ Йендршок, Йоханнес; Хоффманн, Рольф; Эдигер, Патрик; Келлер, Йорг. «Реализация параллельных функций данных, подобных APL, на машине GCA» (PDF) . www.fernuni-hagen.de . стр. 1–6. Архивировано из оригинала (PDF) 22 января 2015 года . Проверено 22 января 2015 г.
GCA – Глобальная клеточная автоматизация. По сути, это массовая параллель. «APL был выбран из-за способности выражать матричные и векторные структуры.
- ^ Бреннер, Норман (1984). «Проектирование схем СБИС с использованием APL с подпрограммами на языке Фортран». ACM SIGAPL APL Quote Quad . 14 (4): 77–79. дои : 10.1145/800058.801079 . ISBN 0-89791-137-7 . S2CID 30863491 .
APL для интерактивности и простоты кодирования
• Бреннер, Норман (1984). «Проектирование схем СБИС с использованием APL с подпрограммами на языке Фортран». Материалы международной конференции по APL – APL '84 . АСМ СИГАПЛ. ISBN 978-0897911375 . - ^ Гэмбл, диджей; Хобсон, РФ (1989). «К графической/процедурной среде для создания генераторов модулей СБИС». Материалы конференции Тихоокеанская конференция IEEE по коммуникациям, компьютерам и обработке сигналов . стр. 606–611. дои : 10.1109/PACRIM.1989.48437 . S2CID 7921438 .
Описаны генераторы модулей СБИС. APL и C, как примеры интерпретируемых и компилируемых языков, могут быть подключены к усовершенствованному графическому дисплею.
- ^ Ли, Роберт С. (1983). «Две реализации APL» . Журнал ПК . 2 (5): 379 . Проверено 20 января 2015 г.
- ^ «Компьютерный язык APL» . МАРТА и ЛАМА . Архивировано из оригинала 13 февраля 2015 года . Проверено 20 января 2015 г.
- ^ Мецгер, Роберт; Вэнь, Чжаофан (2000). Автоматическое распознавание и замена алгоритмов: новый подход к оптимизации программ . Пресса МТИ. ISBN 9780262133685 . Проверено 6 мая 2018 г.
- ^ Снайдер, Лоуренс (1982). «Распознавание и выбор идиом для оптимизации кода». Акта Информатика . 17 (3). дои : 10.1007/BF00264357 . S2CID 8369972 .
- ^ Ченг, Фэн Шэн (1981). Сопоставление идиом: метод оптимизации компилятора APL (Диссертация). Университет штата Айова . Проверено 6 мая 2018 г.
- ^ «Распознавание идиом» . dialog.com . Проверено 6 мая 2018 г.
- ^ Строун, Джордж О. (март 1977 г.). «Действительно ли APL нуждается в анализе во время выполнения?». Программное обеспечение: практика и опыт . 7 (2): 193–200. дои : 10.1002/спе.4380070207 . S2CID 1463012 .
- ^ Перейти обратно: а б «Руководство пользователя компилятора» (PDF) . www.dyalog.com . ООО «Диалог». Архивировано (PDF) оригиналом 09.10.2022 . Проверено 7 мая 2018 г.
- ^ Перейти обратно: а б Дрисколл, Грэм С. младший; Орт, Дональд Л. (ноябрь 1986 г.). «Составление APL: переводчик APL Йорктауна». Журнал исследований и разработок IBM . 30 (6): 583–593. дои : 10.1147/рд.306.0583 . S2CID 2299699 .
- ^ «Хронология АПЛ» . www.sigapl.org . АКМ . Проверено 7 мая 2018 г.
- ^ Вай-Ми, Чинг (ноябрь 1986 г.). «Анализ программы и генерация кода в компиляторе APL/370». Журнал исследований и разработок IBM . 30 (6): 594–602. дои : 10.1147/рд.306.0594 . S2CID 17306407 .
- ^ «Проект АПЕКС» .
- ^ «Компилятор APL (сообщение Джима Вейганга в группу новостей comp.lang.apl)» . 5 апреля 1994 г.
Дальнейшее чтение
[ редактировать ]- Машина APL. Архивировано 27 января 2024 г. в Wayback Machine (докторская диссертация Филипа Абрамса в Стэнфорде, 1970 г.).
- Личная история APL. Архивировано 7 ноября 2023 г. в Wayback Machine (статья Майкла С. Монтальбано 1982 г. ).
- Макинтайр, Дональд Б. (1991). «Язык как интеллектуальный инструмент: от иероглифов до APL» (PDF) . IBM Systems Journal . 30 (4): 554–581. дои : 10.1147/sj.304.0554 . Архивировано из оригинала (PDF) 4 мая 2006 г.
- Айверсон, Кеннет Э. (1991). «Личный взгляд на APL» (PDF) . IBM Systems Journal . 30 (4): 582–593. дои : 10.1147/sj.304.0582 . Архивировано из оригинала (PDF) 27 февраля 2008 г.
- Язык программирования Кеннета Э. Айверсона
- APL в экспозиции Кеннета Э. Айверсона
- Брукс, Фредерик П.; Кеннет Айверсон (1965). Автоматическая обработка данных, System/360 Edition . ISBN 0-471-10605-4 .
- Аскулум, Аджай (август 2006 г.). Сборка системы с помощью APL + Win . Уайли. ISBN 978-0-470-03020-2 .
- Фалькофф, Адин Д.; Айверсон, Кеннет Э .; Сассенгут, Эдвард Х. (1964). «Формальное описание System/360» (PDF) . IBM Systems Journal . 3 (2): 198–261. дои : 10.1147/sj.32.0198 . Архивировано из оригинала (PDF) 27 февраля 2008 г.
- Вексельблат, Ричард Л., изд. (1981). «XIV». История языков программирования: материалы конференции по истории языков программирования, Лос-Анджелес, Калифорния, 1–3 июня 1978 г. ISBN 978-0127450407 .
- Бэнон, Джеральд Джин Фрэнсис (1989). Основы графических вычислений . Рио-де-Жанейро: Кампус. п. 141.
- ЛеПейдж, Уилбур Р. (1978). Прикладное APL-программирование . Прентис Холл.
- Мужен, Филипп; Дюкасс, Стефан (ноябрь 2003 г.). «OOPAL: Интеграция программирования массивов в объектно-ориентированное программирование» (PDF) . Уведомления ACM SIGPLAN . 38 (11): 65–77. дои : 10.1145/949343.949312 . Архивировано из оригинала (PDF) 14 ноября 2006 г.
- Введение в объектно-ориентированное программирование для программистов APL (PDF) . Диалог Лимитед. Сентябрь 2006 г. Архивировано из оригинала (PDF) 4 октября 2007 г.
- Шустек, Лен (10 октября 2012 г.). «Исходный код языка программирования APL» . Музей истории компьютеров (CHM). Архивировано из оригинала 6 сентября 2017 года . Проверено 6 сентября 2017 г.
- Свобода, Антонин ; Уайт, Доннамай Э. (2016) [2012, 1985, 1 августа 1979]. Advanced Logical Circuit Design Techniques (PDF) (перепечатанное электронное переиздание). Garland STPM Press (оригинальный выпуск) / WhitePubs Enterprises, Inc. (переиздание). ISBN 978-0-8240-7014-4 . LCCN 78-31384 . Архивировано (PDF) из оригинала 14 апреля 2017 г. Проверено 15 апреля 2017 г. [1] [2]
Видео
[ редактировать ]- «Происхождение APL» на YouTube - интервью в стиле ток-шоу 1974 года с первоначальными разработчиками APL.
- Демонстрация APL на YouTube — живая демонстрация APL в 1975 году профессором Бобом Спенсом , Имперский колледж Лондона .
- «Игра жизни Конвея в APL» на YouTube - учебник Джона Скоулза из Dyalog Ltd. 2009 года, в котором « Игра жизни Конвея» реализована в одной строке APL.
- 50 лет APL на YouTube — введение Грэма Робертсона в APL в 2009 году.
Внешние ссылки
[ редактировать ] в этой статье Использование внешних ссылок может не соответствовать политике и рекомендациям Википедии . ( Август 2020 г. ) |
Интернет-ресурсы
[ редактировать ]- TryAPL.org , онлайн-учебник по APL.
- АПЛ в Керли
- APL2C , источник ссылок на компиляторы APL
- Языки программирования .NET
- Семейство языков программирования APL
- Языки программирования массивов
- Командные оболочки
- Динамические языки программирования
- Динамически типизированные языки программирования
- Функциональные языки
- программное обеспечение IBM
- Языки программирования, созданные в 1964 году.
- Языки программирования со стандартом ISO
- Языки программирования
- Гомоиконические языки программирования