[SICP 4] Setting Up a Scheme Development Environment on Windows
TL;DR: Now that on previous posts I found an actual reason to legitimize my studies as prototyping new languages, it’s time to setup a Scheme developer environment on my computer! This post is about how to prepare a Scheme devbox via Dr. Racket or via MIT Scheme on a Windows machine to be coded in Visual Studio Code.
Setup - Racket
AFAIK, the easiest way for Scheme development is to use Racket. It comes with a cross-platform IDE DrRacket. Also has some picture drawing mechanisms for the drawing section from SICP too. You just put #lang sicp
at the top of a file, and it’ll be able to run most of the Scheme code from the book.
How to import definitions from other files?
- Save “library” and “application” files in the same directory. (In my case
c:\Users\veliu\Dropbox\SICP
) - Library module has to have
#lang scheme
otherwise exports won’t work. - Define names in the library module, then export them using
(provide)
. Examplecommon.scm
#lang scheme (define (square x) (* x x)) (define (cube x) (* x x x)) (provide square cube) - Put application file in the same directory. Require the “library” file via
(#%require)
- The feature file needs to be saved, because an interpreter running on a non-saved file searches user’s home path to find the “library” file.
- Example application file that uses “common” library: #lang sicp (#%require "common.scm") (display (square 3)) (newline) (display (cube 3))
- ref: racket - How do I include files in DrScheme? - Stack Overflow
Setup - MIT Scheme
However, if you have a more purist approach, you can use the original MIT Scheme. I installed it by following the Unix instructions given at https://www.gnu.org/software/mit-scheme/
- In order to run it on Windows, I compiled it from source code in Windows Subsystem for Linux (WSL) environment.
- Also installed NCurses library via
sudo apt-get install libncurses-dev
before./configure
- To access Windows files from WSL go mount folder
/mnt/c
- To access WSL files from Windows put
\\wsl$
in Windows Explorer address bar, or start menu search bar. - VS Code with added vscode-scheme extension can be used to edit Scheme files. Definitely not as good as Dr. Racket when it comes to indentations, but having the highlighting ability is better than nothing.
- The way to run Scheme “scripts” was not as easy as running a Python script which are run usually with a command like following:
python file.py
. (See mit-scheme -- run a script and exit - Stack Overflow) - Shortest command to run a file is via piping:
scheme < file.scm
. However, this displays everything the interpreter does. - Use quiet mode to suppress them
scheme --quiet < file.scm
. - There is a nicer way via
-load
argument but that does not return back to the command line. And the trick was piping it toecho
- Here is the bash function I settled down for easy usage of above trick:
function mitscm () {
echo | mit-scheme --quiet --load $1;
echo
}
export -f mitscm
source
above file in.bashrc
and thenmitscm file.scm
will run the file in quiet mode and returns to command line.- Note that it’s possible to connect to WSL from VS Code via remote development. This way when you open a terminal in VS Code, it runs commands in WSL. (Remote VS Code requires to install extensions separately) See: Developing in the Windows Subsystem for Linux with Visual Studio Code
- One last trick to distribute code into multiple files is the
load
function. Put your common definitions incommon.scm
, and start your exercise file that is with(load "common.scm")
. - Some keyboard shortcuts
- To exit the interpreter call
(exit)
command orCtrl+d
. - To stop debugger
Ctrl+g
(not knowing this can make the development a very frustrating experience)
- To exit the interpreter call
Documentation
- User Manual at GNU page
- Reference at GNU page
- Revised(5) Scheme RSR5 standard at MIT SAIL’s (Computer Science & Artificial Intelligence Lab) Scheme page
- Note that Scheme language evolved further and has two more standard, last one being RSR7. But MIT Scheme stayed at RSR5. See R7RS versus R6RS - weinholt.se for everything you don’t need to know about comparisons of Scheme standards.
Now I’m ready to experience SICP in its full glory using its original interpreter!
published at: 2020-08-25 03:00 edited at: 2020-09-05 20:39 UTC-5tags: