Rick McGuire wrote:
> Sorry, I am adamantly opposed to any effort to preserve that old
> behavior.  It was the cause of no end of problems, including most of
> the hacks you're now citing as instances of the problems.  At this
> point in the project, what you're proposing will be an incredibly
> disruptive change to the code base that I'm not willing to make.  If
> you are willing to put in the time and effort to come up with a patch
> that demonstrates this change, we might consider it.  It, however,
> needs to be done quickly, as I'm also not willing to delay the release
> of 4.0 to wait for it.
>   
O.K., I'll do my best, but it'll take some time for me to come even
close to be able to do that.

---rony

> On Sun, Apr 5, 2009 at 8:55 AM, Rony G. Flatscher
> <rony.flatsc...@wu-wien.ac.at> wrote:
>   
>> Hi there,
>>
>> Rick McGuire wrote:
>>
>> You have misunderstood what this thread was about.  Mike's programs
>> were unaffected, oodialog has already been reworked to remove an old
>> hacky way to get around the old behavior.  This really only becomes an
>> issue for programs that stuffed things into .local to get around how
>> ::requires used to work AND those programs are relying on the
>> information in .local persisting between RexxStart() invocations.
>>
>> In addition to the ".local-problem" there is one more possible problem: if
>> the external function library needs to be configured from the Rexx program
>> for each RexxStart(), this is in the current drop not possible! E.g. in the
>> case of BSF4Rexx the external function library gets configured by the
>> initialization/prologue code in BSF.CLS. If the "initialization"/"prologue"
>> code is not executed, then the Rexx programs cannot function correctly
>> anymore! (The same is true for UNO.CLS which adds the support to script the
>> OpenOffice.org applications, sitting on top of BSF.CLS.)
>>
>> ---
>>
>> It is impossible to say how many applications are deployed in companies
>> which invoke Rexx via RexxStart() because they use Rexx as a scripting
>> language for their applications. If they dispatch ooRexx programs that
>> deploy the requires-directive, then they may depend on the current behaviour
>> of GA-ooRexx (the behaviour has been there since the IBM Object REXX days),
>> in that after following all directives the initialization/prologue code gets
>> run, which indeed does also carry out all sort of initializations.
>>
>> In such use-cases it may not be possible to replace the requires-directive
>> with a call being the very first statement in the initialization/prologue
>> code, because it may be the case that the directives refer to public classes
>> and public routines in the required programs !
>>
>> Now, the current (pre 4.0) behaviour of files/programs/packages being
>> required via the requires-directive has been a constant cause of confusion
>> (each requires causes in the scope of that program that required public
>> classes are scoped class object instances that are not equal to the class
>> object instances of other programs having required the same package!), hence
>> coming up with a solution that truly allows a required program/package to be
>> required globally, i.e. any other requires would refer to the already
>> globally (cached) required file/package. Skimming over the current source
>> code of ooRexx 4.0 one can tell that a lot of effort has been invested in
>> this desired (and very appreciated!) behaviour available only in ooRexx 4.0.
>>
>> ---
>>
>> Thinking about this particular problem "from a distance" of a few days,
>> weeks, it seems that the real problem currently is that the new global
>> behaviour is currently set out to be the default behaviour for ooRexx 4.0!
>> This therefore may jeopardize all ooRexx programs, that have exploited the
>> "classic" requires-behaviour, needing the initialization/prologue part to be
>> run for each RexxStart().
>>
>> Hence, how about the following idea?
>>
>> Let the requires-directive behave as in all previous versions of ooRexx
>> (semantics of "context->CallProgram()"?), e.g.
>>
>> ::requires someRexxPackage.rex      /* executes as in all previous versions
>> of ooRexx */
>>
>> allow a new keyword on the requires directive that tells ooRexx 4.0 to use
>> the new behaviour (semantics of  "PackageManager::loadRequires(...)"), e.g.
>> if the new keyword is named "global" (maybe there are more meaningful
>> keywords like "cache", "loadonce", "singleton", etc.)
>>
>> ::requires someRexxPackage.rex global  /* global keyword causes the package
>> to be globally cached */
>>
>> This would allow all pre-ooRexx 4.0 programs with requires-directives to
>> execute as in the past, hence backward compatibility in this regard is
>> ensured.
>>
>> It also would allow to start to use the new (preferable) behaviour if the
>> ooRexx programmer wishes to do so (and I think, if ooRexx programmers
>> realize how great the new behaviour is, that they will eventually adopt
>> their programs to do so; there may be - probably rare - cases where this
>> would not be possible, but then that would not be a problem either as the
>> "old" behaviour is available as well). In addition, having seen the new C++
>> APIs new libraries and packages can be devised that would easily be able to
>> exploit "globally cached packages".
>>
>> HTH,
>>
>> ---rony
>>     


------------------------------------------------------------------------------
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to