"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