РПЛ (язык программирования)
Парадигма | Конкатенативный ( на основе стека ), [1] структурированный |
---|---|
Разработано | Хьюлетт-Паккард |
Впервые появился | 1984 (1986) |
ТЫ | HP Калькуляторы |
Диалекты | |
Системный RPL, Пользовательский RPL | |
Под влиянием | |
РПН , Форт , Лисп [2] |
РПЛ [5] — это операционная система для портативных калькуляторов и язык прикладного программирования , используемый в калькуляторах Hewlett-Packard с научной графикой RPN (обратная польская нотация) серий HP 28 , 48 , 49 и 50 , но его также можно использовать на калькуляторах без RPN, таких как как серии 38 , 39 и 40 . Внутри компании он также использовался в моделях 17B , 18C , 19B и 27S . [7]
RPL — структурированный язык программирования, основанный на RPN, но в равной степени способный обрабатывать алгебраические выражения и формулы, реализованные в виде многопоточного интерпретатора . [8] RPL имеет много общего с Forth : оба языка основаны на стеках на основе списков , а также на LISP . В отличие от предыдущих калькуляторов HP RPN, которые имели фиксированный четырехуровневый стек , динамический стек , используемый RPL, ограничен только доступной оперативной памятью , при этом калькулятор отображает сообщение об ошибке при нехватке памяти, а не автоматически удаляет аргументы из стека как в стеках RPN фиксированного размера. [9]
RPL возник в 1984 году в центре разработки HP в Корваллисе, штат Орегон, в качестве замены предыдущей практики реализации операционных систем калькуляторов на языке ассемблера . [7] Первым калькулятором, использующим его внутри, был HP-18C, а первым калькулятором, сделавшим его доступным для пользователей, был HP-28C, оба выпущены в 1986 году. [10] [7] Последний карманный калькулятор с поддержкой RPL, HP 50g, был снят с производства в 2015 году. [11] [12] [13] Однако существует несколько эмуляторов, которые могут имитировать калькуляторы HP RPL, которые работают на различных операционных системах и устройствах, включая смартфоны iOS и Android. Существует также ряд проектов сообщества по воссозданию и расширению RPL на новых калькуляторах, например newRPL. [14] [15] или DB48X , [16] [17] которые могут добавить функции или улучшить производительность. [18]
Варианты
[ редактировать ]Внутренний вариант RPL низкого и среднего уровня, называемый System RPL (или SysRPL ), используется в некоторых более ранних калькуляторах HP, а также в вышеупомянутых калькуляторах как часть языка реализации их операционной системы . В серии HP 48 этот вариант RPL недоступен пользователю калькулятора без использования внешних инструментов, но в серии HP 49/50 в ПЗУ встроен компилятор для использования SysRPL. При написании кода в SysRPL можно вызвать серьезный сбой, поэтому при его использовании необходимо соблюдать осторожность. ) высокого уровня User RPL (или UserRPL Версия языка доступна на указанных графических калькуляторах для разработки текстовых, а также графических прикладных программ. Все программы UserRPL внутренне представлены как программы SysRPL, но используют только безопасное подмножество доступных команд SysRPL. Однако проверка ошибок, являющаяся частью команд UserRPL, делает программы UserRPL заметно медленнее, чем эквивалентные программы SysRPL. Команда SYSEVAL UserRPL указывает калькулятору обрабатывать определенные части программы UserRPL как код SysRPL.
Блоки управления
[ редактировать ]Блоки управления RPL не являются строго постфиксными . Хотя есть некоторые заметные исключения, структуры управляющих блоков выглядят так же, как в стандартном инфиксном языке. Калькулятор управляет этим, позволяя реализации этих блоков при необходимости пропускать вперед программный поток.
Условные операторы
[ редактировать ]ЕСЛИ/ТО/ИНА/КОНЕЦ
[ редактировать ]RPL поддерживает базовое условное тестирование через структуру IF/THEN/ELSE. Основной синтаксис этого блока:
IF condition THEN if-true [ELSE if-false] END
В следующем примере проверяется, равно ли число в нижней части стека «1», и если да, то оно заменяется на «Равно одному»:
« IF 1 == THEN "Equal to one" END »
Конструкция IF оценивает условие, а затем проверяет результат в нижней части стека. В результате RPL может дополнительно поддерживать блоки IF в стиле FORTH, позволяя определять условие перед блоком. Если оставить условие пустым, оператор IF не будет вносить никаких изменений в стек во время выполнения условия и будет использовать для проверки существующий результат в нижней части стека:
« 1 == IF THEN "Equal to one" END »
ИФТ/ИФТЕ
[ редактировать ]Условное тестирование Postfix можно выполнить с помощью функций IFT («if-then») и IFTE («if-then-else»).
IFT и IFTE извлекают из стека две или три команды соответственно. Самое верхнее значение оценивается как логическое значение, и, если оно истинно, второе самое верхнее значение помещается обратно в стек. IFTE допускает третье значение «else», которое будет помещено обратно в стек, если логическое значение ложно.
В следующем примере функция IFT используется для извлечения объекта из нижней части стека и, если он равен 1, заменяет его на «Один»:
« 1 == "One" IFT »
В следующем примере функция IFTE используется для извлечения объекта из нижней части стека и, если он равен 1, заменяет его на «Один». Если оно не равно 1, оно заменяется строкой «Не один»:
« 1 == "One" "Not one" IFTE »
IFT и IFTE оценивают программный блок, заданный в качестве одного из его аргументов, обеспечивая более компактную форму условной логики, чем структура IF/THEN/ELSE/END. В следующем примере объект извлекается из нижней части стека и заменяется на «Один», «Меньше» или «Больше» в зависимости от того, равен ли он, меньше или больше 1.
« DUP 1 == « DROP "One" » « 1 < "Less" "More" IFTE » IFTE »
СЛУЧАЙ/ТО/КОНЕЦ
[ редактировать ]Для поддержки более сложной условной логики RPL предоставляет структуру CASE/THEN/END для обработки нескольких эксклюзивных тестов. Будет выполнена только одна из ветвей оператора CASE. Основной синтаксис этого блока:
CASE condition_1 THEN if-condition_1 END ... condition_n THEN if-condition_n END if-none END
Следующий код иллюстрирует использование блока CASE/THEN/END. Учитывая букву в нижней части стека, он заменяет ее ее строковым эквивалентом или «Неизвестной буквой»:
« CASE DUP "A" == THEN "Alpha" END DUP "B" == THEN "Beta" END DUP "G" == THEN "Gamma" END "Unknown letter" END SWAP DROP @ Get rid of the original letter »
Этот код идентичен следующему эквиваленту вложенного блока IF/THEN/ELSE/END:
« IF DUP "A" == THEN "Alpha" ELSE IF DUP "B" == THEN "Beta" ELSE IF DUP "G" == THEN "Gamma" ELSE "Unknown letter" END END END SWAP DROP @ Get rid of the original letter »
Циклические операторы
[ редактировать ]ЗА/СЛЕДУЮЩИЙ
[ редактировать ]RPL предоставляет оператор FOR/NEXT для перехода от одного индекса к другому. Индекс цикла хранится во временной локальной переменной, к которой можно получить доступ в цикле. Синтаксис блока FOR/NEXT:
index_from index_to FOR variable_name loop_statement NEXT
В следующем примере цикл FOR используется для суммирования чисел от 1 до 10. Индексной переменной цикла FOR является «I»:
« 0 @ Start with zero on the stack 1 10 @ Loop from 1 to 10 FOR I @ "I" is the local variable I + @ Add "I" to the running total NEXT @ Repeat... »
СТАРТ/ДАЛЕЕ
[ редактировать ]Блок START/NEXT используется для простого блока, который выполняется от начального индекса до конечного индекса. В отличие от цикла FOR/NEXT, переменная цикла недоступна. Синтаксис блока START/NEXT:
index_from index_to START loop_statement NEXT
FOR/STEP и START/STEP
[ редактировать ]И FOR/NEXT, и START/NEXT поддерживают определяемое пользователем приращение шага. Заменяя завершающее ключевое слово NEXT инкрементом и ключевым словом STEP, переменная цикла будет увеличиваться или уменьшаться на значение, отличное от значения по умолчанию +1. Например, следующий цикл возвращается с 10 на 2, уменьшая индекс цикла на 2:
« 10 2 START -2 STEP »
ПОКА/ПОВТОРИТЬ/КОНЕЦ
[ редактировать ]Блок WHILE/REPEAT/END в RPL поддерживает неопределенный цикл с проверкой условия в начале цикла. Синтаксис блока WHILE/REPEAT/END:
WHILE condition REPEAT loop_statement END
ДЕЛАТЬ/ДО/КОНЕЦ
[ редактировать ]Блок DO/UNTIL/END в RPL поддерживает неопределенный цикл с проверкой условия в конце цикла. Синтаксис блока DO/UNTIL/END:
DO loop_statement UNTIL condition END
См. также
[ редактировать ]- Язык программирования (APL)
- Программирование нажатия клавиш FOCAL
- Язык высокой производительности (HPL)
- Триграфы HP
- Основной язык программирования (PPL)
- Набор символов РПЛ
Примечания
[ редактировать ]- 1. ^ «RPL» происходит от Reverse Polish Lisp , по словам его первоначальных разработчиков, [19] [20] [21] [22] [23] [24] в то время как в течение короткого времени в 1987 году маркетинг HP пытался придумать для него бэкроним «Процедурный язык на основе ПЗУ» . [2] [24] [25] Кроме того, инициалы RPL иногда неправильно интерпретируются как Reverse Polish Logic или Reverse Polish Language . [26]
Ссылки
[ редактировать ]- ^ «Радость программирования?» . Музей калькуляторов HP. 2020. Архивировано из оригинала 3 декабря 2021 г.
- ^ Jump up to: а б Паттон, Чарльз М. (август 1987 г.). «Расчеты для портативных калькуляторов» (PDF) . Журнал Hewlett-Packard . 38 (8). Пало-Альто, Калифорния, США: Компания Hewlett-Packard : 21–25. Архивировано из оригинала (PDF) 6 декабря 2011 г. Проверено 12 сентября 2015 г.
- ^ http://h41268.www4.hp.com/live/index_e.aspx?qid=20709&jumpid=va_r11363_us/en/any/tsg/pl_ot_ob_ds_pd/calculatoremulators_cc/dt [ постоянная мертвая ссылка ]
- ^ http://www.calculatrices-hp.com/index.php?page=emulateurs
- ^ «Эмулятор HP 50g с ПЗУ #2.16» .
- ^ http://www.calculatrices-hp.com/uploads/emulateurs/HP50gVirtualCalculatorSetup_3_1_30.zip
- ^ Jump up to: а б с Хьюлетт-Паккард . «RPLMan с Goodies Disk 4» (RPLMAN.ZIP) . Проверено 12 сентября 2015 г.
- ^ Хорн, Джозеф К. «Что такое РПЛ?» . Архивировано из оригинала 17 сентября 2017 г. Проверено 17 сентября 2017 г.
- ^ Вессман, Тимоти «Тим» Джеймс (21 июня 2016 г.) [20 июня 2016 г.]. «Что делать с переполнением стека OBJ->/LIST->?» . MoHPC — Музей калькуляторов HP . Архивировано из оригинала 24 сентября 2023 г. Проверено 24 сентября 2023 г.
- ^ Уикс, Уильям К. (январь – февраль 1987 г.). «HP-28C: взгляд изнутри». Обмен HPX . 1 (1). [1]
- ^ Куперус, Клаас (04 марта 2015 г.). «HP 50g: Конец эпохи» . Моравия. Архивировано из оригинала 02 апреля 2015 г.
- ^ Куперус, Клаас (06 марта 2015 г.). «HP 50g не очень хорошие новости?» . Моравия . Проверено 1 января 2016 г.
- ^ Вессман, Тимоти «Тим» Джеймс (26 декабря 2015 г.). «Windows 10 не позволяет устанавливать драйверы USB HP 50g» . MoHPC — Музей калькуляторов HP . Проверено 1 января 2016 г.
- ^ Лапилли, Клаудио Даниэль (3 января 2014 г.). «новаяРПЛ» . Проверено 12 сентября 2015 г. [2] (производная RPL с открытым исходным кодом для HP 50g и HP 49g+ , HP 40gs , HP 39gs и hp 39g+, а также HP Prime )
- ^ Лапилли, Клаудио Даниэль (23 июля 2021 г.) [2014]. «Проект документации newRPL» . новыйРПЛ . Архивировано из оригинала 03.11.2023 . Проверено 23 октября 2023 г.
- ^ де Динешен, Кристоф (2022). «DB48X на DM42 — среда выполнения RPL для калькулятора DM42, в духе HP48/49/50» . DB48X . Архивировано из оригинала 03.11.2023 . Проверено 23 октября 2023 г.
- ^ де Динешен, Кристоф (3 февраля 2023 г.). «Возрождение обратного польского Lisp — создание калькулятора, подобного HP48, с открытым исходным кодом» . ФОСДЕМ . Архивировано из оригинала 03 октября 2023 г. Проверено 03 октября 2023 г. (Примечание. Улучшенная производная RPL под названием DB48X для SwissMicros DM42 и DM32 .)
- ^ Лапилли, Клаудио Даниэль (31 октября 2014 г.). «Н-Квинс на 50г (язык РПЛ)» . MoHPC — Музей калькуляторов HP . Архивировано из оригинала 03.11.2023 . Проверено 23 октября 2023 г.
- ^ Уикс, Уильям К. (10 октября 1988 г.) [14–18 июня 1988 г.]. Например, Лоуренс П. (ред.). RPL: язык математического управления . Материалы Рочестерской четвертой конференции 1988 года: Среды программирования. Том. 8. Рочестер, Нью-Йорк, США: Институт прикладных исследований, Университет Рочестера . стр. 27–32. ISBN 978-0-91459308-9 . OCLC 839704944 .
Было рассмотрено несколько существующих операционных систем и языков, но ни одна из них не смогла удовлетворить все цели проектирования. Поэтому была разработана новая система, которая объединяет поточную интерпретацию Форта с функциональным подходом Лиспа . Получившаяся в результате операционная система, неофициально известная как RPL (от Reverse-Polish Lisp), впервые появилась публично в июне 1986 года в калькуляторе HP-18C Business Consultant.
(Примечание. Это название часто называют «RPL: язык управления математикой». Отрывок доступен по адресу: [3] [4] ) - ^ Уикс, Уильям К. (11 марта 1991 г.). «RPL означает Reverse Polish Lisp» . www.hpcalc.org . Проверено 12 сентября 2015 г.
RPL расшифровывается как Reverse Polish Lisp. На заре разработки RPL мы устали называть безымянную систему «новой системой», и один из членов команды разработчиков придумал «RPL», оба — как обыгрывание «RPN», которую любили/ненавидели. навсегда останется отличительной чертой вычислений HP и как точное указание на происхождение языка от Форта и Лиспа .
RPL никогда не задумывался как публичный термин; во время статьи в журнале HP (август 1987 г.) о HP 28C была попытка создать менее причудливое имя - отсюда и «процедурный язык на основе ПЗУ», который сохранил инициалы, но имел более достойное звучание. Команда разработчиков никогда не называет это иначе, как (инициалами) RPL. Вы можете выбрать любую из двух полных версий слов, которые вам нравятся. А как насчет «Языка богатых людей»? Билл Уикс, HP Corvallis. - ^ Шорл, Андре (4 апреля 2000 г.) [1997]. «Список часто задаваемых вопросов по HP48» . Архив калькулятора HP. п. 69 . Проверено 12 сентября 2015 г.
- ^ «Я слышал названия РПЛ, Сатурн, STAR, GL и т. д. Какие они? - РПЛ» . Часто задаваемые вопросы: 2 из 4 — Аппаратное обеспечение, программы и программирование . 4.62. комп.sys.hp48. 14 апреля 2000 г. 8.1 . Проверено 12 сентября 2015 г.
- ^ Нельсон, Ричард Дж. (4 апреля 2012 г.). «Развитие HP RPN» (PDF) . Решение HP (27). Хьюлетт-Паккард : 30–32 . Проверено 12 сентября 2015 г.
- ^ Jump up to: а б Миер-Енджейович, Влодзимеж «Влодек» Энтони Кристофер (июль 1991 г.). Руководство по портативным калькуляторам и компьютерам HP (5-е изд.). HHC 2011. ISBN 978-1-88884030-8 . 1888840307.
RPL расшифровывается как Reverse Polish Lisp — он сочетает в себе язык калькулятора RPN более ранних моделей с особенностями языков программирования Lisp и Forth . Какое-то время HP объясняла буквы RPL как аббревиатуру от «процедурного языка на основе ПЗУ».
- ^ «HP отмечает 35-летие инноваций в области портативных калькуляторов» . Hewlett-Packard Development Company, LP, 2007 г. Архивировано из оригинала 17 марта 2007 г. Проверено 13 сентября 2015 г.
1987: HP-28C : Первый полноценный калькулятор RPL. В конце 1980-х годов компания HP разработала новый язык программирования для своей новой серии чрезвычайно мощных калькуляторов. Объединив элементы RPN, Lisp и Forth , HP разработала язык под названием RPL (или процедурный язык на основе ПЗУ).
- ^ Рехлин, Эрик; Марангон, Карлос. «HPedia: Энциклопедия калькуляторов HP» . www.hpcalc.org . Проверено 20 апреля 2020 г.
Дальнейшее чтение
[ редактировать ]- Серия HP 48G – Руководство пользователя (UG) (8-е изд.). Хьюлетт-Паккард . Декабрь 1994 г. [1993]. HP 00048-90126, (00048-90104). Архивировано из оригинала 6 августа 2016 г. Проверено 6 сентября 2015 г. [6]
- Серия HP 48G – Справочное руководство для опытных пользователей (AUR) (4-е изд.). Хьюлетт-Паккард . Декабрь 1994 г. [1993]. HP 00048-90136, 0-88698-01574-2. Архивировано из оригинала 6 августа 2016 г. Проверено 6 сентября 2015 г. [7]
- Руководство пользователя графического калькулятора HP 50g (UG) (1-е изд.). Хьюлетт-Паккард . Апрель 2006 г. HP F2229AA-90006 . Проверено 6 сентября 2015 г.
- Расширенное справочное руководство пользователя графического калькулятора HP 50g / 49g+ / 48gII (AUR) (2-е изд.). Хьюлетт-Паккард . 14 июля 2009 г. [2005]. HP F2228-90010 . Проверено 6 сентября 2015 г.
- Калиновский, Эдуардо де Маттос; Доминик, Карстен (24 апреля 2002 г.) [12 июля 1998 г.]. Программирование в системе RPL (PDF) (2-е изд.). Архивировано (PDF) из оригинала 14 января 2016 г. Проверено 16 августа 2016 г. (Старая версия: [8] )
- Доннелли, Джеймс (01 марта 2009 г.). Рехлин, Эрик (ред.). Введение в систему HP 48 RPL и программирование на языке ассемблера . Проверено 7 сентября 2015 г.
Внешние ссылки
[ редактировать ]- Рехлин, Эрик (2015) [1997]. «Файлы документации по программированию HP 49/50» . Архив калькулятора HP . Проверено 12 сентября 2015 г.
- Рехлин, Эрик (2015) [1997]. «Файлы документации по программированию HP 48» . Архив калькулятора HP . Проверено 12 сентября 2015 г.
- Хикс, Дэвид Г. (2013) [1995]. «РПЛ» . Музей калькуляторов HP (MoHPC). Архивировано из оригинала 30 сентября 2023 г. Проверено 12 сентября 2015 г.
- Бертран, Жоэль (2015) [2009]. «RPL/2 — новый обратный польский Lisp» . Проверено 12 сентября 2015 г. (клон RPL под лицензией GPL)
- Рубе, Луи (01 июля 2017 г.). «rpn — реализация RPL с открытым исходным кодом» . Гитхаб . Проверено 12 сентября 2015 г. (Реализация RPL с открытым исходным кодом и произвольной точностью)
- Суарес, Альваро Херардо (01 мая 2018 г.). «MyRPL — объединение языков HP41 и HP48» . Архивировано из оригинала 03 октября 2023 г. Проверено 4 мая 2018 г. (Смешанный язык RPL (HP48) и FOCAL (HP41))