MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Language vs. Library

  • To: mathgroup at smc.vnet.net
  • Subject: [mg61144] Re: Language vs. Library
  • From: "Steven T. Hatton" <hattons at globalsymmetry.com>
  • Date: Tue, 11 Oct 2005 03:21:37 -0400 (EDT)
  • References: <did316$qfd$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Bill Rowe wrote:

> On 10/9/05 at 1:35 AM, hattons at globalsymmetry.com (Steven T. Hatton)
> wrote:
> 
>>If we look at compiled and byte compiled languages such as
>>C,C++,Java, C#, etc., we see they typically consist of a core
>>language, and standard libraries.  In C, and C++ the demarcation is
>>very clear. I know I've asked a similar question in the past, but
>>it's something that recures to me every time I start working with
>>Mathematica.  Is there a core Mathematica language?  If so, what
>>does it consist of?
> 
> In Mathematica, the obvious division would be the symbols in the System`
> context and everything else. Things not in the System` context are loaded
> using Needs or Get, analogous to using #include in either C++ or C. -- To
> reply via email subtract one hundred and four

That was certainly a nudge in the right direction.  I don't believe that is
quite the demarkation I was seeking.  I'm more likely to consider System`
to be analogous to the C++ std:: namespace.  Also it makes more sense to me
to draw an analogy between C++ namespaces and Mathematica packages, rather
than header files and the use of the #include preprocessor abomination.

The "core language" I'm attempting to identify seems more likely to be
limited to the essential components required to make this happen:

<quote url="http://documents.wolfram.com/mathematica/book/section-A.9.3";>
Mathematica is fundamentally an interpreter which scans through expressions
calling internal code pointed to by the symbol table entries of heads that
it encounters.
Any transformation rule--whether given as x -> y or in a definition--is
automatically compiled into a form which allows for rapid pattern matching.
Many different types of patterns are distinguished and are handled by
special code.
A form of hashing that takes account of blanks and other features of
patterns is used in pattern matching.
The internal code associated with pattern matching is approximately 250
pages long.
When a large number of definitions are given for a particular symbol, a hash
table is automatically built using a version of Dispatch so that
appropriate rules can quickly be found.
<quote>

Mindyou, there is an important distinction between implementation and
language which is not stressed in Mathematica since there is only one
implementation.

Another set of dimensions for the basis I'm attempting to identify seems to
be given here:

http://documents.wolfram.com/mathematica/book/section-A.1.

I've described Mathematica as Lisp on steroids, and I believe that is
probably a very apropos depiction.  An expression is a list (in the Lisp
sense) where a Lisp car is analogous to a Mathematica Head.  

I'm not sure if structural entities such as Module and Block qualify as
foundational in Mathematica, or are derived from more fundamental
components.  Likewise for many of the procedural entities such as For If
Goto, etc. qualify as elementary.

It may well be the case that there are multiple levels of the Mathematica
language.  This would be analogous to the way C++ was originally
implemented in C.
-- 
"Philosophy is written in this grand book, The Universe. ... But the book
cannot be understood unless one first learns to comprehend the language...
in which it is written. It is written in the language of mathematics, ...;
without which wanders about in a dark labyrinth."   The Lion of Gaul


  • Prev by Date: Re: Wick like theorem and "symbolic" compilation
  • Next by Date: Re: R: Problem with circles in complex plane
  • Previous by thread: Re: Language vs. Library
  • Next by thread: Re: Re: Language vs. Library