I just pushed a D implementation of "[Little Scheme](https://mitpress.mit.edu/9780262560993/the-little-schemer/)", which is a limited educational version of [Scheme](https://en.wikipedia.org/wiki/Scheme_(programming_language)), to [GitHub](https://github.com/jwatson-CO-edu/SPARROW).

_Here I would like to discuss aspects of programming language design from a novice's perspective, including D-specific aspects, rather than try to get forum members to comb through 1500 lines of code._

**Problems / Topics**:
* Whenever I create an [`Atom`](https://github.com/jwatson-CO-edu/SPARROW/blob/main/lil_schemer.d#L66) (unit of data), I throw it on the heap and never bother to delete it. I understand that D does GC for me. I am interested in using either [timed GC](https://wiki.dlang.org/Memory_Management#Smooth_Operation) or a [free list](https://wiki.dlang.org/Memory_Management#Free_Lists) for finer control of GC. Which is best for the application, do you think?

* Compatibility with both Windows and Linux. What do I need to consider?
  - Can I create threads/processes under Windows?

* PL Authors: Please share what you wish you knew when staring your programming/scripting language.

* I am open to questions/critiques.



**Components**:
1. [Data](https://github.com/jwatson-CO-edu/SPARROW/blob/main/lil_schemer.d#L43) 1. [Math and Inequality Primitives](https://github.com/jwatson-CO-edu/SPARROW/blob/main/lil_schemer.d#L231) 1. [Lists and Structures](https://github.com/jwatson-CO-edu/SPARROW/blob/main/lil_schemer.d#L348) 1. [Lexer](https://github.com/jwatson-CO-edu/SPARROW/blob/main/lil_schemer.d#L443) 1. [Parser](https://github.com/jwatson-CO-edu/SPARROW/blob/main/lil_schemer.d#L630) 1. [Environment / Variables](https://github.com/jwatson-CO-edu/SPARROW/blob/main/lil_schemer.d#L443) 1. [Primitive Functions](https://github.com/jwatson-CO-edu/SPARROW/blob/main/lil_schemer.d#L630) 1. [Control Flow](https://github.com/jwatson-CO-edu/SPARROW/blob/main/lil_schemer.d#L1006) 1. [Evaluator](https://github.com/jwatson-CO-edu/SPARROW/blob/main/lil_schemer.d#L1127) 1. [REPL](https://github.com/jwatson-CO-edu/SPARROW/blob/main/lil_schemer.d#L1462)

**Notes**:
* The repo is called SPARROW because I want to transform Little Scheme into my own language through small changes as a way to teach myself PL design. * SPARROW is not a topic of research. I do not have an application in mind other than learning as a side hobby.

Reply via email to