It’s a common problem. When we invent things we need to name them, and that’s kind of hard. I need a name for my ‘sigmoid’ thing. I need a proper name for the concept of functionality orientated design. I need a name for my new language.
I could call it D, but the language already exists. In fact I think there is a programming language for every letter of the alphabet. I guess I could start using greek letters. How about something nice and pretentious, like Ω for the last language you’ll ever need (*cough*). Let me check. Oh, it exists, darn it: “Omega is a prototype-based programming language created by Günther Blaschek in the spirit of Smalltalk”.
That’s the problem with languages. There’s too many of them.
What I am working towards, of course, is a dangerous thing. I mean programmers are not meant to create new programming languages, any more than musicians are supposed to write new pieces of classical music that actually sound pleasant. It’s just not done.
I already have received a hate post for my efforts, in the past. Apparently, even suggesting that I would want to make my own programming language must indicate that I am a mad man and a serious threat, therefore, to a someone’s model of the world.
Well, the language is just about completed, in my head. One side effect of the Light Engine (LE) is that it is building the architecture of the language using C++. I can see a path for rolling LE into my language. Hang on, why not call the language Light? Bingo! That’s the new name for it. Light, because it aims to make programming a creative and light experience. I know some people will equate it to “lightweight”, but you know that’s the techno-bias. Think about it. If I were a painter, I’d be attracted to a paint brush brand called “Light”. You don’t want heavy paintbrushes as a painter, and as a game designer I don’t want to use heavy tools.
Notice I label myself as a game designer. This is potentially dangerous too. As much as naming things is important, labels can be risky things to throw about carelessly. I already can think of a certain crowd of people who would jump on that to dismiss me as a programmer, just because I said it. I can think of another person who would stand firm and stare me in the eye and swear that I am not a designer. Never mind what I am, I say to them, you all need to take care of who you are… I know what I am. I am a creator of games (who’s admittedly not been creating much in recent years, but that is about to change).
If my art is designing and building games, then the basic skill I must have in order to do so is to be able to program. And the computer, and the language, and the toolsets and everything else are the tools of my trade. I want them to be well crafted tools. But I can’t buy them off the shelf, or at least I don’t want to…
Some may ask “Why does the world need another Engine?”. Well it doesn’t, but I do. I am pretty confident that this will be the last engine I will write, all the previous engines not having belonged to me (because I was employed by the company), or having relied on middleware (remember Renderware?) or being developed with partners who went bust and I did not have the strength to fight to keep it (RIP Trecision (sad) and DC Studios (no comment) ).
So, you may ask, why don’t I just use something that’s already out there, some middleware… well I do not want to ever use middleware for anything ever again. When I was working on Soccer 3 (aka Total Control Football, partnering with the now defunct DC Studios), we were using Renderware. And during development EA bought it. This was… a really… depressing moment. The problem with using technology that you do not control is that one day you might wake up and not have it any more.
How about open source? Well that’s possible, but the usual problem is that they are normally anything but light. I have used Ogre for instance. But, I want to create new inventive games, for which I need to be able to rapidly prototype and for which I want lightweight tools, and Ogre is anything but lightweight.
So, I decided to start from scratch, with OpenGL, and apply all my experience in software design to come up with the ultimate solution for my needs. And I am not caring how long it will take. I just want to do it, because I want it done and I want it done right.
The interesting thing is that various strands are coming together, converging to a final solution and I can project that the new language is involved.
So, you may be curious as to what this language is about. Well I will reveal a few characteristics here:
- It is not object orientated.
- It supports multithreading natively
- Data is stored in a global database
- It is event driven
- It implements multithreading with a variant of the co-routine concept
- It implements inheritance in a homogeneous way
As I look at this list, the LE architecture also matches these characteristics, except that there are some OO parts, because I am programming in C++ and it’s appropriate. But the truth is as I look at what I have done so far, that in order to get what I want I have to push C++ to its limit. I can hear it creaking. Ultimately, C++ cannot provide the answer to my needs, although I expect the compiler and runtime to be built with it.
I hope this all works out, because I can really feel that the other side of this project there is a whole new world. One in which bugs are a lot less likely to appear, where programming focuses on design of algorithms and data layout rather than header files, pointers and types. Where performance can still be maintained. Where multithreading is elegantly and robustly implemented. Where bloat is a thing of the past. I can see it, and when I get there I know it will help me create new games, which has been the whole point of my relationship with programming ever since I started aged 13.
Of course, talk is easy. If you excuse me, I better get back to my work.