"Little Scheme" and PL Design (Code Critique?)

jwatson-CO-edu real.name at colorado.edu
Thu Nov 17 22:05:45 UTC 2022


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.


More information about the Digitalmars-d-learn mailing list