From: | Jason Dusek <jason(dot)dusek(at)gmail(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Imperative Query Languages |
Date: | 2017-07-05 06:42:13 |
Message-ID: | CAO3NbwNaZFuQGTWKWLqPzLM4DruOGGCjxmYz7Yd8cVUuXP7b6Q@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Tue, 4 Jul 2017 at 23:01 Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> I'm pretty sure that that is the model that relational databases (and the
> SQL language in particular) replaced, back in the 70s or so. Look up
> "network" databases (eg CODASYL) and "hierarchical" DBs (eg IMS) for some
> ancient history here. Yeah, you can do it like that, but it's seriously
> painful to develop and maintain. People were more excited about spending
> human effort to save machine cycles forty years ago than they are today.
Network database programming is, indeed, imperative; but as I understand it
there was not much of a planning layer -- the program was the plan. In C#,
one has LINQ; and in Scala and Haskell, monadic comprehensions; and even in
Python one can overload iteration to allow a translation of imperative
syntax to declarative syntax. The goal with these features, is generally to
present a familiar interface to an unfamiliar semantics.
If we imagine network databases have one layer:
Imperative Plan
And SQL databases have two:
Declarative Query -> Imperative Plan
It seems reasonable to say, LINQ, &al. have three:
Imperative Syntax -> Declarative Query -> Imperative Plan
Fortress is rather the same, since it translates imperative to functional
to assembly.
Kind Regards,
Jason
From | Date | Subject | |
---|---|---|---|
Next Message | Chris Travers | 2017-07-05 06:47:18 | Re: Strange case of database bloat |
Previous Message | Chris Travers | 2017-07-05 06:41:15 | Re: Imperative Query Languages |