...the example was actually referring to
ancestor->PFC + descendant->PFE
>& ancestor->PFE + descendant->PFC<-------------------------Add
-versus what a PFCer may naturally associate as-
ancestor->PFC/PFE + descendant->app.
Sharon Buntz wrote:
>
> Boris,
>
> I understand your point about how descendant PBDs "have knowledge" of their
> ancestors. But what I do not understand is your and Gordon's conclusion
> that hence you cannot share PFC PBDs across multiple applications.
> Respectfully I must say - That is not an absolute truth. The truth is that
> it depends. And my opinion is that if one thinks like that (not sharing),
> then they are missing out on the glory of PB and PFC -
> REUSE.
>
> Gary said it best (see below), and I admire how he put it so succinctly. 6
> lines - Six! - oh how I'm duly impressed!!
>
> But I am here to elaborate because it is very important that PFCers
> understand that you CAN share PFC PBDs/DLLs among multiple applications -
> That is the beauty of using PB and PFC - REUSE! You change one place and
> voila all apps change to the common way. Plus you only have to have one
> copy of the PFC PBDs/DLLs on the end users machine (not to mention the
> extra overhead and headaches of separate sets of source PFC PBLs.) We have
> a dozen applications in production that share a common, single set of PFC
> PBDs/DLLs with no problems and lots of advantages.
>
> My point? Never underestimate the power of reuse.
>
> My truth? You can share PFC PBDs/DLLs among multiple applications - and it
> does behoove you to do so in my opinion - but you must follow these three
> golden rules:
>
> 1. Share your PFC/<...>/PFE PBLs as a whole [where <...> denotes any
> layers inserted in-between]. For example, you cannot have a separate set
> of PFE level PBLs for app1 and app2. Just one set of PFC PBLs
> (main/dwsrv/etc) and one set of PFE PBLs. Like this:
>
> 1-PFC main/dwsrv/etc
> 1-... " "
> 1-PFE " "
> / \
> app1 app2 <app3...app~infinity>
>
> 2. Do not "dip" below the PFE level within your PFC/<...>/PFE PBLs. That
> is, your PFC/<...>/PFE code cannot reference any application-specific
> code. Imagine a wall separating the PFC/<...>/PFE code from your
> applications like this...
>
> 1-PFC
> 1-...
> 1-PFE
> ========WALL========top code cannot refer to anything specific to an app
> / \
> app1 app2
>
> 3. Rebuild and redistribute every application anytime that you make a
> "significant change"* to your PFC/<...>/PFE PBLs.
> Note A: This is true only if PFC/<...>/PFE level source code changes.
> Note B: Remember that you need to redistribute the new app PBDs/DLLs too.
> Note C: Since app1 and app2 share the same ancestors, it only makes sense
> that both should be regenerated to take on the new common change.
> Note D: Bear in mind that this is only necessary if you make a
> "significant change" to the ancestors. That is, if you change instance
> variable declarations or function declarations in the PFC/<...>/PFE PBLs.
> And that does not happen too often.
>
> Now, granted there are a myriad of other viable approaches, each with their
> pros and cons - and everybody has their own circumstances and situations -
> especially in large corporations... But always strive for simplicity, and
> just remember the power of reuse.
>
> As an addendum to further support the above truth, I quoth the Borg from
> http://www.pfcguide.com/pfcmag/extension_page03.asp#PFE_as_a_Framework_Layer
> >>>>>>> START >>>>>>>
> PFE as a Framework Layer
>
> Using the second approach both the framework and application elements are
> included in the extension scope. The PFE layer is reserved for framework
> objects only. The application specific logic is added by inheriting from
> the PFE layer as demonstrated in Figure 9.
>
> <thumbs up> PFE and PFC pbls, pbds or dlls may be reused / shared between
> multiple applications.
> <<<<<<< END <<<<<<<
>
> I might add that I thoroughly enjoyed your PowerTimes PFC Place article
> which demonstrates how a descendant object "has knowledge" of its
> ancestor. I even recreated the experiment from scratch since the resource
> code is not yet available. You did a fine job as usual, and the experiment
> makes the black box PBVM transparently clear so a PBer can "see" how
> instance variables (and functions) are imprinted behind the scenes on the
> descendants.
>
> But I feel strongly that that one line right before the "PBVM and PFC"
> conclusion be righted. Rather than saying, "This created a web of
> dependencies between objects and makes >>PFC PBLs specific to a single
> application<<." I think that you can only say, "This created a web of
> dependencies between objects and makes >>the PFC and PFE PBLs tightly
> coupled.<<"
>
> This also applies to your slant in this thread and specifically the line
> below that says, "In PFC this may mean different compiled version of PFC
> PBDs for different applications." Although you did at least say "may"
> there <g>
>
> Lastly, in the "PBVM and PFC" article, I just wanted to point out that it
> was somewhat mind boggling since the example was actually referring to
> ancestor->PFC + descendant->PFE
> -versus what a PFCer may naturally associate as-
> ancestor->PFC/PFE + descendant->app.
> And in summary that again was the slant that I think is very misleading.
>
> Respectfully yours,
> Have fun,
> ~Sharon
> --
> Sharon Weinstrom Buntz | mailto:[EMAIL PROTECTED]
> Cheat Sheet for PFC/PB Help | http://www.pfccheatsheet.com/
>
> Boris Gasin wrote:
> >
> > Here are some details on Gordon's reply which may clear things up...
> >
> > PowerBuilder's PBLs contain both source code, something you would see when
> > you export an object and compiled p-code version of the object. PBDs only
> > contain the later. The problem most PB developers have with this issue is
> > that they think "source code" If source code is the same so is the
> > compiled p-code, right? Not exactly. This was more or less the case in
> > PB 3 and earlier versions. The objects were more independent of each
> > other, and more code was interpreted at runtime. At this version it was
> > possible to swap PBDs or to distribute the Class Library of the day in
> > PBDs. This flexibility came at a price. Performance had a lot of room for
> > improvement. Some of you may remember the recommendations to keep
> > inheritance below 3 or so levels.
> >
> > Starting in version 4.0 there were many performance related enhancements.
> > These enhancements were done by taking many tasks performed by the VM at
> > runtime and doing them upfront at compile time. For example in the case of
> > inherited object PB used to read the definition for the instantiated
> > descendant from the PBD. When it determined that the object was inherited
> > it would read the definition of the ancestor, building the event scripts,
> > resolving instance variable defaults and extended, overloaded, and
> > overridden functions at runtime. Obviously this took a while. In the
> > later PB revs the inheritance is resolved at compile time. For each object
> > in the inheritance chain PB builds an instance image, which includes the
> > definitions of all its ancestors. In other words the inheritance is
> > flattened at compile time. This instance image is stored in the PBDs and
> > PBLs. At runtime the object construction is greatly simplified. The down
> > side is that we lose the flexibility. A change in the ancestor will change
> > the compiled code of every descendant even though their source code has not
> > changed. In PFC this may mean different compiled version of PFC PBDs for
> > different applications.
> >
> > Second issue has to do with function v-tables. During a compile PB creates
> > a v-table containing the offsets to all the functions within this object.
> > PB also saves the offsets to the v-tables of the functions of other
> > related objects. The relationship could be via inheritance or association
> > (instance variables) Remember the message you get when you change the
> > object function definition? - "Changing the function arguments requires
> > that you regenerate all objects that call this function. Continue?" This
> > is another reason why you have to maintain a separate copy of PFC PBLs for
> > each application. Consider this. By changing a function definition in the
> > n_tr transaction object in the extension layer you are actually changing
> > the references to its v-table stored in the pfc_u_dw object in the PFC
> > layer! This is because pfc_u_dw has an instance variable of the n_tr type
> > and may call functions on n_tr. Even though the source code remains
> > unchanged after the n_tr change (extension layer) the compiled version of
> > the pfc_u_dw becomes unique to a specific application.
> >
> > I have recently submitted an article for the PFC Corner column of the Oct
> > 99 PowerTimes. The article discusses this in detail and goes through an
> > example demonstrating this behavior. If anyone doesn't get PowerTimes and
> > wants to see this article please email me, I'll be happy to forward it to
> > you. But to be fair to the publishers in exchange I would like to ask you
> > to plug PowerTimes at your local PB user group meeting or even going out on
> > the limb and getting a subscription! See http://www.powertimes.com/
> >
> > - boris
> >
> > At 09:10 AM 7/10/99 +0800, Gary Hyland wrote:
> > >I use the same set of PBDs for common 'Library' PBLs, ie PFC, PFE and any
> > >intermediate extension levels. If any changes are made in the common PBLs
> > >then all applications referencing them need to be recompiled. Currently
> > >have 3 apps that run like this in production. As others have stressed, you
> > >need to ensure that any application specific code is 'below' the library
> > >PBLs so it doesn't get caught up in the PFC inheritance loop.
> > >
> > >Gary Hyland
> > >
> > >-----Original Message-----
> > >From: Gordon A. Dickens, Jr. [SMTP:[EMAIL PROTECTED]]
> > >Sent: Wednesday, October 06, 1999 9:36 PM
> > >To: Vinod Adimulam; [EMAIL PROTECTED]
> > >Subject: RE: PFCSIG To use same set of pbd's.
> > >
> > >NO. The way that Powerbuilder "compiles" prohibits this from working
> > >correctly. You need to have one set per application.
> > >
> > >HTH,
> > >Gordon Dickens
> > >
> > >-----Original Message-----
> > >From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]On Behalf Of
> > >Vinod Adimulam
> > >Sent: Monday, October 04, 1999 10:27 AM
> > >To: [EMAIL PROTECTED]
> > >Subject: PFCSIG To use same set of pbd's.
> > >
> > >
> > >Hi!
> > >Can I use same set of pbds (framework PBDs) in two different applications.
> > >
> > >Regards,
> > >Vinod
> [EMAIL PROTECTED] HOSTED BY IIGG, INC. FOR HELP WITH LIST SERVE COMMANDS, ADDRESS
> A MESSAGE TO [EMAIL PROTECTED] WITH THE FOLLOWING MESSAGE: help pfcsig
> SEND ALL OTHER INQUIRES TO [EMAIL PROTECTED]