Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

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, &: & аргумент_3, аргумент_4, аргумент_5, аргумент_6)$ с другой стороны, вы можете собрать несколько коротких выписок $ на одной физической линии, используя ";": _ a = 1; b = 2; с = 3; d = 4

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

: _ ПОЛУЧИТЬ my_data ИЗ БИБЛИОТЕКИ my_project: _ СОХРАНИТЬ my_data КАК a_new_name_for_mydata В БИБЛИОТЕКЕ другой_проект 

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

: _ a = 1: _ что это заA - НАСТОЯЩИЙ СКАЛЯР.: _ a = "теперь массив символов": _ что это заA - это Массив символов из 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): _ а = 0,0,0,0,0,0,0,0,0,0: _ а = 0 0 0 0 0 0 0 0 0 0: _ a = целые числа (10) * 0: _ a = 10:

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

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

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

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

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

Рабочая область и объекты [ править ]

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

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

Ориентация исходного объекта [ править ]

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

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

Семейства объектов [ править ]

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

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

Отсутствующие значения [ править ]

Для обработки временных рядов предусмотрено пять типов пропущенных значений . Они обозначаются как NA (недоступно), NC (не вычислимо), ND (не определено), а также NB и NE, значение которых не предопределено и остается доступным для разработчика линкулов. Они внутренне представлены определенными (и очень маленькими) числовыми значениями, действующими как коды.

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

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

: _ b = таймсерии (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 / б 1 / B (Временной ряд с 4 компонентами) 1,5? 0,25: _ showmval объяснить: _ b B (Временной ряд с 4 компонентами) 1 2 NA 4: _ 1 / б 1 / B (Временной ряд с 4 компонентами) 1 .5 NC .25

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

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

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

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

Логические значения [ править ]

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

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

: _ а = 1 2 3 4 5: _ b = 1 3 2 5 4: _ а> б A> B (массив из 5 компонентов) 0 0 1 0 1: _ a <= b A <= B (массив компонентов A 5) 1 1 0 1 0: _ a.eq.b A.EQ.B (5-компонентный массив) 1 0 0 0 0: _ logic (2) $ изменяет способ отображения логических значений: _ а> б; а <= b; a.eq.b A> B (массив из 5 компонентов) БПФФ A <= B (массив компонентов A 5) TTFTF A.EQ.B (5-компонентный массив) TFFFF

Программирование [ править ]

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

Использовать файлы [ править ]

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

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

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

Процедуры [ править ]

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

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

Программы [ править ]

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

Подпрограммы и функции [ править ]

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

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

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

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

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

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

Оператор GO TO label предназначен для перехода, в то время как вычисляемый оператор GO TO в стиле Фортран может использоваться для множественного ветвления.

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

Написание линкулов [ править ]

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

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

Примечания [ править ]

  1. ^ Поддерживаемые платформы
  2. Рубинштейн, Алекс (2014). Компиляция во время выполнения программ Python, ориентированных на массивы (PDF) (доктор философии). Нью-Йоркский университет. APL вдохновил Speakeasy
  3. ^ "Интервью с CLEVE MOLER, проведенное Томасом Хэем 8 и 9 марта 2004 г. Санта-Барбара, Калифорния" (PDF) . Музей истории компьютеров . Проверено 6 декабря 2016 . Итак, 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. DOI : 10.1016 / 0010-4655 (71) 90008-7 .
  8. ^ "Использование Mortran для перевода программ Fortran с одной машины на другую" Стивен С. Пайпер, Аргоннская национальная лаборатория , 1976
  9. ^ "Speakeasy linkules - plug-совместимое программное обеспечение" ACM - Материалы ежегодной конференции 1977 г.
  10. ^ "Эконометрические модели через SPEAKEASY / FEDEASY", Джеймс М. Конди, Джон В. Дэвисон, 1975
  11. ^ Пользователь может решить, как часто будет происходить сборка мусора, исходя из количества объектов, созданных между двумя из них. Эта функция (команда SLOSH) на самом деле предназначена для отладки компоновки.

Внешние ссылки [ править ]

  • Официальный сайт (через Wayback Machine )
  • Speakasy Computing Corporation «S канал на YouTube
  • Веб-сайт Econometric Modeling & Computing Corporation.
  • Интересный разговор со Стэном Коэном.