You are not logged in Log in Join
You are here: Home » Members » paul » BizDev » PerlForZope

Log in
Name

Password

 
 

History for PerlForZope

??changed:
-
Perl For Zope

  What does Perl for Zope mean, both from a software perspective and 
  a contract perspective?

  Message

    The message we are sending out is that Perl is now a scripting
    language for Zope.  This does *not* mean that any of Zope will be
    rewritten in Perl, nor does it mean that Zope "products" (read:
    components) can be created in Perl.  To a certain extent, existing
    Perl code can be integrated into Zope.

  Software

    The following is a discussion of software requirements.  Each
    bullet is preceded with a number that rates the requirement ('1'
    is high, '3' is low).

      o (1) Concurrency.  Stuff in Perl should be at least as
      concurrent as stuff in Python.

      o (1) [External Method]s.  ExternalMethods in Zope are functions
        in a file on disk that are bound to an object in Zope
        (e.g. a Folder) as a method.  

        Note -- these files on disk are often confused with modules.
          This mistake is reasonable and easy to make.

        Thus, a Perl external method would need to
        include the namespace of "self" from the object it is bound to.
        Python external methods work outside the security machinery.

        Note -- It isn't necessary to have new kinds of
          addable objects. It should be possible to simply
          add an external method and have it be a perl method 
          by virtue of being in a perl module, identified
          by a '.pl' suffix.

      o (1) No memory leaks.

      o (1) Perl Methods.  Our forthcoming Python Methods (PyM) have
      their code stored in the object database.  Importantly, they
      obey the same security machinery used by the 'expr' in DTML.  It
      is possible that PyM will have knobs for dialing up/down the
      security.  Thus, Perl Methods (PerlM) will be stored in the
      object database and must obey the same security machinery. They
      are attached to folder or ZClass.

      o (1) The cache works, meaning methods in Perl can be
      activated/deactivated.  PerlM or Perl EM objects can get
      deactivated by the cache manager.  When the are re-activated,
      they are re-evaluated.

      o (1) Works with acquisition.  All Perl methods should work with
        the concept of acquisition, where the attributes of parents in
        your path appear to be attributes of you.

        Jim -- 
        This should fall out of having access to the "self" namespace.


      o (2) Perl methods attached to Python products.  For Zope
      Products written in Python, it would be useful to attach methods
      written in Perl.

      o (2) The transaction machinery works, meaning exceptions in
            Perl roll back transactions.

         Jim -- Whoa!
           This could mean a number of things.

           A simple interpretation is that exceptions are 
           propigated. Is that what you mean?
 
         Exceptions in perl are propigated to Python exceptions.

         Jim --
           A much more difficult interpretation is that perl data
           are handled in a transactional fashion. We may identify this
           as a need, but it might be really hard.

           I don't think that this is what you mean though.


      o (2) Works with ZPublisher's method invocation.  The ORB sniffs
        at method signatures, and automatically gets those required
        arguments out of the request.  The ORB then calls the method,
        passing in the arguments and raising an exception if something
        is missing.

        In the case of external methods, the external method wrappers
        inspect the published methods and create the meta-data needed
        by the ORB.

        It isn't necessary that the ORB be able to inspect the perl
        objects directly. It is adequate that the wrapper object, 
        the ExternalMethod, inspect the perl object and make
        the necessary data available to the ORB.

      o (3) Set/get state from within Perl.  What happens when a Perl
        EM decides to create an attribute on 'self'?

        It depends on whether the attribute being set is a simple
        object such as a string or a number or an array of simple objects, 
        or a complex perl object.  If the object being set is a simple
        object, then we should simply convert it to a Python object and
        save it. When we save it, we will do a Python setattr and
        the persistence machinery will have an effect.

        Setting complex perl objects is outside the scope of perl
        scripting.

      o (3) Works with ZEO, meaning a Perl object's state can be sent
        over the wire to a storage server.

        Jim --
        I thought we weren't defining perl objects. I thought we
        were simply defining perl methods for Python objects.

  Contract

    What, beyond software specifications, are the other deliverables
    under the contract?

      o 

    Jim -- 
    Deliverables for whom?

  Questions

    o Digital Creations and Perl.  What if we suddenly get a clamoring
      from customers that say, "OK, _now_ I love Zope, do my web app in
      Perl"?

      Jim --
        We tell them to pound sand. :)

        Seriously, if it is simply a matter of expressing their 
        business logic in perl, we do it.  Perl isn't that hard
        to figure out.  Or, if necessary, we hire someone.

    o DBI.  Will the result of this allow Perl's great support for
      relational databases to be leveraged in Zope?  If so, what are the
      cases where someone would not want to do this (e.g., is there an
      unacceptible performance/load hit)?

      Jim --
        I suppose that this is possible.

        I don't know what the performance implications would be.

        I'd rather see someone do a decent job of DBI for Python.

        Or, for that matter, I'd be happy to see someone do a decent job
        of database support for Zope.  I'm not convinced that DC
        shouldn't do this.  Obviously, we shouldn't do this if we aren't
        willing to spend a bunch of resources on it.  Of course, if
        someone could convince Active State that it is in their interest to
        maintain DBI for Python in the long haul, without DC money, then
        that would be much better.