Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Experimental Scheme-like compiled language
Haskell C
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
src
t
.gitignore
BUGS
LICENSE
Makefile
README.md
Setup.lhs
TODO
hopc.cabal
hopcstubs.c
hopcstubs.h

README.md

Experimental Scheme-like compiled language

  • Optimized
  • Statically typed
  • Garbage collected
  • Retargettable
  • C code generation
  • Erlang-style message-passing multitasking
  • Generally for embeded programming purposes

Currently under heavy development, this is even not an alpha version yet.

The nearest goal is to get compact, optimized as possible closure-converted C code to run on MSP430 MCU (16 bits, 55Kb ROM, 4 - 16 Kb of RAM)

The main goals to get an easy-to-modify compiler with relatively small codebase to try different opportinities that currently are not very common because of total C hegemony.

Furthermore, I have just tired of writing code in C for embedded devices.

Hopefully compact syntax and static typing will bring a lot of possibilities of automatic static code analysis.

This project is mostly inspired by BitC, PICBIT, Staapl, Embedded ML and MinCaml projects.

If your share similar ideas and wish to contribute, I will very appreciated to any help in the following directions:

Typing

The H&M type inference is basically implemented, but so far is not used in the compiler. Also complex data types are waiting for implementation.

Injecting Hoopl

Error handling

The error handling is almost missed at the moment.

Module system

Macro system

There is almost no any macro system or ideas how to implement it at the moment.

ROADMAP

Beta release

  • Static types
  • C code generation
  • HOF, Closures
  • Int, String, List, Tuple, Record, Array data types
  • C code generation with basic optimization: alpha conversion, beta reduction, closure elimination, constant folding, let flattening

Nearest future

  • Using Hoopl for dataflow analysis
  • Assembly generation

Far future

???

FAQ

Q: Why not to use LLVM?

A: It's too complicated in it's backend aspects. It has a huge codebase. It takes a lot of time to get into it. But, there is no problems to use this compiler with LLVM as a backend. But this compiler is going to be small, simple and easy to hack and use

Q: When it's going to be ready for production?

A: I don't know. Personbally, I'm going to start to use it in production in Sep-2011

Q: Why Lisp syntax?

A: It's most simplest and at the same time most powerful known syntax. I don't ready to invent any new syntax and definitelly I'm not ready to impement Haskell for microcontrollers. Anyway, this syntax is just one of many possible frontends.

Something went wrong with that request. Please try again.