| Version 1.9 Build 1556
|
|
Next: Release 2.5 (December, 1994)
Up: Changes Between Glish Releases
Previous: Release 2.7 (September 1998)
The following changes were made between release 2.5 and 2.6:
- The Tk widgets were bound to Glish in an integrated way (§ 11, page ),
and the necessary functions were added:
- have_gui( ), § 11.8, page
- tk_hold( ), § 11.8, page
- tk_release( ), § 11.8, page
- frame(...), § 11.1, page
- button(...), § 11.2, page
- scale(...), § 11.8, page
- text(...), § 11.11, page
- scrollbar(...), § 11.4.2, page
- label(...), § 11.7, page
- entry(...), § 11.10, page
- message(...), § 11.9, page
- listbox(...), § 11.6, page
- canvas(...), § 11.12, page
- The Glish library libglish.a was split into libglishp.a and
libglish.a so clients no longer must link in all of the interpreter's
symbols (now in libglishp.a).
- Changed function scope rules. Now variables are local to the function
by default (§ 6.6.1, page ).
- The Glish interpreter now does non-blocking writes for sending
events. This allows the interpreter to send as much of an event as it
can and then do other things until it can continue sending the event.
This avoids some cases of deadlock, e.g. :
echo_client->h(1:3000); echo_client->h(1:3000)
This required changes in the transport layer.
- The transport layer (SDS) was replaced. The new library is called
SOS (libsos.a). It is a minimal C++ reimplementation of the portion
of SDS which Glish used. This new transport layer overcomes some of SDS'
short comings:
- coercion of type boolean to type integer in boolean values
sent to clients
- loss of ``embedded'' whitespace in strings sent to clients
- lack of non-blocking write
SOS does this without sacrificing speed. SOS uses writev( )
to minimize the number of system calls in sending data.
This means that all clients compiled with earlier versions of the
Glish
libraries must be recompiled and relinked with these newer libraries.
- opaque values are no longer supported.
- Files written to disk with write_value() from an earlier version
of Glish will not be readable via read_value() with this version of
Glish. This is due to the change in transport layers.
- Changed string to boolean conversion; now a string is T if
it has a non-zero length (§ 10.2, page ).
- Added
<fail>
values as a way to deal with error conditions
(§ 9.1, page ).
- const now means not modifiable rather than ``constant reference''
(§ 3.9, page ).
- All value in Glish are now ``copy-on-write''. This means that
ref function parameters typically should not be needed; val
is now the default type for function parameters (§ 3.10, page ).
- Added numeric constants pi and e (§ 10.11, page ).
- Changed function parameter evaluation to permit things like:
func foo( x, y=2*x ) { print y }
- Dropped the keywords ``send'' and ``request''. Currently these
keywords are simply ignored, but with release 2.6.1 they will result in
syntax errors (§ 7, page ).
- Many memory leaks were fixed. Currently the most notable outstanding
leaks are the result of strdup( ) calls; the current String class
needs to be beefed up and improved so it can be used throughout Glish instead
of char*.
- Changed include from directive to a statement
(§ 4.15, page ).
- Added eval( ) to allow strings to be interpreted as Glish
programs (§ 10.7, page )
- Added several new predefined functions:
- general purpose:
- time( ), § 10.4, page
- is_nan(x), § 10.1, page
- is_modifiable(x), § 10.1, page
- is_const(x), § 10.1, page
- ceil(x), § 10.2.2, page
- floor(x), § 10.2.2, page
- is_fail(x), § 10.1, page
- array manipulation:
- rbind(...), § 10.3, page
- cbind(...), § 10.3, page
- symbol table manipulation:
- is_defined(x), § 10.6, page
- symbol_value(x), § 10.6, page
- symbol_names(...), § 10.6, page
- symbol_set(...), § 10.6, page
- symbol_delete(x), § 10.6, page
- event related:
- whenever_active(x), § 10.9, page
- Some functions were changed:
- log is now log base 10, and a new function ln is
the natural log (§ 10.3, page ).
- split can now be used to split a string into individual
characters by passing an empty separator string, e.g.
split('this','')
returns t h i s
(§ 10.5.1, page ).
- whenever_stmts added an extra field to the record returned. This
field indicates which of the statements are active.
- Added wider keyword to access a scope which is wider than the
current scope, but not global (§ 6.6.1, page ). The main reason this was
added was to support function closures (§ 6.6.1, page ).
- With nested function definitions, the multiple scopes are preserved and
used when the function is invoked. This along with wider allows for
useful function closures (§ 6.6.1, page ).
- A couple of important changes were made to whenever statements:
- ``stacked'' whenever statements (as a result of intervening
awaits) are now handled properly. The event is matched with the
oldest queued whenever statement (§ 7.6.2, page ).
- Multiple function scope are now preserved and used if necessary. This
is an issue when a whenever statement is set up within nested function
definitions.
^C
, ^\
, and ^Z
now work properly, at least when
command line editing is enabled. ^C
prompts before exiting; ^\
exits directly.
- Floating point exceptions are now handled properly on most platforms.
This was especially a problem on the DEC Alpha machines.
- Added ``-l file'' command line parameter (§ 13.1, page ).
- Rewrote the glishd client (see § 16.2). It now
can be either
started by root and run as a daemon accepting connections on a published
port, or started by a user and only handle commands from that particular
user. When glishd is started by root, users are authenticated
using keys. Each user has a key, and each host has a key. glishd
(running as root) authenticates each user using a combination of the
host and user key. This authentication is done thanks to Vern's NPD
library. Authentication is not necessary when glishd is started by a
user other than root.
- Improved remote client start up. Now the binary search path and the
dynamic loader search path are set properly before starting either the
glishd or a client.
- The configuration and make system can now handle creating shared
Glish
libraries for most architectures.
- Now whenever Glish dies, it attempts to write out all of the non-function,
non-agent values to a file called glish.core.
- Now
pragma include once
can be used to prevent a script from being
included multiple times.
- Clients can now be shared by multiple Glish interpreters. (See
§ 7.9 and § 16.3.) This allows
interpreters to communicate with each other. A pragma directive was added
to allow script clients to specify that they should be shared. The following are
the only valid pragmas for share clients are:
pragma shared user
pragma shared group
pragma shared world
Much of the initial work on shared clients was done by Todd Satogata
(satogata@bnl.gov) and
Chris Saltmarsh
(salty@farpoint.co.uk).
- Several new fields were added to the system record:
system.pid
and system.ppid
, § 10.11, page
system.tk
, § 11.8, page
system.limits.max
and system.limits.min
, § 10.11, page
system.path.include
, § 4.15, page
system.path.bin.
hostname, § 7.8.1, page
system.path.bin.default
, § 7.8.1, page
system.path.key
, § 16.2.1, page
system.print.limit
, § 5.3.2, page
system.print.precision
, § 5.3.1, page
system.output.trace
, § 9.3, page
system.output.log
, system.output.ilog
, and system.output.olog
, § 9.2, page
system.output.pager.exec
, system.output.pager.limit
, § 5.3, page
setting some of these affect things like how clients or include files
are found, how variables are displayed, or if debug output is generated
or not.
- Added paged output so that large values are sent through a pager, e.g.
less or more, for display.
- Added handling for the escape sequences
'\a'
, '\e'
and '\v'
in strings.
Next: Release 2.5 (December, 1994)
Up: Changes Between Glish Releases
Previous: Release 2.7 (September 1998)
  Contents
  Index
Please send questions or comments about AIPS++ to aips2-request@nrao.edu.
Copyright © 1995-2000 Associated Universities Inc.,
Washington, D.C.
Return to AIPS++ Home Page
2006-10-15