Re: [BLACKBOX] Read-only IN parameters for all data types

From: [at]} <CFB>
Date: Tue, 19 Feb 2008 22:40:56 +1030

----boundary-LibPST-iamunique-1278319216_-_-
Content-type: text/plain

 > -----Original Message-----
> From: BlackBox [mailto:BLACKBOX{([at]})nowhere.xy
> Oleg N. Cher
> Sent: Tuesday, 19 February 2008 7:55 PM
> To: BLACKBOX{([at]})nowhere.xy
> Subject: [BLACKBOX] Read-only IN parameters for all data
> types (Was: Mobile-device development)
>
>
> Using IN parameters for all data types is a "katana",
> (sharp-all-sides blade).

What we would call a 'double-edged sword' - but I don't agree.

> At reasonable not excessive use it well also has pluses:
>
> - A programmer sees with the first sight at heading
> of procedure, what arguments are constantly. (+)
>

Yes. That is what I like about them.

> - Parameters IN can be used for building of more
> optimal machine code, in some cases. (+)
>

Yes. Particularly so for large arrays and records. It means that the
programmer does not have to resort to the 'kludge' of passing such large
read-only parameters as VARs just for reasons of efficiency. This dubious
practice has the associated real risk that the parameters could be
inadvertently modified.

> And minuses:
>
> - However this opportunity is not for improvement
> of recording of algorithms. Language Oberon has the good
> notation providing well intelligibility. And using of
> parameters IN is a first step to INLINE, #IFDEF/#ENDIF
> and #INCLUDE of language C ;-) . Because this IN says
> to compiler HOW to make more the best optimization. But
> not WHAT programmer can say about recording algorithms. (-)
>

Language features that give optimisation hints to the compiler are not a new
concept in Oberon. e.g. INC and DEC, FOR loops (partially so - not to the
same extent as in Pascal though), etc.

>
> - It's unstandartized Oberon-feature. (-)
>

The precedent has already been set - Component Pascal is not standard
Oberon.

> - Here the compiler can understand, that parameter IN
> does not change anywhere (at second pass in moment of
> compiling. More difficultly if compiler is one-passed).
> So the obvious indication of IN from the given point
> of view is excessive. (-)
>

It is no more difficult in a one-pass Component Pascal compiler as all items
have to be declared before being used as a formal parameter.

> I want to say what. When the programmer describes
> the decision a tasks - it is the most important for him
> WHAT is done, instead of HOW. And so IN here is an
> indication to the compiler HOW more effectively to generate
> a code instead of WHAT programmer wanted to say about an
> algorithm of program.
>

That is how Oms have approached the implementation of IN parameters -
primarily for efficiency purposes rather than improved expressiveness.

Admittedly, extending the applicability of IN parameters in isolation
doesn't have an enormous impact - I see it more as removing a niggling
inconsistency for very little implementation cost (as detailed a few weeks
ago).

However, I see the real usefulness of IN parameters as part of a bigger
picture. (Before reading on - note that I am *NOT* not proposing that
Component Pascal should introduce these ideas)

One of the most common errors for new programmers (and not-so-new
programmers!) using Pascal-heritage languages is to pass a parameter by
value when it should have been passed by reference:

e.g.

PROCEDURE Double(i: INTEGER);
BEGIN
  i := i * 2
END Double;

(This example is perhaps too trivial - in the real world the prcoedure would
be much more complex and the mistake more easily overlooked)

I have long believed that the potential for error is increased because
passing parameters by value is the *default* behaviour. The programmer does
not have to make the mistake of *choosing* the wrong keyword - all that is
needed is for him to *forget* to use the keyword VAR.

Introducing IN parameters only partially helps. A more radical step would be
to eliminate value parameters altogether. Just have IN, OUT and VAR (or
INOUT). If you wanted to emulate a value parameter you would pass it as an
IN parameter and assign it to a locally declared variable. (That would be a
good argument to make all IN parameters equivalent to 'read-only VAR'
parameters otherwise you would be copying twice).

As far as I know, this is exactly how parameters are handled in Ada.

If it was too controversial to eliminate value parameters altogether then
the next best thing would be to require a keyword to introduce value
parameters (LOCAL say?) then at least the programmer would have to make a
deliberate choice.

If you are interested in alternative arguments, there was previously a
similar discussion about IN and OUT parameters in the topic "Using variable
parameters for efficiency" started in the usenet newsgroup comp.lang.oberon
on 4 Oct 2004. (Google Groups and you will find it). Actually I argued
against their introduction into Oberon (with the associated removal of value
parameters) in that discussion as it would have meant significant breaking
changes to the majority of existing Oberon programs. The same applies to the
introduction of such modifications to Component Pascal which is why I do not
think that it is a reasonable expectation.

> P.S. Sorry, oh really sorry for bad English, I have not
> enough words for serious discussions.
>

I'm also sorry if I have misinterpreted some of your comments - I did have a
little difficulty fully understanding some of the things you were trying to
say - but nothing too major I hope!

Regards,
Chris Burrows

CFB Software
http://www.cfbsoftware.com/cp
 


----
To unsubscribe, send a message with body "SIGNOFF BLACKBOX" to LISTSERV{([at]})nowhere.xy----boundary-LibPST-iamunique-1278319216_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwICA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t
XHBhcg0KPiBGcm9tOiBCbGFja0JveCBbbWFpbHRvOkJMQUNLQk9YQExJU1RTLk9CRVJPTi5DSF0g
T24gQmVoYWxmIE9mIFxwYXINCj4gT2xlZyBOLiBDaGVyXHBhcg0KPiBTZW50OiBUdWVzZGF5LCAx
OSBGZWJydWFyeSAyMDA4IDc6NTUgUE1ccGFyDQo+IFRvOiBCTEFDS0JPWEBMSVNUUy5PQkVST04u
Q0hccGFyDQo+IFN1YmplY3Q6IFtCTEFDS0JPWF0gUmVhZC1vbmx5IElOIHBhcmFtZXRlcnMgZm9y
IGFsbCBkYXRhIFxwYXINCj4gdHlwZXMgKFdhczogTW9iaWxlLWRldmljZSBkZXZlbG9wbWVudClc
cGFyDQo+IFxwYXINCj4gXHBhcg0KPiBVc2luZyBJTiBwYXJhbWV0ZXJzIGZvciBhbGwgZGF0YSB0
eXBlcyBpcyBhICJrYXRhbmEiLFxwYXINCj4gKHNoYXJwLWFsbC1zaWRlcyBibGFkZSkuXHBhcg0K
XHBhcg0KV2hhdCB3ZSB3b3VsZCBjYWxsIGEgJ2RvdWJsZS1lZGdlZCBzd29yZCcgLSBidXQgSSBk
b24ndCBhZ3JlZS5ccGFyDQpccGFyDQo+IEF0IHJlYXNvbmFibGUgbm90IGV4Y2Vzc2l2ZSB1c2Ug
aXQgd2VsbCBhbHNvIGhhcyBwbHVzZXM6XHBhcg0KPiBccGFyDQo+IC0gQSBwcm9ncmFtbWVyIHNl
ZXMgd2l0aCB0aGUgZmlyc3Qgc2lnaHQgYXQgaGVhZGluZ1xwYXINCj4gICBvZiBwcm9jZWR1cmUs
IHdoYXQgYXJndW1lbnRzIGFyZSBjb25zdGFudGx5LiAoKylccGFyDQo+IFxwYXINClxwYXINClll
cy4gVGhhdCBpcyB3aGF0IEkgbGlrZSBhYm91dCB0aGVtLlxwYXINClxwYXINCj4gLSBQYXJhbWV0
ZXJzIElOIGNhbiBiZSB1c2VkIGZvciBidWlsZGluZyBvZiBtb3JlXHBhcg0KPiAgIG9wdGltYWwg
bWFjaGluZSBjb2RlLCBpbiBzb21lIGNhc2VzLiAoKylccGFyDQo+IFxwYXINClxwYXINClllcy4g
UGFydGljdWxhcmx5IHNvIGZvciBsYXJnZSBhcnJheXMgYW5kIHJlY29yZHMuIEl0IG1lYW5zIHRo
YXQgdGhlXHBhcg0KcHJvZ3JhbW1lciBkb2VzIG5vdCBoYXZlIHRvIHJlc29ydCB0byB0aGUgJ2ts
dWRnZScgb2YgcGFzc2luZyBzdWNoIGxhcmdlXHBhcg0KcmVhZC1vbmx5IHBhcmFtZXRlcnMgYXMg
VkFScyBqdXN0IGZvciByZWFzb25zIG9mIGVmZmljaWVuY3kuIFRoaXMgZHViaW91c1xwYXINCnBy
YWN0aWNlIGhhcyB0aGUgYXNzb2NpYXRlZCByZWFsIHJpc2sgdGhhdCB0aGUgcGFyYW1ldGVycyBj
b3VsZCBiZVxwYXINCmluYWR2ZXJ0ZW50bHkgbW9kaWZpZWQuXHBhcg0KXHBhcg0KPiBBbmQgbWlu
dXNlczpccGFyDQo+IFxwYXINCj4gLSBIb3dldmVyIHRoaXMgb3Bwb3J0dW5pdHkgaXMgbm90IGZv
ciBpbXByb3ZlbWVudFxwYXINCj4gb2YgcmVjb3JkaW5nIG9mIGFsZ29yaXRobXMuIExhbmd1YWdl
IE9iZXJvbiBoYXMgdGhlIGdvb2RccGFyDQo+IG5vdGF0aW9uIHByb3ZpZGluZyB3ZWxsIGludGVs
bGlnaWJpbGl0eS4gQW5kIHVzaW5nIG9mXHBhcg0KPiBwYXJhbWV0ZXJzIElOIGlzIGEgZmlyc3Qg
c3RlcCB0byBJTkxJTkUsICNJRkRFRi8jRU5ESUZccGFyDQo+IGFuZCAjSU5DTFVERSBvZiBsYW5n
dWFnZSBDIDstKSAuIEJlY2F1c2UgdGhpcyBJTiBzYXlzXHBhcg0KPiB0byBjb21waWxlciBIT1cg
dG8gbWFrZSBtb3JlIHRoZSBiZXN0IG9wdGltaXphdGlvbi4gQnV0XHBhcg0KPiBub3QgV0hBVCBw
cm9ncmFtbWVyIGNhbiBzYXkgYWJvdXQgcmVjb3JkaW5nIGFsZ29yaXRobXMuICgtKVxwYXINCj5c
cGFyDQpccGFyDQpMYW5ndWFnZSBmZWF0dXJlcyB0aGF0IGdpdmUgb3B0aW1pc2F0aW9uIGhpbnRz
IHRvIHRoZSBjb21waWxlciBhcmUgbm90IGEgbmV3XHBhcg0KY29uY2VwdCBpbiBPYmVyb24uIGUu
Zy4gSU5DIGFuZCBERUMsIEZPUiBsb29wcyAocGFydGlhbGx5IHNvIC0gbm90IHRvIHRoZVxwYXIN
CnNhbWUgZXh0ZW50IGFzIGluIFBhc2NhbCB0aG91Z2gpLCBldGMuXHBhcg0KXHBhcg0KPiBccGFy
DQo+IC0gSXQncyB1bnN0YW5kYXJ0aXplZCBPYmVyb24tZmVhdHVyZS4gKC0pXHBhcg0KPiBccGFy
DQpccGFyDQpUaGUgcHJlY2VkZW50IGhhcyBhbHJlYWR5IGJlZW4gc2V0IC0gQ29tcG9uZW50IFBh
c2NhbCBpcyBub3Qgc3RhbmRhcmRccGFyDQpPYmVyb24uICBccGFyDQpccGFyDQo+IC0gSGVyZSB0
aGUgY29tcGlsZXIgY2FuIHVuZGVyc3RhbmQsIHRoYXQgcGFyYW1ldGVyIElOXHBhcg0KPiBkb2Vz
IG5vdCBjaGFuZ2UgYW55d2hlcmUgKGF0IHNlY29uZCBwYXNzIGluIG1vbWVudCBvZlxwYXINCj4g
Y29tcGlsaW5nLiBNb3JlIGRpZmZpY3VsdGx5IGlmIGNvbXBpbGVyIGlzIG9uZS1wYXNzZWQpLlxw
YXINCj4gU28gdGhlIG9idmlvdXMgaW5kaWNhdGlvbiBvZiBJTiBmcm9tIHRoZSBnaXZlbiBwb2lu
dFxwYXINCj4gb2YgdmlldyBpcyBleGNlc3NpdmUuICgtKVxwYXINCj4gXHBhcg0KXHBhcg0KSXQg
aXMgbm8gbW9yZSBkaWZmaWN1bHQgaW4gYSBvbmUtcGFzcyBDb21wb25lbnQgUGFzY2FsIGNvbXBp
bGVyIGFzIGFsbCBpdGVtc1xwYXINCmhhdmUgdG8gYmUgZGVjbGFyZWQgYmVmb3JlIGJlaW5nIHVz
ZWQgYXMgYSBmb3JtYWwgcGFyYW1ldGVyLlxwYXINClxwYXINCj4gSSB3YW50IHRvIHNheSB3aGF0
LiBXaGVuIHRoZSBwcm9ncmFtbWVyIGRlc2NyaWJlc1xwYXINCj4gdGhlIGRlY2lzaW9uIGEgdGFz
a3MgLSBpdCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgZm9yIGhpbVxwYXINCj4gV0hBVCBpcyBkb25l
LCBpbnN0ZWFkIG9mIEhPVy4gQW5kIHNvIElOIGhlcmUgaXMgYW5ccGFyDQo+IGluZGljYXRpb24g
dG8gdGhlIGNvbXBpbGVyIEhPVyBtb3JlIGVmZmVjdGl2ZWx5IHRvIGdlbmVyYXRlXHBhcg0KPiBh
IGNvZGUgaW5zdGVhZCBvZiBXSEFUIHByb2dyYW1tZXIgd2FudGVkIHRvIHNheSBhYm91dCBhblxw
YXINCj4gYWxnb3JpdGhtIG9mIHByb2dyYW0uXHBhcg0KPiBccGFyDQpccGFyDQpUaGF0IGlzIGhv
dyBPbXMgaGF2ZSBhcHByb2FjaGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBJTiBwYXJhbWV0ZXJz
IC1ccGFyDQpwcmltYXJpbHkgZm9yIGVmZmljaWVuY3kgcHVycG9zZXMgcmF0aGVyIHRoYW4gaW1w
cm92ZWQgZXhwcmVzc2l2ZW5lc3MuIFxwYXINClxwYXINCkFkbWl0dGVkbHksIGV4dGVuZGluZyB0
aGUgYXBwbGljYWJpbGl0eSBvZiBJTiBwYXJhbWV0ZXJzIGluIGlzb2xhdGlvblxwYXINCmRvZXNu
J3QgaGF2ZSBhbiBlbm9ybW91cyBpbXBhY3QgLSBJIHNlZSBpdCBtb3JlIGFzIHJlbW92aW5nIGEg
bmlnZ2xpbmdccGFyDQppbmNvbnNpc3RlbmN5IGZvciB2ZXJ5IGxpdHRsZSBpbXBsZW1lbnRhdGlv
biBjb3N0IChhcyBkZXRhaWxlZCBhIGZldyB3ZWVrc1xwYXINCmFnbykuXHBhcg0KXHBhcg0KSG93
ZXZlciwgSSBzZWUgdGhlIHJlYWwgdXNlZnVsbmVzcyBvZiBJTiBwYXJhbWV0ZXJzIGFzIHBhcnQg
b2YgYSBiaWdnZXJccGFyDQpwaWN0dXJlLiAoQmVmb3JlIHJlYWRpbmcgb24gLSBub3RlIHRoYXQg
SSBhbSAqTk9UKiBub3QgcHJvcG9zaW5nIHRoYXRccGFyDQpDb21wb25lbnQgUGFzY2FsIHNob3Vs
ZCBpbnRyb2R1Y2UgdGhlc2UgaWRlYXMpXHBhcg0KXHBhcg0KT25lIG9mIHRoZSBtb3N0IGNvbW1v
biBlcnJvcnMgZm9yIG5ldyBwcm9ncmFtbWVycyAoYW5kIG5vdC1zby1uZXdccGFyDQpwcm9ncmFt
bWVycyEpIHVzaW5nIFBhc2NhbC1oZXJpdGFnZSBsYW5ndWFnZXMgaXMgdG8gcGFzcyBhIHBhcmFt
ZXRlciBieVxwYXINCnZhbHVlIHdoZW4gaXQgc2hvdWxkIGhhdmUgYmVlbiBwYXNzZWQgYnkgcmVm
ZXJlbmNlOlxwYXINClxwYXINCmUuZy5ccGFyDQpccGFyDQpQUk9DRURVUkUgRG91YmxlKGk6IElO
VEVHRVIpO1xwYXINCkJFR0lOXHBhcg0KICBpIDo9IGkgKiAyXHBhcg0KRU5EIERvdWJsZTtccGFy
DQpccGFyDQooVGhpcyBleGFtcGxlIGlzIHBlcmhhcHMgdG9vIHRyaXZpYWwgLSBpbiB0aGUgcmVh
bCB3b3JsZCB0aGUgcHJjb2VkdXJlIHdvdWxkXHBhcg0KYmUgbXVjaCBtb3JlIGNvbXBsZXggYW5k
IHRoZSBtaXN0YWtlIG1vcmUgZWFzaWx5IG92ZXJsb29rZWQpXHBhcg0KXHBhcg0KSSBoYXZlIGxv
bmcgYmVsaWV2ZWQgdGhhdCB0aGUgcG90ZW50aWFsIGZvciBlcnJvciBpcyBpbmNyZWFzZWQgYmVj
YXVzZVxwYXINCnBhc3NpbmcgcGFyYW1ldGVycyBieSB2YWx1ZSBpcyB0aGUgKmRlZmF1bHQqIGJl
aGF2aW91ci4gVGhlIHByb2dyYW1tZXIgZG9lc1xwYXINCm5vdCBoYXZlIHRvIG1ha2UgdGhlIG1p
c3Rha2Ugb2YgKmNob29zaW5nKiB0aGUgd3Jvbmcga2V5d29yZCAtIGFsbCB0aGF0IGlzXHBhcg0K
bmVlZGVkIGlzIGZvciBoaW0gdG8gKmZvcmdldCogdG8gdXNlIHRoZSBrZXl3b3JkIFZBUi5ccGFy
DQpccGFyDQpJbnRyb2R1Y2luZyBJTiBwYXJhbWV0ZXJzIG9ubHkgcGFydGlhbGx5IGhlbHBzLiBB
IG1vcmUgcmFkaWNhbCBzdGVwIHdvdWxkIGJlXHBhcg0KdG8gZWxpbWluYXRlIHZhbHVlIHBhcmFt
ZXRlcnMgYWx0b2dldGhlci4gSnVzdCBoYXZlIElOLCBPVVQgYW5kIFZBUiAob3JccGFyDQpJTk9V
VCkuIElmIHlvdSB3YW50ZWQgdG8gZW11bGF0ZSBhIHZhbHVlIHBhcmFtZXRlciB5b3Ugd291bGQg
cGFzcyBpdCBhcyBhblxwYXINCklOIHBhcmFtZXRlciBhbmQgYXNzaWduIGl0IHRvIGEgbG9jYWxs
eSBkZWNsYXJlZCB2YXJpYWJsZS4gKFRoYXQgd291bGQgYmUgYVxwYXINCmdvb2QgYXJndW1lbnQg
dG8gbWFrZSBhbGwgSU4gcGFyYW1ldGVycyBlcXVpdmFsZW50IHRvICdyZWFkLW9ubHkgVkFSJ1xw
YXINCnBhcmFtZXRlcnMgb3RoZXJ3aXNlIHlvdSB3b3VsZCBiZSBjb3B5aW5nIHR3aWNlKS5ccGFy
DQpccGFyDQpBcyBmYXIgYXMgSSBrbm93LCB0aGlzIGlzIGV4YWN0bHkgaG93IHBhcmFtZXRlcnMg
YXJlIGhhbmRsZWQgaW4gQWRhLlxwYXINClxwYXINCklmIGl0IHdhcyB0b28gY29udHJvdmVyc2lh
bCB0byBlbGltaW5hdGUgdmFsdWUgcGFyYW1ldGVycyBhbHRvZ2V0aGVyIHRoZW5ccGFyDQp0aGUg
bmV4dCBiZXN0IHRoaW5nIHdvdWxkIGJlIHRvIHJlcXVpcmUgYSBrZXl3b3JkIHRvIGludHJvZHVj
ZSB2YWx1ZVxwYXINCnBhcmFtZXRlcnMgKExPQ0FMIHNheT8pIHRoZW4gYXQgbGVhc3QgdGhlIHBy
b2dyYW1tZXIgd291bGQgaGF2ZSB0byBtYWtlIGFccGFyDQpkZWxpYmVyYXRlIGNob2ljZS5ccGFy
DQpccGFyDQpJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gYWx0ZXJuYXRpdmUgYXJndW1lbnRzLCB0
aGVyZSB3YXMgcHJldmlvdXNseSBhXHBhcg0Kc2ltaWxhciBkaXNjdXNzaW9uIGFib3V0IElOIGFu
ZCBPVVQgcGFyYW1ldGVycyBpbiB0aGUgdG9waWMgIlVzaW5nIHZhcmlhYmxlXHBhcg0KcGFyYW1l
dGVycyBmb3IgZWZmaWNpZW5jeSIgc3RhcnRlZCBpbiB0aGUgdXNlbmV0IG5ld3Nncm91cCBjb21w
Lmxhbmcub2Jlcm9uXHBhcg0Kb24gNCBPY3QgMjAwNC4gKEdvb2dsZSBHcm91cHMgYW5kIHlvdSB3
aWxsIGZpbmQgaXQpLiBBY3R1YWxseSBJIGFyZ3VlZFxwYXINCmFnYWluc3QgdGhlaXIgaW50cm9k
dWN0aW9uIGludG8gT2Jlcm9uICh3aXRoIHRoZSBhc3NvY2lhdGVkIHJlbW92YWwgb2YgdmFsdWVc
cGFyDQpwYXJhbWV0ZXJzKSBpbiB0aGF0IGRpc2N1c3Npb24gYXMgaXQgd291bGQgaGF2ZSBtZWFu
dCBzaWduaWZpY2FudCBicmVha2luZ1xwYXINCmNoYW5nZXMgdG8gdGhlIG1ham9yaXR5IG9mIGV4
aXN0aW5nIE9iZXJvbiBwcm9ncmFtcy4gVGhlIHNhbWUgYXBwbGllcyB0byB0aGVccGFyDQppbnRy
b2R1Y3Rpb24gb2Ygc3VjaCBtb2RpZmljYXRpb25zIHRvIENvbXBvbmVudCBQYXNjYWwgd2hpY2gg
aXMgd2h5IEkgZG8gbm90XHBhcg0KdGhpbmsgdGhhdCBpdCBpcyBhIHJlYXNvbmFibGUgZXhwZWN0
YXRpb24uIFxwYXINClxwYXINCj4gUC5TLiBTb3JyeSwgb2ggcmVhbGx5IHNvcnJ5IGZvciBiYWQg
RW5nbGlzaCwgSSBoYXZlIG5vdFxwYXINCj4gICAgZW5vdWdoIHdvcmRzIGZvciBzZXJpb3VzIGRp
c2N1c3Npb25zLlxwYXINCj4gXHRhYiBcdGFiIFx0YWIgXHBhcg0KXHBhcg0KSSdtIGFsc28gc29y
cnkgaWYgSSBoYXZlIG1pc2ludGVycHJldGVkIHNvbWUgb2YgeW91ciBjb21tZW50cyAtIEkgZGlk
IGhhdmUgYVxwYXINCmxpdHRsZSBkaWZmaWN1bHR5IGZ1bGx5IHVuZGVyc3RhbmRpbmcgc29tZSBv
ZiB0aGUgdGhpbmdzIHlvdSB3ZXJlIHRyeWluZyB0b1xwYXINCnNheSAtIGJ1dCBub3RoaW5nIHRv
byBtYWpvciBJIGhvcGUhXHBhcg0KXHBhcg0KUmVnYXJkcyxccGFyDQpDaHJpcyBCdXJyb3dzXHBh
cg0KXHBhcg0KQ0ZCIFNvZnR3YXJlXHBhcg0KaHR0cDovL3d3dy5jZmJzb2Z0d2FyZS5jb20vY3Bc
cGFyDQogXHBhcg0KXHBhcg0KXHBhcg0KLS0tLVxwYXINClRvIHVuc3Vic2NyaWJlLCBzZW5kIGEg
bWVzc2FnZSB3aXRoIGJvZHkgIlNJR05PRkYgQkxBQ0tCT1giIHRvIExJU1RTRVJWQExJU1RTLk9C
RVJPTi5DSH19AGhlIHA=
----boundary-LibPST-iamunique-1278319216_-_---
Received on Tue Feb 19 2008 - 13:10:56 UTC

This archive was generated by hypermail 2.3.0 : Thu Sep 26 2013 - 06:31:01 UTC