Re: RFC 102 (v1) Inline Comments for Perl.

2000-08-15 Thread Michael Mathews

Kirrily Robert said:
 What relationship does this have to RFC 5 (multiline comments), and
 hasn't the discussion of inline comments occurred in detail already?

There is a distinction, because the proposal for multiline comments requires
(like all here docs) the opening and closing be on their own line -- thereby
forcing multiline commenmts to be multiline.

To clarify the distinction (as I see Glenn's proposal):

#end-of-line comment, terminates at newline\n

#inline comment, cannot contain a newline#

#TOKEN;
multiline comments: RFC is now frozen, so don't discuss this!
TOKEN

I'll just quietly duck down here in my bunker while the List "discusses"
this :-)

--Michael




Re: RFC 102 (v1) Inline Comments for Perl.

2000-08-15 Thread John Porter

Glenn Linderman [EMAIL PROTECTED]:
 
 An idea  that produces  a paired  feeling would be  to use  one of  the
 paired character pairs,  as in "#"  and "#".   
 ...the three paired character possibilities  ("", "()", "{}") 

There is at least one more:  "[]".

And the Perlish thing to do would be to allow any of them, right?

#[ one comment # nested inside # another one. ]#


 The competing suggestion for in-line  comments was
 to define "qc/comment/"  as a syntax that evaporates.  I  don't like
 that syntax,  because it looks more  like code than comment,

It *is* code.  It's code that evaporates, which makes it a comment, too.


$foo = qw/foo bar/ qc/eat me/;
 
 It is not clear whether such  syntax would be easily readable within all
 forms of expressions, without operators, as shown in the above example,
 vs
 
$foo = qw/foo bar/ #eat me#;

It stands out as much as you want it to, which might be a lot, or none.

 $foo = qw/foo bar/qc# EAT ME ;

Frankly, if I'm scanning source for comments, I'm more likely to be
looking for the string of interest, e.g. "eat me", than the tiny bit
of syntax that creates the comment.  And ## is surely a tiny bit
of syntax.   (Or else I let my editor look for comments; and /qc is
no harder to type than /#.)

Plus it has the advantage of not introducing any new syntax, only
the qc// operator.

But this has all been said before, and I apologize.

-- 
John Porter




RFC 102 (v1) Inline Comments for Perl.

2000-08-14 Thread Perl6 RFC Librarian

This and other RFCs are available on the web at
  http://dev.perl.org/rfc/

=head1 TITLE

Inline Comments for Perl.

=head1 VERSION

  Maintainer: Glenn Linderman [EMAIL PROTECTED]
  Date: 14 Aug 2000
  Version: 1
  Mailing List: [EMAIL PROTECTED]
  Number: 102

=head1 ABSTRACT

Unlike many programming languages Perl does not currently implement
inline comments. This can be confusing/tedious to programmers. This
could be solved by adding a syntax to Perl 6 that would allow for inline
comments.

=head1 DESCRIPTION

Comments are important to programmers as a way of documenting their code
and for debugging purposes.  Perl's comment syntax requires that
comments can only be placed at the end of a line, or on a separate line
(or lines).  Sometimes it is desirable to place a comment (or comments)
within a line.

Perl currently uses the "#" character as an end-of-line comment
introducer (as do many other scripting languages).   RFC 5 (multiline
comments) suggests as a possible promising syntax an introducer of the
form "#TOKEN", combining the perl concepts of "comment" and "here
document" for multiline comments.

It is  felt that an  inline comment syntax  should leverage the existing
Perl comment concept ("#" introducer) and that the introducer and
terminator should look like a matched pair for ease of understanding.

=head2 Ideas from other languages

C/C++ use  "/*" and "*/"  as introducer/terminator for in-line  and
multi-line comments.  A different syntax was  introduced in C++ for
end-of-line comments: "//".

Pascal uses "(*"  and "*) as introducer/terminator for  in-line and
multi-line comments.  It has similar difficulties  as C/C++ with
commenting out blocks of code.

Forth uses  "(" and  ")" as introducer/terminator  for in-line  and
multi-line comments, and "\" for end-of-line comments.

Basic doesn't support in-line or multi-line comments.

All the languages that use the same syntax for in-line and multi-line
comments suffer from confusion when a multi-line comment is used to
comment out a block of code containing in-line comments.
Implementations have historically varied within the language on how to
handle that situation.


=head2 Ideas for perl

An idea  that produces  a paired  feeling would be  to use  one of  the
paired character pairs,  as in "#"  and "#".   I like this  one best,
of  the three paired character possibilities  ("", "()", "{}") because
it  is more closely related to the  "#TOKEN" syntax suggested for
multi-line  comments by RFC 5, thus also achieving a more Perlish feel,
when combined with that syntax.

An idea with  obvious appeal to C/C++/Pascal programmers would  be to
use "#*" as the  introducer, and "*#  as the terminator.   This would
probably work as good as any.


=head2 Compatibility considerations

Because "#" has been used to  mean comment, it seems that something
related to "#" should continue to be used to mean comment.

Use  of a  bare  "#" as  an in-line  comment  terminator would  break
lots  of existing practice, where  people have used a variant  number of
"#" characters to introduce  comments of more  or less importance,  or
as a way  of achieving "pretty" multi-line comments (example of such
next)

#
## This is a stand-out comment ##
#

Hence it seems some other character  should be combined with "#" as an
in-line comment  introducer,  and  used  in  reverse  order  (per
practice  in other languages) as the comment terminator.

Because  historically there  is  nothing to  prevent  a sequence  such
as  the following:

   code # this is an end-of-line # comment

from  appearing, this  suggestion is  not 100%  compatible with  perl5
syntax.  However, such  a sequence is relatively  unlikely: I've never
seen  one in any Perl code  I've perused.   By limiting  this construct
to  less than  a single line,  it limits  the  boundaries of  confusion:
if "#"  is  found with  the intended  meaning of  an  end-of-line
comment introducer  followed  by a  "" character, the highly probable
lack of  the sequence "#" within the same line can  be  diagnosed  with
a  warning  or  error  identifying exactly the  line involved.


=head2 Discussion in perl6-language and perl6-language-mlc

There  was some  discussion  of  in-line comments  in  the
perl6-language  and perl6-language-mlc lists.   There wasn't  a
consensus reached.   The competing suggestion for in-line  comments was
to define "qc/comment/"  as a syntax that evaporates.  I  don't like
that syntax,  because it looks more  like code than comment, and doesn't
stand out to the eye as a comment when mixed within code:

   $foo = qw/foo bar/ qc/eat me/;

It is not clear whether such  syntax would be easily readable within all
forms of expressions, without operators, as shown in the above example,
vs

   $foo = qw/foo bar/ #eat me#;


=head1 IMPLEMENTATION

Should be straightforward in the Perl parser/lexer.

=head1 REFERENCES

RFC 5 (multiline comments) see