I just found namespaces in Racket too painful (see [this blog post][1]), I spent hours and hours trying to do something I felt ought to be very simple, i.e. sharing a namespace between different files, yet Racket just utterly refused to do it. I RTFM but found it utterly confusing and nothing I tried, including their examples, worked. I asked on the freenode IRC channel, and even then nobody could help me.

After a while I gave up, maybe I am simply not a good enough coder to understand how Racket namespaces work, but either way I worried that if this one aspect of the language is extremely difficult, what else am I going to uncover in the course of the project? On that basis I decided it'd be wise to switch.

Initially I was going to switch to C for portability as I am also working on a parser generator, singular[2], which I thought could be useful to people even before I write it in Terse (I intend to self-host and bring singular into that too), however I worried that the many pitfalls that C brings to the party, e.g. the ease of segfaulting, null pointers, etc. and its lack of abstractions would overly slow me down, so I thought Go would be a better option, especially as it seemed tastefully designed.

My experience of Go so far is one of great admiration and enjoyment, it really is a lovely language, nicely low-level and low-key yet still providing many useful abstractions including proper interfaces, i.e. by implementing the methods of an interface you can treat it as that interface without having to explicitly inherit from it.

To be honest my decision to switch to Go is probably not that defensible as not many people are using it so the initial reason (portability) for switching to a lower-level language is less of an excuse now, so if I'm being honest I have to admit that I wanted a fast language that played nice with Linux (not that Racket wasn't either of these), and I wanted to play with Go, which kinda overrode other considerations.

Most recently I've been very interested in implementing [pattern calculus][3] in the language somehow, as it provides enormous flexibility and offers a formal underpinning to a more fundamental means of expressing abstractions than oo, functional, etc. - in fact my ambition is to have an abstraction which can encompass these paradigms in itself if you want, i.e. you can implement oo or functional or whatever you want. Obviously I am very inspired by lisp in this and many other regards.

The main thing is getting stuff done, this idea has been floating around in my mind for at least a couple years and I've changed my mind about things many times (and will carry on of course when necessary) causing me to throw away work more than once, so obviously I am somewhat focused on actually writing code and getting closer to actually having something rather than just the idea.

Luckily I am pretty damn certain about the core ideas in the language (flexible syntax, the use of pattern calculus, etc.) so that looks to be quite likely.

Anyway, it's really early days, but I am utterly committed to getting this done as I want the language for myself, want it to not be a toy language, and want it to actually do these things I think would be awesome, even if (as is most likely as with any personal language project) no one else uses it :-)

I know I'm digressing from your question, but have to say that I really think one of the most wonderful aspects of programming is the ability to just hack on stuff, no matter how crazy, with just a cheap computer, some coffee and a willingness to put in the time. So glad I was born in a time where that was possible.

[1]:http://www.codegrunt.co.uk/2010/06/28/Racket-Namespaces-Suck...

[2]:http://www.codegrunt.co.uk/singular.html

[3]:http://lambda-the-ultimate.org/node/3695