What is metaprogramming? Roughly speaking,
metaprogramming involves writing a program that
in turn writes a program to do the desired task.
In some cases metaprogramming makes for simpler or more succinct code
while in others it optimizes performance by generating
specialized code at runtime.
Tcl lends itself naturally to this style
of programming. This article illustrates one such use.
Many programming tasks are very simply expressed and implemented through
recursive algorithms, traversing a tree data structure being just one example.
The primary reason recursion simplifies implementation is that the state
of the computation is implicitly maintained, freeing the programmer from
the burden of explicitly tracking the computational state of the
program. For example, in a recursive tree walking implementation,
the "current location" in the tree is implicitly tracked.
However, there are situations where a recursive model does not
fit the needs of an application. For example, the application may want
to traverse a tree in iterative fashion, retrieving one node at a time,
operating on it and then potentially doing some unrelated computation
before retrieving the next node at some unknown point in the future.
Here is where coroutines can bridge the impedance mismatch, presenting
an iterative interface to a naturally recursive algorithm.
A previous blog post described
the representation command and its use
for introspecting Tcl's internal structures for storing data.
I promised a follow-up post that talked about Tcl's compiled byte code
and the disassemble command for inspecting it.
Well, only two years later, here is that post as promised.
Tcl has some commands that are undocumented because they
are liable to change, or even be removed, at any time,
even in a patch release. Nevertheless, these commands can be
very useful in exploring and understanding the inner workings
of Tcl and in some cases, dealing with issues related to performance
or interaction with external systems like COM on Windows.
Tcl 8.6 shipped with the Tcl Database Connectivity (TDBC) API for accessing
disparate SQL database implementations in a standard manner. I happened
to need it for the first time recently and collected my notes
into an introductory article
for the benefit of those who, like me, prefer to be spoon fed.
There is no shortage of hotkey programs for Windows, many of them of high
quality. And of course Windows itself allows you to define hotkeys.
However, a hotkey program in Tcl is not only very simple to write,
it offers the full flexibility and power of Tcl
behind it. Meaning what exactly? Read on.
There are times during software development when you want to run
in interactive mode with
maximum privileges on a system, be God as it were. One might think
running as Administrator would do it but it doesn't.
To be truly omnipotent
on Windows, you have to run under the LocalSystem
It is easy enough with Tcl and this post shows you how.
As a side bonus, it also describes how to inject processes into the interactive
user's desktop to run under the user's account as well.
One of the strengths of Tcl
is the ease of integration with other software, whether they
be COM components, libraries or even executable programs that
are not designed for interaction with other programs. Here we look
the facilities Tcl offers related to the last of these --
running external programs and optionally
interacting with them using standard I/O mechanisms.
As for many pieces of software, one of the issues in testing
TWAPI is the number of different platform
configurations under which the test suites need to be run. Manual
configuration is tedious and error-prone so automation of the process
using VMware and the vix package is a big win.