OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]
RE: [xml-dev] RE: Declarative programming requires a different mindset

>	It is my understanding that a key characteristic of declarative
programming is that statements can be executed in any order, even in
parallel. Do you agree?

Not quite. Declarative programming doesn't use "statements" or
"instructions". It describes the relationship of the output to the input.

>If yes, then anything which forces sequential processing is, by definition,
not declarative. Do you agree?

It's not declarative if you are telling the machine how to solve the
problem, rather than describing the problem.

>At the bottom of this message is a variable, namespace-map, which is then
used by the second variable. The first variable must be created _before_ the
second variable. Thus, a sequential processing is required and therefore it
is not declarative.

Functional composition is a key component of declarative programming: for
example it's perfectly legimate to state that the distance between two
points is computed by the formula sqrt((x2-x1)^2 + (y2-y1)^2). A formula
like that creates a functional dependency: the input to sqrt() depends on
the result of the addition, and the inputs to the addition depend on their
operands, and so on. It's hard to envisage an implementation where a
functional dependency doesn't lead to sequential evaluation. Though not
impossible: pipelining hardware guesses the likely result of an operation
and corrects itself later if the guess was wrong; and sometimes static
knowledge of the properties of a function can allow rearrangement, for
example (x2-x1)^2 might be rewritten as (x2^2 + x1^2 - 2*x1*x2), if my
memory of school algebra serves me right. Such rearrangement is possible
because it's known that the expressions don't have side-effects.

The important thing here is that you haven't imposed a sequential execution
plan, the system has devised one for itself, based on the functional
dependencies in your formula. Where there is no functional dependency, the
system can do what it likes: for example it can evaluate (x2-x1)^2 before,
after, or in parallel with (y2-y1)^2. 

>What is the right way to think about variables that use other variables? Is
it bad, from a declarative programming perspective? 

Think about variables as a convenience to make functional code more
readable: sometimes

let b := f(a)
let c := g(b)
let d := h(c)

is more readable than h(g(f(a))) (the compiler will happily convert one form
into the other anyway).


Michael Kay

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 1993-2007 XML.org. This site is hosted by OASIS