Speakeasy (вычислительная среда) - Speakeasy (computational environment)

Speakeasy
Speakeasy Red Logo.png
Разработчики)Speakeasy Computing Corporation
Стабильный выпуск
IV Iota / 2006 г.
Написано вМортран, FORTRAN, C[нужна цитата ]
Операционная системаWindows, macOS, RedHat Linux, SUSE Linux, Mandrake Linux, Debian, Солярис, HP-UX[1]
ТипТехнические вычисления
ЛицензияПробная версия
Интернет сайтSpeakeasy.com
Speakeasy (интерпретируемый язык программирования)
Парадигмаимператив
РазработаноСтэнли Коэн
РазработчикSpeakeasy Computing Corporation
Впервые появился1964
Печатная дисциплинадинамичный
Интернет сайтSpeakeasy.com
Под влиянием
APL[2]
Под влиянием
MATLAB[3]

Speakeasy это числовые вычисления интерактивная среда также с интерпретируемым язык программирования. Первоначально он был разработан для внутреннего использования в Физическом отделении Аргоннская национальная лаборатория физиком-теоретиком Стэнли Коэн.[4] В конце концов он основал Speakeasy Computing Corporation, чтобы сделать программу доступной на коммерческой основе.

Speakeasy - это долговечный цифровой пакет. Фактически, первоначальная версия среды была построена на основе основного динамического репозитория данных под названием «Именованное хранилище», разработанного в начале 1960-х годов.[5][6] в то время как самая последняя версия была выпущена в 2006 году.

Speakeasy был нацелен на то, чтобы облегчить вычислительную работу физиков Аргоннской национальной лаборатории.[7] Первоначально он был задуман для работы над мэйнфреймы (единственный тип компьютеров в то время), а затем был перенесен на новые платформы (миникомпьютеры, персональные компьютеры ) по мере их появления. Перенос одного и того же кода на разные платформы стал проще благодаря использованию Мортран макросы метаязыка для выявления системных зависимостей, недостатков и различий компиляторов.[8] Speakeasy в настоящее время доступен на нескольких платформах: ПК, работающие Windows, macOS, Linux, ведомственные компьютеры и рабочие станции под управлением нескольких разновидностей Linux, AIX или же Солярис.

Speakeasy также был одним из первых[нужна цитата ] интерактивные вычислительные среды, реализованные таким образом на CDC 3600 система, а позже IBM TSO Машины, как один, находились в стадии бета-тестирования в Аргоннской национальной лаборатории в то время.

Практически с самого начала (поскольку функция динамического связывания была сделана доступной в операционных системах) Speakeasy имеет возможность расширять свой рабочий словарь с помощью отдельных модулей, динамически связанных с основным процессором по мере необходимости. По этой причине такие модули были названы «линкулами» (LINKable-modULES).[9] Это функции с обобщенным интерфейсом, которые можно записать на FORTRAN или в C.[нужна цитата ]Независимость каждого из новых модулей от других и от основного процессора очень помогает в улучшении системы, особенно в старые времена.

Этот простой способ расширения функциональных возможностей главного процессора часто использовался пользователями для разработки собственных специализированных пакетов. Помимо программ, функций и подпрограмм, которые пользователь может писать на собственном интерпретируемом языке Speakeasy, линкулы добавляют функциональные возможности, выполняемые с типичной производительностью скомпилированных программ.

Среди пакетов, разработанных пользователями, одним из наиболее важных является «Modeleasy», первоначально разработанный как «FEDeasy».[10] в начале 1970-х в научно-исследовательском отделе Совет Федерального Резерва губернаторов в Вашингтоне, округ Колумбия ... В Modeleasy реализованы специальные объекты и функции для оценки и моделирования больших эконометрических моделей. Его эволюция в конечном итоге привела к его распространению в качестве независимого продукта.

Синтаксис

Символ :_ (двоеточие + подчеркивание) - это и логотип Speakeasy, и подсказка интерактивного сеанса.

Знак доллара используется для разграничения комментариев; амперсанд используется для продолжения оператора в следующей физической строке, и в этом случае приглашение становится :& (двоеточие + амперсанд); точка с запятой может разделять операторы, написанные в одной физической строке.

$ предположим, что у вас есть очень длинный оператор, $ вы можете записать его на нескольких физических строках, используя "&" $ в конце строки, которую нужно продолжить :: _ the_return_value = this_is_a_function_with_many_arguments (argument_1, argument_2, &: & argument_3, argument_4, аргумент_5, аргумент_6) $, с другой стороны, вы можете собрать несколько коротких операторов $ в одной физической строке, используя ";": _ a = 1; b = 2; с = 3; d = 4 

Как видно из собственного названия, Speakeasy был нацелен на то, чтобы сделать синтаксис максимально удобным для пользователя и максимально приближенным к разговорной речи. Лучшим примером этого является набор команд для чтения / записи данных из / в постоянное хранилище. Например. (ключевые слова для языков указаны в верхнем регистре, чтобы прояснить суть):

: _ ПОЛУЧИТЬ my_data ИЗ БИБЛИОТЕКИ my_project: _ СОХРАНИТЬ мои_данные КАК a_новое_имя_for_mydata В БИБЛИОТЕКЕ other_project 

Переменным (например, объектам Speakeasy) дается имя длиной до 255 символов, когда опция LONGNAME включена, в противном случае - до 8 символов (для обратной совместимости). Они динамически типизируются в зависимости от присвоенного им значения.

: _ a = 1: _ whatis aA является НАСТОЯЩИМ СКАЛЯРОМ .:_ a = "теперь массив символов": _ whatis aA является Массивом символов из 21 элемента.

Аргументы функций обычно не требуется заключать в круглые скобки или разделять запятыми, при условии, что контекст остается ясным и однозначным. Например:

: _ sin (grid (-pi, pi, pi / 32)) $ полностью указанный синтаксис

можно написать:

: _ sin grid (-pi, pi, pi / 32) $ аргумент функции sin не заключен в круглые скобки

или даже

: _ sin grid (-pi pi pi / 32) $ аргументы функции grid можно разделять пробелами

Возможны многие другие упрощения синтаксиса; например, чтобы определить объект с именем 'a', равный десятиэлементному массиву нулей, можно написать любой из следующих операторов:

: _ a = массив (10: 0,0,0,0,0,0,0,0,0,0): _ a = 0,0,0,0,0,0,0,0,0, 0: _ a = 0 0 0 0 0 0 0 0 0 0: _ a = ints (10) * 0: _ a = 10:

Speakeasy - это векторно ориентированный язык: предоставление структурированного аргумента функции скаляра, результатом обычно является объект с той же структурой аргумента, в которой каждый элемент является результатом функции, примененной к соответствующему элементу аргумента. В приведенном выше примере результат функции грех применяется к массиву (назовем его Икс), порожденная функцией сетка это массив отвечать чей элемент отвечать(i) равно грех(Икс(i)) для каждого i от 1 до ноэлс(x) (количество элементов Икс). Другими словами, заявление

: _ a = sin (сетка (-pi pi pi / 32))

эквивалентен следующему фрагменту программы:

x = grid (-pi pi pi / 32) $ генерирует массив действительных чисел от -pi до pi, шагая по pi / 32 для i = 1, noels (x) $ циклически перебирает элементы xa (i) = sin ( x (i)) $ оценивает i-й элемент следующего i $ увеличивает индекс цикла

В векторно ориентированный операторы избегают написания программ для таких циклов и намного быстрее их.

Рабочая зона и объекты

Самым первым оператором сеанса пользователь может определить размер «именованного хранилища» (или «рабочей области», или «распределителя»), который выделяется раз и навсегда в начале сеанса. В пределах этой рабочей области фиксированного размера процессор Speakeasy динамически создает и уничтожает рабочие объекты по мере необходимости. Настраиваемый пользователем [11] Обеспечивается механизм сборки мусора, чтобы максимизировать размер свободного блока в рабочей области, упаковывая определенные объекты в нижнюю или верхнюю часть распределителя. В любой момент пользователь может спросить об использованном или оставшемся пространстве в рабочей области.

: _ SIZE 100M $ самый первый оператор: рабочая область будет 100 МБ: _ SIZE $ возвращает размер рабочей области в текущем сеансе: _ SPACELEFT $ возвращает количество пространства для хранения данных, которое в настоящее время не используется: _ SPACENOW $ возвращает количество используемого в данный момент пространства для хранения данных: _ SPACEPEAK $ возвращает максимальный объем пространства для хранения данных, используемый в текущем сеансе

Ориентация исходного объекта

В пределах разумных ограничений соответствия и совместимости с объектами Speakeasy можно работать, используя тот же алгебраический синтаксис.

С этой точки зрения и учитывая динамический и структурированный характер данных, хранящихся в «именованном хранилище», можно сказать, что Speakeasy с самого начала реализовал очень грубую форму перегрузки операторов и прагматичный подход к некоторым функциям. того, что позже было названо "Объектно-ориентированного программирования ", хотя дальше в этом направлении она не развивалась.

$ В следующем примере показано, как объект семейства Matrix и объект семейства Array $ с одинаковой структурой и значениями работают по-разному, хотя и с использованием одного и того же оператора «*» и «/»: в первом случае используется матричная алгебра а во втором случае - поэлементная.
: _ a =матрица(2,2: 1,2,3,4); a A (A 2 на 2 Матрица) 1 2 3 4: _ а*a A * A (A 2 на 2 Матрица) 7 10 15 22: _ а/a A / A (A 2 на 2 Матрица)  1  0  0  1
: _ aa =множество(2,2: 1,2,3,4); aa AA (A 2 на 2 Множество) 1 2 3 4: _ aa*aa AA * AA (A 2 на 2 Множество) 1 4 9 16: _ aa/aa AA / AA (A 2 на 2 Множество)  1  1  1  1

Семейства объектов

Speakeasy предоставляет набор предопределенных «семейств» объектов данных: скаляры, массивы (до 15 измерений), матрицы, наборы, временные ряды.

Элементарные данные могут быть реальными (8 байтов), комплексными (2x8 байтов), символьно-буквальными или именно-буквальными (элементы матрицы могут быть действительными или сложными, значения временных рядов могут быть только реальными).

Отсутствующие значения

За Временные ряды обработка, пять видов недостающие значения предоставлены. Они обозначаются N.A. (недоступно), N.C. (не вычислимо), N.D. (не определено), а также N.B. и Н.Э. значение которых не предопределено и оставлено доступным для разработчиков ссылок. Они внутренне представлены определенными (и очень маленькими) числовыми значениями, действующими как коды.

Все операции с временными рядами заботятся о наличии пропущенных значений, соответствующим образом распределяя их в результатах.

В зависимости от конкретной настройки пропущенные значения могут быть представлены указанным выше знаком, знаком вопроса или пробелом (полезно в таблицах). При использовании во вводе вопросительный знак интерпретируется как отсутствующее значение N.A.

: _ b = timeseries (1,2,3,4: 2010 1 4): _ b B (Временной ряд с 4 компонентами) 1 2 3 4: _ b (2010 3) =? : _ showmval qmark: _ b B (Временной ряд с 4 компонентами) 1 2? 4: _ 1 / b 1 / B (Временной ряд с 4 компонентами) 1 .5? .25: _ showmval объяснение: _ b B (Временной ряд с 4 компонентами) 1 2 Не применимо 4: _ 1 / b 1 / B (Временной ряд с 4 компонентами) 1 .5 Н.З. .25

В числовых объектах, отличных от временных рядов, понятие «отсутствующие значения» не имеет смысла, и числовые операции над ними используют фактические числовые значения независимо от того, соответствуют ли они «кодам отсутствующих значений» или нет (хотя можно вводить «коды отсутствующих значений» и показан как таковой).

 : _ 1+? 1+? = 1.00: _ 1 /? 1 /? = 5.3033E36: _ 1 *? 1 *? знак равно

Обратите внимание, что в других контекстах вопросительный знак может иметь другое значение: например, при использовании в качестве первого (и, возможно, единственного) символа в командной строке он означает запрос на отображение большего количества частей длинного сообщения об ошибке (которое заканчивается знаком «+»).

: _ a = array (10000,10000:) ARRAY (10000,10000 :) В строке «A = ARRAY (10000,10000 :)» Слишком много данных. +: _? Размер распределителя должен быть не менее 859387 килобайт. +: _? Используйте БЕСПЛАТНО, чтобы удалить больше не нужные данные, или используйте CHECKPOINT, чтобы сохранить распределитель для последующего перезапуска. +: _? Используйте ИМЕНА, чтобы увидеть текущие имена. Используйте РАЗМЕР И ВОССТАНОВИТЬ, чтобы перезапустить с большим распределителем. :_? БОЛЬШЕ ИНФОРМАЦИИ ДОСТУПНО.

Логические значения

Некоторая поддержка предоставляется для логических значений, операторов отношения ( Фортран можно использовать синтаксис) и логические выражения.

Логические значения хранятся фактически как числовые значения: 0 означает ложь, а ненулевое значение (1 на выходе) означает истину.

: _ a = 1 2 3 4 5: _ b = 1 3 2 5 4: _ a> b A> B (Компонентный массив A 5) 0 0 1 0 1: _ a <= b A <= B (A 5 Component Array) 1 1 0 1 0: _ a.eq.b A.EQ.B (A 5 Component Array) 1 0 0 0 0: _ logical (2) $ это изменяет способ отображения логических значений: _ a> б; а <= b; a.eq.b A> B (массив компонентов A 5) F F T F T A <= B (массив компонентов A 5) T T F T F A.EQ.B (массив компонентов A 5) T F F F F

Программирование

Специальные объекты, такие как «ПРОГРАММА», «ПОДПРОГРАММА» и «ФУНКЦИЯ» (вместе именуемые процедуры) можно определить для автоматизации операций. Другой способ выполнить несколько инструкций с помощью одной команды - сохранить их в файле использования и заставить процессор читать их с помощью команды USE.

Использовать файлы

«ИСПОЛЬЗОВАНИЕ» файла-пользователя - это простейший способ выполнения нескольких инструкций с минимальным вводом текста. (Эта операция примерно соответствует тому, какой "источник" файла находится на других языках сценариев.)

Файл использования является альтернативным источником ввода для стандартной консоли и может содержать все команды, которые пользователь может вводить с клавиатуры (следовательно, конструкция управления многострочным потоком не допускается). Процессор читает и выполняет файлы использования по одной строке за раз.

Выполнение файла использования может быть конкатенированным, но не вложенным, т.е. управление не возвращается вызывающей стороне по завершении вызываемого файла использования.

Процедуры

Полная возможность программирования достигается с помощью «процедур». На самом деле это объекты Speakeasy, которые должны быть определены в рабочей области для выполнения. Доступна опция, позволяющая автоматически извлекать и загружать процедуры из внешнего хранилища по мере необходимости.

Процедуры могут содержать любые конструкции управления потоком выполнения, доступные в языке программирования Speakeasy.

Программы

Программу можно запустить, просто вызвав ее имя или используя его в качестве аргумента команды EXECUTE. В последнем случае дополнительный аргумент может идентифицировать метку, с которой начнется выполнение. Программы Speakeasy отличаются от других процедур тем, что выполняются на том же «уровне» области видимости, на который они ссылаются, следовательно, они имеют полную видимость всех объектов определены на этом уровне, и все объекты, созданные во время их выполнения, останутся там для последующего использования. По этой причине список аргументов не требуется.

Подпрограммы и функции

Подпрограммы и функции выполняются на новом уровне области видимости, который удаляется по завершении. Связь с вызывающим уровнем области видимости осуществляется через список аргументов (в обоих направлениях). Это реализует скрытие данных, то есть объекты, созданные в подпрограмме или функции, не видны для других подпрограмм и функций, но через списки аргументов.

Доступен глобальный уровень для хранения объекта, который должен быть виден изнутри любой процедуры, например сами процедуры.

Функции отличаются от подпрограмм тем, что они также возвращают функциональное значение; ссылка на них может быть частью более сложного оператора и заменяться возвращенным функциональным значением при оценке оператора.

В некоторой степени подпрограммы и функции Speakeasy очень похожи на одноименные процедуры Fortran.

Управление потоком

Для условного выполнения доступна конструкция IF-THEN-ELSE, а для цикла предусмотрены две формы конструкции FOR-NEXT.

ЕСЛИ (логическое выражение) ТОГДА истинный блок[ЕЩЕ ложный блок] КОНЕЦ ЕСЛИ
ЗА индекс = мин, Максимум [, шаг]   петля-блокСЛЕДУЮЩИЙ индекс
ЗА ценить В набор ценностей   петля-блокСЛЕДУЮЩИЙ ценить

A "ПЕРЕЙТИ К метка"для перехода, в то время как вычисляемый оператор GO TO в стиле Фортран может использоваться для множественного ветвления.

...ЕСЛИ (логическое выражение) ИДТИ К метка...метка:...
$ В следующем заявлении $ селектор должно быть> = 1 и <= NGO TO label1, label2, ..., labelN : селектор ...label1:...label2:......labelN:...

Механизм ON ERROR с несколькими опциями предоставляет средства для обработки ошибок.

Написание линкулов

Linkules - это функции, обычно написанные на Fortran (или, что не поддерживается, на C). С помощью Мортран или макросов C и библиотеки API, они могут взаимодействовать с рабочей областью Speakeasy для извлечения, определения и управления любым объектом Speakeasy.

Большая часть рабочего словаря Speakeasy реализована через линкулы. Они могут быть статически связаны с ядром ядра или динамически загружаться по мере необходимости, при условии, что они правильно скомпилированы как общие объекты (unix) или dll (windows).

Примечания

  1. ^ Поддерживаемые платформы
  2. ^ Рубинштейн, Алекс (2014). Компиляция во время выполнения программ Python, ориентированных на массив (PDF) (Кандидат наук.). Нью-Йоркский университет. APL вдохновил Speakeasy
  3. ^ "Интервью с CLEVE MOLER, проведенное Томасом Хэем 8 и 9 марта 2004 г., Санта-Барбара, Калифорния" (PDF). Музей истории компьютеров. Получено 2016-12-06. Итак, APL, Speakeasy, LINPACK, EISPACK и PL0 были предшественниками MATLAB.
  4. ^ "Введение в Speakeasy - Неофициальный отчет
  5. ^ «Именованное хранилище: динамическая схема распределения хранилища с манипулятивными процедурами», Отчет об исследованиях и разработках AEC - Том 7021 ANL (Серия) - Стэнли Коэн, Физический отдел Комиссии по атомной энергии США, Аргоннская национальная лаборатория, 1965.
  6. ^ «Speakeasy - эволюционная система», С. Коэн, Материалы симпозиума ACM SIGPLAN по языкам очень высокого уровня (Март 1974 г.)
  7. ^ Коэн, Стэнли (1971). «Система Delphi-Speakeasy. I. Общее описание». Компьютерная физика Коммуникации. 2: 1–10. Дои:10.1016/0010-4655(71)90008-7.
  8. ^ «Использование Mortran для перевода программ Fortran с одной машины на другую» Стивен С. Пайпер, Аргоннская национальная лаборатория, 1976
  9. ^ "Speakeasy linkules - plug-совместимое программное обеспечение" ACM - Материалы ежегодной конференции 1977 г.
  10. ^ "Эконометрические модели через SPEAKEASY / FEDEASY", Джеймс М. Конди, Джон В. Дэвисон, 1975 г.
  11. ^ Пользователь может решить, как часто будет происходить сборка мусора, исходя из количества объектов, созданных между двумя из них. Эта функция (команда SLOSH) на самом деле предназначена для отладки линков.

внешняя ссылка