# Language features

LispPad is an application for developing and running Scheme code. The programming language supported by LispPad is called LispKit. LispKit implements the following features, many of which are based on R7RS (small):

- Modules based on R7RS libraries
- Hygienic macros based on `syntax-rules`
- First-class environments
- `call/cc`, `dynamic-wind` and exceptions
- Dynamically-scoped parameters
- Multiple return values
- Delayed execution via promises and streams
- Support for the full numerical tower consisting of arbitrary size integers, rationals, real numbers, and inexact complex numbers.
- Unicode strings and characters
- Vectors and bytevectors
- Text and binary ports
- R7RS-compliant records
- R6RS-compliant hashtables
- R6RS-compliant enumerations
- SRFI 18-compliant multi-threading
- All R7RS (small) libraries: `(scheme base)`, `(scheme case-lambda)`, `(scheme char)`, `(scheme complex)`, `(scheme cxr)`, `(scheme eval)`, `(scheme file)`, `(scheme inexact)`, `(scheme lazy)`, `(scheme load)`, `(scheme process-context)`, `(scheme read)`, `(scheme repl)`, `(scheme time)`, `(scheme write)`, `(scheme r5rs)`
- Some R7RS (large) libraries from Scheme Red and Scheme Tangerine editions: `(scheme bitwise)`, `(scheme box)`, `(scheme charset)`, `(scheme comparator)`, `(scheme division)`, `(scheme fixnum)`, `(scheme flonum)`, `(scheme generator)`, `(scheme hash-table)`, `(scheme ideque)`, `(scheme list)`, `(scheme mapping)`, `(scheme red)`, `(scheme rlist)`, `(scheme set)`, `(scheme sort)`, `(scheme stream)`, `(scheme text)`, `(scheme vector)`
- LispKit-specific libraries: `(lispkit archive tar)`, `(lispkit archive zip)`, `(lispkit base)`, `(lispkit bitset)`, `(lispkit box)`, `(lispkit bytevector)`, `(lispkit char-set)`, `(lispkit char)`, `(lispkit clos)`, `(lispkit combinator)`, `(lispkit comparator)`, `(lispkit control)`, `(lispkit core)`, `(lispkit crypto)`, `(lispkit csv)`, `(lispkit datatype)`, `(lispkit date-time)`, `(lispkit debug)`, `(lispkit disjoint-set)`, `(lispkit draw)`, `(lispkit draw chart bar)`, `(lispkit draw turtle)`, `(lispkit dynamic)`, `(lispkit enum)`, `(lispkit format)`, `(lispkit graph)`, `(lispkit gvector)`, `(lispkit hashtable)`, `(lispkit heap)`, `(lispkit iterate)`, `(lispkit json)`, `(lispkit list)`, `(lispkit list set)`, `(lispkit log)`, `(lispkit logic)`, `(lispkit markdown)`, `(lispkit match)`, `(lispkit math)`, `(lispkit math matrix)`, `(lispkit math stats)`, `(lispkit math util)`, `(lispkit object)`, `(lispkit pdf)`, `(lispkit port)`, `(lispkit prettify)`, `(lispkit prolog)`, `(lispkit queue)`, `(lispkit record)`, `(lispkit regexp)`, `(lispkit set)`, `(lispkit sqlite)`, `(lispkit stack)`, `(lispkit stream)`, `(lispkit string)`, `(lispkit styled-text)`, `(lispkit sxml)`, `(lispkit sxml html)`, `(lispkit sxml xml)`, `(lispkit system)`, `(lispkit system call)`, `(lispkit test)`, `(lispkit text-table)`, `(lispkit thread)`, `(lispkit thread channel)`, `(lispkit type)`, `(lispkit vector)`, and `(lispkit wt-tree)`.
- LispPad-specific libraries: `(lisppad applescript)`, `(lisppad draw map)`, `(lisppad audio)`, `(lisppad location)`, `(lisppad log)`, `(lisppad speech)`, `(lisppad system macos)`, and `(lisppad turtle)`.