You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@perl.apache.org by Adam Kennedy <ad...@phase-n.com> on 2005/01/09 13:14:52 UTC

Multi-API Incompatible with PPI

Now I'm back up and running again, here an additional item for the 
namespace debate I didn't have the chance to cover properly earlier.

PPI.pm is the new, shiny and soon-to-be-released (heading into beta now) 
pure-perl perl parser. It is Parse::Perl at long last. It's also my baby.

Because it is able to parse perl without executing, and without needing 
to see anything outside of the one file or string of code, it removes 
all the previous problems with "parsing" perl source code, and the 
subsequent risk of corruption or security issues, and so it is also 
quite likely to end up as the pillar on which a whole new generation of 
perl tools will stand.

This will include things like CPANXR, the CPAN Cross Reference, 
Perl::Backport, a variety of diff-related tools, structural analysis and 
code metrics tools, and (hopefully) refactoring tools like a perl 
equivalent of the IntelliJ IDEA editor.

Now the problem with multi-API situations is likely to be that under 
normal situations, if some PPI-based software encounters 
Apache::Something->method it would normally interpret it as a method 
call in the "most current" version of the Apache::Something API.

The only alternative to this (for things like code editors) might be to 
check the API of the version currently installed on disk, but again this 
won't apply for things that work with CPAN as a whole, such as CPANXR.

Because PPI is purely syntax-based, and parses in a way that completely 
ignores the perl environment, it will have no idea if Apache::Foo->bar 
is meant for the new "current" API or the old "current" API.

If I had to speculate as how to make it handle it, it might mean the 
addition of some sort of hacky workaround that is mod_perl-specific or 
an Apache-specific version of PPI... and we are back in "workaround 
hell" again.

In fact, you wouldn't have to modify PPI itself, as the syntax is still 
valid, but it would mean adding mod_perl-specific stuff to everything 
built on top of PPI that needs to "resolve" a class or method.

This example is the one I had foremost in my mind earlier when I was 
talking about the problem with workarounds, where you have to keep 
adding more and more as you encounter additional things you hadn't 
predicted in advance. (and in this case didn't exist until a year ago).

But I'm sure there are others that I haven't yet thought of.

Adam

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: Multi-API Incompatible with PPI

Posted by Adam Kennedy <ad...@phase-n.com>.
Yep, they would.

Unless the structural indexer was capable of understanding that...

But in general, yes.

Adam

Eric Cholet wrote:
> Le 9 janv. 05, à 13:14, Adam Kennedy a écrit :
> 
> [...]
> 
>> Now the problem with multi-API situations is likely to be that under 
>> normal situations, if some PPI-based software encounters 
>> Apache::Something->method it would normally interpret it as a method 
>> call in the "most current" version of the Apache::Something API.
> 
> 
> Who knows, maybe I've done
> 
>   *Apache::Something::method = sub { ... };
> 
> and then all bets are off, modperl or no modperl.
> 
> -- 
> Eric Cholet

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: Multi-API Incompatible with PPI

Posted by Eric Cholet <ch...@logilune.com>.
Le 9 janv. 05, à 13:14, Adam Kennedy a écrit :

[...]
> Now the problem with multi-API situations is likely to be that under 
> normal situations, if some PPI-based software encounters 
> Apache::Something->method it would normally interpret it as a method 
> call in the "most current" version of the Apache::Something API.

Who knows, maybe I've done

   *Apache::Something::method = sub { ... };

and then all bets are off, modperl or no modperl.

--
Eric Cholet


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org