Speakeasy (výpočetní prostředí) - Speakeasy (computational environment)

Speakeasy
Speakeasy Red Logo.png
Vývojáři Speakeasy Computing Corporation
Stabilní uvolnění
IV Iota / 2006
Napsáno Mortran , FORTRAN , C
Operační systém Windows , macOS , RedHat Linux , SUSE Linux , Mandrake Linux , Debian , Solaris , HP-UX
Typ Technické výpočty
Licence Zkušební verze
Speakeasy (interpretovaný programovací jazyk)
Paradigma rozkazovací způsob
Navrhl Stanley Cohen
Vývojář Speakeasy Computing Corporation
Poprvé se objevil 1964
Disciplína psaní dynamický
Ovlivněn
APL
Ovlivněn
MATLAB

Speakeasy bylo interaktivní prostředí s numerickými počítači, které také obsahovalo interpretovaný programovací jazyk . Původně byl vyvinut pro vnitřní použití ve fyzikální divizi Národní laboratoře Argonne teoretickým fyzikem Stanleyem Cohenem . Nakonec založil Speakeasy Computing Corporation, aby byl program komerčně dostupný.

Speakeasy je numerický balíček s dlouhou životností. Ve skutečnosti byla původní verze prostředí postavena kolem základního dynamického úložiště dat s názvem „Pojmenované úložiště“ vyvinutého na počátku 60. let, přičemž nejnovější verze byla vydána v roce 2006.

Cílem Speakeasy bylo usnadnit výpočetní práci fyziků v Národní laboratoři Argonne.

Dějiny

Speakeasy byl původně koncipován pro práci na sálových počítačích (v té době jediný druh počítačů) a následně byl portován na nové platformy ( minipočítače , osobní počítače ), jakmile byly k dispozici. Přenášení stejného kódu na různé platformy bylo snazší pomocí Mortranských metajazykových maker k řešení nedostatků a rozdílů systémů a kompilátorů. Speakeasy je v současné době k dispozici na několika platformách: PC se systémem Windows , macOS , Linux , resortní počítače a pracovní stanice s několika verzemi Linux, AIX nebo Solaris .

Speakeasy byl také jedním z prvních interaktivních numerických výpočetních prostředí, které byly implementovány takovým způsobem na systému CDC 3600 a později na strojích IBM TSO, protože v té době byl v beta testování v národní laboratoři Argonne. V roce 1984 bylo k dispozici na Digital Equipment Corporation je VAX systémů.

Téměř od začátku (protože funkce dynamického propojení byla k dispozici v operačních systémech) má Speakeasy schopnost rozšířit svou operační slovní zásobu pomocí oddělených modulů, dynamicky propojených s jádrovým procesorem, jak jsou potřeba. Z tohoto důvodu se tyto moduly nazývaly „linkules“ (LINKable-modULES). Jsou to funguje s generalizované rozhraní, které může být napsán v FORTRAN nebo C . Nezávislost každého z nových modulů na ostatních a na hlavním procesoru je velkou pomocí při zlepšování systému, zvláště to bylo za starých časů.

Tento snadný způsob rozšiřování funkcí hlavního procesoru uživatelé často využívali k vývoji vlastních specializovaných balíčků. Kromě programů, funkcí a podprogramů, které může uživatel psát ve vlastním interpretovaném jazyce Speakeasy, přidávají odkazy také funkce prováděné s typickými výkony kompilovaných programů.

Mezi balíčky vyvinutými uživateli je jedním z nejdůležitějších „Modeleasy“, původně vyvinutý jako „FEDeasy“ na začátku 70. let minulého století ve výzkumném oddělení Rady guvernérů Federálního rezervního systému ve Washingtonu DC. Modeleasy implementuje speciální objekty a funkce pro odhad a simulaci velkých ekonometrických modelů. Jeho vývoj nakonec vedl k jeho distribuci jako nezávislého produktu.

Syntax

Symbol : _ (dvojtečka+podtržítko) je logo Speakeasy a výzva interaktivní relace.

Znak dolaru se používá k vymezení komentářů; ampersand se používá k pokračování příkazu na následujícím fyzickém řádku, v takovém případě se výzva stane : & (dvojtečka+ampersand); středník může oddělovat příkazy napsané na stejné fyzické čáře.

$ 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 

Jak říká jeho vlastní název, cílem Speakeasy bylo vystavit syntaxi co nejpřátelštěji pro uživatele a co nejblíže mluvenému jazyku. Nejlepším příkladem je sada příkazů pro čtení/zápis dat z/do trvalého úložiště. Např. (Klíčová slova jazyků jsou pro objasnění uvedena velkými písmeny):

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

Proměnným (tj. Objektům Speakeasy) je přidělen název dlouhý až 255 znaků, pokud je zapnuta možnost LONGNAME, v opačném případě až 8 znaků (kvůli zpětné kompatibilitě). Jsou dynamicky zadávány v závislosti na hodnotě, která je jim přiřazena.

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

Argumenty funkcí obvykle nemusí být ohraničeny závorkami nebo odděleny čárkami za předpokladu, že kontext zůstává jasný a jednoznačný. Například:

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

lze napsat:

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

nebo dokonce

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

Je možné mnoho dalších zjednodušení syntaxe; například pro definování objektu s názvem 'a' v hodnotě desetičlenného pole nul lze napsat kterýkoli z následujících příkazů:

:_ 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 je vektorově orientovaný jazyk: dává strukturovaný argument funkci skaláru, výsledkem je obvykle objekt se stejnou strukturou argumentu, ve kterém je každý prvek výsledkem funkce aplikované na odpovídající prvek argument. Ve výše uvedeném příkladu je výsledkem funkce sin aplikované na pole (nazvěme jej x ) generované mřížkou funkcí odpověď pole, jejíž prvek odpověď (i) se rovná sin ( x (i)) pro každé i od 1 na noels (x) (počet prvků x ). Jinými slovy, prohlášení

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

je ekvivalentní následujícímu fragmentu programu:

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

Tyto vektor orientovaných prohlášení vyhnout psaní programů pro tyto smyčky a jsou mnohem rychlejší než oni.

Pracovní plocha a objekty

Hned prvním prohlášením relace může uživatel definovat velikost „pojmenovaného úložiště“ (nebo „pracovní oblasti“ nebo „přidělovače“), které je přiděleno jednou provždy na začátku relace. V rámci této pracovní oblasti pevné velikosti procesor Speakeasy dynamicky vytváří a ničí pracovní objekty podle potřeby. K dispozici je uživatelsky laditelný mechanismus shromažďování odpadků, který maximalizuje velikost volného bloku v pracovní oblasti a zabalí definované objekty do spodního nebo horního konce alokátoru. Uživatel se může kdykoli zeptat na využitý nebo zbývající prostor v pracovní oblasti.

:_ 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

Orientace surového objektu

V rámci rozumných omezení shody a kompatibility lze objekty Speakeasy provozovat pomocí stejné algebraické syntaxe.

Z tohoto pohledu a s ohledem na dynamickou a strukturovanou povahu dat uložených v „pojmenovaném úložišti“ je možné říci, že Speakeasy od začátku implementoval velmi surovou formu přetěžování operátorů a pragmatický přístup k některým funkcím toho, čemu se později říkalo „ objektově orientované programování “, ačkoli se to v tomto směru dále nevyvíjelo.

$ 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

Objektové rodiny

Speakeasy poskytuje spoustu předdefinovaných „rodin“ datových objektů: skaláry, pole (až 15 dimenzí), matice, sady, časové řady.

Elementární data mohou být druhu reálných (8 bajtů), komplexních (2x8 bajtů), znakových doslovných nebo jmenných (maticové prvky mohou být skutečné nebo komplexní, hodnoty časových řad mohou být pouze skutečné).

Chybějící hodnoty

Pro zpracování časových řad je k dispozici pět typů chybějících hodnot . Jsou označeny NA (není k dispozici), NC (nelze vypočítat), ND (není definováno) spolu s NB a NE, jejichž význam není předem určen a je ponechán k dispozici pro vývojáře linkules. Jsou interně reprezentovány konkrétními (a velmi malými) číselnými hodnotami, které působí jako kódy.

Všechny operace časových řad se starají o přítomnost chybějících hodnot a vhodně je šíří ve výsledcích.

V závislosti na konkrétním nastavení mohou být chybějící hodnoty reprezentovány výše uvedeným zápisem, symbolem otazníku nebo mezerou (užitečné v tabulkách). Při použití na vstupu je otazník interpretován jako chybějící hodnota 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

V jiných numerických objektech než v časových řadách je pojem „chybějící hodnoty“ bezvýznamný a numerické operace na nich používají skutečné číselné hodnoty bez ohledu na to, zda odpovídají „kódům chybějících hodnot“ nebo ne (i když lze zadat „kódy chybějících hodnot“ a zobrazeny jako takové).

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

Všimněte si, že v jiných kontextech může mít otazník jiný význam: například když je použit jako první (a možná pouze) znak příkazového řádku, znamená to požadavek zobrazit více kusů dlouhé chybové zprávy (což končí symbolem „+“).

:_ 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.

Logické hodnoty

Určitá podpora je poskytována pro logické hodnoty, relační operátory ( lze použít syntaxi Fortran ) a logické výrazy.

Logické hodnoty jsou ve skutečnosti uloženy jako číselné hodnoty: 0 znamená false a nenulové (1 na výstupu) znamená true.

:_ 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

Programování

Pro automatizaci operací lze definovat speciální objekty jako „PROGRAM“, „PODPROGRAM“ a „FUNKCE“ (souhrnně označované jako procedury ). Dalším způsobem, jak spustit několik instrukcí jediným příkazem, je uložit je do souboru použití a přimět procesor je přečíst pomocí příkazu USE.

Použít soubory

„POUŽITÍ“ souboru použití je nejjednodušší způsob, jak provádět několik instrukcí s minimálním zadáním. (Tato operace zhruba odpovídá tomu, jaký „zdrojový“ soubor je v jiných skriptovacích jazycích.)

Soubor použití je alternativním vstupním zdrojem ke standardní konzole a může obsahovat všechny příkazy, které může uživatel zadat pomocí klávesnice (není tedy povolena žádná víceřádková konstrukce řízení toku). Procesor čte a spouští soubory použití po jednom řádku.

Provádění souboru použití může být zřetězeno, ale nemůže být vnořeno, tj. Ovládací prvek se nevrátí volajícímu po dokončení volaného souboru použití.

Postupy

Plné programovací schopnosti je dosaženo pomocí „procedur“. Jsou to vlastně objekty Speakeasy, které musí být definovány v pracovní oblasti, která má být spuštěna. K dispozici je možnost, aby se procedury automaticky načítaly a načítaly z externího úložiště podle potřeby.

Procedury mohou obsahovat libovolné konstrukty řízení toku provádění dostupné v programovacím jazyce Speakeasy.

Programy

Program lze spustit jednoduše vyvoláním jeho názvu nebo jeho použitím jako argumentu příkazu EXECUTE. Ve druhém případě může další argument identifikovat návěští, ze kterého bude provádění spuštěno. Programy Speakeasy se liší od ostatních postupů tím, že jsou prováděny na stejné „rozsahu“ rozsahu, na který se odkazují, a proto mají plnou viditelnost všech objektů definovaných na této úrovni a všechny objekty vytvořené během jejich provádění tam budou ponechány pro další použití. Z tohoto důvodu není potřeba žádný seznam argumentů.

Podprogramy a funkce

Podprogramy a funkce jsou prováděny na nové úrovni rozsahu, která je po dokončení odstraněna. Komunikace s úrovní rozsahu volání se provádí prostřednictvím seznamu argumentů (v obou směrech). To implementuje skrývání dat, tj. Objekty vytvořené v rámci podprogramu nebo funkce nejsou viditelné pro jiné podprogramy a funkce, ale prostřednictvím seznamů argumentů.

Pro ukládání objektů je k dispozici globální úroveň, která musí být viditelná z jakékoli procedury, např. Samotných procedur.

Funkce se liší od podprogramů, protože také vracejí funkční hodnotu; odkaz na ně může být součástí složitějšího příkazu a při vyhodnocení příkazu je nahradí vrácená funkční hodnota.

Do jisté míry jsou podprogramy a funkce Speakeasy velmi podobné postupům Fortranu se stejným názvem.

Řízení toku

Pro podmíněné provedení je k dispozici konstrukce IF-THEN-ELSE a pro smyčku jsou k dispozici dvě formy konstrukce 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

Pro skákání je k dispozici prohlášení „GO TO label “, zatímco pro více větvení lze použít vypočítaný příkaz GO TO podobný Fortranu.

...
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:
...

Mechanismus ON ERROR s několika možnostmi poskytuje prostředky pro zpracování chyb.

Linkule psaní

Linkules jsou funkce obvykle napsané ve Fortranu (nebo, nepodporovaně, v C). Pomocí maker Mortran nebo C a knihovny API mohou propojit pracovní plochu Speakeasy pro načítání, definování a manipulaci s jakýmkoli objektem Speakeasy.

Většina operační slovní zásoby Speakeasy je implementována prostřednictvím odkazů. Mohou být staticky propojeny s jádrem nebo dynamicky načteny podle potřeby za předpokladu, že jsou správně kompilovány jako sdílené objekty (unix) nebo dll (okna).

Poznámky

externí odkazy