In accordance with our meta agreement to have a Language of the Month, and since the list of nominations had a single highest-voted entry at the beginning of August, we have a new featured language! Throughout August 2018, our Language of the Month, nominated by myself, will be:
What's a Language of the Month?
See the meta posts linked above. In short, during August, those who wish to participate should learn (at least the basics of) SMBF, and use it to solve challenges. Participation is completely optional, but is anticipated to be fun!
Information about SMBF
Self-modifying Brainfuck, or SMBF, is an interesting variant of the well-knows brainfuck language. The commands are the same, but the tape is not. It contains the source code when the program starts. Instead of one, it has two pointers, a data pointer with an "origin point" being the cell exactly to the right of the last byte of the source code, and an instruction pointer, which starts at the leftmost byte of the source code. The tape can actually be considered in different ways. Here are a couple of examples:
- As in the official implementation: Execution ends when the origin point is reached by the IP, and the IP can't go to the left of the leftmost byte of the original source code. Source code cannot be added to the left or right sides, but can be modified in-place while the program is running.
- As in mbomb007's Python 3 implementation: Execution ends when the IP reaches an unmodified cell. Source code can be added to both the left and right sides. This implementation defines
0as the EOF value, however mbomb007 has made a version which defines it as "no change", as well as one defining it as
Sufficient documentation can be found at SMBF's esolangs page.
You can download the official Ruby and C implementations from the homepage, and mbomb007's Python interpreter from ideone. Both are linked above. There is also an interpreter over Try it Online!, but beware that inserting null bytes isn't at all easy.