This site is meant as a supplement to LETHE: a concept workstation for the 21st century. It describes the Dhar programming language, a syncretic and heretical design built out of bits lifted from numerous other languages.
Summary
Dhar (meaning literally "black magic") is a strongly-typed Lisp-like language with syntactic and vocabulary affordances that surmount the typical obstacles that prevent adopting Lisp. In Lethe, it is used in multiple dialects, variously targeting systems programming, application programming, and the shell. This top-down family design provides cohesion without crippling expressivity in one domain due to considerations required for another.
Because of the goal of making a Lisp for non-Lispers, some aspects of Dhar may look unappetizing to programmers with a Lisp background. However, since there are so many Lisp dialects already, and the talent base is already so fragmented, the drawbacks of creating yet another Lisp dialect are much less of an obstacle than holding back non-Lispers with unfamiliar idiosyncrasies.
- 9. Introduction
9.1. Goals
9.2. Vocabulary
9.2.1. Notation
9.3. Scheme Comparison
9.4. C Comparison
9.5. References - 10. Tokenization
10.1. Punctuation
10.2. Sharpsigns
10.3. Valid Identifiers
10.4. Numeric Literals
10.5. Indentation
10.6. Strings
10.6.1. Normal Strings
10.6.2. Template Strings
10.6.3. Escapes
10.7. Quoting - 11. Parsing
11.1. Sharpsigns
11.1.1. Backreferences
11.1.2. Shebangs
11.1.3. Directives
11.1.4. Array Literals
11.2. Precedence
11.3. Expression Types
11.4. Structural Form
11.5. Surface Form - 12. Variables
12.1. Data Types
12.1.1. Collections
12.2. Declarations and Conversions
12.3. Typing Literals
12.4. Functions
12.4.1. Lambdas
12.4.2. Closures
12.4.3. Declarations
12.4.4. Return
12.5. Dynamic Parameters
12.6. Weak References
12.7. Scopes and Environments
12.7.1. Scopes
12.7.2. Environments
12.8. Arrays
12.9. Defining Types
12.9.1. Type Aliases
12.9.2. Select Types
12.9.3. Field Types
12.9.4. Object Types
12.10. Associations and alists - 13. Built-in forms
13.1. Miscellaneous
13.2. Definitions
13.3. Program Organization
13.4. Basic Flow Control
13.5. Type Conversions & Predicates
13.6. List and Collection Operations
13.7. Advanced Flow Control
13.8. Streams - 14. Macros
14.1. Impure (Non-Hygienic) Macros
14.1.1. Why Hygiene?
14.2. Pure (Hygienic) Macros
14.3. Built-In Macros and Aliases
14.4. The REPL - 15. Advanced features
15.1. Reflection
15.1.1. Object Reflection
15.1.2. Function Reflection
15.1.3. Dynamic Binding & Dispatch
15.2. Continuations
15.3. Exception Handling
15.4. Asynchronous Execution
15.4.1. Threads
15.4.2. Using Procs
15.4.3. Shared Variables & Locks
15.5. Multiple Inheritance
15.6. Partial Application
15.7. Pure Functions
15.8. Delimited Continuations
15.9. Inline Assembly - 16. Core library
16.1. Lists
16.2. Booleans
16.3. Associations
16.4. Symbols
16.5. Numbers
16.6. Strings and Characters
16.7. Functions
16.8. Arrays
16.9. Vectors
16.10. Streams
16.11. Objects
16.11.1. Object Manipulation
16.11.2. Constructors
16.11.3. Operator Overloading
16.11.4. Destructors
16.11.5. Object Conversion
16.12. Filesystem
16.13. Execution Environment - 17. Dialects and Implementations
17.1. Dialects
17.1.1. Kernel Dhar
17.1.2. Systems Dhar
17.1.3. Application Dhar
17.1.4. Translator Dhar
17.1.5. Shell Dhar (Shar)
17.2. Implementations
17.2.1. Interpreted Dhar
17.2.2. C Dhar
17.2.3. True Dhar
17.2.4. Hekarti - 18. Miscellaneous
18.1. Shadow Types
18.2. Alternative Quoting System
18.3. Rationale
18.4. Future Plans - 19. Supplements
19.1. Syntax Reference
19.2. Standard Object Types
19.3. The CHASM CPU
19.4. The Petra Filesystem Series