This is a high-level list of features. To see everything, you will need to browse the reference.
turtleSpaces is based around a full implementation of the Apple (LCSI) Logo environment. Logo has been called “the most powerful and user-friendly computer language ever implemented on a personal computer.” (David Thornburg)
Logo is a ‘functional’ language which is based on ‘primitives’ (commands) that return output to each other – they can be chained to retrieve, calculate and transform data in various ways before storing or actioning based on them.
Users can create ‘procedures’ which behave just like (and can replace) primitives. A procedure can take parameters and return output, just like a primitive. Take the primitive product , which multiplies two number:
to product :a :b
make "result 0
repeat :a [make "result sum :result :b]
output :result
end
We’ve effectively replaced product with our own procedure.
Logo was originally intended to be a language playground for children. As a result, it has very powerful string and ‘list’ handling (an array of ‘items’), such as [pig duck cow] or [[Bob 53][Frank 22][Sue 34]]. There are various primitives to build, order and re-order lists and strings, called ‘words’ in Logo.
The turtle was added to Logo later, but became its most recognisable feature. The turtle is a graphical ‘cursor’ which moves relative to itself, unlike other ‘absolute’ graphical systems (although you can operate absolutely in Logo as well). You tell the turtle to move and turn and it does so relative to its position and orientation.
In turtleSpaces we have added significant additional functionality to turtles:
There are multiple space s the turtle(s) can occupy, and turtles can be spread across spaces (newspace selectspace). Each space is an infinite three-dimensional canvas.
Any turtle can be a camera, selected using setview. You can change the camera’s position relative to its turtle using setviewpoint. Turtles also act as lights – they can be a spot light, a point light or no light at all.
Procedures and variables (containers) along with a number of settings are turtle-specific. You can share containers between turtles, and you can share procedures using the special libby (library) turtle.
Turtles are ‘driven’ by workers , which are process threads. One worker can drive multiple turtles (consecutively), or multiple workers can drive multiple turtles. Multiple workers can (attempt to) drive the same turtle! Workers and turtles are not the same. Think of turtles as cars, and workers as drivers.
You can telnet into turtleSpaces and control a worker using a terminal or another application (API).
Where traditional Logo turtles can only create lines or fill spaces, because turtleSpaces is based on OpenGL we have a number of other shapes that can be created, including:
You can speckle (or pixelate a la Minecraft) voxels and quads. You can create pixel-based plots (both 2 and 3 dimensional) and use them as speck
Sound primitives include the traditional toot (tone) primitive, noise (which generates white noise), playnotes , and you can playmusic created using the built-in tracker. You can also use your operating system’s built-in speech synthesiser using say (macOS and Linux)
turtleSpace has users. You ‘log in’ as a user to use turtleSpaces.
User workspaces are saved as ‘turtleSpace’ (TSP) folders. These folders save every change you make to procedures, and allow you to revert to any stage of development (undo , redo). What you type at the interactive prompt is also saved.
Snapshots are created when you save or takesnapshot – the save point is the state that the workspace is restored to when it is loaded. But you can keep developing and restore to ‘current’ by using load autosave. You can create a persistent ‘cover’ (used in the cat alog) using takecover
The interactive prompt has a history that can be programmatically read (historycount historyitem historylist).