[comp.sys.amiga.programmer] Manx vs. SAS/Lattice

kuch@reed.edu (04/09/91)

I'm a Manx owner who recently received the 5.0d upgrade.  In light of the major
and crippling bugs in 5.0a and 5.0b, I have some apprehension about getting
started with it.  Does anyone out there have any experiences to report?

I'm also wondering if Manx has been left behind in the functionality race.
Can any users out there give me a run through of the highs and lows of each
package as they see them?  I have no experience with any Lattice release later
than 3.0 and would like to hear what's up.  If it sounds favorable, I may end
up making the jump to SAS.  Comparisons/contrasts and feature summaries for
SAS especially will be helpful.

By the way, did anyone notice that the Manx ad on the inside front cover of the
first issue of the AW Tech Journal mentioned version 5.2?!?!  Is this something
they really plan to get out soon, or were they hoping that the Journal would be
another six months in appearing?

Thanks a lot.

				Jerry

shields@yunexus.YorkU.CA (Paul Shields) (04/13/91)

kuch@reed.edu writes:
>I'm a Manx owner who recently received the 5.0d upgrade.  In light of the major
>and crippling bugs in 5.0a and 5.0b, I have some apprehension about getting
>started with it.  Does anyone out there have any experiences to report?

Sure, I've been using 5.0d for the past 4 or 5 months on a full-time 
project, so I've had lots of time with it. 

It works quite well for me.  Here are the problems I have encountered:

1) There are a couple annoying problems with sdb, all of which have fairly 
easy workarounds...

  - If you quit before single-stepping at least one instruction,
     sdb may hang.
  - If you resize sdb's window before it is finished loading your
     program, you sometimes crash.
  - If you distribute source modules throughout several directories,
     realize that sdb will only look in the current directory for
     source modules.  I found this really annoying because I put
     source in various places to help manage complexity.

2) If you use any floating point math functions, you'd better make
sure you put the -lm option before the -lc option on the link command.
The documentation says that the non-math printf library will print "f"
or "g" when you try to print floats, but my actually it silently
fails.

3) When linking with more than 64K of initialized data, the linker
complains and there seems to be no way to get it to work without
placing the data in the code segment. I am uncertain whether that is
satisfactory, but it works.

4) The optimizer is really inadequate.  This is why I'm about to take
the plunge and try using gcc to optimize instead.

>I'm also wondering if Manx has been left behind in the functionality race.
>Can any users out there give me a run through of the highs and lows of each
>package as they see them? 

I haven't used Lattice, but Manx appears to be fully ANSI compliant.
(If any of you know better, do tell.)

What functionality would be nice? 

  I have used the Microsoft codeview debugger on PC's, and think it
would be a "good thing" (tm) for the Manx debugger to watch variables,
ie: to display the values of a list of variables at each single-step
automatically.

  An execution profiler would be nice.  It's time for me to start
tweaking the speed of my code up..  a profiler it would be _so_
helpful since the optimizer doesn't work well enough.

-- 
Paul Shields

wally@pallas.athenanet.com (Wally Hartshorn) (04/15/91)

In article <m0jQ2YL-0003PWC@reed.edu> kuch@reed.bitnet (Jerry Kuch) writes:
>first issue of the AW Tech Journal mentioned version 5.2?!?!  Is this something
>they really plan to get out soon...

I called Manx about a week ago and was told that v5.2 would be shipping in
4-6 weeks.  That would mean early- to mid-May.
-- 
Wally Hartshorn (uunet!pallas!wally or wally@athenanet.com)
President, Amiga Computer Enthusiasts of Springfield (ACES)
Chronicler, Shire of Swordcliff, SCA
Sysop, The Quest, F&SF BBS, Citadel-68K node US (217) 546-7608

stephen@cia.docs.uu.se (Stephen Cooper) (04/19/91)

22394@yunexu
Sender: news@kuling.UUCP
Distribution: world
Lines: 61

In <22394@yunexus.YorkU.CA> shields@yunexus.YorkU.CA (Paul Shields) writes:

>kuch@reed.edu writes:
>>I'm a Manx owner who recently received the 5.0d upgrade.  In light of the major
>>and crippling bugs in 5.0a and 5.0b, I have some apprehension about getting
>>started with it.  Does anyone out there have any experiences to report?

>Sure, I've been using 5.0d for the past 4 or 5 months on a full-time 
>project, so I've had lots of time with it. 

>It works quite well for me.  Here are the problems I have encountered:

>1) There are a couple annoying problems with sdb, all of which have fairly 
>easy workarounds...

[...lot's of bugs deleted -- don't you wish it were that easy...]

Yet another bug in AztecC 5.0d:  (YABIAC? :-)
Compiling this:
 
void
DrawCurves (void)
{
  SHORT xy[MAXPOINTS * 2];
  struct Border BezierBorder =
  {0, 0, 1, 0, COMPLEMENT, MAXPOINTS, &xy, NULL};
 
  get_polypoints (DrawBezier, Bezier_Window, &BezierBorder);
  return;
}
 
will give internal error #40, while compiling this:
 
void
DrawCurves (void)
{
  SHORT xy[MAXPOINTS * 2];
  struct Border BezierBorder =
  {0, 0, 1, 0, COMPLEMENT, MAXPOINTS, NULL, NULL};
 
  BezierBorder.XY = xy;
  get_polypoints (DrawBezier, Bezier_Window, &BezierBorder);
  return;
}
 
is OK.  What gives?  I mean really -- Internal errors???
For that?!?!
 
Another thing I dislike about Aztec C is sdb's refusal
to read <alt> keys.  I have an A1000 with a keymap I 
edited with KeyMapEd, so that I can have both Swedish
characters and programming characters, like {[]}.  SDB
refuses to let me get at characters by pressing the
<alt> key.  Try printing a matrix without []!
 
/Stephen
stephen@jfk.docs.uu.se
----------------------------------------------------------------
All opinions are my own.
----------------------------------------------------------------

brett@visix.com (Brett Bourbin) (04/20/91)

In article <stephen.672004888@cia.docs.uu.se>, stephen@cia.docs.uu.se (Stephen Cooper) writes:
> Yet another bug in AztecC 5.0d:  (YABIAC? :-)
> Compiling this:
>  
> void
> DrawCurves (void)
> {
>   SHORT xy[MAXPOINTS * 2];
>   struct Border BezierBorder =
>   {0, 0, 1, 0, COMPLEMENT, MAXPOINTS, &xy, NULL};
>  
>   get_polypoints (DrawBezier, Bezier_Window, &BezierBorder);
>   return;
> }
>  
> will give internal error #40, while compiling this:
>  
> void
> DrawCurves (void)
> {
>   SHORT xy[MAXPOINTS * 2];
>   struct Border BezierBorder =
>   {0, 0, 1, 0, COMPLEMENT, MAXPOINTS, NULL, NULL};
>  
>   BezierBorder.XY = xy;
>   get_polypoints (DrawBezier, Bezier_Window, &BezierBorder);
>   return;
> }
>  
> is OK.  What gives?  I mean really -- Internal errors???
> For that?!?!

Yes, for that.  It looks like "xy" is declared in a procedure and is a local variable,
which means it will be allocated when you call the routine, from the stack.  Now, you
then try to take the address of a item that will be on the stack.  A no-no.  You can 
either make the "xy" array "static" so it will not be on the stack, or you could pull
it outside the DrawCurves() function and make it global (yech!).

Hope this helps.

> stephen@jfk.docs.uu.se
-- 
                                __
  Brett Bourbin          \  / /(_  /\/   11440 Commerce Park Drive
    ..!uunet!visix!brett  \/ / __)/ /\   Reston, Virginia 22091
    brett@visix.com       Software Inc   (703) 758-2733

milamber@caen.engin.umich.edu (Daryl Cantrell) (04/20/91)

In article <1991Apr19.193033.13587@visix.com> brett@visix.com writes:
>In article <stephen.672004888@cia.docs.uu.se>, stephen@cia.docs.uu.se (Stephen Cooper) writes:
>> Yet another bug in AztecC 5.0d:  (YABIAC? :-)
>> Compiling this:
>>  
>> void
>> DrawCurves (void)
>> {
>>   SHORT xy[MAXPOINTS * 2];
>>   struct Border BezierBorder =
>>   {0, 0, 1, 0, COMPLEMENT, MAXPOINTS, &xy, NULL};
[...]
>Yes, for that.  It looks like "xy" is declared in a procedure and is a local variable,
>which means it will be allocated when you call the routine, from the stack.  Now, you
>then try to take the address of a item that will be on the stack.  A no-no.  You can 
>either make the "xy" array "static" so it will not be on the stack, or you could pull
>it outside the DrawCurves() function and make it global (yech!).
[...]

  Whoa, hold up there... Address-of is a perfectly legal operation on an auto-
variable, it just isn't a valid initializer.  Technically, the initializers
for the Border structure must all be constants.  In theory, since the struct-
ure is reinitialized at every function entry, you could compute a new address
for xy each time.  BUT, it's not kosher C.  I will say this: Manx should have
pointed out the specific error, not "internal error".


--
+---------------------------------------+----------------------------+
|   // Daryl S. Cantrell                |   These opinions are       |
| |\\\ milamber@caen.engin.umich.edu    |    shared by all of    //  |
| |//  Evolution's over.  We won.       |        Humanity.     \X/   |
+---------------------------------------+----------------------------+

dillon@overload.Berkeley.CA.US (Matthew Dillon) (04/22/91)

In article <1991Apr20.052047.18815@engin.umich.edu> milamber@caen.engin.umich.edu (Daryl Cantrell) writes:
>In article <1991Apr19.193033.13587@visix.com> brett@visix.com writes:
>>In article <stephen.672004888@cia.docs.uu.se>, stephen@cia.docs.uu.se (Stephen Cooper) writes:
>>> Yet another bug in AztecC 5.0d:  (YABIAC? :-)
>>> Compiling this:
>>>
>>> void
>>> DrawCurves (void)
>>> {
>>>   SHORT xy[MAXPOINTS * 2];
>>>   struct Border BezierBorder =
>>>   {0, 0, 1, 0, COMPLEMENT, MAXPOINTS, &xy, NULL};
>[...]

    Theoretically this is valid since BezierBorder is an auto, but
    the definition of ANSI C says that any auto-aggregate initialization
    (which is what you are doing) must contain only constants, as if
    it were a static initialization.  So the &xy is illegal.

				    -Matt

>  Whoa, hold up there... Address-of is a perfectly legal operation on an auto-
>variable, it just isn't a valid initializer.  Technically, the initializers

    It's a perfectly valid initializer but in the case of auto-aggregate
    initialization you can ONLY take the address of a static or global
    variable since that is, essentially, a constant.  If 'xy' were declared
    static it would work.

>for xy each time.  BUT, it's not kosher C.  I will say this: Manx should have
>pointed out the specific error, not "internal error".

    no disagreement there.

>+---------------------------------------+----------------------------+
>|   // Daryl S. Cantrell		 |   These opinions are       |
>| |\\\ milamber@caen.engin.umich.edu	 |    shared by all of	  //  |
>| |//	Evolution's over.  We won.       |        Humanity.     \X/   |
>+---------------------------------------+----------------------------+

					-Matt

--

    Matthew Dillon	    dillon@Overload.Berkeley.CA.US
    891 Regal Rd.	    uunet.uu.net!overload!dillon
    Berkeley, Ca. 94708
    USA

peter@sugar.hackercorp.com (Peter da Silva) (04/22/91)

In article <stephen.672004888@cia.docs.uu.se> stephen@cia.docs.uu.se (Stephen Cooper) writes:
> {
>   SHORT xy[MAXPOINTS * 2];
>   struct Border BezierBorder =
>   {0, 0, 1, 0, COMPLEMENT, MAXPOINTS, &xy, NULL};

I think this is an illegal auto aggregate initialization. I'm surprised it
let you get away with it. I'm crossposting to comp.lang.c so the language
lawyers can have at it.

> {
>   SHORT xy[MAXPOINTS * 2];
>   struct Border BezierBorder =
>   {0, 0, 1, 0, COMPLEMENT, MAXPOINTS, NULL, NULL};

At least here the aggregate is a constant, that it can copy in. I'm still
surprised it worked. I wouldn't code like that. Try making xy and BezierBorder
static.
-- 
Peter da Silva.   `-_-'
<peter@sugar.hackercorp.com>.

johnhlee@CS.Cornell.EDU (John H. Lee) (04/23/91)

In article <stephen.672004888@cia.docs.uu.se>, stephen@cia.docs.uu.se (Stephen Cooper) writes:
> Yet another bug in AztecC 5.0d:  (YABIAC? :-)
> Compiling this:
>  
> void
> DrawCurves (void)
> {
>   SHORT xy[MAXPOINTS * 2];
>   struct Border BezierBorder =
>   {0, 0, 1, 0, COMPLEMENT, MAXPOINTS, &xy, NULL};
                                        ^^^
"&xy" used to be illegal (just use "xy",) but was recently legalized with
ANSI C.  Perhaps Manx hasn't quite finished ANSI'sizing its compiler yet?

>  
>   get_polypoints (DrawBezier, Bezier_Window, &BezierBorder);
>   return;
> }
>  
> will give internal error #40, while compiling this:
>  
> void
> DrawCurves (void)
> {
>   SHORT xy[MAXPOINTS * 2];
>   struct Border BezierBorder =
>   {0, 0, 1, 0, COMPLEMENT, MAXPOINTS, NULL, NULL};
>  
>   BezierBorder.XY = xy;
                      ^^
                      Notice what you did here compared with above.

>   get_polypoints (DrawBezier, Bezier_Window, &BezierBorder);
>   return;
> }
>  
> is OK.  What gives?  I mean really -- Internal errors???
> For that?!?!

Yup, you're right.  There's a bug in the compiler.  Perhaps the compiler
wanted to report a warning (e.g., "& before array ignored") and the
internal error occurs when the compiler tries to report it!

-------------------------------------------------------------------------------
The DiskDoctor threatens the crew!  Next time on AmigaDos: The Next Generation.
	John Lee		Internet: johnhlee@cs.cornell.edu
The above opinions of those of the user, and not of this machine.

jk@cs.man.ac.uk (John Kewley ICL) (04/23/91)

What is the derivation of the term Manx (apart from one who was born in
the Isle of Man)? Do the authors come from the Isle of Man?

--
        J.K.
 
John M. Kewley, ICL, Wenlock Way, West Gorton, Manchester. M12 5DR
Tel:   (+44) 61 223 1301 X2138  Email: jk@cs.man.ac.uk / jk@nw.stl.stc.co.uk