Chris Woofruff wonders if Python's built-in facility for dictionaries / associative arrays satisfies Ted Neward's desire for relational language extensions. I'm not 100% sure, but I don't think so. To me, Ted's post jumped off the idea of relational operators creating new types (although Ted didn't explicitly discuss it):
relvar[person] people = { fn, ln, age} [ ["Ted", "Neward", 32]
["Don", "Box", 39] ];
relvar[contact] myContacts = dataSet.Tables["contacts"];
relvar[contactsWithAges] peopleUnderThirtyFive =
SELECT people.age, contact.* WHERE people.age < 35
AND people.fn == contacts.FirstName AND people.ln == contacts.LastName;
Console.WriteLine("Ted, age {0}, lives in the state of {1}",
people.FirstName["Ted"].age, people.FirstName["Ted"].state);
contactsWithAges.age.EditEnding += new EventHandler(AgesVerifier);
I've added more typing than Ted proposed (basically, a name for a particular relational structure), define one explicitly in code (people), another one is dynamically typed at runtime (contact structure is read from underlying database), and created a third from a query (contactsWithAges). (The last line is attaching a delegate to the "age" field of the dynamically created type contactsWithAges. )
I dunno' if this is what Ted had in mind, but it's an interesting thought experiment. Would capabilities like this be interresting in a programming language?
P.S. Avi Bryant has actually implemented some relational operators at the language level (ahh... Smalltalk)