From: arne@vajhoej.dk   
      
   On 4/14/2025 9:34 AM, Dave Froble wrote:   
   > On 4/14/2025 8:45 AM, Simon Clubley wrote:   
   >> On 2025-04-11, Arne Vajhøj wrote:   
   >>> On 4/8/2025 1:27 PM, Simon Clubley wrote:   
   >>>> On 2025-04-08, Arne Vajhøj wrote:   
   >>>>> On 4/8/2025 8:20 AM, Simon Clubley wrote:   
   >>>>>> It's a lot more complicated than that.   
   >>>>>>   
   >>>>>> For example, take a LL(1) RD parser. Even ignoring the processing   
   >>>>>> of the results from the parser, how much code (and how much effort)   
   >>>>>> do you think it would take to implement it in Macro-32 compared to   
   >>>>>> C ?   
   >>>>>   
   >>>>> Still not obvious to me that it would not follow normal LOC/FP   
   >>>>> ratios.   
   >>>>   
   >>>> Try implementing one, especially with a reasonably sized grammar, and   
   >>>> you will very rapidly understand that it is not as simple as you seem   
   >>>> to think it is. :-)   
   >>>   
   >>> I have not made any claim about it being simple.   
   >>>   
   >>> I have made a claim that the ratio for LOC/FP for Macro-32   
   >>> and LOC/FP for C for such a problem would not be significantly   
   >>> different from other application types.   
   >>>   
   >>   
   >> That claim is clearly incorrect.   
      
   > I'd argue that such comparisons can be misleading. As a simple example,   
   > specifying some arguments and invoking some routine. In either case,   
   > the arguments must be specified, then invoking the routine. Is each   
   > PUSH of an argument in assembler a separate instruction, or, just   
   > specification of an argument? One must still specify the arguments in   
   > either case.   
   >   
   > An example of a style I favor:   
   >   
   >        Stat% = SYS$QIOW(      ,          
   Â              ! Event flag &   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â ListenCh% By   
   Value,    ! VMS channel &   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â IO$_SETCHAR   
   By Value,  ! Operation &   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â    
   IOSB::Stat%,           ! I/O status block &   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â    
   ,                      ! AST routine &   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â    
   ,                      ! AST parameter &   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â    
   ListenOpt::Protocol%,  ! P1 &   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â    
   ,                      ! P2 &   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â    
   ServerItemLst::Len%,   ! P3 - local socket na^   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â BackLog% By   
   Value,     ! P4 - connection back^   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â    
   SockOptItemList::Len%, ! P5 - socket options &   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â    
   )                      ! P6   
   >   
   > Ok, how many lines of code?   
      
   The question about line counting has already been raised   
   by Lawrence.   
      
   On 4/11/2025 3:05 PM, Arne Vajhøj wrote:   
    > On 4/9/2025 5:10 PM, Lawrence D'Oliveiro wrote:   
    >> On Wed, 9 Apr 2025 16:01:02 -0400, John Reagan wrote:   
    >>> I just looked at the largest MAR file in DCL. It has 10,000 lines but   
    >>> many are comments and many are macro definitions. Not actual VAX   
    >>> instructions.   
    >>   
    >> I would count macro definition bodies in full, and each macro   
    >> expansion as   
    >> one line. After all, macros are code written once and used multiple   
    >> times,   
    >> just like function calls as far as source code is concerned.   
    >   
    > That definitely makes sense.   
    >   
    > But there are still multiple possible counts:   
    > - lines in files   
    > - non-comment and non-blank lines in files   
    > - non-comment and non-blank and non-continued lines in files   
      
    > ; Macro-32 demo   
    >   
    > .title loc   
    > $SSDEF   
    > .psect $PDATA quad,pic,con,lcl,shr,noexe,nowrt   
    > fmt: .ascid "!SL !SL !SL"   
    > .psect $LOCAL quad,pic,con,lcl,noshr,noexe,wrt   
    > buf: .ascid " "   
    > .psect $CODE quad,pic,con,lcl,shr,exe,nowrt   
    > .entry loc,^m<>   
    > pushl #20   
    > pushl #22   
    > pushl #24   
    > pushab buf   
    > pushl #0   
    > pushab fmt   
    > calls #6, -   
    > G^LIB$SYS_FAO   
    > pushab buf   
    > calls #1, -   
    > G^LIB$PUT_OUTPUT   
    > movl #SS$_NORMAL, r0   
    > ret   
    > .end loc   
      
      
   But then maybe you did not like my Macro-32.   
      
   :-)   
      
   There is no question that it is most accurate to only   
   count the continued line as one in your example.   
      
   But I suspect that a lot of LOC counters just count   
   non-blank and non-comment.   
      
   Anything else requires language knowledge.   
      
   And while it for Fortran, Basic, Macro-32 may be relative   
   simple, then for other languages it can become more tricky.   
      
   Let us take 4 times Pascal:   
      
   if a = 1 then b := 2 else b := 3;   
      
   if a = 1 then   
    b := 2   
   else   
    b := 3;   
      
   if a = 1 then begin   
    b := 2;   
   end else begin   
    b := 3;   
   end;   
      
   if a = 1 then   
   begin   
    b := 2;   
   end   
   else   
   begin   
    b := 3;   
   end;   
      
   How many lines? I would say that the most correct is 3 in   
   all 4 cases. But coding the line counter to return that   
   would require it to have Pascal knowledge.   
      
   And what about the fluent style that are so modern?   
      
   o = f.create();   
   o.add(1);   
   o.add(2);   
   o.add(3);   
      
   o = f.create()   
    .add(1)   
    .add(2)   
    .add(3);   
      
   o = f.create().add(1).add(2).add(3);   
      
   1 1 1 or 4 1 1 or 4 4 1 or 4 4 4??   
      
   So I think counters go for the simple approach and assume   
   that for large code bases with many developers then total   
   converge towards an "average" style.   
      
   Arne   
      
   --- SoupGate-DOS v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|