I had a blog entry written up on Friday morning, but I hit "save" instead of "publish", so it basically disappeared. Dana mentioned that I hadn't been blogging regularly on Saturday afternoon, so I checked it and published it then.
I went out running just now, and am pretty impressed with my progress. Last thursday night I ran one and a half laps around my road (which I estimate to be between 1/8 and 1/4 of a mile, round-trip). Tonight, I went out and did about three and a half laps. Thursday I had run in the morning as well, so I may have just been more tired, but I'm still happy to have any numerical progress at all to show for my efforts. My legs did better this time. My breating, while not entirely comfortable, wasn't the rapid downward spiral that it had been previously. I hit a bit of a plateu where I was able to keep up with my oxygen needs, even if I had to take big gulps of air through the mouth. "In through the nose and out through the mouth" disappeared by the beginning of lap 2. Tonight, what stopped me was an ache in my right shin (where I hit it on my car door earlier today) and a burning ache in the arches of my feet. My arches felt fine through the third lap, but quickly told me when my time was up.
In the mornings I tend to run around my yard, because it's shaded and there isn't any traffic back there. At nights, I'm free to hit the open road. If I can get a little bit more stamina up, I want to go down the street to the elementary school. I can still remember where all the mile markers on school property, so I will be better able to judge my progress over there. Of course, I don't want to be running around school property during hours, but after dark is fine and daytimes after the semester ends should be okay as well.
I did a little bit of work on Parrot today. I fixed up a bug in the lexical analyzer and submitted a patch for it. I've been taking on a few lex-related bugs recently, as few of the other developers seem to know Lex very well. I'm not super-strong with it myself, but I know enough to read and understand it. Understanding is the first step in software development for a few reasons: (1) you can find where problems are, (2) you can find other code snippets that solve the problem, (3) you can copy+paste code to fix problems. I dont know that I'm at the stage yet where I could freehand write enough code to implement a full lexer myself, because it's not ingrained enough in my mind to make sure I don't forget any key details. With a little practice and a good opportunity, I might just be able to surprise myself.
I started work on another bug, something dealing with the handling of macro-local parameters. In Parrot, macros are pure-text replacements, so they are handled entirely by the lexer (the text-replacement behavior is similar to C's preprocessor, although I don't know whether the preprocessor is implemented entirely in the lexer or not). Handling macro-local parameters is a multistep problem: First, we need to find the names of the variables and store them in a table. After expansion, macro-local variables must be transformed to have a globally-unique name. Second, we must expand the macro-local variable declarations into local declarations of variables with the unique identifiers. The transformed string must be parsed like normal and the tokens passed to yacc, transparently.
Tomorrow morning, it's back to work on the GC. I have a weekly progress report to write up which I will probably do in late morning or early afternoon. I also want to write a use.perl blog post about some progress I've made, probably tomorrow afternoon. Tuesday morning it's the #parrotsketch design meeting where I give a brief summary of my work to the team. I always like those meetings, but they are always very brief. The rest of the week is work, work, work again till Dana comes out to rescue me on Friday afternoon.