micropython

Annotated README.txt

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