Apple — язык программирования на диалекте PL/I , созданный исследовательскими лабораториями General Motors для суперкомпьютера Control Data Corporation STAR-100 .
Apple — это подмножество полного PL/I, но оно было расширено для интеграции с языком ассоциативного программирования (APL — не путать с APL (языком программирования) ) [1] : стр.9 [2] : стр.92
Переменная OFFSET
определяет относительное расположение базовой переменной в содержащем файле. Переменная DESCRIPTOR
напоминает переменную-указатель, но также содержит длину связанной базовой переменной в дополнение к ее адресу.
Оператор LOCK
переводит программу в "заблокированное состояние", в котором все асинхронные события будут поставлены в очередь. Соответствующий UNLOCK
оператор переводит программу в "разблокированное состояние", способное обрабатывать асинхронные события. Все поставленные в очередь события будут обработаны.
Apple использует тип данных PL/I EVENT
для реализации асинхронной обработки.
Переменная события может быть связана с внешним действием, например, нажатием клавиши на терминале пользователя, с помощью системного вызова. Каждое событие имеет «состояние задержки» и «состояние завершения», связанные с ним. Когда происходит событие, связанное с действием, событие становится завершенным и остается завершенным, пока программа не получит доступ к информации, связанной с событием. События также могут быть помечены как завершенные с помощью SIGNAL
оператора, а не стандартного назначения PL/I псевдопеременной COMPLETION
. Событие может быть переведено в состояние задержки с помощью DELAY
псевдопеременной, и распознавание останется отложенным, пока программа не сбросит состояние задержки.
События могут быть связаны с "ON-Units" с помощью ON EVENT
оператора, аналогичного стандарту PL/I для условий. Оператор REVERT
удаляет связь. Когда событие распознано (завершено и не задержано), выполняется On-Unit. Этот ON-Unit может получить доступ к системной информации о событии с помощью ONPTR
встроенной функции, которая возвращает адрес "Event Completion Block" и устанавливает событие для завершения.
Класс REGISTER
хранения и INLINE
встроенная подпрограмма обеспечивают доступ к аппаратным функциям STAR.
Скалярная арифметическая переменная может быть объявлена REGISTER [register-specification]
. register-specification
может быть беззнаковой целой константой 0..255 для указания одного из аппаратных регистров компьютера. Если она опущена, компилятор назначит регистр. [ необходима цитата ]
Встроенная подпрограмма INLINE
вставляет произвольную инструкцию машинного языка в скомпилированный код. За исключением кода функции (кода операции) и подкода инструкций все операнды могут быть числовыми константами, переменными или арифметическими константами.
Пример: [1] : стр.202
ВЫЗОВ ВСТРОЕННОЙ("F8", 5, 0, ИСТОЧНИК, 0, "20", 0, ЦЕЛЬ);
Спецификация LITERALLY
позволяет программисту указать текст замены, который будет заменен во время компиляции. Синтаксис:
%DECLARE <идентификатор> LITERALLY [ (<список-параметров> ) ] <символьная-константа> ;
Если <parameter-list> не указан, компилятор заменяет все вхождения <identifier> во всей программе на <character-constant>. Если <parameter-list> указан, заменяющая строка символов формируется путем замены всех вхождений имени параметра соответствующим аргументом.
Пример:
%ОБЪЯВИТЬ БИТЫ ЛИТЕРАЛЛИЧЕСКИ(A1,A2) 'A1*A2*64'; I = БИТЫ(J,B);
сгенерирует утверждение:
Я=Дж*8*64;
Некоторые функции стандартного PL/I не включены в Apple. Наиболее значимыми являются: [1]
CONTROLLED
и AREA
хранилища не поддерживаются FILE
и FILESET
имеют многие характеристики AREA
.READ
, WRITE
, REWRITE
, LOCATE
, и DELETE
. DELETE
используется как синоним FREE
при удалении ENTITY
переменных.