Table Oriented Programming Discussion

Continued from TableOrientedProgramming, which is growing TooBigToEdit.

Re: I disagree with your premises / assumptions. (1) "Navigational" is about API, not about structure. One can certainly represent, transform, and query even DirectedGraphs? - which are about as 'navigational' as a 'structure' can feasibly get - in non-navigational manners.

If a given API is the "end point", then any navigating technique involving them is going to be very limited. But I'm assuming one can look inside many of the API's when browsing code, and this "looking inside" is basically node-hopping in a graph.

What do you mean by "looking inside" an API? An API is an interface - the edge of a computational system. Unless you're talking about implementation, there is no "inside". If you are talking about implementation, then Relational is identical to Navigational; there isn't a professional implementation of Relational that doesn't use trees and node-hopping on the "inside".

I meant with regard to studying the "structure" of our software from an app developer's perspective: how information is inter-linked. For example, I might use a ControlTable where another may use VisitorPattern. There is a "structure" to each of these. As far as API's, If one cannot go "beyond" the API's interfaces, then that portion is off limits anyhow and is not a comparing factor. (Note that packages could use table-oriented interfaces in many cases, but in general don't at this time.)

ControlTable and VisitorPattern are not comparable things. The former describes a structure for organizing smallish chunks of code (scripts), and the latter describes a polymorphic traversal mechanism. It's a bit like comparing the internal structure of a beehive to the notion of 'running'. Make more consistent comparisons - you should compare things that are 'alternatives' to one another. For example, you should not compare ControlTable to AbstractSyntaxTree, since the ControlTable does not avoid need for AST to understand the scripts. If your goal is to compare UserInterfaces for IntegratedDevelopmentEnvironments, then make certain you are making fair and reasonable comparisons. The ability to perform some relational queries on code would be nice, but does that really require that code be organized into tables? I think not. But it'd probably be easier with certain language features, such as a flat global namespace. A discussion of which features would make relational code-browser/debugger features consistent and easy to implement is reasonable, but will require you be more precise / less vague about exactly what these IDE features are to be.


Re: NavigationalDatabase fell out of favor not so much because they used graphs/trees, but rather because they didn't much support whole-graph queries, joins, updates, and views. Navigational APIs view and surgically manipulate a database through a straw.

As far as your claim that NavigationalDatabase (NavDB) slumped because they lacked built-in traversal operations, this would imply that adding those features would make them popular. I disagree, because it's hard for most people to formulate usable queries even if they have those. Nobody knows how to create sufficient consistency to make those work well. But, perhaps if they were tried more in the market-place, the situation would somehow fix itself. -t

I mentioned nothing about "traversal operations", and I certainly made no claims involving them.

Perhaps "graph query idioms" would be a better phrase.

Ah, but if "graph query idioms" is what you meant then you're wrong about inability to form usable queries. After all, relational and logic-programming queries are among "graph query idioms". "Traversal" imposes concern for permutation (traversal = visit nodes or edges in a particular order, usually with arbitrary restrictions such as only taking edges from already visited nodes or a set of start-nodes) and that extra concern can make specification in a query somewhat painful. Whole-graph queries, however, do not suggest such restrictions. Whole-graph queries allow for sub-structure pattern matching (i.e. find a subgraph that looks like... - regular expressions and such), in addition to arbitrary relational and logic-programming operations. And such a query might even ask for traversal related information (i.e. give me the shortest path between every connected pair of points), but need not specify traversals.

I don't want to get stuck in a definition tar-pit here. Your argument seems to be that if NavDB's had more built-in standard or commonly-found operations (which we'll delay listing), they would be competitive with relational. Is this an accurate re-statement of your view?

Not really; this 'restatement' is far more generic than my original statement, which makes it less useful.

Well, since it's a statement about popularity that we cannot directly test, I'll forgo any further effort to clarify, other than request an example of a specific fairly-common task that may be easier with a selected new operation or feature.


T. H. Merrett, an academic at McGill University, perhaps shares some of Top's views re encouraging increased application of the RelationalModel. See http://portal.acm.org/citation.cfm?id=1226088 From the abstract:

"Despite its immense success, the relational model of data has been underappreciated. Many wrong claims have been made to the effect that it is unable to handle complex data, to do analytical processing, or to go beyond passe, simple structured data. I have devoted most of a career in computer science to showing that relations can indeed cope with all these, without awkwardness and with minimal syntactic and conceptual extensions. Not only can relations cope; they do the job better." -- T. H. Merrett (quoted; emphasis mine)

Yay! Go Merrett! --top


PageAnchor: Drivers_1

      Vender Model  Driver
      ----------------------------
      *      *      generic.drv
      HP     *      HP_generic.drv
      HP     LJ123  HP_LJ123.drv
      IBM    *      IBM_GENR_01.DRV
      IBM    SP567  IBM_SP567_R1.drv
      Etc...

(A fancier version may include "device_type" and model sub-groupings.)


SeptemberZeroNine


EditText of this page (last edited September 25, 2009) or FindPage with title or text search