# Design of SigScheme

## 1. Purposes

- Embedded into an application

- Suitable for embedded platforms (i.e. non-desktop {OS,hardware})

## 2. Requirements

- 3-clause BSD license

- Basic R5RS conformance

- Small footprint

- Low memory consumption

- Highly modular and customizable

- Code readability to enable learning Scheme by implementation

- Easily extensible by C

## 3. Code organization

- Memory allocators

- Exception and error handling

- Storage Abstraction Layer

- Continuation

- Environment

- Procedures and syntaxes

- Reader

- Writer

- Multibyte character processing

- Ports

## 4. Trade-offs

- Strict form validation

- Multibyte string processing

- Function aggregation to share prolog/epilog code fragment

## 5. API and ABI

- ABI incompatibility between configurations

- SAL and ABI

- Dynamic link

- Static link

- Writing an extension by C