Re: RFC: Logging used Perl Modules (was Re: API Design Question)

2001-07-10 Thread James G Smith

Doug MacEachern <[EMAIL PROTECTED]> wrote:
>On Tue, 3 Jul 2001, James G Smith wrote:
> 
>> The current code I have uses %INC, but I wanted to write
>> something like the following:
>> 
>> sub use : immediate {
>>   # do stuff here if logging
>>   return CORE::use(@_);
>> }
>
>you could just override CORE::GLOBAL::require.  you don't need to
>override the import, and your version of require will be called at the
>same time as the 'use'. 

Thanks!  I will see what I can do with that.
-- 
James Smith <[EMAIL PROTECTED]>, 979-862-3725
Texas A&M CIS Operating Systems Group, Unix



Re: RFC: Logging used Perl Modules (was Re: API Design Question)

2001-07-09 Thread Doug MacEachern

On Tue, 3 Jul 2001, James G Smith wrote:
 
> The current code I have uses %INC, but I wanted to write
> something like the following:
> 
> sub use : immediate {
>   # do stuff here if logging
>   return CORE::use(@_);
> }

you could just override CORE::GLOBAL::require.  you don't need to
override the import, and your version of require will be called at the
same time as the 'use'. 




Re: RFC: Logging used Perl Modules

2001-07-03 Thread James G Smith

darren chamberlain <[EMAIL PROTECTED]> wrote:
>James G Smith <[EMAIL PROTECTED]> said something to this effect on 07/03/2001:
>> sub use : immediate {
>>   # do stuff here if logging
>>   return CORE::use(@_);
>> }
>
>To go OT here, what would 'immediate' be doing here, if Perl
>supported it?

It would be run at compile time when the compiler ran into it 
instead of waiting for run-time.  Basically, the following 
invocations of &foo and &bar would be equivalent.  The 
`immediate' modifier could wrap an implicit BEGIN { } around any 
invocation of the subroutine.

sub bar { do something; }

sub foo : immediate {
  bar(@_);
}

foo($a, $b);

BEGIN {
  bar($a, $b);
}

This is used in FORTH to support such things as if-then-else and 
do-while constructs since they are just entries in the dictionary 
like any other definition.  FORTH actually uses it to build up 
the entire language since there are no reserved words.
-- 
James Smith <[EMAIL PROTECTED]>, 979-862-3725
Texas A&M CIS Operating Systems Group, Unix



Re: RFC: Logging used Perl Modules (was Re: API Design Question)

2001-07-03 Thread Robin Berjon

On Tuesday 03 July 2001 16:46, darren chamberlain wrote:
> James G Smith <[EMAIL PROTECTED]> said something to this effect:
> > The current code I have uses %INC, but I wanted to write
> > something like the following:
> >
> > sub use : immediate {
> >   # do stuff here if logging
> >   return CORE::use(@_);
> > }
>
> To go OT here, what would 'immediate' be doing here, if Perl
> supported it?

It would run, well, immediately :) C is run before the rest of the code 
(apart from BEGIN blocks) which is why one can't overload it (now) iirc.

-- 
___
Robin Berjon <[EMAIL PROTECTED]> -- CTO
k n o w s c a p e : // venture knowledge agency www.knowscape.com
---
In which level of metalanguage are you now speaking?




Re: RFC: Logging used Perl Modules (was Re: API Design Question)

2001-07-03 Thread darren chamberlain

James G Smith <[EMAIL PROTECTED]> said something to this effect on 07/03/2001:
> darren chamberlain <[EMAIL PROTECTED]> wrote:
> > James G Smith <[EMAIL PROTECTED]> said something to this effect on 07/02/2001:
> > > Apache::Use
> >
> > You can get this information from %INC, can't you? e.g.:
> 
> Most definitely.  However, you lose information about which 
> modules are needed more often than others.  There's no difference 
> between all scripts needing CGI.pm and one script needing 
> Foo::Bar.  

Good point.

> We also lose timing information.  If 90% of the modules are 
> loaded into the process with the last request before the child is 
> destroyed, there's no point in loading them during the 
> configuration phase.  We can help this a little by taking 
> snapshots of %INC at regular intervals (at the end of each 
> request, for example).
> 
> The current code I have uses %INC, but I wanted to write
> something like the following:
> 
> sub use : immediate {
>   # do stuff here if logging
>   return CORE::use(@_);
> }

To go OT here, what would 'immediate' be doing here, if Perl
supported it?

(darren)

-- 
The three most dangerous things are a programmer with a soldering
iron, a manager who codes, and a user who gets ideas.



Re: RFC: Logging used Perl Modules (was Re: API Design Question)

2001-07-03 Thread James G Smith

darren chamberlain <[EMAIL PROTECTED]> wrote:
>James G Smith <[EMAIL PROTECTED]> said something to this effect on 07/02/2001:
>> How would something like this do:
>> 
>> NAME
>> 
>> Apache::Use
>> 
>> SYNOPSIS
>> 
>> use Apache::Use (Logger => DB, File => "/www/apache/logs/modules");
>> 
>> DESCRIPTION
>> 
>> Apache::Use will record the modules used over the course of the 
>> Perl interpreter's lifetime.  If the logging module is able, the 
>> old logs are read and frequently used modules are automatically 
>> loaded.  Note that no symbols are imported into packages.
>
>You can get this information from %INC, can't you? e.g.:

Most definitely.  However, you lose information about which 
modules are needed more often than others.  There's no difference 
between all scripts needing CGI.pm and one script needing 
Foo::Bar.  

We also lose timing information.  If 90% of the modules are 
loaded into the process with the last request before the child is 
destroyed, there's no point in loading them during the 
configuration phase.  We can help this a little by taking 
snapshots of %INC at regular intervals (at the end of each 
request, for example).

The current code I have uses %INC, but I wanted to write
something like the following:

sub use : immediate {
  # do stuff here if logging
  return CORE::use(@_);
}
-- 
James Smith <[EMAIL PROTECTED]>, 979-862-3725
Texas A&M CIS Operating Systems Group, Unix



Re: RFC: Logging used Perl Modules (was Re: API Design Question)

2001-07-03 Thread darren chamberlain

James G Smith <[EMAIL PROTECTED]> said something to this effect on 07/02/2001:
> How would something like this do:
> 
> NAME
> 
> Apache::Use
> 
> SYNOPSIS
> 
> use Apache::Use (Logger => DB, File => "/www/apache/logs/modules");
> 
> DESCRIPTION
> 
> Apache::Use will record the modules used over the course of the 
> Perl interpreter's lifetime.  If the logging module is able, the 
> old logs are read and frequently used modules are automatically 
> loaded.  Note that no symbols are imported into packages.

You can get this information from %INC, can't you? e.g.:

use Time::Local;
use Data::Dumper;
use Apache;

warn map sprintf("%-20.20s\t%s\n", $_, $INC{$_}), keys %INC;

Exporter.pm /usr/local/perl/5.6.0/Exporter.pm
Carp.pm /usr/local/perl/5.6.0/Carp.pm
XSLoader.pm /usr/local/perl/5.6.0/i686-linux/XSLoader.pm
mod_perl.pm /usr/local/perl/site_perl/5.6.0/i686-linux/mod_perl.pm
strict.pm   /usr/local/perl/5.6.0/strict.pm
Apache/Connection.pm/usr/local/perl/site_perl/5.6.0/i686-linux/Apache/Connection.pm
Time/Local.pm   /usr/local/perl/5.6.0/Time/Local.pm
Apache/Table.pm /usr/local/perl/site_perl/5.6.0/i686-linux/Apache/Table.pm
DynaLoader.pm   /usr/local/perl/5.6.0/i686-linux/DynaLoader.pm
overload.pm /usr/local/perl/5.6.0/overload.pm
Apache/Constants/Exp
/usr/local/perl/site_perl/5.6.0/i686-linux/Apache/Constants/Exports.pm
AutoLoader.pm   /usr/local/perl/5.6.0/AutoLoader.pm
Apache/Server.pm/usr/local/perl/site_perl/5.6.0/i686-linux/Apache/Server.pm
Data/Dumper.pm  /usr/local/perl/5.6.0/i686-linux/Data/Dumper.pm
Apache.pm   /usr/local/perl/site_perl/5.6.0/i686-linux/Apache.pm

Isn't this more or less what you mean?

(darren)

-- 
My studies in Speculative Philosophy, metaphysics, and science are all
summed up in the image of a mouse called man running in and out of every
hole in the Cosmos hunting for the Absolute Cheese.
-- Edmund Burke



RFC: Logging used Perl Modules (was Re: API Design Question)

2001-07-02 Thread James G Smith

How would something like this do:

NAME

Apache::Use

SYNOPSIS

use Apache::Use (Logger => DB, File => "/www/apache/logs/modules");

DESCRIPTION

Apache::Use will record the modules used over the course of the 
Perl interpreter's lifetime.  If the logging module is able, the 
old logs are read and frequently used modules are automatically 
loaded.  Note that no symbols are imported into packages.

---

I really wish we had `use' as a function instead of a keyword and 
had an `immediate' property for subs (kindof a Forth thing).  
Then we could do reference counting of `use' and `require'.

If the above seems reasonable, I'll try to get a 0.01 out asap.  
Passing this by the modules list for comment also.  The current 
code I have does not actually depend on Apache and mod_perl.
-- 
James Smith <[EMAIL PROTECTED]>, 979-862-3725
Texas A&M CIS Operating Systems Group, Unix