- ... templates.1
- Although it
is often not thought of as polymorphism, template polymorphism is in
many respects more flexible than inheritance polymorphism, one merely
requires that an interface have certain features. The disadvantages
are code bloat and some loss of semantics enforcement.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... meaningful2
- Every package is happy to
interoperate with packages which adopt its conventions.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... all3
- Or
almost all; there are bound to be some things which reside in flat
text files, e.g., CLI initialization files
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... addressed.4
- It would be ideal if the GNU C++ compiler,
g++, was sufficiently reliable. Unfortunately that is not yet the case.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... interferometer5
- More precisely, an earth rotation
aperture synthesis array.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
normally6
- However, one can imagine that for, say, geodesy, the
values in a telescope component that describe the displacement of a
telescope from a normative position might be the desired result.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
MeasurementSets.7
- While such concatenations will be physical
in the first instance, a Table class which presents a single table
interface to multiple underlying tables will be available at some
point.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
simulated.8
- Or partially simulated; a pure east-west array
might have a zero column of W's which are returned from a (trivial)
virtual column.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... spectra.9
- It
seems likely that these classes will at least have a common base
class, and possibly that VisSet will be derived from SpectrumSet.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
process.10
- Incidentally, earlier versions of this scheme had
calibration being applied in the data view ( e.g., VisSet). I
believe that the requirement that we allow for partially calibrated
data requires that calibration results in a MeasurementSet, not a
VisSet. In other words, we need to produce calibration chains of
indeterminate length --
f (g(h(...(data)))) -- if we want to be
able to change and replace functions in the calibration chain, it is
required that the domain and range of those functions be the same,
i.e., the MeasurementSet.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
clarification.11
- However this is not a large point; we merely
have to decide what values we want the TelescopeModel to have and
export them -- normally it would fill its internal tables from the
MeasurementSet.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... row12
- For these purposes, all
indirect arrays and tables are identical; think of them as
pointers. This rule ensures that all rows have the same size.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... row.13
-
Actually the dimensionality may be fixed in the table description if
desired.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... added.14
-
A description can also be incompletely specified, for example:
- A column named ``Data'' containing complex arrays must exist;
- A column named ``Data'' containing 1-D complex arrays must exist;
- A column named ``Data'' containing 1-D complex arrays of length
512 must exist.
In practice, the second (or possibly first) alternative would be
likely be the right level of detail. One wouldn't want to forbid the
number of channels of the detector from changing, on the other hand
the user of the table shouldn't have to engage in a lot of run-time
detection of the table structure.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
table.15
- Presently iterator tables are actually implemented
with reference tables.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... disk16
- In principle storage managers could be written
for tape drives or other devices.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... Karma17
- Karma is a programmers toolkit for scientific
computing with communications support, event management,
data structure manipulation, graphics display and user interface
support. Information on Karma may be found at
http://www.atnf.csiro.au/karma. Karma was developed by R. Gooch.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... requirements.18
- For example, it is expensive to
change a value in the middle of a Miriad-like dataset, however it is
quite cheap to extend it. On the other hand, a Karma data set cannot
be extended at all once it is created (short of a copy).
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
it19
- Actually element iterators like these are of wider
utility than for only traversing lattice regions; they are of wide
utility for containers in general. In C++, the best example of this is
the ``Standard Template Library'' (STL) which is being adopted by the
ISO/ANSI C++ standardization committee. The AIPS++ element
iterators should be STL compatible to enable their use with third
party libraries and functions.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... mask.20
- Actually, the mask is an implementation
detail. The same result could be had by storing a list of valid (or
invalid) positions. However, the use of a mask results in a more
predictable cost. Our implementation of a MaskedLattice contains two
lattices: one for the data and the other for the mask.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... indexing.21
- In C++,
we should probably also make a distinction between arithmetic arrays
and general arrays. We might also want array classes that, for
example, wrap around Karma library arrays.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... rule22
- First formulated by Mark Calabretta.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
languages23
- APL, IDL, Mathematica, Fortran 90, S+ etc.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... data.24
- Actually, it is possible to get reasonable
performance without tiling if you assume that you can hold an entire
XZ slice of the cube (in this example) in memory at once.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... process25
- Almost certainly a thin layer on top of a
WWW browser like Mosaic.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... hub.26
- Perhaps
``sender blocks until reception would be a better policy?''
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
values27
- Writing the values contained in an object out in some
way that its values can be reconstituted into a similar object. This
is essentially ``copy'' semantics: some object is overwritten with
values that came out of some previous object. (AipsIO behaves like
this.) persist >> object is a reasonable way to think of this.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... objects28
- A PARTICULAR object
whose lifetime can exceed that of the process in which it was
created. persist >> object is a bad way to think of this, you
are not changing some (possibly empty) existing object, you are
``activating'' an already existing object.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... data29
- If the class is designed
properly.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... whole-array30
- Glish
originally only had 1-D arrays; it has recently been augmented to
handle multidimensional arrays by Darrell Schiebel of the NRAO AIPS++ group.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
distribution.31
- Available via anonymous ftp from
ee.lbl.gov in the glish subdirectory. The principal author of
Glish is Vern Paxson ( vern@ee.lbl.gov).
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
editing32
- Also recently added by the AIPS++ group.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.