Jump to content

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

Speakeasy
Разработчик(и) Компьютерная корпорация Speakeasy
Стабильная версия
IV Йота / 2006 г.
Написано в Мортран , ФОРТРАН , C [ нужна ссылка ]
Операционная система Windows , macOS , RedHat Linux , SUSE Linux , Mandrake Linux , Debian , Solaris , HP-UX [1]
Тип Технические вычисления
Лицензия Пробная версия
Speakeasy (интерпретируемый язык программирования)
Парадигма императив
Разработано Стэнли Коэн
Разработчик Компьютерная корпорация Speakeasy
Впервые появился 1964
Дисциплина набора текста динамичный
Под влиянием
АПЛ [2]
Под влиянием
МАТЛАБ [3]

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

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

Целью Speakeasy было облегчить вычислительную работу физиков Аргоннской национальной лаборатории. [8]

История [ править ]

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

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

Почти с самого начала (поскольку в операционных системах стала доступна функция динамического связывания) Speakeasy имеет возможность расширения своего рабочего словаря с помощью отдельных модулей, динамически связанных с базовым процессором по мере необходимости. По этой причине такие модули назывались «линкулями» (LINKable-modULES). [12] Это функции с обобщенным интерфейсом, которые можно написать на ФОРТРАНЕ. [13] или С. в [ нужна ссылка ] Независимость каждого из новых модулей от других и от основного процессора очень помогает в совершенствовании системы, особенно так было в старые времена.

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

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

Синтаксис [ править ]

Символ :_ (двоеточие+подчеркивание) является одновременно логотипом Speakeasy и приглашением к интерактивному сеансу.

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

$ suppose you have a very long statement, 
$ you can write it on multiple physical lines using "&" 
$ at the end of the line to be continued:
 
:_ the_return_value = this_is_a_function_with_many_arguments(argument_1, argument_2, &
:&                             argument_3, argument_4, argument_5, argument_6)
 
$ on the other hand, you can collect several short statements 
$ on a single physical line using ";"
:_ a=1; b=2; c=3; d=4

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

:_ GET my_data FROM LIBRARY my_project
:_ KEEP my_data AS a_new_name_for_mydata IN LIBRARY other_project 

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

:_ a=1
:_ whatis a
A is a REAL SCALAR.
:_ a="now a character array"
:_ whatis a
A is a 21 element CHARACTER ARRAY.

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

:_ sin(grid(-pi,pi,pi/32))    $ fully specified syntax

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

:_ sin grid(-pi,pi,pi/32)     $ the argument of function sin is not surrounded by parenthesis

или даже

:_ sin grid(-pi pi pi/32)     $ the arguments of function grid can be separated by spaces

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

:_ a=array(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 — векторно-ориентированный язык: придавая структурированный аргумент функции скаляра, результатом обычно является объект с той же структурой аргумента, в котором каждый элемент является результатом функции, примененной к соответствующему элементу аргумент. В приведенном выше примере результатом применения функции sin к массиву (назовем его x ), сгенерированному функциональной сеткой массива , является ответ элемента которого , ответ (i) равен sin ( x (i)) для каждого i из 1 to noels (x) (количество элементов x ). Другими словами, утверждение

:_ a=sin(grid(-pi pi pi/32))

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

x=grid(-pi pi pi/32) $ generates an array of real numbers from -pi to pi, stepping by pi/32
for i = 1,noels(x)   $ loops on the elements of x
  a(i) = sin(x(i))   $ evaluates the i-th element of a
next i               $ increment the loop index

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

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

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

:_ SIZE 100M $ very first statement: the work area will be 100MB
:_ SIZE      $ returns the size of the work area in the current session
:_ SPACELEFT $ returns the amount of data storage space currently unused
:_ SPACENOW  $ returns the amount of data storage space currently used
:_ SPACEPEAK $ returns the maximum amount of data storage space used in the current session

Необработанная ориентация объекта [ править ]

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

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

$ The following example shows how a Matrix-family object and an Array-family object
$ with the same structure and values are operated on differently although using the 
$ same "*" and "/" operator: in the first case using the matrix algebra and in the 
$ second case operating on an element-by-element basis.
:_ a=matrix(2,2:1,2,3,4) ; a
  A (A 2 by 2 Matrix)
  1  2
  3  4
:_ a*a
  A*A (A 2 by 2 Matrix)
  7   10
  15  22
:_ a/a
  A/A (A 2 by 2 Matrix)
  1  0
  0  1
:_ aa=array(2,2:1,2,3,4) ; aa
  AA (A 2 by 2 Array)
  1  2
  3  4
:_ aa*aa
  AA*AA (A 2 by 2 Array)
  1   4
  9   16
:_ aa/aa
  AA/AA (A 2 by 2 Array)
  1  1
  1  1

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

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

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

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

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

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

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

:_ b=timeseries(1,2,3,4 : 2010 1 4)
:_ b
  B (A Time Series with 4 Components)
  1  2  3  4
:_ b(2010 3) = ? 
:_ showmval qmark
:_ b
  B (A Time Series with 4 Components)
  1  2  ?  4
:_ 1/b
  1/B (A Time Series with 4 Components)
  1    .5   ?    .25
:_ showmval explain
:_ b
  B (A Time Series with 4 Components)
  1     2     N.A.  4
:_ 1/b
  1/B (A Time Series with 4 Components)
  1     .5    N.C.  .25

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

 :_ 1+?
  1+? =  1.00
 :_ 1/?
  1/? =  5.3033E36
 :_ 1*?
  1*? = ?

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

:_ a=array(10000,10000:)
ARRAY(10000,10000:) In line "A=ARRAY(10000,10000:)"  Too much data.+
:_ ?
Allocator size must be at least     859387 kilobytes.+
:_ ?
Use FREE to remove no longer needed data
or
use CHECKPOINT to save allocator for later restart.+
:_ ?
Use NAMES to see presently defined names.
Use SIZE & RESTORE to restart with a larger allocator.
:_ ?
NO MORE INFORMATION AVAILABLE.

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

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

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

:_ a = 1 2 3 4 5
:_ b = 1 3 2 5 4
:_ a>b
  A>B (A 5 Component Array)
  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) $ this changes the way logical values are shown
:_ a>b; a<=b; a.eq.b
  A>B (A 5 Component Array)
 F F T F T
  A<=B (A 5 Component Array)
 T T F T F
  A.EQ.B (A 5 Component Array)
 T F F F F

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

IF (logical-expression) THEN
   true-block
[ELSE
   false-block]
END IF
FOR index = min, max [, step]
   loop-block
NEXT index
FOR value IN set-of-values
   loop-block
NEXT value

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

...
IF (logical-expression) GO TO label
...
label:
...
$ In the following statement 
$ selector must be >= 1 and <= N

GO TO label1, label2, ..., labelN : selector 
...
label1:
...
label2:
...
...
labelN:
...

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

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

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

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

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

  1. ^ Поддерживаемые платформы
  2. ^ Рубинштейн, Алекс (2014). Компиляция во время выполнения массивно-ориентированных программ Python (PDF) (доктор философии). Нью-Йоркский университет. APL напрямую вдохновила Speakeasy
  3. ^ «Интервью с КЛИВОМ МОЛЕРОМ, проведенное Томасом Хейгом 8 и 9 марта 2004 г., Санта-Барбара, Калифорния» (PDF) . Музей истории компьютеров . Проверено 6 декабря 2016 г. Таким образом, APL, Speakeasy, LINPACK, EISPACK и PL0 были предшественниками MATLAB.
  4. ^ "Введение в Speakeasy - неофициальный отчет
  5. ^ Холл, Джек М.; Хьюлетт, Ричард Г.; Харрис, Рут Р. (1997). Аргоннская национальная лаборатория, 1946-96 гг . Издательство Университета Иллинойса. п. 482. ИСБН  978-0-252-02341-5 .
  6. ^ «Именованное хранилище: динамическая схема распределения памяти с манипулятивными процедурами», отчет об исследованиях и разработках AEC - Том 7021 ANL (серия) - Стэнли Коэн, физический отдел, Комиссия по атомной энергии США, Аргоннская национальная лаборатория, 1965.
  7. ^ «Speakeasy - эволюционная система», С. Коэн, Материалы симпозиума ACM SIGPLAN по языкам очень высокого уровня (март 1974 г.)
  8. ^ Коэн, Стэнли (1971). «Система Delphi-speakeasy. I. Общее описание». Компьютерная физика. Коммуникации . 2 (1): 1–10. Бибкод : 1971CoPhC...2....1C . дои : 10.1016/0010-4655(71)90008-7 .
  9. ^ «Использование Mortran для перевода программ на Фортране с одной машины на другую» Стивен С. Пайпер, Аргоннская национальная лаборатория , 1976 г.
  10. ^ «Приручите свой мэйнфрейм». ТВЕРДАЯ КОПИЯ . Октябрь 1984 г. с. 189.
  11. ^ «Информационный бюллетень Argonne Computing: SPEAKEASY». 1988. с. 2526. {{cite web}}: Отсутствует или пусто |url= ( помощь )
  12. ^ «Speakeasy Linkules - совместимое программное обеспечение» ACM - Материалы ежегодной конференции 1977 года.
  13. ^ Коэн, Стэн (1976). Speakeasy: окно в компьютер . АКМ Пресс. стр. 1039–1047. дои : 10.1145/1499799.1499944 . ISBN  978-1-4503-7917-5 . S2CID   11997344 .
  14. ^ «Эконометрические модели через SPEAKEASY/FEDEASY», Джеймс М. Конди, Джон В. Дэвисон, 1975 г.
  15. ^ Ренфро, Чарльз Г. (2004). Вычислительная эконометрика: ее влияние на развитие количественной экономики . ИОС Пресс. стр. 46–47. ISBN  978-1-58603-426-9 .
  16. ^ Ренфро, Чарльз Г. (2004). Вычислительная эконометрика: ее влияние на развитие количественной экономики . ИОС Пресс. п. 373. ИСБН  978-1-58603-426-9 .
  17. ^ Пользователь может решить, как часто будут выполняться сборки мусора, исходя из количества объектов, созданных между двумя из них. Эта функция (команда SLOSH) на самом деле предназначена для отладки ссылок.

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 90df90ddec1c5ce194f611ad586cf526__1709893260
URL1:https://arc.ask3.ru/arc/aa/90/26/90df90ddec1c5ce194f611ad586cf526.html
Заголовок, (Title) документа по адресу, URL1:
Speakeasy (computational environment) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)