# FlipJump
[![Tests](https://github.com/tomhea/flip-jump/actions/workflows/tests.yml/badge.svg)](https://github.com/tomhea/flip-jump/actions/workflows/tests.yml)
[![PyPI - Version](https://img.shields.io/pypi/v/flipjump)](https://pypi.org/project/flipjump/)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)
[![Website](https://img.shields.io/website?down_color=red&down_message=down&up_message=up&url=https%3A%2F%2Fesolangs.org%2Fwiki%2FFlipJump)](https://esolangs.org/wiki/FlipJump)
[![GitHub Discussions](https://img.shields.io/github/discussions/tomhea/flip-jump)](https://github.com/tomhea/flip-jump/discussions)
[![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/tomhea/flip-jump)](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=Tomhea%2Fflip-jump)
[![GitHub](https://img.shields.io/github/license/tomhea/flip-jump)](LICENSE)
FlipJump is the simplest programing language.
Yet, it can do **any modern computation**.
It's an Esoteric language ([FlipJump esolangs page](https://esolangs.org/wiki/FlipJump)), with just 1 operation `a;b`:
- `not *a; jump b`
Which means - **Flip** a bit, then **Jump**.
The operation takes 2 memory addresses - it flips (inverts) the bit the first address points to, and jumps to (continue execution from) the second address. The next opcode is the two memory-addresses found right where you jumped to. You flip and jump again, and so on...
This project includes a **Macro Assembler**, an **Interpreter**, and a **Thoroughly Tested Standard Library** for the FlipJump language.
Additionally, it provides a [**Python Library**](https://pypi.org/project/flipjump/) that makes it easy to work with those components.
This prime numbers program was coded only with FlipJump ([source](programs/prime_sieve.fj)):
![Printing prime numbers using only FlipJump](resources/prime_sieve.gif)
## Hello, World!
<details>
<summary>A simple hello-world flipjump program, not using the standard library:</summary>
(jump to the source code)
```c
// define macros that will be used later
// this macro exports the "IO" label to be a global label
def startup @ code_start > IO {
;code_start
IO:
;0 // the second op is reserved for Input/Output.
code_start:
}
// this macro gets one parameter "bit", and uses the global label "IO".
def output_bit bit < IO {
IO + bit; // flipping IO+0 outputs 0; flipping IO+1 outputs 1.
}
def output_char ascii {
// the next line will be unwinded into 8 output_bit macro-uses, each with a different parameter
rep(8, i) output_bit ((ascii>>i)&1)
}
def end_loop @ loop_label {
loop_label:
;loop_label // a flipjump program finishes on a self loop
}
// The first lines of actual code:
startup
output_char 'H'
output_char 'e'
output_char 'l'
output_char 'l'
output_char 'o'
output_char ','
output_char ' '
output_char 'W'
output_char 'o'
output_char 'r'
output_char 'l'
output_char 'd'
output_char '!'
end_loop
```
The source code can be found here: [hello_no-stl.fj](programs/print_tests/hello_no-stl.fj).
The FlipJump assembly supports a ```"Hello, World!"``` syntax for initializing a variable with a string value.
Look at the [hello_world.fj](programs/print_tests/hello_world.fj) program for more info.
Note that all of these macros are already implemented in the standard library (all in [runlib.fj](flipjump/stl/runlib.fj)):
- startup
- end_loop (loop)
- output_char
- output (for printing string consts, e.g. output "Hello, World!")
</details>
# How to install?
```shell
pip install flipjump
```
You can also install it with its extras:
- flipjump[**stats**]: support for viewing macro usage in an interactive graph.
- flipjump[**tests**]: all the testing libraries needed.
```shell
pip install flipjump[stats,tests]
```
Pycharm Extensions:
- Add <span style="color:orange">syntax highlighting</span> support for *.fj files - just import the [PycharmHighlighting.zip](ide-extensions/pycharm/PycharmHighlighting.zip) settings.
- Add a ctrl+shift+click (find fj-macro definition) functionality by using the [AutoHotKey script](ide-extensions/pycharm/fj-pycharm-def-finder.ahk).
# How to run?
Use the `fj` utility:
```shell
fj hello_world.fj
```
![Hello World in FlipJump](resources/hello.gif)
- The --no-stl flag tells the assembler not to include the standard library. for example: `fj programs/print_tests/hello_no-stl.fj --no-stl`.
- the `-w [WIDTH]` flag allows compiling the .fj files to a WIDTH-bits memory width. WIDTH is 64 by default.
- You can use the `-o` flag to save the assembled file for later use too.
- you can find all the different flags with `fj -h`.
You can also **[Test the project](tests/README.md#run-the-tests)** with the project's tests, and with your own tests.
You can also assemble and run separately:
```bash
fj --asm hello.fj -o hello_world.fjm
fj --run hello_world.fjm
```
- The first line will assemble your code.
- The second line will run your code.
You can also use the faster [cpp-based interpreter](https://github.com/tomhea/fji-cpp):
```bash
>>> fji hello.fjm -s
Hello, World!
```
### How to Debug?
Programs won't work on their first run. They just can't. That's why we support the next debugging flags.
- No debugging flags at all: Shows the last 10 executed addresses of tests that failed their run (i.e. finished not by looping).
- `-d [PATH]`: Save debug information: Adds [very extensive label names](tests/README.md#example-label-name-youll-get-with-using---debuginfo-len), Which are like a "**macro-stack**" for each of the last executed address. (can be used with `--debug-ops-list LEN`)
- `--debug-ops-list LEN`: Shows the last _LEN_ executed addresses (instead of 10). (can be used with `-d`)
- `-b NAME [NAME ...]`: Places breakpoints at every specified label NAMEs (note that label names are long: [more information about labels](flipjump/README.md#generated-label-names)). (requires `-b`)
- `-B NAME [NAME ...]`: Places breakpoints at every label that contains one of the given NAMEs. (requires `-b`)
The debugger can single-step, read-memory, read flipjump variables (bit/hex/byte, and their vectors), continue, or skip forward a fixed number of opcodes.
# Get Started with FlipJump
- Install flipjump: `pip install flipjump`
- Write your flipjump program (use the [stl - standard library](flipjump/stl/README.md) macros).
- For example: [print_dec.fj](programs/print_tests/print_dec.fj).
- assemble+run your program: `fj print_dec.fj`
### Example usage of the flipjump python library
```python
from pathlib import Path
from flipjump import assemble_and_run # assemble, run_test_output, ...
fj_file_paths = [Path('path/to/main.fj'), Path('path/to/consts.fj')]
termination_statistics = assemble_and_run(fj_file_paths)
```
_You can also use the `flipjump.assemble_run_according_to_cmd_line_args(cmd_line_args=[...])`._
# Project Structure
**[flipjump](flipjump/README.md)** (assembler + interpreter source files):
- [flipjump_cli.py](flipjump/flipjump_cli.py) - Main CLI script fot the FlipJump Assembler & Interpreter.
- [fjm/](flipjump/fjm) - Tools for reading/writing .fjm (flip-jump-memory) files.
- [interpreter/fjm_run.py](flipjump/interpretter/fjm_run.py) - Interpreter + debugger for assembled fj files.
- [assembler/](flipjump/assembler) - Components for assembling FlipJump code.
- [fj_parser.py](flipjump/assembler/fj_parser.py) - Pythonic lex/yacc parser.
- [preprocessor.py](flipjump/assembler/preprocessor.py) - Unwinds all macros and reps (repetitions).
- [assembler.py](flipjump/assembler/assembler.py) - Assembles macro-less fj files.
- [more...](flipjump/README.md) - Additional project files and documentation.
**[flipjump/stl](flipjump/stl/README.md)** (standard library files - macros. The [stl readme](flipjump/stl/README.md#the-files) contains the list of all macros):
- runlib.fj - Constants and initialization macros. Output constant strings.
- [bit/](flipjump/stl/README.md#bit) - Directory of stl files. Macros for io/manipulating binary variables and vectors (i.e. numbers): math, logic, conditional jumps, pointers, casting, IO, ...
- [hex/](flipjump/stl/README.md#hex) - Directory of stl files. Macros for io/manipulating hexadecimal variables and vectors (i.e. numbers): math, logic, conditional jumps, pointers, casting, IO, ...
- mathlib.fj - Advanced math macros (mul/div).
- casting.fj - Macros for casting between bit/hex.
- ptrlib.fj - Macros for working with pointers, stacks, and functions.
- conf.json - The list of the standard library files.
**[programs](programs)** (flipjump programs, used by the tests), for example:
- [hello_world.fj](programs/print_tests/hello_world.fj) - Prints "hello world :)"
- [calc.fj](programs/calc.fj) - A command-line calculator for 2 hex/dec numbers: ```a [+-*/%] b```.
- [func_tests/](programs/func_tests) - Programs for testing function calls and stack operations.
- [hexlib_tests/](programs/hexlib_tests) - Tests for all the hex macros, except the hex.pointers.
- [quine16.fj](programs/quine16.fj) - A 16-bits quine by [lestrozi](https://github.com/lestrozi); when assembled with `-w16 -v0` - prints itself.
- [pair_ns.fj](programs/concept_checks/pair_ns.fj) - Simulates the concept of a Class, by using a namespace.
- [print_dec.fj](programs/print_tests/print_dec.fj) - Prints binary variables as decimals.
- [multi_comp/](programs/multi_comp) - Simulates a big project (compilation of multiple files).
**[tests](tests/README.md)** (tests compiling+running the programs with the stl), for example:
- compiled/ - The designated directory for the assembled tests files.
- inout/ - Contains the .in and .out files for each test.
- conftest.py - The pytest configuration file. The tests are being generated here.
- test_fj.py - The base test functions for compilation and running ([how to run](tests/README.md#run-the-tests)).
- conf.json - The tests groups+order lists.
- [tests_tables/](tests/tests_tables)
- test_compile_*.csv - Arguments for the compile tests ([compile test arguments format](tests/README.md#compile-csvs-format)).
- test_run_*.csv - Arguments for the run tests ([run test arguments format](tests/README.md#run-csvs-format)).
- xfail_*.csv - [xfail](https://docs.pytest.org/en/7.1.x/how-to/skipping.html#xfail-mark-test-functions-as-expected-to-fail) these tests.
# Read More - Extra Documentation
Take a look at the other READMEs:
* Read more about the [assembler/interpreter source files](flipjump/README.md).
* Read more about [how to run the tests](tests/README.md).
* Read more about the [standard library](flipjump/stl/README.md).
A very extensive explanation can be found on the [GitHub wiki page](https://github.com/tomhea/flip-jump/wiki/Learn-FlipJump).
More detailed explanation and the **specifications of the FlipJump assembly** can be found on the [FlipJump esolangs page](https://esolangs.org/wiki/FlipJump).
If you are new to FlipJump and you want to learn how modern computation can be executed using FlipJump, and you want to jump onto your first flipjump code - Start by reading the [bit.xor](flipjump/stl/bit/logics.fj) and [bit.if](flipjump/stl/bit/cond_jumps.fj) macros. That's where the FlipJump magic begins.
If you want to understand how the deep optimized hex macros work, understand how the next macros are implemented: [hex.exact_xor](flipjump/stl/hex/logics.fj), [hex.output](flipjump/stl/hex/output.fj), [hex.inc1](flipjump/stl/hex/math_basic.fj), and [hex.add](flipjump/stl/hex/math.fj) (understand the concept of the [lookup tables](https://esolangs.org/wiki/FlipJump#Lookup_Tables).
You can also write and run programs for yourself! It is just [that](README.md#how-to-run) easy :)
## Turing Complete?
As the language expects a finite memory, like most of today's programming languages, it's technically not Turing complete.
Yet, It's very capable.
I wrote a [Brainfuck to Flipjump Compiler (bf2fj)](https://github.com/tomhea/bf2fj) to emphasize just that.
Brainfuck is indeed Turing complete, and the compiler proves that flipjump can run any program that brainfuck runs (besides those that require an unbounded memory).
# Contribute
If you want to contribute to this project, read the [CONTRIBUTING.md](CONTRIBUTING.md) file, and take a look at the [I-Want-To-Contribute Thread](https://github.com/tomhea/flip-jump/discussions/148).
Actually, just writing your own flipjump programs and sharing them with the world is a great contribution to the community :)
Take a look at what the [standard library](flipjump/stl/README.md) offers, and see some [example programs](programs) to get you inspired!
Raw data
{
"_id": null,
"home_page": "https://esolangs.org/wiki/FlipJump",
"name": "flipjump",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8.1,<4.0.0",
"maintainer_email": "",
"keywords": "esolang,oisc,assembly",
"author": "Tom Herman",
"author_email": "flipjumpproject@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/78/e6/c030c646fd6fc7691744d3afc9ab5f784ad0bb8f89f678cecb9f5554026e/flipjump-1.2.2.tar.gz",
"platform": null,
"description": "# FlipJump\n\n[![Tests](https://github.com/tomhea/flip-jump/actions/workflows/tests.yml/badge.svg)](https://github.com/tomhea/flip-jump/actions/workflows/tests.yml)\n[![PyPI - Version](https://img.shields.io/pypi/v/flipjump)](https://pypi.org/project/flipjump/)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/) \n[![Website](https://img.shields.io/website?down_color=red&down_message=down&up_message=up&url=https%3A%2F%2Fesolangs.org%2Fwiki%2FFlipJump)](https://esolangs.org/wiki/FlipJump)\n[![GitHub Discussions](https://img.shields.io/github/discussions/tomhea/flip-jump)](https://github.com/tomhea/flip-jump/discussions)\n[![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/tomhea/flip-jump)](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=Tomhea%2Fflip-jump)\n[![GitHub](https://img.shields.io/github/license/tomhea/flip-jump)](LICENSE)\n\nFlipJump is the simplest programing language. \nYet, it can do **any modern computation**.\n\nIt's an Esoteric language ([FlipJump esolangs page](https://esolangs.org/wiki/FlipJump)), with just 1 operation `a;b`: \n- `not *a; jump b`\n\nWhich means - **Flip** a bit, then **Jump**.\n\nThe operation takes 2 memory addresses - it flips (inverts) the bit the first address points to, and jumps to (continue execution from) the second address. The next opcode is the two memory-addresses found right where you jumped to. You flip and jump again, and so on... \n\n\nThis project includes a **Macro Assembler**, an **Interpreter**, and a **Thoroughly Tested Standard Library** for the FlipJump language. \nAdditionally, it provides a [**Python Library**](https://pypi.org/project/flipjump/) that makes it easy to work with those components.\n\nThis prime numbers program was coded only with FlipJump ([source](programs/prime_sieve.fj)):\n![Printing prime numbers using only FlipJump](resources/prime_sieve.gif)\n\n## Hello, World!\n\n<details>\n <summary>A simple hello-world flipjump program, not using the standard library:</summary>\n(jump to the source code)\n\n```c\n// define macros that will be used later\n\n// this macro exports the \"IO\" label to be a global label\ndef startup @ code_start > IO {\n ;code_start\n IO:\n ;0 // the second op is reserved for Input/Output.\n code_start:\n}\n\n// this macro gets one parameter \"bit\", and uses the global label \"IO\".\ndef output_bit bit < IO {\n IO + bit; // flipping IO+0 outputs 0; flipping IO+1 outputs 1.\n}\ndef output_char ascii {\n // the next line will be unwinded into 8 output_bit macro-uses, each with a different parameter\n rep(8, i) output_bit ((ascii>>i)&1)\n}\n\ndef end_loop @ loop_label {\n loop_label:\n ;loop_label // a flipjump program finishes on a self loop\n}\n\n\n// The first lines of actual code:\n\n startup\n \n output_char 'H'\n output_char 'e'\n output_char 'l'\n output_char 'l'\n output_char 'o'\n output_char ','\n output_char ' '\n \n output_char 'W'\n output_char 'o'\n output_char 'r'\n output_char 'l'\n output_char 'd'\n output_char '!'\n \n end_loop\n\n```\n\nThe source code can be found here: [hello_no-stl.fj](programs/print_tests/hello_no-stl.fj).\n\nThe FlipJump assembly supports a ```\"Hello, World!\"``` syntax for initializing a variable with a string value.\nLook at the [hello_world.fj](programs/print_tests/hello_world.fj) program for more info.\n\nNote that all of these macros are already implemented in the standard library (all in [runlib.fj](flipjump/stl/runlib.fj)):\n- startup\n- end_loop (loop)\n- output_char\n- output (for printing string consts, e.g. output \"Hello, World!\")\n</details>\n\n\n# How to install?\n\n```shell\npip install flipjump\n```\n\nYou can also install it with its extras:\n- flipjump[**stats**]: support for viewing macro usage in an interactive graph.\n- flipjump[**tests**]: all the testing libraries needed.\n```shell\npip install flipjump[stats,tests]\n```\n\n\nPycharm Extensions:\n- Add <span style=\"color:orange\">syntax highlighting</span> support for *.fj files - just import the [PycharmHighlighting.zip](ide-extensions/pycharm/PycharmHighlighting.zip) settings.\n- Add a ctrl+shift+click (find fj-macro definition) functionality by using the [AutoHotKey script](ide-extensions/pycharm/fj-pycharm-def-finder.ahk).\n\n# How to run?\n\nUse the `fj` utility:\n```shell\nfj hello_world.fj\n```\n\n![Hello World in FlipJump](resources/hello.gif)\n\n - The --no-stl flag tells the assembler not to include the standard library. for example: `fj programs/print_tests/hello_no-stl.fj --no-stl`.\n - the `-w [WIDTH]` flag allows compiling the .fj files to a WIDTH-bits memory width. WIDTH is 64 by default.\n - You can use the `-o` flag to save the assembled file for later use too.\n - you can find all the different flags with `fj -h`.\n\nYou can also **[Test the project](tests/README.md#run-the-tests)** with the project's tests, and with your own tests.\n\nYou can also assemble and run separately:\n\n```bash\nfj --asm hello.fj -o hello_world.fjm\nfj --run hello_world.fjm\n```\n\n- The first line will assemble your code.\n- The second line will run your code.\n\nYou can also use the faster [cpp-based interpreter](https://github.com/tomhea/fji-cpp):\n\n```bash\n>>> fji hello.fjm -s\nHello, World!\n```\n\n### How to Debug?\nPrograms won't work on their first run. They just can't. That's why we support the next debugging flags.\n\n- No debugging flags at all: Shows the last 10 executed addresses of tests that failed their run (i.e. finished not by looping). \n- `-d [PATH]`: Save debug information: Adds [very extensive label names](tests/README.md#example-label-name-youll-get-with-using---debuginfo-len), Which are like a \"**macro-stack**\" for each of the last executed address. (can be used with `--debug-ops-list LEN`)\n- `--debug-ops-list LEN`: Shows the last _LEN_ executed addresses (instead of 10). (can be used with `-d`)\n- `-b NAME [NAME ...]`: Places breakpoints at every specified label NAMEs (note that label names are long: [more information about labels](flipjump/README.md#generated-label-names)). (requires `-b`)\n- `-B NAME [NAME ...]`: Places breakpoints at every label that contains one of the given NAMEs. (requires `-b`)\n\nThe debugger can single-step, read-memory, read flipjump variables (bit/hex/byte, and their vectors), continue, or skip forward a fixed number of opcodes.\n\n# Get Started with FlipJump\n- Install flipjump: `pip install flipjump`\n- Write your flipjump program (use the [stl - standard library](flipjump/stl/README.md) macros).\n - For example: [print_dec.fj](programs/print_tests/print_dec.fj).\n- assemble+run your program: `fj print_dec.fj`\n\n### Example usage of the flipjump python library\n```python\nfrom pathlib import Path\nfrom flipjump import assemble_and_run # assemble, run_test_output, ...\n\nfj_file_paths = [Path('path/to/main.fj'), Path('path/to/consts.fj')]\ntermination_statistics = assemble_and_run(fj_file_paths)\n```\n\n_You can also use the `flipjump.assemble_run_according_to_cmd_line_args(cmd_line_args=[...])`._\n\n\n# Project Structure\n\n**[flipjump](flipjump/README.md)** (assembler + interpreter source files):\n - [flipjump_cli.py](flipjump/flipjump_cli.py) - Main CLI script fot the FlipJump Assembler & Interpreter.\n - [fjm/](flipjump/fjm) - Tools for reading/writing .fjm (flip-jump-memory) files.\n - [interpreter/fjm_run.py](flipjump/interpretter/fjm_run.py) - Interpreter + debugger for assembled fj files.\n - [assembler/](flipjump/assembler) - Components for assembling FlipJump code.\n - [fj_parser.py](flipjump/assembler/fj_parser.py) - Pythonic lex/yacc parser.\n - [preprocessor.py](flipjump/assembler/preprocessor.py) - Unwinds all macros and reps (repetitions).\n - [assembler.py](flipjump/assembler/assembler.py) - Assembles macro-less fj files.\n - [more...](flipjump/README.md) - Additional project files and documentation.\n\n**[flipjump/stl](flipjump/stl/README.md)** (standard library files - macros. The [stl readme](flipjump/stl/README.md#the-files) contains the list of all macros):\n - runlib.fj - Constants and initialization macros. Output constant strings.\n - [bit/](flipjump/stl/README.md#bit) - Directory of stl files. Macros for io/manipulating binary variables and vectors (i.e. numbers): math, logic, conditional jumps, pointers, casting, IO, ...\n - [hex/](flipjump/stl/README.md#hex) - Directory of stl files. Macros for io/manipulating hexadecimal variables and vectors (i.e. numbers): math, logic, conditional jumps, pointers, casting, IO, ...\n - mathlib.fj - Advanced math macros (mul/div).\n - casting.fj - Macros for casting between bit/hex.\n - ptrlib.fj - Macros for working with pointers, stacks, and functions.\n - conf.json - The list of the standard library files.\n\n**[programs](programs)** (flipjump programs, used by the tests), for example:\n - [hello_world.fj](programs/print_tests/hello_world.fj) - Prints \"hello world :)\"\n - [calc.fj](programs/calc.fj) - A command-line calculator for 2 hex/dec numbers: ```a [+-*/%] b```.\n - [func_tests/](programs/func_tests) - Programs for testing function calls and stack operations.\n - [hexlib_tests/](programs/hexlib_tests) - Tests for all the hex macros, except the hex.pointers.\n - [quine16.fj](programs/quine16.fj) - A 16-bits quine by [lestrozi](https://github.com/lestrozi); when assembled with `-w16 -v0` - prints itself.\n - [pair_ns.fj](programs/concept_checks/pair_ns.fj) - Simulates the concept of a Class, by using a namespace.\n - [print_dec.fj](programs/print_tests/print_dec.fj) - Prints binary variables as decimals.\n - [multi_comp/](programs/multi_comp) - Simulates a big project (compilation of multiple files).\n\n**[tests](tests/README.md)** (tests compiling+running the programs with the stl), for example:\n - compiled/ - The designated directory for the assembled tests files.\n - inout/ - Contains the .in and .out files for each test.\n - conftest.py - The pytest configuration file. The tests are being generated here.\n - test_fj.py - The base test functions for compilation and running ([how to run](tests/README.md#run-the-tests)).\n - conf.json - The tests groups+order lists.\n - [tests_tables/](tests/tests_tables)\n - test_compile_*.csv - Arguments for the compile tests ([compile test arguments format](tests/README.md#compile-csvs-format)).\n - test_run_*.csv - Arguments for the run tests ([run test arguments format](tests/README.md#run-csvs-format)).\n - xfail_*.csv - [xfail](https://docs.pytest.org/en/7.1.x/how-to/skipping.html#xfail-mark-test-functions-as-expected-to-fail) these tests.\n\n\n# Read More - Extra Documentation\n\nTake a look at the other READMEs:\n* Read more about the [assembler/interpreter source files](flipjump/README.md). \n* Read more about [how to run the tests](tests/README.md).\n* Read more about the [standard library](flipjump/stl/README.md).\n\nA very extensive explanation can be found on the [GitHub wiki page](https://github.com/tomhea/flip-jump/wiki/Learn-FlipJump).\n\nMore detailed explanation and the **specifications of the FlipJump assembly** can be found on the [FlipJump esolangs page](https://esolangs.org/wiki/FlipJump).\n\nIf you are new to FlipJump and you want to learn how modern computation can be executed using FlipJump, and you want to jump onto your first flipjump code - Start by reading the [bit.xor](flipjump/stl/bit/logics.fj) and [bit.if](flipjump/stl/bit/cond_jumps.fj) macros. That's where the FlipJump magic begins. \nIf you want to understand how the deep optimized hex macros work, understand how the next macros are implemented: [hex.exact_xor](flipjump/stl/hex/logics.fj), [hex.output](flipjump/stl/hex/output.fj), [hex.inc1](flipjump/stl/hex/math_basic.fj), and [hex.add](flipjump/stl/hex/math.fj) (understand the concept of the [lookup tables](https://esolangs.org/wiki/FlipJump#Lookup_Tables).\n\nYou can also write and run programs for yourself! It is just [that](README.md#how-to-run) easy :)\n\n## Turing Complete?\nAs the language expects a finite memory, like most of today's programming languages, it's technically not Turing complete. \nYet, It's very capable.\n\nI wrote a [Brainfuck to Flipjump Compiler (bf2fj)](https://github.com/tomhea/bf2fj) to emphasize just that. \nBrainfuck is indeed Turing complete, and the compiler proves that flipjump can run any program that brainfuck runs (besides those that require an unbounded memory).\n\n# Contribute\n\nIf you want to contribute to this project, read the [CONTRIBUTING.md](CONTRIBUTING.md) file, and take a look at the [I-Want-To-Contribute Thread](https://github.com/tomhea/flip-jump/discussions/148).\n\nActually, just writing your own flipjump programs and sharing them with the world is a great contribution to the community :) \nTake a look at what the [standard library](flipjump/stl/README.md) offers, and see some [example programs](programs) to get you inspired!\n",
"bugtrack_url": null,
"license": "BSD-2-Clause-Simplified",
"summary": "The single instruction language - Flip a bit, then Jump",
"version": "1.2.2",
"project_urls": {
"Documentation": "https://github.com/tomhea/flip-jump/wiki",
"Homepage": "https://esolangs.org/wiki/FlipJump",
"Repository": "https://github.com/tomhea/flip-jump"
},
"split_keywords": [
"esolang",
"oisc",
"assembly"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5df74ab41f8f171d9d238c63158929258b8f70a7ac5e8737857fbe4755ae757e",
"md5": "cf180e3acb2f6bd693b30f2c3a860f43",
"sha256": "9a7fb52209535964b94e27b12d260da632aa1412fbdefc0a54c67e027919477b"
},
"downloads": -1,
"filename": "flipjump-1.2.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cf180e3acb2f6bd693b30f2c3a860f43",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8.1,<4.0.0",
"size": 101000,
"upload_time": "2023-12-12T11:33:49",
"upload_time_iso_8601": "2023-12-12T11:33:49.241805Z",
"url": "https://files.pythonhosted.org/packages/5d/f7/4ab41f8f171d9d238c63158929258b8f70a7ac5e8737857fbe4755ae757e/flipjump-1.2.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "78e6c030c646fd6fc7691744d3afc9ab5f784ad0bb8f89f678cecb9f5554026e",
"md5": "271ea31a621626772abbf5983734da22",
"sha256": "f080bdf7468c94131f6859483a19da6f1e9b30d10671f8cf1e629443fc1763f2"
},
"downloads": -1,
"filename": "flipjump-1.2.2.tar.gz",
"has_sig": false,
"md5_digest": "271ea31a621626772abbf5983734da22",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8.1,<4.0.0",
"size": 83005,
"upload_time": "2023-12-12T11:33:51",
"upload_time_iso_8601": "2023-12-12T11:33:51.217137Z",
"url": "https://files.pythonhosted.org/packages/78/e6/c030c646fd6fc7691744d3afc9ab5f784ad0bb8f89f678cecb9f5554026e/flipjump-1.2.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-12 11:33:51",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tomhea",
"github_project": "flip-jump",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "flipjump"
}