Re: What I can to do with old PL/1 code?



MZN wrote:
I see, that compiler version 2.1.13 have another behavior than earlier.
It gives (I never saw that earlier):

Cylarr.pli(92:2) : IBM1221I W Statement uses 65682 bytes for
temporaries.
NMAKE :  fatal error U1077:  'pli.exe' : return code '4'

That means:
IBM1221W Statement uses count bytes for temporaries. Explanation: This
message is produced if a statement uses more bytes for temporaries than
allowed by the STORAGE compiler option.

But I can not find place in GUI where I can specify STORAGE option
Probably, it's possible through MAKE, but I do not know how.

Now I corrected option by the following manner:
LIMITS(EXTNAME(7),FIXEDDEC(15),NAME(31),FIXEDBIN(31))  AGGREGATE
ATTRIBUTES SOURCE INSOURCE OPTIONS NEST XREF GONUMBER SNAP TEST
SYSTEM(WINDOWS PENTIUM) DEFAULT(IBM ASSIGNABLE NOINITFILL NONCONNECTED
DESCRIPTOR DESCLIST SHORT(HEXADEC) DUMMY(ALIGNED) ORDINAL(MIN) BYADDR
RETURNS(BYADDR) LINKAGE(OPTLINK) NOINLINE ORDER NOOVERLAP NONRECURSIVE
NULLSYS EVENDEC NORETCODE EBCDIC NONNATIVE NONNATIVEADDR ALIGNED
E(HEXADEC) DESCLOCATOR EVENDEC NULL370) NOIMPRECISE CHECK(STORAGE) LIST
MDECK OFFSET PPTRACE

so, your advises will be appreciated.

Mike

You should be able to find documentation of all compiler options in the Programming Guide that comes with the compiler. If you don't have access to your installations copy you should be able to download it in PDF format from IBM's website.

The Storage option controls whether or not the compiler produces a report in the listing of the storage requirements of each block. Also if storage(xxx) is specified, an information message is issued for any statement that requires more than xxx bytes of temporary storage. The default value of xxx is 1000. Note that the description in the manual makes it sound like statements requiring more than xxx bytes of temporaries will not work, "... maximum amount of storage allowed for temporaries ..." At least for the Personal PL/I compiler this is not so. The statement still works correctly. The message is just an information message for the programmer (that's why the message number ends in I).

One truly ironic circumstance is that despite the fact that the maximum string length is 32767, a statement involving several substring and/or concatenation operations on strings with variable maximum length can "require" several hundred thousand bytes of temporary storage! Even the old F compiler managed to do a better job. Programs containing such statements would run in as little as 50K (that's right K) as long as the actual lengths of the strings were modest.
.




Relevant Pages

  • Re: Resulting string from concatenation operator?
    ... If the compiler is any good, ... runtime allocations for such temporaries, ... Would that invoke some kind of ERROR... ...
    (comp.lang.pl1)
  • Re: Resulting string from concatenation operator?
    ... If the compiler is any good, ... runtime allocations for such temporaries, ... Would that invoke some kind of ERROR... ...
    (comp.lang.pl1)
  • Ultimate Efficiency
    ... reference to the object returned from Taste and then continue on and use it ... No temporaries. ... I'm going to presume that casting away that constness and editing the object ... Obviously, *my* compiler has not created a temporary, it has returned the ...
    (comp.lang.cpp)
  • Re: GC in Jons raytracing benchmark
    ... >>> so a sufficently smart compiler could optimize them away. ... are more lisp temporaries, and/or they're bigger. ... > slow at allocating and immediately collecting millions of temporary ... > fix for the CL code. ...
    (comp.lang.lisp)
  • Scope of const references to subojects of temporaries
    ... the const B& Bref is initialized and bound to the temporary ... The temporary B object goes out of scope. ... temporary B shouldn't that also cause the temporaries scope to be bound to ... can the compiler produce an error or warning to ...
    (microsoft.public.vc.language)