summary refs log tree commit diff stats
path: root/doc/backends.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/backends.txt')
-rw-r--r--doc/backends.txt113
1 files changed, 113 insertions, 0 deletions
diff --git a/doc/backends.txt b/doc/backends.txt
new file mode 100644
index 000000000..2d7075323
--- /dev/null
+++ b/doc/backends.txt
@@ -0,0 +1,113 @@
+================================
+   Nimrod Backend Integration
+================================
+
+:Author: Puppet Master
+:Version: |nimrodversion|
+
+.. contents::
+
+  "If we all reacted the same way, we'd be predictable, and there's
+  always more than one way to view a situation. What's true for the
+  group is also true for the individual. It's simple: overspecialize,
+  and you breed in weakness.  It's slow death." -- Major Motoko
+  Kusanagi
+
+
+Introduction
+============
+
+The `Nimrod Compiler User Guide <nimrodc.html>`_ documents the typical
+compiler usage, using the ``compile`` or ``c`` command to transform a ``.nim``
+file into one or more ``.c`` files which are then compiled with the platform's
+C compiler into a static binary. However there are other commands to compile
+to C++, Objective-C or JavaScript. This document tries to concentrate in a
+single place all the backend and interfacing options.
+
+The Nimrod compiler supports mainly two backends: the C (and derivate) and
+the JavaScript targets. The C target creates source files which can be
+compiled into a library or a final executable. The JavaScript target generates
+a ``.js`` file which you call from an HTML file.
+
+
+Backends
+========
+
+The C like targets
+------------------
+
+The commands to compile to either C, C++ or Objective-C are:
+
+  //compileToC, cc          compile project with C code generator
+  //compileToCpp, cpp       compile project to C++ code
+  //compileToOC, objc       compile project to Objective C code
+
+The most significant difference between these commands is that if you look
+into the ``nimcache`` directory you will find ``.c``, ``.cpp`` or ``.m``
+files, other than that all of them will produce a native binary for your
+project.  This allows you to take the generated code and place it directly
+into a project using any of these languages. Here are some typical command
+line invocations::
+
+    $ nimrod c hallo.nim
+    $ nimrod cpp hallo.nim
+    $ nimrod objc hallo.nim
+
+The compiler commands select the backend but if you need to specify more
+carefully the backend compiler…
+
+
+The JavaScript target
+---------------------
+
+Nimrod can also generate `JavaScript`:idx: code through the ``js`` command.
+However, the JavaScript code generator is experimental!
+
+Nimrod targets JavaScript 1.5 which is supported by any widely used browser.
+Since JavaScript does not have a portable means to include another module,
+Nimrod just generates a long ``.js`` file.
+
+Features or modules that the JavaScript platform does not support are not
+available. This includes:
+
+* manual memory management (``alloc``, etc.)
+* casting and other unsafe operations (``cast`` operator, ``zeroMem``, etc.)
+* file management
+* most modules of the Standard library
+* proper 64 bit integer arithmetic
+* unsigned integer arithmetic
+
+However, the modules `strutils <strutils.html>`_, `math <math.html>`_, and
+`times <times.html>`_ are available! To access the DOM, use the `dom
+<dom.html>`_ module that is only available for the JavaScript platform.
+
+To compile a Nimrod module into a ``.js`` file use the ``js`` command; the
+default is a ``.js`` file that is supposed to be referenced in an ``.html``
+file. However, you can also run the code with `nodejs`:idx:, a `software
+platform for easily building fast, scalable network applications
+<http://nodejs.org>`_::
+
+  nimrod js -d:nodejs -r examples/hallo.nim
+
+
+Interfacing
+===========
+
+intro
+
+Nimrod code calling the backend
+--------------------------------
+
+Backend code calling Nimrod
+---------------------------
+
+mention NimMain
+
+Memory management
+=================
+
+Garbage collection, life of objects
+-----------------------------------
+
+Thread coordination
+-------------------