<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/tiny-great-languages-mouse-qsn0mntsg" -->

---
title: Tiny Great Languages: MOUSE | daily.dev
description: Explores MOUSE, a tiny 1976 Forth-like concatenative language built around reverse Polish notation and single-letter variables (A-Z), originally published in...
canonical: https://daily.dev/posts/tiny-great-languages-mouse-qsn0mntsg
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Tiny Great Languages: MOUSE | daily.dev
og:description: Explores MOUSE, a tiny 1976 Forth-like concatenative language built around reverse Polish notation and single-letter variables (A-Z), originally published in...
og:url: https://daily.dev/posts/tiny-great-languages-mouse-qsn0mntsg
og:image: https://api.daily.dev/og/posts/qsN0mntSg.png
og:image:alt: Tiny Great Languages: MOUSE
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Tiny Great Languages: MOUSE

**[zserge's blog](https://daily.dev/sources/zserge)** · 10 min read · 0 upvotes · 0 comments

## Summary

Explores MOUSE, a tiny 1976 Forth-like concatenative language built around reverse Polish notation and single-letter variables (A-Z), originally published in BYTE magazine. Walks through MOUSE syntax—assignment, dereferencing, loops, conditionals, and macros—then implements a full interpreter for it in a single compact Python function, explaining how macro call frames, parameter passing, and recursion are handled with just a data stack and return stack. Part of a series building tiny interpreters for historic languages.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://zserge.com/posts/langs-mouse>

## Questions this post answers

### What is the MOUSE programming language and how does its syntax work?

MOUSE is a tiny Forth-like concatenative language created in 1976 and published in BYTE magazine, using reverse Polish notation with single-letter operators and 26 global variables named A to Z. A dot after a variable fetches its value onto the stack, an equals sign assigns a value, and an exclamation point prints. It lacks stack operations like dup, drop, or swap, relying on named variables instead.

_Explore Forth-family language design breakdowns like this one on daily.dev._

### How do macros work in the MOUSE language without support for functions?

MOUSE has no functions but supports macros defined with $name...@ and called with #name...;. Parameters named %A, %B, etc. pass values in, and other variables inside a macro act as locals cleared on exit. Each macro call frame reserves 26 variable cells, with an offset tracked in memory that increases on entry and restores on return, allowing nested and recursive macro calls.

_Developers curious about minimal interpreter design can find deep dives like this on daily.dev._

## Similar posts on daily.dev

- [T3X.ORG nmhbasic](https://daily.dev/posts/t3x-org-nmhbasic-k7oor3t8d) · Two Stop Bits · 0 upvotes · 0 comments
- [A 1024 Byte Python Interpreter](https://daily.dev/posts/a-1024-byte-python-interpreter-ombsbouew) · Hackaday · 0 upvotes · 0 comments
- [The Programming Languages Zoo](https://daily.dev/posts/the-programming-languages-zoo-armsq2huj) · Hacker News · 0 upvotes · 0 comments
- [Making a Python interpreter in 1024 bytes](https://daily.dev/posts/making-a-python-interpreter-in-1024-bytes-vi1kzt7ex) · Lobsters · 0 upvotes · 0 comments

---

Tags: [#python](https://daily.dev/tags/python), [#language-design](https://daily.dev/tags/language-design)

[View this post on daily.dev](https://daily.dev/posts/tiny-great-languages-mouse-qsn0mntsg)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Tiny Great Languages: MOUSE","url":"https://daily.dev/posts/tiny-great-languages-mouse-qsn0mntsg","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/tiny-great-languages-mouse-qsn0mntsg"},"datePublished":"2026-08-23T10:20:19.040Z","dateModified":"2026-08-23T10:21:48.953Z","description":"Explores MOUSE, a tiny 1976 Forth-like concatenative language built around reverse Polish notation and single-letter variables (A-Z), originally published in...","image":"https://media.daily.dev/image/upload/s--0_ODbtD2--/f_auto/v1722860399/public/Placeholder%2008","thumbnailUrl":"https://media.daily.dev/image/upload/s--0_ODbtD2--/f_auto/v1722860399/public/Placeholder%2008","isAccessibleForFree":true,"articleSection":"zserge's blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"zserge's blog","logo":"https://media.daily.dev/image/upload/s--KQnFBOIT--/f_auto,q_auto/v1787480407/logos/zserge","url":"https://daily.dev/sources/zserge"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/tiny-great-languages-mouse-qsn0mntsg","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"python,language-design","timeRequired":"PT10M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"zserge's blog","item":"https://daily.dev/sources/zserge"},{"@type":"ListItem","position":3,"name":"Tiny Great Languages: MOUSE"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/tiny-great-languages-mouse-qsn0mntsg#faq","mainEntity":[{"@type":"Question","name":"What is the MOUSE programming language and how does its syntax work?","acceptedAnswer":{"@type":"Answer","text":"MOUSE is a tiny Forth-like concatenative language created in 1976 and published in BYTE magazine, using reverse Polish notation with single-letter operators and 26 global variables named A to Z. A dot after a variable fetches its value onto the stack, an equals sign assigns a value, and an exclamation point prints. It lacks stack operations like dup, drop, or swap, relying on named variables instead. Explore Forth-family language design breakdowns like this one on daily.dev."}},{"@type":"Question","name":"How do macros work in the MOUSE language without support for functions?","acceptedAnswer":{"@type":"Answer","text":"MOUSE has no functions but supports macros defined with $name...@ and called with #name...;. Parameters named %A, %B, etc. pass values in, and other variables inside a macro act as locals cleared on exit. Each macro call frame reserves 26 variable cells, with an offset tracked in memory that increases on entry and restores on return, allowing nested and recursive macro calls. Developers curious about minimal interpreter design can find deep dives like this on daily.dev."}}]}
```

