While esoteric programming languages aren't particularly practical and are of little use in real world applications, they are a great way to practice alternative methods of tackling problems in a limited environment. The existence of high level, abstracted languages has brought about simpler and shorter solutions to challenges, but the truth of the matter remains that such tools aren't always available to programmers, especially those dealing with microprocessors. For this reason it makes sense to occasionally delve into the unconventional realm of the esoteric, to prepare oneself for similar situations when they arise in their hobbies, schoolwork, or place of work. Brainfuck, developed by Urban Müller in 1993 as a modern variation of Corrado Böhm's 1964 P", is a turing complete esoteric language that is perhaps the most well-known in its niche. Brainfuck boasts an extremely minimalist instruction set composed of 8 commands running off of a simulated "tape" machine that houses both the program text and data memory. The Brainfuck processor has one register that is used as a pointer towards data cells on this tape, and it can increment or decrement the cell it is pointing to, increment or decrement the tape address stored in its data register, enter or exit a loop based on the zero/non-zero value of the cell being pointed at, print out the ASCII value of the cell being pointed at, and take in an ASCII value to overwrite the cell being pointed out. These commands are represented directly by the ASCII symbols "+-><[].," respectively, and all other characters are interpreted as comments. The at once simplistic yet incredibly convoluted nature of Brainfuck (as well as other esoteric languages- this problem isn't one that plagues Brainfuck alone) makes it painful to write, debug, and further edit code. For this purpose, I decided to write a small terminal based Brainfuck debugger for myself to use when writing Brainfuck in the future, and for interested peoples to use as an introductory stepping stone into the world of esoteric languages. Once a program is loaded into memory, the bdg (brainfuck-debugger) allows one to view the tape address by address as a hex-dump, ASCII dump, or as English assembly instructions through multiple windows. It also allows one to set breakpoints, step through instruction by instruction, jump around, modify the data in tape cells directly, and a few other additional features that make for Brainfuck programming and debugging made easy.
Log in or sign up for Devpost to join the conversation.