Deutsch English Français Italiano |
<vl9khp$cdg$1@reader2.panix.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.misty.com!weretis.net!feeder9.news.weretis.net!panix!.POSTED.spitfire.i.gajendra.net!not-for-mail From: cross@spitfire.i.gajendra.net (Dan Cross) Newsgroups: comp.os.vms Subject: Re: VMS Pascal article Date: Fri, 3 Jan 2025 21:24:09 -0000 (UTC) Organization: PANIX Public Access Internet and UNIX, NYC Message-ID: <vl9khp$cdg$1@reader2.panix.com> References: <vl3pi8$2r2sr$1@dont-email.me> <vl9aln$o72$1@dont-email.me> <vl9bjp$eq3$1@reader2.panix.com> <6778415e$0$708$14726298@news.sunsite.dk> Injection-Date: Fri, 3 Jan 2025 21:24:09 -0000 (UTC) Injection-Info: reader2.panix.com; posting-host="spitfire.i.gajendra.net:166.84.136.80"; logging-data="12720"; mail-complaints-to="abuse@panix.com" X-Newsreader: trn 4.0-test77 (Sep 1, 2010) Originator: cross@spitfire.i.gajendra.net (Dan Cross) Bytes: 4687 Lines: 107 In article <6778415e$0$708$14726298@news.sunsite.dk>, Arne Vajhøj <arne@vajhoej.dk> wrote: >On 1/3/2025 1:51 PM, Dan Cross wrote: >> In article <vl9aln$o72$1@dont-email.me>, Arne Vajhøj <arne@vajhoej.dk> wrote: >>> On 1/3/2025 1:17 PM, Dan Cross wrote: >>>> In article <67781447$0$711$14726298@news.sunsite.dk>, >>>>> And also fixed in the description of VARYING further up. >>>> >>>> You should seriously mention the STRING type, though. >>> >>> I think VARYING OF CHAR is what is used most in VMS Pascal. >> >> Weird; I can't imagine why. > >I never use string (on VMS). > >$ search sys$common:[syshlp.examples.pascal]*.pas varying >$ search sys$common:[syshlp.examples.pascal]*.pas "string(" > >indicate that whoever write VMS Pascal examples also prefer >varying of char over string. > >If I were to guess about why, then I believe it is historic >reasons. varying of char has been there since like forever. >string was added with ISO Pascal support later. I suspect that's close, but ISO Pascal doesn't have a 'VARYING' array type, either. I suspect you're referring to what ISO calls "Extended Pascal" (ISO 10206); ISO Pascal (ISO 7185) doesn't support a `String` type of either the VSI Pascal form or the Turbo Pascal/Delphi/FreePascal form, only manifest string literals and `packed array [1..n] of char`. Of course, one can define a type alias, and ISO 7185 says this: |Any type designated packed and denoted by an array-type having |as its index-type a denotation of a subrange-type specifying a |smallest value of 1 and a largest value of greater than 1, and |having as its component-type a denotation of the char-type, |shall be designated a string-type. An annoyance with ISO Pascal is that an array's size is part of its type, and there is no separate slice type that could act as a window into an array independent of size and be passed around, so it is difficult to write procedures and functions that operate on e.g. strings, generically. See also, https://www.lysator.liu.se/c/bwk-on-pascal.html However, these deficiencies are largely addressed in ISO 10206 Extended Pascal, which provides a variable-length string type and permits conformant array parameters, which for VSI Pascal appear to monomorphize over the argument type. It's perhaps worth noting that Wirth's subsequent languages, particularly Oberon, didn't have most of these problems. >> Regardless, it may be worthwhile to >> at least mention it, since you state explicitly that there are >> three types for representing textual, string-like data, but >> VSI's documentation makes it clear that there are actually four. > >Good point. > >I have updated. > >>>> Also, it's a bit of a bummer that you didn't mention nested >>>> functions/procedures, which are among the cooler aspects of the >>>> language: >>>> >>>> $ type foo.pas >>>> (* foo *) >>>> program foo(output); >>>> procedure hello; >>>> procedure world(var who: String); >>>> function punct: char; >>>> begin >>>> punct := '!' >>>> end; >>>> begin >>>> who := 'World' + punct >>>> end; >>>> var >>>> who: String (10); >>>> begin >>>> world(who); >>>> writeln('Hello, ', who) >>>> end; >>>> begin >>>> hello >>>> end. >>> >>> There is already an example. fac is inside testfac. >>> >>> I will add a note about it. >> >> Ah, I see it now; the lack of indentation makes it hard to spot. > >I don't indent them. > >With the blank lines I put in then I feel that indenting >nested procedures/functions would make it too much space. Meh, personally I sacrifice horizontal space for readability, but I suppose styles differ. - Dan C.