|      | 
          
          
 	    Searching XEmacs
	    
            Quick Links
            
            About XEmacs
            
            Getting XEmacs
            
            Customizing XEmacs
            
            Troubleshooting XEmacs
            
            Developing XEmacs
            
           | 
          
               | 
            | 
          
          
            
  Lisp Engine Changes
  
    Owner:  ??? 
  
    Effort:  ??? 
  
    Dependencies:  ??? 
  
    Abstract: Recently there has been a great deal of
    talk on the XEmacs mailing lists about potential changes to the
    XEmacs Lisp engine.  Usually the discussion has centered around
    the question which is better, Common Lisp or Scheme?  This is
    certainly an interesting debate topic, but it didn't seem to have
    much practical relevance to me, so I vowed to stay out of the
    discussion.  Recently, however, it seems that people are losing
    sight of the broader picture.  For example, nobody seems to be
    asking the question, "Would an
      extension language other than Lisp or Scheme (perhaps not a Lisp
      variant at all) be more appropriate?"  Nor does anybody seem
      to be
    addressing what I consider to be the most fundamental question, is
    changing the extension language a good thing to do? 
  
    I think it would be a mistake at this point in XEmacs development
    to begin any project involving fundamental changes to the Lisp
    engine or to the XEmacs Lisp language itself.  It would take a
    huge amount of effort to complete even part of this project, and
    would be a major drain on the already-insufficient resources of
    the XEmacs development community.  Most of the gains that are
    purported to stem from a project such as this could be obtained
    with far less effort by making more incremental changes to the
    XEmacs core.  I think it would be an even bigger mistake to change
    the actual XEmacs extension language (as opposed to just changing
    the Lisp engine, making few, if any, externally visible changes).
    The only language change that I could possibly imagine justifying
    would involve switching to some ubiquitous web language, such as
    Java and JavaScript, or Perl.  (Even among those, I think Java
    would be the only possibility that really makes sense). 
  
    In the rest of this document I'll present the broader issues that
    would be involved in changing the Lisp engine or extension
    language.  This should make clear why I've come to believe as I
    do. 
  Is everyone clear on the difference between interface and implementation?
  
    There seems to be a great deal of confusion concerning the
    difference between interface and implementation.  In the context
    of XEmacs, changing the interface means switching to a different
    extension language such as Common Lisp, Scheme, Java, etc.
    Changing the implementation means using a different Lisp engine.
    There is obviously some relation between these two issues, but
    there is no particular requirement that one be changed if the
    other is changed.  It is quite possible, for example, to imagine
    taking the underlying engine for any of the various Lisp dialects
    in existence, and adapting it so that it implements the same Elisp
    extension language that currently exists.  The vast majority of
    the purported benefits that we would get from changing the
    extension language could just as easily be obtained while making
    minimal changes to the external Elisp interface.  This way nearly
    all existing Elisp programs would continue to work, there would be
    no need to translate Elisp programs into some other language or to
    simultaneously support two incompatible Lisp variants, and there
    would be no need for users or package authors to learn a new
    extension language that would be just as unfamiliar to the vast
    majority of them as Elisp is. 
  Why should we change the Lisp engine?
  
    Let's go over the possible reasons for changing the Lisp
    engine. 
  
    - 
      
        Speed.  Changing the Lisp engine might make XEmacs faster.
        However, consider the following. 
      
        - 
          
            XEmacs will get faster over time without any development
            effort at all because computers will get faster.  
        - 
          
            Perhaps the biggest causes of the slowness of XEmacs are
            not related to the Lisp engine at all.  It has been
            asserted, for example, that the slowness of XEmacs is
            primarily due to the redisplay mechanism, to the handling
            of insertion and deletion of text in a buffer, to the
            event loop, etc.  Nobody has done any real studies to
            determine what the actual cause of slowness is.  
        - 
          
            Emacs 18 seems plenty fast enough to most people.
            However, Emacs 18 also had a worse Lisp engine and a worse
            byte compiler than XEmacs.  
        - 
          
            Significant speed increases in the execution of Lisp code
            could be achieved without too much effort by working on
            the existing byte code interpreter and function call
            mechanism a bit.  
        
    - 
      
        Memory usage.  A new Lisp engine with a better garbage
        collection mechanism might make more efficient use of memory;
        for example, through the use of a relocating garbage
        collector.  However, consider this: 
      
        - 
          
            A new Lisp engine would probably have a larger memory
            footprint, perhaps a significantly larger one.  
        - 
          
            The worst memory problems might not be due to Lisp object
            inefficiency at all.  The problems could simply be due
            mainly to the inefficient buffer representation.  Nobody
            has come up with any concrete numbers on where the real
            problem lies.  
        
    - 
      
        Robustness.  A new Lisp engine might well be more robust.  (On
        the other hand, it might not be.  It is not always easy to
        tell).  However, I think that the biggest problems with
        robustness are in the part of the C code that is not concerned
        with implementing the Lisp engine.  The redisplay mechanism
        and the unexec mechanism are probably the biggest sources of
        robustness problems.  I think the biggest robustness problems
        that are related to the Lisp engine concern the use of GCPRO
        declarations.  The entire GCPRO mechanism is ill-conceived and
        unsafe.  The only real way to make this safe would be to do
        conservative garbage collection over the C stack and to
        eliminate the GCPRO declarations entirely.  But how many of
        the Lisp engines that are being considered have such a
        mechanism built into them?  
    - 
      
        Maintainability.  A new Lisp engine might well improve the
        maintainability of XEmacs by offloading the maintenance of the
        Lisp engine.  However, we need to make very sure that this is,
        in fact, the case before embarking on a project like this.  We
        would almost certainly have to make significant modifications
        to any Lisp engine that we choose to integrate, and without
        the active and committed support and cooperation of the
        developers of that Lisp engine, the maintainability problem
        would actually get worse.  
    - 
      
        Features.  A new Lisp engine might have built in support for
        various features that we would like to add to the XEmacs
        extension language, such as lexical scoping and an object
        system.  
   
  Why would we want to change the extension language?
  
    Possible reasons for changing the extension language include: 
  
    - 
      
        More standard.  
      
        Switching to a language that is more standard and more
        commonly in use would be beneficial for various reasons.
        First of all, the language that is more commonly used and more
        familiar would make it easier for users to write their own
        extensions and in general, increase the acceptance of XEmacs.
        Also, an accepted standard probably has had a lot more thought
        put into it than any language interface created by the XEmacs
        developers themselves.  Furthermore, if our extension language
        is being actively developed and supported, much of the work
        that we would otherwise have to do ourselves is transferred
        elsewhere. 
      
        However, both Scheme and Common Lisp flunk the familiarity
        test.  Neither language is being actively used for program
        development outside of small research communities, and few
        prospective authors of XEmacs extensions will be familiar with
        any Lisp variant for real world uses.  (I consider the
        argument that Scheme is often used in introductory programming
        courses to be irrelevant.  Many existing programmers were
        taught Pascal in their introductory programming courses.  How
        many of them would actually be comfortable writing a program
        in Pascal?)  Furthermore, someone who wants to learn Lisp
        can't exactly go to their neighborhood bookstore and pick up a
        book on this topic.  
    - 
      
        Ease of use. 
      
        There are endless arguments about which language is easiest to
        use.  In practice, this largely boils down to which languages
        are most familiar.  
    - Object oriented.
      
        The object-oriented paradigm is the dominant one in use today
        for new languages.  User interface concepts in particular are
        expressed very naturally in an object-oriented system.
        However, neither Scheme nor Common Lisp has been designed with
        object orientation in mind.  There is a standard object system
        for Common Lisp, but it is extremely complex and difficult to
        understand.  
   
   
  Ben Wing
  
           |