micropython

README.txt

630:947aa6f5a86f
2013-01-13 Paul Boddie Added a test of the first form of B.
     1 Introduction
     2 ------------
     3 
     4 Micropython is a language environment incorporating a compiler for a
     5 simplified version of the Python programming language which targets a simple
     6 instruction set supported by a virtual machine known as RSVP (a Really Simple
     7 Virtual Processor).
     8 
     9 The RSVP instruction set is intended to map relatively closely to instructions
    10 employed by real processors, with only a few "macroinstructions" which would
    11 probably be implemented as short macros or library routines in programs
    12 translated to the instruction set of a real target processor.
    13 
    14 Prerequisites
    15 -------------
    16 
    17 Micropython uses a forked version of the compiler package originating from the
    18 Python standard library. This package should be made available to Micropython
    19 using the PYTHONPATH environment variable or copied into the distribution
    20 directory of this software. See the following locations for the code for this
    21 compiler package variant:
    22 
    23 http://hgweb.boddie.org.uk/python2.6-compiler-package-micropython/
    24 
    25 It should be sufficient to use the Python 2.6 package for systems running
    26 Python 2.5 or 2.6 since the underlying standard library does not seem to have
    27 changed significantly between these releases and the language syntax is
    28 sufficiently similar. For Python 2.7, an appropriate variant may be preferable
    29 or even required due to standard library and syntax changes in that release of
    30 the language implementation, but this has not yet been tested in any depth.
    31 
    32 Quick Start
    33 -----------
    34 
    35 Currently, the test.py program is the principal means of compiling and running
    36 code. For example, to inspect the logical.py test program (with all
    37 optimisations enabled)...
    38 
    39   python -i test.py tests/logical.py -m -omax
    40 
    41 ...will provide a number of objects which can then be inspected, notably the
    42 rm (RSVP machine) object which provides the following methods:
    43 
    44   * show - reveals the contents of the machine's memory
    45   * run  - starts execution of the code in the memory
    46   * step - steps through the code one instruction at a time
    47   * dump - shows the machine's registers
    48 
    49 To run a test and check the output, specify the -t option:
    50 
    51   python test.py tests/logical.py -t -omax
    52 
    53 To run all tests, use the test_all.py program:
    54 
    55   python test_all.py -omax
    56 
    57 Both programs support optimisations either using the -o flag immediately
    58 followed (no space or separator) by a comma-separated list of options (defined
    59 in the docs/optimisations.txt document) or by specifying -omax to apply all
    60 possible optimisations.
    61 
    62 It is generally recommended to apply all possible optimisations when
    63 generating programs as this dramatically reduces the size of the program and
    64 accompanying structures, and it also makes the code generation process
    65 substantially faster. Optimisations should not cause programs to fail: they
    66 should all always be "safe" to apply.
    67 
    68 Program Reports/Summaries
    69 -------------------------
    70 
    71 Using the test.py program, reports can be generated which should show the
    72 modules present in a given program, with each module's code annotated with
    73 scope, attribute and inferred type information. For example:
    74 
    75   python test.py tests/logical.py -omax -d logical_report
    76 
    77 This should produce a number of files in the logical_report directory.
    78 
    79   * The __main__ module, being the "main" file of any given program will
    80     always be described by the __main__.xhtml file.
    81 
    82   * Imported modules will be described by files whose names contain the module
    83     path for such modules, such as compiler.ast.xhtml (for the compiler.ast
    84     module) or sys.xhtml (for the sys module).
    85 
    86 In addition, a summary of the classes defined by each module should be
    87 generated, and these files will have a "-summary" suffix added to the basename
    88 of each module filename. For example, compiler.ast.xhtml will have a
    89 corresponding summary file called compiler.ast-summary.xhtml (summarising
    90 classes in the compiler.ast module).
    91 
    92 Roadmap
    93 -------
    94 
    95 Writing a language toolchain is a huge undertaking involving numerous
    96 activities, many of which are hastily described in the TO_DO.txt file. It is
    97 tempting to write a source code analyser and to then claim that it could be
    98 used as part of a larger system offering performance benefits in comparison to
    99 other toolchains or implementations of a language, but the feasibility of such
   100 a system should be at least demonstrated for such claims to have much
   101 credibility. If a toolchain cannot even produce working programs then any
   102 discussion of relative performance becomes academic.
   103 
   104 Thus, an attempt has been made to make a genuine compiler and virtual machine
   105 that can run and test compiled programs, hopefully modelling a sufficiently
   106 realistic architecture without any unjustified shortcuts being taken to
   107 produce the desired program behaviour. This virtual machine and the code
   108 generation activity that is needed to exercise it can be regarded as
   109 distractions from the principal merits of the software: the analysis activity
   110 that attempts to define and indicate the structure and properties of a
   111 reasonable subset of the Python language and its semantics.
   112 
   113 With limited time to spend on the project, some activities are regarded as
   114 more rewarding than others. Making a viable virtual machine or runtime
   115 environment is a demanding task in itself, as is generating machine code for
   116 real machine architectures, at least if it is to be done in an optimal
   117 fashion. Experimenting with garbage collection strategies and memory
   118 allocation are interesting projects but can also be considered as peripheral
   119 activities that can consume substantial amounts of effort.
   120 
   121 It is therefore likely that interoperability with other projects and tools may
   122 take precedence over the production of a complete system that can target
   123 various machine architectures and offer the ability to compile Python programs
   124 for deployment as directly executable code. Nevertheless, the ability to
   125 generate programs for deployment on microcomputers and microcontrollers - one
   126 of the initial motivations - remains a long-term goal.
   127 
   128 Contact, Copyright and Licence Information
   129 ------------------------------------------
   130 
   131 The current Web page for micropython at the time of release is:
   132 
   133 http://hgweb.boddie.org.uk/micropython
   134 
   135 Copyright and licence information can be found in the docs directory - see
   136 docs/COPYING.txt and docs/gpl-3.0.txt for more information.