[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: 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). Regards, Michael Kay http://www.saxonica.com/ http://twitter.com/michaelhkay
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] |
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|