Skip to main content

joyfl (pronounced ˈjȯi-fəl) is a dialect of the programming language Joy.

Joy is a stack-based programming environment that’s both functional and concatenative, which results in highly expressive but short programs. joyfl is an implementation of Joy in Python in its early stages; it’s not entirely backwards compatible by design.

EXAMPLES

You can run a simple REPL (read-eval-print loop) by typing: python3 joyfl.py repl. From there, try typing these statements:

# Take the number one, the number two, add them. Then the number three and add it to the
# previous result. Is six equal to that?
1 2 + 3 +
    6 equal? .
>>> true

# Take the list of numbers seven eight nine. Take a program that subtracts one. Map the
# program onto the list, then reverse it.
[7 8 9] [1 -] map reverse .
>>> [8 7 6]

# Take a list of symbols 'a 'b 'c. Take the symbol 'd. Swap the symbol with the list. Get
# the "rest" of the list omitting the first item. Construct a new list with "cons" that
# uses 'd as the new head.
['a 'b 'c] 'd swap rest cons .
>>> ['d 'b 'c]

Also look at the #/examples/ folder and run them with python3 joyfl.py <filename>.

MOTIVATION

While it’s fun to implement languages, this project has particular #ML / #LLM research questions in mind…

“ What if there was a language for a ‘micro-controller’ able to process 99% of tokens? ”

📥 TRAINING: To produce training data, what’s the middle ground between a web-template (gasp!) and a synthetic theorem generator (whew!)? The answer looks more like another language than a hacked-together Python script.

📤 INFERENCE: For output tokens, how can we make sure prompts are followed, any arithmetic is correct, no items are missed, and formatting is right? The solution isn’t more Python but special tokens that can be interpreted as instructions…

The research goal of this project is to find out where and how Joy can shine in these cases!

DIFFERENCES

While some of the tests from the original Joy pass, many also do not. Here are the design decisions at play:

  1. Symbols vs. Characters — Individual byte characters are not supported, so it’s not possible to extract or combine them with strings. Instead, the single quote denotes symbols (e.g. 'alpha) that can only be compared and added to containers.

  2. Data-Structures — Sets are not implemented yet, but will be. When they are, the sets will have the functionality of the underlying Python sets. Lists too behave like Python lists. Dictionaries will likely follow too at some point.

  3. Conditionals — Functions that return booleans are encouraged to use the ? suffix, for example equal? or list?. This change is inspired by Factor, and makes the code more readable so you know when to expect a boolean.

  4. Stackless - The interpreter does not use the Python callstack: state is stored entirely in data-structures. There’s a stack (for data created in the past) and a queue (for code to be executed in the future). Certain advanced combinators may feel a bit different to write because of this!

REFERENCES

Metadata

Release files for joyfl 0.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for joyfl 0.8
File Size Uploaded
joyfl-0.8.tar.gz 398.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for joyfl 0.8
File Interpreter ABI Platform
joyfl-0.8-cp314-cp314-manylinux_2_27_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64 Details

Total release size: 1.4 MB

Release files / joyfl-0.8.tar.gz

Download URL joyfl-0.8.tar.gz
Size 398.6 kB
Tags Source
SHA-256 checksum
How to use checksums
b6bef5fa4d02612721071c46c21a12849462d6fe961d55310d9991d0c80d96b3
BLAKE2b-256 checksum
How to use checksums
4754d77f1904122b88ab4a5085f5d2ef45f0fd53696dd8c8e22db5c4431c04b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release files / joyfl-0.8-cp314-cp314-manylinux_2_27_x86_64.whl

Download URL joyfl-0.8-cp314-cp314-manylinux_2_27_x86_64.whl
Size 997.7 kB
Tags CPython 3.14 Linux glibc 2.27+ x86-64
SHA-256 checksum
How to use checksums
64637ef26706db8797cd9383f0645bd43dfafda6cc2b877b0c5b97f1c753cbbf
BLAKE2b-256 checksum
How to use checksums
fc82dc5b74cdc19f2559b12f28dd6166d43771a90531e61b8fc467cc057d27c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release history Release notifications | RSS feed

This release

0.8 This release

2 release files

0.7

2 release files

0.6

2 release files

0.5

2 release files

0.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page