Lately, I’ve been integrating Copper into projects and everything is working seamlessly. Copper has finally matured to being robust enough for full scale applications, not just tinker projects.
Yesterday (June 1; WordPress is wrong), I finally fulfilled my objective of integrating Copper into a software application (a 3D mesh app) that had originally determined the language goals. Life and various other distractions were part of the reason I hadn’t finished sooner. I had made one solid attempt prior to this latest one, but that attempt was going in the wrong direction and ultimately adding no benefit to my application. I was limiting Copper to merely working with preexisting features of the application and serving as a coding interface for setting them up. Now, with this latest attempt, Copper actually adds a unique customizable aspect to the application. (In this case, Copper objects themselves form the structure of the 3D object – thereby allowing easy editing of the entire object. The Copper structure is then converted on output to the native application format.)
The integration of Copper with the application proved to be somewhat tedious because I decided to build complex Copper function objects (having members) manually. This was ideal for the usability of Copper. Perhaps being the developer of Copper made the most surprising part possible, but I’m pleased to say that out of all of the code directly responsible for integrating Copper, there wasn’t a single bug! No kidding. All of it worked correctly! There were, of course, bugs with surrounding or related code, but even these weren’t as bad as could be expected.
Admittedly, I have some experience integrating Copper into other applications. Currently, I’m using Copper for setting up the user interface for a more complicated system, and this involves a new sub project: Curri.
Curri is the boiler plate code for applications that utilize Copper Bridge to connect Copper and Irrlicht. Over the past few months, the latest repository version of Irrlicht has had improvements in the scripting side that make using scripting languages less tedious. Namely, the members of C++ classes of Irrlicht that are set by scripting languages now have default values when the scripting language doesn’t provide them. For the time being, I was using a modified version of Irrlicht that avoided the issue by only setting a few C++ members. Ambiguous as it sounds, it would make more sense by just glancing over the Irrlicht code. However, my changes to Irrlicht may perhaps be no longer needed.
All that said, Copper is ready for usability in applications, and I’ll soon be posting Copper Bridge and Curri online for download. I have been using premake5 for compiling my projects, and it’s a whiz to use.
Now that I have successfully integrated Copper into applications without errors, the Copper interpreter is now officially in maintenance mode, and it’s unlikely that it’ll ever be modified hereafter. It’s easy to add extensions, so there’s no need to make the main codebase any larger, and keeping it small will ensure that it’s always convenient for small projects. Currently, it weighs in at about 340.4kb.
I’ve enjoyed creating Copper and look forward to working with it again and again. Perhaps some years ago, it would have been sad to say I’m done creating languages, but with Copper, I’m proud to say I haven’t seen anything quite like it in its simplicity, ease of use, integration, and fail-safe nature. Why write something else? It’s time to have fun with it!