/docs/reference/codegen.rst
ReStructuredText | 147 lines | 87 code | 60 blank | 0 comment | 0 complexity | 42dc18a6e459cc479171a0010b77789d MD5 | raw file
- .. _code-generation-targets:
- ************************
- Code Generation Targets
- ************************
- ``Idris`` has been designed such that the compiler can generate code for
- different backends upon request. By default ``Idris`` generates a ``C``
- backend when generating an executable. Included within the standard Idris installation are backends for Javascript and Node.js.
- However, there are third-party code generators out there. Below we
- describe some of these backends and how you can use them when
- compiling your ``Idris`` code. If you want to write your own codegen for your language there is a `stub project on GitHub <https://github.com/idris-lang/idris-emptycg>`__ that can help point you in the right direction.
- Official Backends
- ==================
- C Language
- ----------
- The default target of Idris is C. In order to view the generated C code, compile via:
- ::
- $ idris hello.idr -S -o hello.c
- Javascript
- ----------
- To generate code that is tailored for running in the browser
- issue the following command:
- ::
- $ idris --codegen javascript hello.idr -o hello.js
- Idris can produce big chunks of JavaScript code (hello world weighs in at about
- 60 lines). However, the generated code can be minified using the
- `closure-compiler <https://developers.google.com/closure/compiler/>`__ from
- Google.
- ::
- java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js
- Node.js
- -------
- Generating code for NodeJS is slightly different. Idris outputs a
- JavaScript file that can be directly executed via node.
- ::
- $ idris --codegen node hello.idr -o hello
- $ ./hello
- Hello world
- Third Party
- ============
- .. note::
- These are third-party code generations and may have bit-rotted or
- do not work with current versions of Idris. Please speak to the
- project's maintainers if there are any problems.
- CIL (.NET, Mono, Unity)
- -----------------------
- ::
- idris --codegen cil Main.idr -o HelloWorld.exe \
- && mono HelloWorld.exe
- The resulting assemblies can also be used with .NET or Unity.
- Requires `idris-cil <https://github.com/bamboo/idris-cil>`__.
- Erlang
- ------
- `Available online <https://github.com/lenary/idris-erlang>`__
- Java
- ----
- `Available online <https://github.com/idris-hackers/idris-java>`__
- ::
- idris hello.idr --codegen java -o hello.jar
- Note: The resulting .jar is automatically prefixed by a header including
- an .sh script to allow executing it directly.
- JVM
- ---
- `Available online <https://github.com/mmhelloworld/idris-jvm>`__
- LLVM
- -----
- `Available online <https://github.com/idris-hackers/idris-llvm>`__
- Malfunction
- ------------
- `Available online <https://github.com/stedolan/idris-malfunction>`__
- Ocaml
- -----
- `Available online <https://github.com/ziman/idris-ocaml>`__
- PHP
- ---
- `Available online <https://github.com/edwinb/idris-php>`__
- Python
- ------
- `Available online <https://github.com/ziman/idris-py>`__
- Ruby
- ----
- `Available online <https://github.com/mrb/idris-ruby>`__
- WS
- ---
- `Available online <https://github.com/edwinb/WS-idr>`__
- WebAssembly
- -----------
- `Available online <https://github.com/SPY/idris-codegen-wasm>`__