comp.lang.ada
 help / color / mirror / Atom feed
From: "Chad R. Meiners" <crmeiners@hotmail.com>
Subject: Re: What evil would happen?
Date: Sun, 13 Jul 2003 20:06:30 -0400
Date: 2003-07-13T20:06:30-04:00	[thread overview]
Message-ID: <bess80$2d3v$1@msunews.cl.msu.edu> (raw)
In-Reply-To: 5ad0dd8a.0307131407.4955979e@posting.google.com


"Wojtek Narczynski" <wojtek@power.com.pl> wrote in message
news:5ad0dd8a.0307131407.4955979e@posting.google.com...
> "Chad R. Meiners" <crmeiners@hotmail.com> wrote in message
news:<bes4uv$1o29$1@msunews.cl.msu.edu>...
>
> > > "Functions" with side effects can only inject their side effect into
> > > where they have been hardcoded to.
> > This is wrong.  Function have the capability to randomly introduce side
> > effects just like any other section of code.
>
> Have you read the whole thread?
I read all the root nodes, but I was responding to the single sentence which
is incorrect.
>
> > In my experience, functions are more useful
> > when they are pure.  Sure there are times when a function cannot be
pure,
> > but sub-routine with a side-effect should be made a procedure in most
cases.
>
> I agree that functions should be pure. But procedures cannot return an
> unconstrained value. Again, this is what this thread is about.

However, procedure's can return parse trees.

> > I suggest that if you want to return composites from
> > functions you should return a record type.
> >
> > type Composite(StringSize : Natural) is record
> >      User_Name : String(1..StringSize);
> >      Result    : Boolean;
> > end record;
> >
> > function Parse_User_Name(Item : String) return Composite;
> >
> > However, the following might also be a suitable procedure for the task
>
> Yes, this works, but causes code explosion, and memory copying (when
> gathering all the parsed pieces together). This is what you can neatly
> do in SML with tagged union types, by the way :-)

You are prematurely trying to optimize.  Furthermore,  returning records
does not automatically cause code explosion or extra memory copying.  I have
used similar techniques when writing recursive decent parsers.  The code is
both readable and concise (it is also fast enough for any test I cared to
give it).  If you are going to write any sort of language parser, I
recommended browsing the source for GNAT's parser.  It is probably overkill
for what you want but you can get a lot of good ideas from it.  The way it
represents tokens is inspired. ;-)

-CRM





  reply	other threads:[~2003-07-14  0:06 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-11 19:51 What evil would happen? Wojtek Narczynski
2003-07-11 20:07 ` Hyman Rosen
2003-07-12 12:30   ` Wojtek Narczynski
2003-07-12 17:17     ` Martin Dowie
2003-07-13  1:46     ` Hyman Rosen
2003-07-13 15:29       ` Wojtek Narczynski
2003-07-11 20:08 ` chris.danx
2003-07-12  4:31   ` Nick Roberts
2003-07-12 12:26     ` Wojtek Narczynski
2003-07-12 12:39       ` Preben Randhol
2003-07-12 13:11         ` Larry Kilgallen
2003-07-12 13:22           ` Preben Randhol
2003-07-12 19:04             ` Larry Kilgallen
2003-07-14  8:43               ` Preben Randhol
2003-07-14 10:32                 ` Larry Kilgallen
2003-07-14 11:05                   ` Preben Randhol
2003-07-14 11:31                   ` Larry Kilgallen
     [not found]                   ` <slrnbh53ir.48d.Organization: LJK Software <zSeTW0M3CTPU@eisner.encompasserve.org>
2003-07-14 17:31                     ` Wojtek Narczynski
2003-07-13 15:26             ` Wojtek Narczynski
2003-07-13 17:28               ` Chad R. Meiners
2003-07-13 22:35                 ` Wojtek Narczynski
2003-07-14  0:06                   ` Chad R. Meiners [this message]
2003-07-13 22:36                 ` Wojtek Narczynski
2003-07-14  3:01                 ` Hyman Rosen
2003-07-14  4:41                   ` Chad R. Meiners
2003-07-14 23:32                   ` [ot] languages & academia was " chris.danx
2003-07-14  9:09                 ` Dmitry A. Kazakov
2003-07-14 17:44                   ` Chad R. Meiners
2003-07-14 18:15                     ` tmoran
2003-07-15  8:06                     ` Dmitry A. Kazakov
2003-07-11 21:26 ` Robert I. Eachus
2003-07-12 12:38   ` Wojtek Narczynski
2003-07-16  0:07     ` Robert I. Eachus
2003-07-16  8:11       ` Preben Randhol
2003-07-14 18:52 ` Randy Brukardt
2003-07-14 20:12   ` Hyman Rosen
2003-07-15  2:32   ` Alexander Kopilovitch
2003-07-15  8:19   ` Wojtek Narczynski
2003-07-15 17:33     ` Randy Brukardt
2003-07-16  0:22       ` Robert I. Eachus
2003-07-16  8:36       ` Dmitry A. Kazakov
2003-07-15  5:16 ` Kenneth Almquist
2003-07-15 11:31   ` Wojtek Narczynski
2003-07-18  8:23 ` Wojtek Narczynski
2003-07-18 14:45   ` Hyman Rosen
2003-07-19  0:55   ` Robert I. Eachus
  -- strict thread matches above, loose matches on Subject: below --
2003-07-11 23:04 Beard, Frank Randolph CIV
2003-07-12 12:46 ` Wojtek Narczynski
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox