My main project at present continues to be the development of plot for the novel The Curse of Steel. That’s moving along at a reasonable pace. Off to the side of that task, though, I recently found myself struggling with a different obstacle.
The Curse of Steel is going to be a bit of pseudo-historical fantasy, set in an alternate Iron Age world rather like Tolkien’s Middle-earth or Robert Howard’s Hyborian Era. Part of the project has involved the development of a small set of partial “constructed languages,” mostly for the derivation of names and a few scraps of vocabulary to act as cultural markers.
The process I’ve been using has been to develop an ur-language that somewhat resembles a simplified version of Proto-Indo-European (PIE). I then apply sets of sound-change rules to develop words in my planned collection of daughter languages. The result should be consistent and pleasing to the ear, even if it doesn’t work as a complete conversational language. All of this is fairly routine.
The problem has been that I’ve been doing all of this by hand, and the project has gotten large enough that I can’t keep it all straight in my head. I can’t always remember which word-roots I’ve already used, and the documents I’m using to record them aren’t exactly user-friendly. Meanwhile, whenever I tweak the rules for word formation or sound-changes, I find I’m not applying the tweaks consistently. I’m getting snarled up.
Okay, I realized a while ago, a lot of this would really be better done by a computer. Computers are great at tedious tasks that involve applying procedures consistently across a lot of data. Couldn’t I find a tool that I could use to keep track of my word-roots, record my expanding vocabulary, apply inflectional rules and sound changes, all of that?
So I went looking for software tools that other people had used for language construction. Unfortunately, I didn’t find anything I thought would be useful . . . but earlier this week I realized I had all the tools I needed to build my own.
Years ago I was a professional coder. I did most of my work in the C language and a UNIX environment, but I also taught myself a language called Perl, which is ideal for processing text strings and applying well-defined procedures to them. Couldn’t I build Perl scripts to generate all the possible word roots, apply inflectional rules to them, develop daughter-language vocabulary?
Okay, it’s probably been almost twenty years since I wrote a lot of Perl, but I still have my books, and coding is a little like riding a bicycle. You never entirely forget the skill once you have it. Meanwhile, there exists a nice free implementation of Perl for the Windows environment (Strawberry Perl). So over the last few days, I’ve been starting to build a Perl library that I can use to manage the language construction task – at least well enough to get past the immediate obstacle.
Early results are promising. I’ve just about got a script written and debugged, which will generate all the word roots in my ur-language, according to the PIE-like structure I’ve designed. Once that’s finished and I pull the output, I’ll dump that into an Excel spreadsheet where I can record the meanings I select for different roots. Then I should be able to put together another script that will apply the sound-change rules I’ve designed.
I may show off some of the results of this work over the next few days. Once this side project is done, the conlang process shouldn’t get in the way so badly. If I need a name or a piece of vocabulary, I will be able to generate it quickly, record it, and get right back to writing story.
Not to mention, it’s kind of neat to be writing code again. It’s been a while.