[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: RE: Declarative programming requires a different mindset

  • From: "Michael Kay" <mike@saxonica.com>
  • To: "'Costello, Roger L.'" <costello@mitre.org>,<xml-dev@l...>
  • Date: Wed, 24 Mar 2010 12:34:05 -0000

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!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.