Script Only Stack Architecture
Ali Lloyd
ali.lloyd at livecode.com
Fri Apr 1 10:34:31 EDT 2016
> It's a pain to open the object inspector and copy the behavior reference
> then use the message box to to "open script of…"
This is no longer necessary in the latest DPs of 8.0 - the behavior
property in the property inspector has an 'edit script' button.
On Fri, Apr 1, 2016 at 3:21 PM Peter M. Brigham <pmbrig at gmail.com> wrote:
> Re this discussion on behaviors and chained behaviors, would there be any
> use for a new engine-based property like "the effective scripts of
> <objRef>" that would return the script of the object and all the behavior
> scripts in its chain? Perhaps as an array, with the control references as
> keys? I don't use behaviors much, but I sometimes run into the problem of
> needing to access the behavior script of an object, when I've forgotten
> which behavior button I used. It's a pain to open the object inspector and
> copy the behavior reference then use the message box to to "open script of…"
>
> But as I say, I don't use behaviors as much as I should, perhaps. Those
> who use them a lot will be better able to chime in on how useful or
> superfluous the idea might be.
>
> -- Peter
>
> Peter M. Brigham
> pmbrig at gmail.com
> http://home.comcast.net/~pmbrig
>
>
> On Mar 31, 2016, at 3:43 PM, Richard Gaskin wrote:
>
> > Sannyasin Brahmanathaswami wrote:
> >
> > > ergo: merely opening a script-only stack that is applied as a
> > > behavior to a control (not global in scope) does *not* place
> > > into the msg path.
> >
> > Respectfully, your recipe would be easier to follow without the steps
> unrelated to the actions we're exploring (making folders and such - the
> folder locations are unrelated to the problem).
> >
> > Remember guideline #2 in my earlier post:
> >
> > 2. When using behaviors, the object containing the behavior script
> > must be in memory when anything relying on it is brought into
> > memory.
> > <http://lists.runrev.com/pipermail/use-livecode/2016-March/225274.html>
> >
> > If I'm following your recipe correctly, the field object that uses the
> behavior is in a stack that opens and then loads the stack used to define
> the behavior.
> >
> > This means that at the moment the field object is unpacked for use it
> contains a reference to a behavior object not yet in memory.
> >
> > The engine (in its current form; we can expect this to be improved later
> as time permits) will only attempt to resolve a behavior once, when the
> object dependent on the behavior is brought into memory.
> >
> > Even if you later open a stack containing the behavior script, by that
> time it's too late. The object depending on it has already been unpacked,
> the behavior reference already attempted, and having failed it will not be
> retried as other stacks are later opened.
> >
> > For the moment let's forget that in your case the stack file used as a
> behavior object is a script-only stack. The storage format doesn't affect
> anything at runtime, and may be distracting here. Let's just focus on the
> load order:
> >
> >
> > SIMPLIFIED RECIPE
> > -----------------
> > Stack "MyTestStack" has a field, which is assigned stack
> "MyBehaviorStack" as its behavior property.
> >
> > Stack "MyBehaviorStack" is a separate stack file.
> >
> >
> > POSSIBLE SOLUTIONS
> > ------------------
> > Options for correct behavior esolution when "MyTestStack" is loaded
> include:
> >
> >
> > a) Open "MyBehaviorStack" first.
> > -----------------------------
> > In an application this may mean introducing one more stack, which
> > we could call "MyBootStack", which first opens "MyBehaviorStack"
> > and then opens "MyTestStack".
> >
> >
> > b) Load "MyBehaviorStack" into memory without opening it.
> > ------------------------------------------------------
> > This can be done by accessing a property of "MyBehaviorStack",
> > such as the stack's name. This still requires "MyBootStack"
> > to make sure that "MyBehaviorStack" is in memory before
> > "MyTestStack" is opened, but has the minor convenience of
> > not being visible to the user and triggers no opening messages.
> >
> >
> > c) Include "MyBehaviorStack" in the stackFiles prop of "MyTestStack".
> > -----------------------------------------------------------------
> > Any stack files specified in the stackFiles property of a stack
> > are loaded into memory at the same time the stack containing that
> > list is loaded. In terms of boot sequence it's functionally
> > similar to having those separate stack files as substacks, but
> > with the advantage of keeping them separate.
> >
> >
> > a) and b) conform to Guideline #2 above in an obvious way, explicitly
> putting "MyBehaviorStack" into memory before "MyTestStack" will be opened
> to need it.
> >
> > c) works because stack files listed in the stackFiles property are all
> loaded with the stack listing them, before behavior resolution takes place.
> >
> >
> > This seems harder than it is in part because you're super smart and are
> just thinking too hard. :)
> >
> > Relax. Put script-only stuff out of your mind, and just think about the
> load order.
> >
> > Behaviors are among the most powerful things ever introduced in the
> xTalk family of languages. I waited literally 20 years for them, since
> Allegiant first accepted my proposal for parentScripts but then went
> belly-up before they could implement it. Well worth even that wait: they
> greatly simplify so many aspects of building complex systems, and simple
> systems become simpler.
> >
> > The load order rule (Guideline #2 above) in LC is a bit funkier than
> we'd hope for, but even that's not hard to accommodate once we understand
> it.
> >
> > Pick a, b, or c, to handle the load order, and the world is your oyster.
> >
> > --
> > Richard Gaskin
> > Fourth World Systems
> > Software Design and Development for the Desktop, Mobile, and the Web
> > ____________________________________________________________________
> > Ambassador at FourthWorld.com http://www.FourthWorld.com
> >
> >
> > _______________________________________________
> > use-livecode mailing list
> > use-livecode at lists.runrev.com
> > Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> > http://lists.runrev.com/mailman/listinfo/use-livecode
>
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
>
More information about the use-livecode
mailing list