WAAVScript – Part 3, What’s an interned name?

WAAVScript – Part 3, What’s an interned name?

This is perhaps a bit of an aside, but a worthwhile exploration of what makes a program more performant than usual.

The setup is this. In any language, there are ‘keywords’, things like ‘for’, ‘while’, ‘add’, ‘break’, etc. In the context of WAAVScript, there is a list of fixed words, and each word has behavior associated with it. Pretty early on, I had to decide, how am I going to associate those words with their behaviors.

There are two places where this association matters. At startup time, the keywords need to be associated with the appropriate function that implements the behavior. Then, when scanning user input, the names need to be isolated, and used as a key to lookup the behavior associated with the name. Perhaps the easiest way to do this is to simply use std::string as a key into a dictionary. Just create std::unorderd_map<std::string, behavior> structure, where ‘behavior’ is some sort of pointer to a function. In the first iteration of the WAAVScript interpreter, that’s exactly what I did. It’s super fast to code it up. You don’t worry about memory allocations, and magic just happens. But, it’s pretty darned slow in execution speed. It’s not the creation of the string objects themselves, its how they are used in the dictionary lookup that makes things slow.

Read More
WAAVScript – Part2, Scanning for&nbsp;Tokens

WAAVScript – Part2, Scanning for Tokens

A journy of a thousand programs begins with the first scanner.

WAAVScript is an interpreted language. That means there is a runtime that looks at input text, and tries to figure out the bits and pieces you’re trying to execute right then and there. Scanning text is the cornerstone to how performant this process will be, so it has to be super blazing fast, not use up too much memory, and deal with all the little corner cases that might arise.

WAAVScript has a few core data types and constructs to deal with, which can roughly be summarized by the following, which is actual WAAVScript code.

Read More
WAAVScript – Part 1,&nbsp;Motivation

WAAVScript – Part 1, Motivation

A catchy title for sure. A few years ago, I wrote a PostScript interpreter using the Lua language, and blend2d for graphics. The fruits of those labors ultimately turned into lj2ps. That interpreter worked fairly well, and it was my first attempt at doing some kind of language. For those who don’t know, PostScript was all the rage back in the 80s/90s, when laser printers first came on the scene. NeXT computers made it famous by supporting Dispaly PostScript for their then groundbreaking graphics display on their computers (shades of gray!!).

Well, six years later, and I’m still playing around with vector graphics, and I thought, but these days I’m doing a lot more C++ than lua development, so I thought I’d try to update the PostScript interpreter, with a twist. When I wrote the original, it was fairly focused time for about two weeks to get it running, and probably a few months to really flesh out all the quirks. I got pretty far, and for the most part could render about 90% of anything I saw in the wild. You’d be surprised what kinds of things are still done using PostScript. It’s not super difficult to migrate code from one language to the other, but lua has a certain memory management system, which I did not want to replicate, as well as an class system, which is not easy to do in C++, so I kind of wanted to start from scratch. But here’s the twist. Instead of just brute forcing it, and coming up with everything on my own, I wanted to leverage current AI tools to do it. Rather than just typing in all the code from scratch, I wanted to see how hard it is to prompt the AI tools to create the actual code for me.

Read More
WAAVScript – The birth of a&nbsp;language

WAAVScript – The birth of a language

A catchy title for sure. A few years ago, I wrote a PostScript interpreter using the Lua language, and blend2d for graphics. The fruits of those labors ultimately turned into lj2ps. That interpreter worked fairly well, and it was my first attempt at doing some kind of language. For those who don’t know, PostScript was all the rage back in the 80s/90s, when laser printers first came on the scene. NeXT computers made it famous by supporting Dispaly PostScript for their then groundbreaking graphics display on their computers (shades of gray!!).

Well, six years later, and I’m still playing around with vector graphics, and I thought, but these days I’m doing a lot more C++ than lua development, so I thought I’d try to update the PostScript interpreter, with a twist. When I wrote the original, it was fairly focused time for about two weeks to get it running, and probably a few months to really flesh out all the quirks. I got pretty far, and for the most part could render about 90% of anything I saw in the wild. You’d be surprised what kinds of things are still done using PostScript. It’s not super difficult to migrate code from one language to the other, but lua has a certain memory management system, which I did not want to replicate, as well as an class system, which is not easy to do in C++, so I kind of wanted to start from scratch. But here’s the twist. Instead of just brute forcing it, and coming up with everything on my own, I wanted to leverage current AI tools to do it. Rather than just typing in all the code from scratch, I wanted to see how hard it is to prompt the AI tools to create the actual code for me.

Read More
ChatGPT Gets Brutally&nbsp;Honest

ChatGPT Gets Brutally Honest

I’ve been trying to really use ChatGPT to help me with programming. I’ve tried to drive it like “I’m going to tell you what I want, and you write the code”. This is helpful in general, when you’re talking about fairly non-unique code that has is publicly available. It’s good at boilerplate, which might account for a large percentage of(80 – 90%) of what we code on a daily basis. But, when it comes to nailing the details, or novelty, this is where it falls down hard.

Read More
CAI Wrote a PostScript&nbsp;Interpreter

CAI Wrote a PostScript Interpreter

A catchy title for sure. A few years ago, I wrote a PostScript interpreter using the Lua language, and blend2d for graphics. The fruits of those labors ultimately turned into lj2ps. That interpreter worked fairly well, and it was my first attempt at doing some kind of language. For those who don’t know, PostScript was all the rage back in the 80s/90s, when laser printers first came on the scene. NeXT computers made it famous by supporting Dispaly PostScript for their then groundbreaking graphics display on their computers (shades of gray!!).

Well, six years later, and I’m still playing around with vector graphics, and I thought, but these days I’m doing a lot more C++ than lua development, so I thought I’d try to update the PostScript interpreter, with a twist. When I wrote the original, it was fairly focused time for about two weeks to get it running, and probably a few months to really flesh out all the quirks. I got pretty far, and for the most part could render about 90% of anything I saw in the wild. You’d be surprised what kinds of things are still done using PostScript. It’s not super difficult to migrate code from one language to the other, but lua has a certain memory management system, which I did not want to replicate, as well as an class system, which is not easy to do in C++, so I kind of wanted to start from scratch. But here’s the twist. Instead of just brute forcing it, and coming up with everything on my own, I wanted to leverage current AI tools to do it. Rather than just typing in all the code from scratch, I wanted to see how hard it is to prompt the AI tools to create the actual code for me.

Read More
Challenging Assumptions for Better&nbsp;Software

Challenging Assumptions for Better Software

Software development is a lonely quiet art where souls can easily be crushed into despair. Other hand, it’s also a place where an individual, or team, can rise to levels of triumph and creation that can feel earth changing at times.

As a largely solo developer, I find myself zeroing in on challenges that really don’t warrant the attention that I give them, but I just can’t let them go. Case in point, I’ve been playing with SVG parsing for the past couple of years because I’ve chosen this format as the best way to represent vector graphics in the apps that I develop.

Read More
Two Years with a&nbsp;GPT

Two Years with a GPT

My first experience with a “GPT” was copilot, integrated into Visual Studio Code. I was working inside Microsoft, and the dates seem fuzzy now, but it’s been roughly two years. What is a “GPT” anyway? Generative Pre-Trained Transformer. It says what it is right on the box. Well, at least in nerd speak. Let’s break it down though, because it’s instructive as to the state of “AI” at the moment.

Read More
A View from The Other&nbsp;Side

A View from The Other Side

Well, it’s been a minute, as they say.

I would say that my family’s current epoch started about a year ago, around the time I purchased the Apple Vision Pro visual computing device (VR goggles…). I was recounting the last year in an email, and it was a real feature length movie of activities. The center wasn’t necessarily around technology, but there sure was a lot of it.

Back in Feb. of 2024, I purchased my AVP. Once summer hit, we ended up heading to Denver Colorado to meet up with Stewart Tucker Lundy. Stewart is an irascible quadriplegic who was doing quite fine in the world before I ever met him. We put the AVP on his head, and in his view, it’s as if a who new world opened up for him. I mean, VR goggles are great for watching movies on a giant screen 1 inch from your eyes, but when you have a tool such as this, that’s really great at eye tracking, has low latency, and gives your hours of comfort, it can actually change your view of the world, and how you can interact in it.

Read More
Digitizing Treasures

Digitizing Treasures

So, everything is supposed to be in “the cloud” already, right? I mean, how many times have I already backed up my DVD collection, and tossed away the physical discs? I mean, you need those physical discs in case you’re ever raided and need to prove you’ve actually purchased those hundreds of movies, and not just downloaded them from the internet right?

Read More
Moving to India, and&nbsp;Re-Treasuring

Moving to India, and Re-Treasuring

Well, it’s been a long time coming, but the family is going to be moving to India for a while. It met my wife in India, we got married, and soon enough moved to the US, because that was my job base. That was back in 2008. Now we’re in 2025, I’ve retired from MSFT, and it’s time to go back and be interactive with that side of the family.

There is sure to be a lot of adventure ahead, with trials, tribulations, triumphs and rewards. The only thing for certain, is that we’re not certain how it will turn out, but we’re up for the challenges, so here we go.

Read More
On the Eve of a New&nbsp;Year

On the Eve of a New Year

Here it is, the last day of 2024. Of course, when a year turns over is a pretty arbitrary thing in the grand scheme of the universe, but I take a pause anyway, because the rest of the planet does. Some years back, I learned the technique of making New Year’s Commitments, rather than Resolutions. The different being, resolutions are typically ditched after the first or second week of the year. One workout at the gym, and that’s it. One run, one turn on the new treadmill. You’ve just got higher priorities… A Commitment, on the other hand, carries the weight of something you can’t escape just after the first try. You’re committed, it has priority, you’re not going to let something else muscle it out.

Read More