[ https://bro-tracker.atlassian.net/browse/BIT-327?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jon Siwek updated BIT-327: -------------------------- Fix Version/s: (was: 2.4) 2.5 > Binding attributes to values/variables > -------------------------------------- > > Key: BIT-327 > URL: https://bro-tracker.atlassian.net/browse/BIT-327 > Project: Bro Issue Tracker > Issue Type: Problem > Components: Bro > Affects Versions: git/master > Reporter: Robin Sommer > Fix For: 2.5 > > > From Vern: > In abstract terms, we need to marry two notions: per-variable > attributes (those introduced when defining the variable) and > per-value attributes (those introduced when creating a value). > These both exist under-the-hood, but the rules for propagating > them are ad hoc. > I'm attaching the follow-up email thread with further thoughts on > streamlining this. > Robin > [^"None"] > Did we ever reach resolution regarding the appended thread (from, um, > a year ago\!), or at least put something in the Tracker so we don't lose > sight of it? > Vern > [^"None-1"] > On Tue, Nov 03, 2009 at 17:25 \-0800, you wrote: > > In abstract terms, we need to marry two notions: per-variable attributes > > (those introduced when defining the variable) and per-value attributes > > (those introduced when creating a value). These both exist under-the-hood, > > but the rules for propagating them are ad hoc. > This is something I've wondered about a few times already what the > right thing to do is. The keyword at the moment is indeed "ad-hoc": > I remember that a number of times I've been running into problems > with propagating (or not propagating) attributes, and while I was > always able to fix the immediate problem in some way, we don't have > a clear system at the moment when that happens and when not. > That said, I'm not really sure that this should ideally look like. > Intuitively, I'd actually say attributes belong to values, not > variables, because transfer-on-assignment can lead to subtle effects > (values are passed around, and what if the receiving function > happens to assign the value to the wrong variable?. Also what if you > assign a value with attribute X to a variable without X; shouldn't > the value then be *deleted* for consistency reasons?). > If we accept for a moment that attributes belong only to values, > then we can think about how to set them. A global definition such as > const log_file = open_log_file("foo") &rotate_interval > > can be interpreted as assigning the attribute to the value returned > from the function (more generaly to whatever what the assigned > expression yields). > We can use the "add foo &raw_output" syntax you suggested for adding > attributes to the value of foo dynamically. > A declaration such as > const foo = F &redef; > > can be interpreted as "we can rebind foo if it's current value has > the &redef attribute". > I haven't thought this through actually but I guess my question is > whether we need per-variable attributes at all? > Robin > [^"None-2"] > On Nov 4, 2009, at 7:54 PM, Robin Sommer wrote: > >That said, I'm not really sure that this should ideally look like. > >Intuitively, I'd actually say attributes belong to values, not > >variables, because transfer-on-assignment can lead to subtle effects > >(values are passed around, and what if the receiving function > >happens to assign the value to the wrong variable?. Also what if you > >assign a value with attribute X to a variable without X; shouldn't > >the value then be *deleted* for consistency reasons?). > Attributes being attached to value really seems to make sense. > >If we accept for a moment that attributes belong only to values, > >then we can think about how to set them. A global definition such as > > > > const log_file = open_log_file("foo") &rotate_interval > It works in this case, but this has typically been where trouble was > encountered. What about cases where there isn't a value assigned yet? > Something like... > const bad_addrs_with_description: table[addr] of string &redef > &write_expire=10mins; > There isn't a value yet, but it has an attribute applied to it. Would that > style still be supported? It would seem to conflict with having only value > attributes. > Even for my database backed variable stuff I'm working on, it created a > stumbling block. What I'm doing internally is creating a copy of the value > including attributes to a separate internal value when a query is being run. > That value is then filled from the database and the script level variable is > rebound to my newly filled internal value and the old value is deleted. I > think that would be the right way to do it in this case even if only value > attributes exist because it's an internal detail and the new value is being > created internally, but it's certainly confusing sometimes. > bq. .Seth > [^"None-3"] > On Wed, Nov 04, 2009 at 20:26 \-0500, you wrote: > > const bad_addrs_with_description: table[addr] of string &redef > > &write_expire=10mins; > > > > There isn't a value yet, but it has an attribute applied to it. > Actually there is: it's assigned an empty table. So, yes that would > still work. > What would be different however is a later assignment (redef for > const [1]), which would ignore the &write_expire of the original > definition and instead use the attributes from the assigned value. > Robin > [1] A "=" redef, not a "+=" redef which works on the original value. > [^"None-4"] > On Nov 10, 2009, at 12:32 AM, Robin Sommer wrote: > >What would be different however is a later assignment (redef for > >const [1]), which would ignore the &write_expire of the original > >definition and instead use the attributes from the assigned value. > > > >[1] A "=" redef, not a "+=" redef which works on the original value. > Ah, ok. This is all coming together for me now. :) > Another question I have is if the change was made to allow attribute > additions and deletions at runtime, does it sort of violate the concept of > const? const seems to tie together the value and variable together and make > them unchangeable at runtime but it's a little confusing conceptually if > you're able to still change the attributes of a const at runtime. > Am I thinking about that right? > bq. .Seth > [^"None-5"] > On Fri, Nov 13, 2009 at 13:24 \-0500, you wrote: > > Another question I have is if the change was made to allow attribute > > additions and deletions at runtime, does it sort of violate the concept > > of const? > That's a good point, yes. Perhaps "const foo = xxx" should actually > mean that the value xxx gets an (internal) attribute &const so that > it's not changeable? And then assigning to a global with a current > value that has the &const attribute would be prohibited as well. > Does that make sense? > Robin -- This message was sent by Atlassian JIRA (v6.4-OD-15-055#64014) _______________________________________________ bro-dev mailing list bro-dev@bro.org http://mailman.icsi.berkeley.edu/mailman/listinfo/bro-dev