in reply to Re^4: Slow evolution of Perl = Perl is a closed Word (use)
in thread Slow evolution of Perl = Perl is a closed Word

Both those mechanisms are very predicable in their effect on source code. In those cases, a pre-parse of the source code could yield information which could be easily used by the static analyzer.

Source filters are more difficult because they can have arbitrary effects on the parse of the source code. Possibly some new construct would be necessary to (at least) document the effect of a source filter on the AST.

As tye mentioned, BEGIN {} blocks (and equivalent constructs) are much more problematic, as they are truly computed at runtime. Perl is arguably much more context-sensitive than languages like C# or Java, but with a few simple heuristics a very simple static analysis could be performed.

I also don't see why it's all or nothing... the IDE could get it 99% right and could deal with parser/analyzer warnings in a flexible policy-based (or case-by-case) manner (perhaps with configuration from the user).

I'm not saying it would be easy... just possible. Interest would be the limiting factor.

-David

Replies are listed 'Best First'.
Re^6: Slow evolution of Perl = Perl is a closed Word (use)
by bart (Canon) on Sep 04, 2007 at 11:18 UTC
    No, it's not dead easy. As ysth said, you have to see what words do, prototype-wise, in other modules.

    You typically would have to know which words from that module are getting exported. There could be some system in how it's dealt with, when they're only relying on Exporter, but import is a plain class method. You can implement what it does however you like.

Re^6: Slow evolution of Perl = Perl is a closed Word (use)
by ysth (Canon) on Sep 02, 2007 at 20:44 UTC
    Both those mechanisms are very predicable in their effect on source code. In those cases, a pre-parse of the source code could yield information which could be easily used by the static analyzer.
    That would be quite a pre-parse, even for the simplest cases.

    In most cases, though, the parse-affecting statement occurs in another file, whose very location may require executing some of the perl code to determine. Or in XS.