I've been thinking about this issue more generally.  Programming
language enhancement does not seem to be especially a beginner's topic.
But a beginner may not have biases that inhibit greater insight; and
such insight could also be well served by a sufficient conceptual basis
and historical knowledge - to ensure that something new and significant
is really introduced.  After all, programming experts have been mulling
over "new" developments for over 40 years!

Here are few considerations that your discussion stimulated in me.  They
lead to a question for possible enhancement of pearl that I pose at the
end:

1. You can pipe into and out of control constructs in the sh-ksh-bash
family, including for and while loops.  This can be convenient and
elegant, but not absolutely necessary logically.  It shows a sense in
which every control construct "returns" a value including loops.  In
this case that facility is based on a common underlying "medium" of
communication, namely the STDIN and STDOUT streams of chars.  This
"medium" can also be used to link scripts externally, a rudimentary but
powerful form of interprocess communication!  The basic idea has
appeared in several more elaborate forms of greater generality or for
certain application domains including:

A. The "communicating sequential processes" model and language (CSP) of
Tony Hoare.  CSP is a general model for concurrency and a widely and
well regarded useful way to achieve parallelism for non-trivial, real
world and often real time problems.  See http://www.usingcsp.com/.  CSP
has been instantiated in Java and has had active participation in
specialized conferences for 7 years.

B. The use of threads in programming, lightweight and otherwise, in an
effort to make complex systems development more efficient and affordable

/* The common "thread" in between (A), (B) and the discussion is that
CSP and thread programming provide a general mechanism for processes to
pass (and return) information to each other */

C. Image and signal processing and more generally data flow systems and
architectures that have many useful applications and instantiations and
tend to represent a higher level application of CSP concepts.  For
example, AVS/5, see (http://www.avs.com/software/soft_t/avs5.html)

2. Related new specific paradigms include cellular automata (see Stephen
Wolfram's work - http://www.wolframscience.com/) neural nets
(http://www-2.cs.cmu.edu/Groups/AI/html/faqs/ai/neural/faq.html) and the
mathematical theory of dynamical systems (see
http://www.artsci.wustl.edu/~philos/MindDict/dynamicsystems.html for a
definition of the latter).

3. At a more comprehensive biopsychosocial level, all of this fits with
post-postmodernism and evolution to and past the "yellow meme" in Spiral
Dynamics, see
http://www.spiraldynamics.com/reviews/SD/SDreview_Dinan.htm and the
writings of Ken Wilbur, for example
http://wilber.shambhala.com/html/books/kosmos/excerptD/part1.cfm/

4. Lisp as a special case of a programming language is unusually
congruent because all of its programs and the input and output they
accept have the same form, namely they are lists.  That enables a
maximum degree of "recursivability" that can lead to impressive
solutions some areas, for example mathematical theorem discovery and
proof in Lenat's AM program although it didn't conquer the world :), see
http://www.comp.glam.ac.uk/pages/staff/efurse/Abstracts/Why-did-AM-halt.
html

On another hand:

5. A time honored approach to problem understanding and solution has
been to decompose the problem space into a minimal spanning set of
orthogonal "vectors" (constructs, concepts).  In programming its been
found that only sequence, conditionality and iteration (looping)
constructs are needed for Turing completeness (see almost any college
level text on algorithms and data structures).  Often the language is
given certain implementation efficiencies through the use of an
underlying data structure, for example lists in LISP and stacks in
Forth, but in principle all Turing complete languages are logically
complete meaning any program in one can be translated into a program in
another.  Wolfram has demonstrated Turing equivalence even for a simple
cellular automata (ibid).  However, there are a lot of theoretical
issues around Turing equivalence, for example it has been proven that it
is not generally "decidable" ( see
http://www1.cs.columbia.edu/~galley/cs3261/outline.html).  

And

6. While lumping together fundamental capabilities may have some human
or machine implementation efficiencies, particularly for certain types
of problems (or certain types of people), sometimes it has been
precisely the unlumping or decoupling of such capabilities that has lead
to breakthroughs, for example the separation of the existence and
visibility of variables that Nicklaus Wirth made in Modula-3 was a
critical precedent that logically led to object oriented programming as
we know it today!
 
7. Perhaps the single key characteristic that makes perl most resemble a
natural language is that the typing of variables is determined by
context.  That can be viewed as a method for relumping fundamental
capabilities in ways that are hopefully adequate and maybe even
interesting.  How would it be possible to apply this to loops such that
only in certain contexts they would return a value and what would those
contexts be?
Perhaps, for example, it would be useful to implement a tagging system
on all control constructs such that if they were tagged in a certain way
all of their output (if any) was returned using a commonly accessible
read-write communication channel analogous to STDIN and STDOUT for
sh-ksh-bash scripts.  An advantage of this would be to make it easier to
write perl programs that do more complex processing in a way that is
more natural, flowing and intuitive for people.

What do you think?

-tristram


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to