My thoughts on Internet forums.

Recently, while I was on IRC talking to a few people, TheSkorm mentioned that he doesn’t join Internet forums. I, on the other hand, spend a lot of time reading different forums, and replying to them. Why do I do this? Let’s find out.

A long time ago, in a galaxy far, far away, I started lurking at the old blitzcoder.com forums . They were dedicated to the BlitzBasic language. While the forums aren’t around any more, a lot of people still get a warm fuzzy feeling when they talk about the place. This must have been when I was about 12 years old.

After a few months, I joined. Since that time, I’ve followed the community as it progressed through a series of two or three different forums, all run by respected members of the last community. Blitzcoder closed, and Codersworkshop opened. Codersworkshop closed, and Devcrunch opened. etc, etc.

In addition to the Blitz community, I’ve also joined a few other communities. I’m a member of several private forums, as well as the osdev.org forums and indiegamer.com forums. So that’s the history of my forum usage. But the question still remains. Why do I visit these forums?

In my opinion, probably the most obvious reason for visiting and joining a forum is the sense of community it brings to you (me). The internet is a scarily large and largely scary place, and any human contact we can find helps us to understand and feel more at home in the place. Which brings me to my counter-argument. It is not only forums that give us this sense of belonging and understanding. I, for instance (as mentioned at the top of this post), spend a lot of time on IRC, and IM networks in general. And most people I know who are members on forums also use instant messaging. So this can’t be the only reason.

The other really good reason I can think of is that helping other people out feels good. When you’re on a forum (a technical one at least) a lot of the topics are various newbies asking for help with something. Assuming the post doesn’t ask for help with deciding between Emacs and Vi, they generally get a helpful response. So the good feeling in the heart is what it is all about?

Perhaps not. I visit a fair few technical forums. Most of them (with the exception of osdev.org), don’t really give that much help to newbies. I’m sure there are very helpful technical fora out there somewhere… In any case, you can usually ask for and get help on IRC as well. Freenode‘s technical channels are second to none in terms of help. The only benefit with getting help on a forum is that generally the posts are kept there forever, whereas IRC is fairly impermanent.

So why I do visit forums? I don’t know. What I do know is, if I spent as much time on all my forums as I used to on the old blitzcoder.com forums (when I had all the time in the world, almost literally), I wouldn’t have very much time left anymore. I’ve had to abandon reading a few forums in order to have enough time to read the others.

And the strangest thing? I don’t even use BlitzBasic any more. But that’s where I spend most of my forum-reading time.

Lisp Interpreter

I’ve begun work (say… about 8pm last night) on a piece of software that even after one day, I’m very proud of. It’s a Lisp interpreter.

Lisp, as some of you might know, has an incredibly simple syntax that makes it great for writing interpreters for. So that’s what I’ve been doing. At the moment, my software can take an S-expression from either stdin or a file, and create a syntax tree. It can also print out said syntax tree into the original S-expression.

I’m now fleshing out the details on how I want the core of the interpreter, the Eval() routine, to work. I’ve decided I want to use a Forth-like system of primitive and non-primitive words. So identifiers in my symbol table will point to either a syntax tree, which can then be Eval()ed further, or to a machine-code routine.

The hard part about doing things like this is getting machine code loaded into the interpreter system. I’ve come up with a few methods to do this:

  1. A dynamically linked library (.so / .dll) with symbol table entries pointing to their addresses within this library. If I do it this way, I can create a new library of routines without having to create a new interpreter binary. The only problem is, I don’t know how to create dynamic libraries.
  2. Vaguely the same idea as a dynamically linked library, but not using the proper method. That is, compile down to machine code and store the routine in a file with a format of my devising. I think I could do this, but I can’t remember from my operating system knowledge whether it will let me execute code in a data section (which is where the loaded file would be stored).
  3. Compiling the library right into the interpreter. I don’t really want to do this, but I will if I can’t get the other two to work. It is however, the easiest.

I’m looking for people’s input on how they think I should do this. I really have no idea. I can see a lot of flaws in all three methods. So maybe I am missing something.

I’ve learned a lot already. Namely:

  1. If you’re writing function that returns a linked list and it isn’t working, make sure return(List); is written in the function somewhere.
  2. Segmentation faults are never fun. Neither are syntax errors.
  3. English Breakfast tea along with Breakaway chocolate is great. But not in the same cup at once.

Hopefully I can decide what I want to do. If I can, expect a primitive release sometime in the next week or so.