| 
		   
	        | 
	       
		  tools useful for A-A-P
The intention for A-A-P is to use existing tools as much as possible.  To find
out which tools can be used this overview has been compiled.
    
Some tools cannot be used directly, but function as an example or can be
invoked by A-A-P (e.g., commercial tools and programs which are not portable).
Unless noted otherwise, tools are open-source.
    
If you find a tool that would be useful for A-A-P but is not listed here, or
when information is incorrect, send a message to
Bram AT a-a-p.org.
    
Note: this list is not intended to be complete.  Information that is
irrelevant for A-A-P is omitted.
 
Script languages
     
Build
     
Install
     
Issue Tracking
     
Version control
     
Browse
     
IDEs
     
Various
  
Script languages
A script language is needed in various parts of A-A-P:
   - 
   The most important use is in the recipes.  Here the script language allows
   a recipe writer to execute various tasks, without depending on OS-specific
   tools.  Once the language has been chosen it is very important that it
   doesn't change, it would make already written recipes invalid.
   
 
   - 
   The A-A-P framework must run on many different Operating Systems.
   Implementing it in a script language that runs on many OSes avoids having
   to write system-dependent code.  This also makes it easy to support adding
   plugins.
   
 
   - 
   The automatic configuration for a specific system must be OS-independent.
   This requires an OS-independent script language.
   
 
 
Using the same script language throughout A-A-P is preferred.  This avoids
that a developer needs to learn several languages.
The most important demands for the script language:
 
   - Portable over many different Operating Systems
 
   - Stable; avoid the risk that a future version is not backwards compatible
 
   - Easy to use and understand
 
   - Includes Internet access functionality
 
   - Provides GUI functionality
 
   - Can be debugged
 
 
Overview (best candidate first):
   - Python
 
   - 
   Appears to fulfill all demands.  It's open-source, is available for all
   important Operating Systems, supports internet connections, widely used,
   and so on.
 
   Drawbacks are the way indents may cause trouble and speed (compared to
   using compiled C).
    
   - Tcl/Tk
 
   - 
   Appears to fulfill all demands.  Tk is the same GUI toolkit that's used for
   Python, but it was originally made for Tcl.
   A graphical debugger is available.  It was designed to be embedded in
   appliations.  Easy to use networking facilities.  Easy to learn.
 
   Compared to Python, TCL is weak on data structures (stores all data as
   strings) and less suited for large programs.  TCL might require writing
   specific things in C or C++.
    
   - Ruby
 
   - 
   Includes many of the "good things" from Perl.  Very modern, uses all the
   good things from older languages (e.g., smalltalk).
   Full O-O support (better than Python).  Very flexible: can add a method to
   a class at runtime.
   Supports the Tk GUI toolkit.
 
   Disadvantages: O-O features appear to be more important than practical
   use.  It's not very wide spread yet (compared to Python). 
   Unknown: How is support for internet access?
    
   - Perl
 
   - 
   A very powerful language, but Perl files tend to be rather cryptic: "Perl
   is a write-only language".  The syntax is complex: "Only Perl is able to
   parse Perl scripts".  That is a bit exaggerated though, it's possible to
   write nice Perl scripts with a bit of effort.
 
   There are several ways to use a GUI with Perl, including Perl/Tk, wxWindows
   and Qt.
    
   - Scheme
 
   - 
   Comes from the LISP world.  Not everybody likes the syntax.  Several
   incompatible versions exist.
   
 
   - Javascript
 
   - 
   Limited use outside of HTML.
   
 
   - Java
 
   - 
   Cannot be executed directly, requires a compiler.  Would be difficult to
   use in a recipe.
   
 
   - C#
 
   - 
   Cannot be executed directly, requires a compiler.  Would be difficult to
   use in a recipe.  Still very new and not widely supported.
   
 
   - Shell script
 
   - 
   Not portable, because a shell script depends on external programs.
   
 
 
There are many script languages that are not mentioned here, because they are
not widely used.
	        | 
	       
		   
	        |