This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
0's & NULLs in associative arrays
- From: Mike Mason <mmlnx at us dot ibm dot com>
- To: systemtap at sources dot redhat dot com
- Date: Thu, 04 Jan 2007 15:38:02 -0800
- Subject: 0's & NULLs in associative arrays
In the systemtap meeting this morning we discussed whether systemtap should allow 0's to be stored in array elements. Currently, storing a 0 deletes the element, which means the membership check and foreach statements can't see it. Here's what I recall from the discussion.
Some concerns were:
- might break some existing scripts
- this is the way Dtrace does it
- current implementation simplifies the API. You don't have to check if an index exists before reading it. Simplifies the implementation.
- not auto deleting 0 elements will take up more space
It was also mentioned that someone might want to increment/decrement an element value and have it auto delete when it reaches zero. No one thought this was a required behavior. This can also be done with an explicit delete.
Someone said this behavior is not documented and no one should depend on it in their scripts. However, the tutorial does say "Assigning a null value in effect deletes the element" on page 8. That's the only mention I've found.
I believe the consensus was to change the behavior such that elements are *not* deleted when set to 0, essentially removing the auto delete feature. These elements could then be seen by the membership check and foreach statements. All other behavior would remain the same (i.e, referencing nonexistent elements still returns 0).
Can anybody think of a reason not to make this change?