aboutsummaryrefslogtreecommitdiff
path: root/docs/introduction.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/introduction.rst')
-rw-r--r--docs/introduction.rst69
1 files changed, 69 insertions, 0 deletions
diff --git a/docs/introduction.rst b/docs/introduction.rst
new file mode 100644
index 0000000..e4d57be
--- /dev/null
+++ b/docs/introduction.rst
@@ -0,0 +1,69 @@
+Introduction
+============
+
+Modern `microcontrollers <https://en.wikipedia.org/wiki/Microcontroller>`_
+provide powerful computational platforms in form of
+affordable and widely usable integrated circuit packages. Although, execution
+performance is often more than enough for execution of complex algorithms,
+some of constraints can represent challenge in implementing certain kind of
+applications. In case of interpreters for high level languages, amount of
+available RAM is significant factor which should be taken into account during
+design of interpreter and interpreted applications. This project explores
+these and similar impacts by implementing Lisp interpreter capable of
+interactive execution on 8bit/32bit microcontrollers.
+
+`Lisp <https://en.wikipedia.org/wiki/Lisp_(programming_language)>`_ is family
+of high level programming languages/dialects characterized with
+concise `homoiconic <https://en.wikipedia.org/wiki/Homoiconicity>`_ syntax.
+`Scheme <https://en.wikipedia.org/wiki/Scheme_(programming_language)>`_, as one
+of Lisp dialects, provides few powerful core functionalities which can be used
+to extend language itself with wide variety of derived constructs applicable to
+different programming paradigms and domains. Therefor, reduced core of Scheme,
+with only few data types and builtin functions/syntaxes, can provide good base
+system for execution of high level applications on embedded/constrain
+platforms.
+
+One of characteristics of most Lisp implementations is support for interactive
+programming based on
+`REPL <https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop>`_.
+If we take into account that microcontrollers usually provide wide range of
+different I/O peripherals, REPL executing instructions on microcontroller can
+represent exploratory environment for testing interaction with low level
+peripheries not usually available on more powerful general purpose computing
+platforms. Although, this kind of environment can be provided by splitting
+functionality between microcontroller and more powerful general purpose
+computer which communicates with microcontroller, that approach relies on
+availability of general purpose computer. By executing interpreter as a whole
+on microcontroller, more self sufficient interactive platform is available in
+form of a single microcontroller. Interaction with interpreter running on
+microcontroller can be based on full duplex
+`UART <https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter>`_
+communication. In this way, wide range of simple terminals can be used (even
+those utilizing other microcontrollers).
+
+Because implementation of Lisp interpreter in C programming language doesn't
+require a lot of dependencies specific to single target platform,
+implementation can be based on thin abstraction layer that will provide
+necessary interaction with host platform. This enables running implementation
+based on same source code on different platforms, including more powerful
+general purpose computers. Implementation targeting POSIX systems enables
+easier testing and provides more developer friendly environment for exploring
+interpreter characteristics. Usability of single code base for different
+execution environments impacts some of API design decisions. Most notably,
+interpreter uses memory locations referenced by additional pointer indirection
+instead of statically allocated locations. This approach induces some penalties
+in form of execution speed but at the same time provides API more suitable
+for interaction with
+`foreign function interface <https://en.wikipedia.org/wiki/Foreign_function_interface>`_
+and usage of multiple independent interpreter instances as part of single POSIX
+process.
+
+Existence of this project is mostly motivated with educational and research
+reasons. Therefore, significant emphasis is given on this documentation as
+integrated part of project. Rest of documentation tries to explain and document
+implementation in gradual bottom-up approach. It is advised to read this
+documentation sequential in order because each chapter depends on explanations
+available in previous chapters. Source code is organized to closely follow
+documentation structure and its listing is available as part of each associated
+chapter. Reader's knowledge of C programming language and related
+platform/memory model is assumed.