Rocksolid Light

News from da outaworlds

mail  files  register  groups  login

Message-ID:  

Just to have it is enough.


comp / comp.lang.misc / Re: Python (was Re: I did not inhale)

Subject: Re: Python (was Re: I did not inhale)
From: Bart
Newsgroups: comp.unix.shell, comp.unix.programmer, comp.lang.misc
Organization: A noiseless patient Spider
Date: Tue, 27 Aug 2024 14:18 UTC
References: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Path: eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: bc@freeuk.com (Bart)
Newsgroups: comp.unix.shell,comp.unix.programmer,comp.lang.misc
Subject: Re: Python (was Re: I did not inhale)
Date: Tue, 27 Aug 2024 15:18:47 +0100
Organization: A noiseless patient Spider
Lines: 238
Message-ID: <vakn87$30oaf$1@dont-email.me>
References: <uu54la$3su5b$6@dont-email.me> <v9m4gd$14scu$1@dont-email.me>
<20240815182717.189@kylheku.com> <v9npls$1fjus$1@dont-email.me>
<v9t204$2dofg$1@dont-email.me> <va28pi$3dldm$1@dont-email.me>
<va2ro9$3gd7v$1@dont-email.me> <va2vt0$3h3gj$1@dont-email.me>
<va44rh$3p1l6$1@dont-email.me> <va45eq$3pkt9$1@dont-email.me>
<va4aut$3q4g0$1@dont-email.me> <va4fbr$3qvij$1@dont-email.me>
<va5108$3tmmd$1@dont-email.me> <va51ok$3tqr9$1@dont-email.me>
<va5ec2$3vluh$1@dont-email.me> <va6q4g$c1a7$1@dont-email.me>
<va6rpa$c6bg$1@dont-email.me> <va6se9$cb8e$1@dont-email.me>
<20240826083330.00004760@gmail.com> <vaises$2k7o6$2@dont-email.me>
<20240826155113.000005ba@gmail.com> <wwvo75eicla.fsf@LkoBDZeT.terraraq.uk>
<vak9k9$2ujrs$1@dont-email.me> <vakj7g$303sh$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 27 Aug 2024 16:18:48 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="0eb40e535de99d049ec5580a004404e4";
logging-data="3170639"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18UwT1J4qkjq+f8gtBfHRwx"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:vMlBttEj13I4Kk8XCFdfJdoeIcU=
Content-Language: en-GB
In-Reply-To: <vakj7g$303sh$1@dont-email.me>
View all headers

On 27/08/2024 14:10, David Brown wrote:
> On 27/08/2024 12:26, Bart wrote:
>> On 27/08/2024 09:39, Richard Kettlewell wrote:
>>> John Ames <commodorejohn@gmail.com> writes:
>>>> But even if that helps you organizationally, it doesn't resolve issues
>>>> of the interpreter potentially mis-parsing things due to mismatches in
>>>> tab/space factor between $EDITOR and the Python RTE, which is a truly
>>>> ridiculous thing to have to be concerned about.
>>>
>>> In many years of using Python routinely and extensively I’ve simply
>>> never found the whitespace issues that people are worrying about here to
>>> be a problem in practice. Some of this may be a matter of experience but
>>> if so, it’s a form of experience that must have built up very quickly.
>>>
>
> I have occasionally, but only occasionally, seen problems with white
> space.  And those would normally be caught by Python 3.
>
>>> As an aesthetic objection, of course, there’s no accounting for
>>> taste. But it doesn’t seem to be a practical problem in reality.
>>>
>>> (In contrast C’s rules have occasionally been a practical problem,
>>> contributing to at least one high-profile software vulnerability and
>>> attracting compiler warnings to mitigate the risks.)
>>
>> These are the problems I've seen. I haven't used the language
>> extensively, but I've used it enough.
>
> Your problems below are all valid, but not insurmountable.  I too would
> rather have explicit block delimiters, but it's not actually hard to
> work with Python as it is.
>
>>
>> (1) An tab at the start of a line gets accidentally indented or
>> unindented. If you weren't paying close attention, it may not be clear
>> that that has happened, if this line was either the last line of an
>> indented block, or the line following
>>
>
> That /can/ happen.  It is a good idea to avoid mixing tabs and spaces in
> the same file.  Most editors can be configured one way or the other, but
> if you use different editors under different circumstances (as I do),
> mistakes are possible.  They are usually quickly identified and quickly
> handled.
>
>> (2) You want to temporarily comment out an 'if' line so that the
>> following block is unconditional. You can't do that with also
>> unindenting the block. And, also  the block then merges with the
>> following one as it's at the same level, so when you want to change it
>> back...
>
> Replace your
>
>     if cond :
>
> with
>
>     if 1 :
>
> or
>
>     if True :
>
>
>>
>> (3) Similarly, you want to temportarily wrap an 'if' statement, for
>> example, around a block of code. But you can't do it witout indenting
>> that block.
>>
>
> True.  But any editor will let you select the lines and indent them.
>
>> (4) Sometimes you want to add temporary debug code as part of a block.
>> Usually I write such lines in all-caps and without indentation to make
>> them stand out clear. With Python, I can't use all-caps and I have to
>> use exactly the same indent as the rest of the block. So the lines
>> merge. Then when I need to remove the code, it's not clearly delimited.
>
> Comments are an extremely easy way to make the code stand out.
>
>>
>> (5) Sometimes you want to temporarily comment out the contents of a
>> block. But Python doesn't allow an empty block; now you have to use
>> 'pass'. And then get rid of if later.
>
> You can leave the "pass" in, if you don't want to get ride of it later.
> I sometimes find "pass" to be helpful as an alternative to leaving a
> hanging indented block.
>
>>
>> (6) You want to add extra statements to the end of a block, but where
>> IS the end? You have to INFER the ending by looking for a line with a
>> smaller indent. But suppose you're at the bottom of a window; is that
>> bottom line the last in the block, or is there another one at the same
>> indent just out of sight? You have to tentatively keep peeking ahead!
>
> Keep your blocks small and neat.
>
>>
>> (6a) And maybe there's big comment blocking in the middle of block;
>> comments don't need nesting! If there are lots of comments and few
>> statements, finding the end of the block (ie. the last statement of
>> this block) can become quite an exercise.
>
> That applies to every programming language (unless you know of one that
> doesn't support comments).
>
>>
>> (7) You take some Python code you've seen online (eg. in a usenet
>> post) and paste into your editor. Maybe you want to merge it with your
>> own code.
>>
>> But its tabbing is all spaces; yours is all tabs. Plus invariably, the
>> whole thing has extra indentation (eg. the leftmost statement is
>> already indented). Or you want to copy code from within a block to a
>> different indent level.
>
> Any sane editor will give you tools to fix that - automatic indentation,
> tab-to-space and space-to-tab conversion, manual indent or outdent block
> tools, etc.
>
>>
>> The whole thing gets very messy and error prone. You need special
>> editor commands to deal with the mess.
>
> No, you don't.  (Unless you think "special" means "anything but Windows
> Notepad" .)
>
>>
>> Indented, non-delimited code and data is fine for machine-generated
>> and machine processed code. But it's a disaster for code that has to
>> be human-generated and human-maintained. It's just too fragile.
>>
>
> In real-life Python coding, it works fine.  I prefer explicit block
> delimiters, but I cannot say Python's white-space blocking has been a
> significant source of trouble or inconvenience for me.  Perhaps that's
> because I have always been used to careful and consistent formatting.  I
> don't write C code (or any other code) with inconsistent spacing, mixes
> of tabs and spaces, or unexpected indentations.  So for me, the spacing
> and tabbing of Python code would be identical if it had braces or other
> begin-end markers.
>
>> The fact that people have to resort to adding #end lines, which only
>> partly deals with one or two of those problems, suggest that something
>> is badly wrong.
>>
>
> No one has to do that.  It's a Lawrence peculiarity, and his coding
> style (in Python or C, and probably anything else) would be rejected by
> anyone with a coding standard.  I agree that it suggests that something
> is badly wrong, but it is not with the language!

It's not just him. Below is some Nim code, which uses indentation like
Python. (It's from inside other statements which accounts for the
overall indents.)

Suppose I want to add code to follow that top-level 'if' statement;
where would it go? Since it's not clear from my extract whether that's
the entire content of my if statement.

And at what indent level, since I'm some way off from that if? It's easy
to get it wrong.

if q1!=1:
for i in countup(2,n):
q[i]=p[i]
flips=1
while true:
qq=q[q1]
if qq==1:
sum+=sign*flips
if flips>maxflips:
maxflips=flips
break
q[q1]=q1
if q1>=4:
i=2
j=q1-1
while true:
t=q[i]
q[i]=q[j]
q[j]=t
i+=1
j-=1
if i>=j:
break
q1=qq
flips+=1

This was an attempt to port an benchmark into Nim; I'd spent the best
part of an hour trying to get it right, but it kept going wrong. In the
end I resorted to artificial block terminators.

The final code looked like that below. Now it is much, much easier to
see what goes where, and what belongs to what. I can more confidently
write that extra statement following the opening 'if'.

With these changes, the porting went much more smooothly.

if q1!=1:
for i in countup(2,n):
q[i]=p[i]
# end
flips=1
while true:
qq=q[q1]
if qq==1:
sum+=sign*flips
if flips>maxflips:
maxflips=flips
# end
break
# end
q[q1]=q1
if q1>=4:
i=2
j=q1-1
while true:
t=q[i]
q[i]=q[j]
q[j]=t
i+=1
j-=1
if i>=j:
break
# end
# end
# end
q1=qq
flips+=1
# end
# end

Sure, people CAN program in such languages, but it is harder work and
more error prone.

SubjectRepliesAuthor
o Re: I did not inhale

By: Kalevi Kolttonen on Thu, 15 Aug 2024

261Kalevi Kolttonen

rocksolid light 0.9.8
clearnet tor