Jack's final year project

20th October 2025
by Jack Mullin
0 comments

nasin MoSCoW; the MoSCoW method

We’ve been refining our project ideas using the MoSCoW method; establishing their scope and feasibility by examining what they Must have, what they Should have, what they Could have, and what they Won’t have. Here’s what I’ve got so far:

MUST HAVE

  • Command line interface with a runnable interpreter.
  • Basic data flow.
  • Basic variables.
  • Basic operators.
  • Simple output (e.g. text)

SHOULD HAVE

  • Graphical interface.
  • Graphical input and output.
  • Syntax that reflects the philosophy of simplification of toki pona.
  • Website for collecting/submitting programs.

COULD HAVE

  • JavaScript interpreter to run programs on the website.
  • Some kind of exhibitible display of some example programs.

WON’T HAVE

  • Advanced programming features that can make code shorter but not simpler. (e.g. lambda functions)

I’ve also been thinking about a name for this project. “Poki Nanpa” is the current frontrunner. The literal translation of that is “Number Box”. It’s sometimes used to mean “computer” (though “ilo sona”, “knowledge tool”, is the more standard translation) and I don’t think anyone else has used that as the name of a toki pona programming language yet.

13th October 2025
by Jack Mullin
0 comments

o sitelen e hello world

I’ve had a few ideas bouncing around in my head for my final year project. For a while now I’ve been interested in a constructed language called toki pona, and I’d be interested in taking a programmatic approach to something related to that.

What makes toki pona unique is its extremely small vocabulary of about a hundred and twenty words, each representing a wide and abstract concept. There is no mucking around with the linguistic markers that tend to increase the wordsets of other languages. There is no tense, no plurality, and no gender. There are three pronouns; first, second, and third person. The word “jan” means “person”, but it can also mean “humanity”. The word for “want” is the same as the word for “need”. This all sounds cool on paper, but in practice toki pona is a very annoying language to speak. Imagine trying to communicate anything remotely technical but you can only use the hundred most common words in the English language; it’s almost impossible. This is because toki pona is an “artlang”; a constructed language not necessarily built purely for communication. Instead, the focus of toki pona is on simplifying thoughts down to their most abstract and basic forms.

So while this is impractical for most applications, I think there is interesting potential for creating a programming language that makes use of this same philosophy of simplicity. When programming, it is easy to get bogged down in long cumbersome statements and complicated mixtures of different data flow structures. By creating a programming language that uses the vocabulary and syntax of toki pona, could you force yourself to program in a way that is simple and easy to read and write?

I’m not the first person to come up with the idea of a toki pona programming language; in fact there are already several. My preliminary literature review will involve researching what approaches these take, and figuring out how my own take could iterate and improve on their ideas. I will also research other attempts to simplify programming, and other aspects of toki pona, conlangs in general, and “esolangs” (esoteric programming languages). Embracing the “art” part of “artlang”, I may specify that this language, rather than printing to a console, will be entirely focused around drawing on a canvas. This might allow my final product to be an interactive (online?) piece, showcasing interesting outputs and perhaps allowing people to write their own programs.

I’ve begun working on a basic syntax. The title of this post is a hello world program. Here’s a more complex program, for solving the wheat and chessboard problem.

nanpa Chessboard li nanpa mute mute mute tu tu // Chessboard = 64
nanpa I li nanpa ala // I = 0
nanpa Total li nanpa ala // Total = 0
I li lili e Chessboard la // if I < Chessboard
nanpa Grains li nanpa tu // Grains = 2
o sewi sewi sewi e Grains tan I // Grains **= I
o sewi e Total tan Grains // Total += Grains
o sewi e I // I++
o awen // repeat loop
o sitelen e Total // print Total