Zzo38 is undoubtedly the most prolific of esolangers. In addition to his long list of fully developed esolangs are his unimplemented ideas and experiments. He has been creating languages since 1994 with DZZZZ, a Funge-like language not much younger than Befunge.
» Is there a meaning behind your pseudonym zzo38?
"ZZO" is like "ZZT", which is a DOS-based game engine I have used in the past (and still do). (ZZT wasn't Free software at the time, but it is now.)
The numbers 3 and 8 are from I wanted to decorate a pillow with numbers but those are the only numbers they had.
» Your list on the esolangs wiki of unusual features of languages is fascinating, e.g. how COBOL can change the locations GOTOs point to. Do you draw from these in designing your own languages? What are the most esoteric features you've found in non-esoteric languages? What do you consider the most non-intentionally-esoteric language?
It had been said that PostScript is both esoteric and non-esoteric at the same time. Additionally, I would think PostScript is both general-purpose and domain-specific at the same time, too.
I have not used everything listed on that page. Some information comes from elsewhere. Some are my own domain-specific languages, such as Free Hero Mesh (which is a puzzle game engine). Being unusual is a "side-effect"; it is designed with my ideas of how to make that particular domain. Some of my ideas of computer programming are just somewhat unusual in general, I suppose. (For example, many people target Glulx by writing in Inform, although I prefer to write directly in Glulx.)
ED NOTE: The list is worth looking over for unusual language features in non-esoteric languages, those that have no negative numbers, or all kinds of non-standard features.
» How did you draw together the unusual lexicon and command set for the AAAAAAAAAAAAAA!!!! language in 2006? It's an interesting choice to make anything apart from A, space and ! Invalidate the program, rather than ignoring them, making it impossible to polyglot. Its method of self-modification via a special register is unusual. Were you surprised that the language was finally proven Turing Complete last year?
Uncyclopedia is where the "A" and "!" are coming from. I am not sure where I got the command set from; it was probably my own idea.
ED NOTE: Here is the complete proof, created last year, which constructs a tag system in AAAAAAAAAAAAAA!!!!
» You have quite a few unimplemented languages with well-defined definitions, like TMTNT, Suxesol, and Memfractal. How do you make the decision that a particular idea needs to be implemented to be fully explored, vs leaving it as a gesture?
There is an implementation of Memfractal now; I did not write it by myself. Really, anyone who wants to can make an implementation.
Reasons for leaving a language "unfinished" may be for various reasons, including (but not necessarily limited to):
1. Forgetting about it.
2. Having some ideas but not all of them.
3. Not bothering to write an implementation; sometimes someone else will do.
4. Not knowing the answer to some questions which might be relevant when you do want to complete it.
5. It being uncomputable, or requiring more memory or speed than you have in your computer (or in the universe), so it cannot always be implemented.
6. Not knowing how to implement it.
I also have a few esolangs that aren't named, as user subpages (such as "User:Zzo38/Untitled_4").
» You use technologies that are less-used now and associated with a more open internet (irc instead of, say, discord), and some that are considered obsolete (gopher). Is this more about openness, about the commercialism of the web, or something else?
Openness is one thing; other is simplicity of the protocols, and better interoperability of different implementations. IRC can be used without any specialized software (although having a IRC client is still helpful). Other protocols, such as NNTP, are better for other things.
Instead of using web forum, can use NNTP; I can use my program, you can use your own program, and it will work. That would be better than a slow and too much animation web page, which is doing things that you don't want. CSS and JavaScript are used too much in web pages, too.
» What is it like programming in Glulx? Does low-level programming appeal to you in general -- is it more about the retro-computing aspect, or something else? Are there behaviors you can get from Glulx that you can't working higher-level?
Well, for one thing, I just found the documentation for Glulx easier to understand than that of Inform. (From what I do know of Glulx and Inform, I find programming directly in Glulx looks better to me, anyways.) Most of the behaviours are probably possible in higher-level code too, but I don't know how. I don't like such "read only" programming languages as Inform7 so well, and also it is known to be slower, and I think it is more difficult to see how it is working. So, I use the assembly language instead is better.
Programming directly in Glulx is not as complicated as it might be thought at first. (You do, however, have to write the code to set up the windows, but that isn't very complicated; Glk (which is the usual I/O layer in Glulx) manages most of it.
Programming the game is the easy part; the hard part is knowing what to write in terms of story, etc.
Here are some examples of Glulx codes that I wrote, in order that you might see how they are programmed like:
http://zzo38computer.org/xyzabcde/2src.zip (an incomplete text adventure game)
http://zzo38computer.org/zmachine/interp/gluzma.zip (Z-machine in Glulx)
I do have an interest in retro-computing, but also, I can program what I want the code to do, and take advantage of it. I don't need the higher-level codes; a macro assembler can be used if needed. I do work with other low-level code too, even I have done a few NES/Famicom things in 6502 assembly language (Although, with NES/Famicom, programming in assembly language is common, although there are some programmers who prefer C or other things). Sometimes the unofficial opcodes are useful, which are applicable to NMOS 6502.
There is also mapper design. My own designs use some things which are more unusual, because I find them useful.
One example perhaps deserves some explanation:
- The bank switching register could be connected to CPU address bit15 and bit12, and ignore the read/write signal
(on NES/Famicom, internal RAM is at $0000-$07FF and mirrored at $0800-$08FF, $1000-$17FF, and $1800-$18FF) - If you write to $1010 then it will bank switch and also save in RAM at $0010.
- If you then write to $1011 it also bank switches but saves it separately, at $0011.
- If you then read from $1010, that also causes a bank switch, restoring the previously selected bank.
- Or, maybe you will write to $0010 without causing a bank switch, and then later read from $1010 to cause the bank switch with the stored value.
Unlike the other mappers, you do not need to first read and then write to the bank switching register, making it faster.
Also, this means less components are needed in the cartridge, too, so the total price may be less.
» You have a lot of languages that others have picked up, proving their computational class, or completing works-in-progress of yours, such as your Untitled 1, becoming Crement (completed by ais523). What is the community aspect like of esolanging? How did the collaboration with ais523 come about, and were you surprised with the direction Crement took?
I wasn't surprised that Crement was proven Turing-complete; that is what I thought at first, actually.
(Actually, I had the same idea of implementing a Minsky machine in Crement, although I didn't write it out.)
» How does Ligature Machine work computationally and how it's connected to TeX?
It is related to the font metric format used in TeX. In TeX font metrics, every pair of characters can have a ligature or kern. If it is a ligature, it adds a character, optionally removes the left or right character, and optionally advances. The different commands in Ligature Machine esolang correspond to the different kind of ligature modes in TeX.
» Could you describe Free Hero Mesh for those of us unfamiliar? The sample code you have for it on your "unusual features" page feels esoteric. Where did this game engine come from and is it explicitly esoteric?
Free Hero Mesh can be found at: http://zzo38computer.org/fossil/heromesh.ui (It is a Fossil repository, with full source codes and full documentation.)
I made Free Hero Mesh because I wanted to play Hero Hearts puzzles on Linux as well as to improve the game engine.
Many of the features of Free Hero Mesh have been designed for compatibility with the original game.
Free Hero Mesh includes a converter to decompile the P-codes of Hero Hearts; they are decompiled into the Free Hero Mesh format which is not the same as the original. (The original Hero Hearts source format is somewhat like a cross between C and BASIC; the P-codes, and Free Hero Mesh, use a stack-based format instead.) I have then made various experiments to ensure that the behaviour is correct. Since Hero Hearts puzzles include solutions, these are already test cases "for free", any Free Hero Mesh has a -a switch to execute these test cases.
I had then added many more features into Free Hero Mesh that the older game engine doesn't have; there are also many bug fixes and other improvements. (Some bugs remain for "bug for bug" compatibility, though.)
So, now Free Hero Mesh is 10x better than the original Hero Hearts game engine, I think. (Actually I have found some bugs that are in the puzzle sets, not in my implementation when doing so; sometimes I was able to fix them.)
About being "explicitly esoteric", I think that it isn't, but still may be of some interest. Some features are in there for compatibility; others are there because I found them useful or that is the way I thought to do it. Due to this, some are rather ordinary stuff and some are much more strange (sometimes my ideas just are strange, I think; other times they are more normal). You can read the documentation if you want to see all of the commands.
One feature of Free Hero Mesh which might be of interest to those dealing with esoteric programming is the preprocessor.
The preprocessor is Turing-complete, even if the only built-in macros being used are {call} and {define}. (The documentation describes how to make a tag system out of this.) But there is the other question: What other subsets of the built-in macros are Turing-complete? Is {define} alone Turing-complete? What if you use other subsets not including {define}?
Example code in Free Hero Mesh is also included in misc/sokoban.tar.gz in the repository, and in the Deadfish article in the esolang wiki.
I also hope that anyone who is interested in this kind of puzzle game can help with and/or use this project too.
(Some people on the IRC do seem to have an interest in puzzle games like this and others.)
» What is the community aspect like of esolanging? It seems you have collaborated on some work, and others have written interpreters or proofs for your languages. Do these come from conversations on IRC, or elsewhere? Did you first connect with them through the wiki?
Some collaboration is IRC, and some is on the wiki. But some collaboration is done without needing to ask first (which is OK), for both others on mine and my working on others' too.
Many of these collaborations can really be done "independently"; you can write a program in something, implement it, prove it, etc without necessarily needing to ask them more questions. One reason to ask is if things in the specification are unclear, or if there is an implementation that doesn't see, to match, etc. Another reason you might ask a question is if you have some ideas about a proof of the computational class but haven't actually proven it. Another reason can be that you might have suggestions about variants that might be interesting.
» In addition to the specification-only languages, you have a list of ideas, which are looser. It is quite an enormous list. You have likely posted more to the wiki than anyone else. Can you describe how this list came together and if you're still contributing to it? Are there any ideas there that nag at you, ones that you would like to complete?
I am not the only one who posted to the list of ideas. I started it, but since then a lot of other people added stuff there.
When I do have more ideas, I do write on them, but recently I have mostly been doing other things recently.
We can see that there are many kinds of possible ideas, and then there can also be many more that are not yet written.
» Any advice for people starting out in esolangs?
Esoteric programming can be made of many things, such as: experiments, jokes, etc. There are many different ideas. You need not always start in the same way, nor in only one way at once.
You can consider whatever aspect is appropriate, whether code size, computational class, mathematics, format (text, music, graphics, etc), quines, polyglots, etc. or something else not yet considered. There are a variety of possibilities, and if you can figure out a new one (such as the one which has not yet been considered), then you can do that, I hope. They say that 90% of anything is no good, so that includes esoteric programming, too. (You can still write it; I believe freedom of speech, you can write what you like to write; but, many of them won't be as good, but then you might write some good ones too.) (Sometimes you also might not know at first, if it is good, anyways, so you will have to try. But, maybe you can look to see if someone else has already made that or not.)
Working with esoteric programming does not always mean inventing a new esoteric programming language, either.
- You can write implementations of existing ones. You can try to write conversions one into another, if they are very different you can try to prove mathematically how to do so.
- There are computational classes. (Are there some computational classes not yet considered?)
- There can be polyglot programs, code golf, quines, etc, both esoteric and non-esoteric programming languages.
(Sometimes polyglots and such things can be of some use (e.g. my C programs usually include a shell script for compiling it), but usually is just because you like to do it, not for a real use.) - There is also working things that aren't esolangs or aren't programming languages at all. For example, constructing computation in Magic: the Gathering, or Wang tiles, or Minesweeper.