From: Markus Armbruster <armbru@redhat.com>
To: John Snow <jsnow@redhat.com>
Cc: marcandre.lureau@redhat.com, qemu-devel@nongnu.org
Subject: Re: [PATCH v3 3/9] qapi: start building an 'if' predicate tree
Date: Tue, 08 Jun 2021 15:57:59 +0200 [thread overview]
Message-ID: <87v96oxxug.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <12434341-9054-8c35-e8a4-59087548b59e@redhat.com> (John Snow's message of "Fri, 21 May 2021 12:18:03 -0400")
John Snow <jsnow@redhat.com> writes:
> On 5/21/21 10:48 AM, Markus Armbruster wrote:
>> Beware, I'm skimming, not really reviewing.
>>
>> John Snow <jsnow@redhat.com> writes:
>>
>>> On 4/29/21 9:40 AM, marcandre.lureau@redhat.com wrote:
[...]
>>>> index b7f475a160..59a7ee2f32 100644
>>>> --- a/scripts/qapi/common.py
>>>> +++ b/scripts/qapi/common.py
>>>> @@ -11,8 +11,9 @@
>>>> # This work is licensed under the terms of the GNU GPL, version 2.
>>>> # See the COPYING file in the top-level directory.
>>>> +from abc import ABC, abstractmethod
>>>> import re
>>>> -from typing import Optional
>>>> +from typing import Optional, Sequence
>>>>
>>>> #: Magic string that gets removed along with all space to its right.
>>>> @@ -192,3 +193,54 @@ def guardend(name: str) -> str:
>>>> #endif /* %(name)s */
>>>> ''',
>>>> name=c_fname(name).upper())
>>>> +
>>>> +
>>>> +class IfPredicate(ABC):
>>>> + @abstractmethod
>>>> + def cgen(self) -> str:
>>>
>>> Like the review to patch 2, I'm not sure we want to bake cgen stuff
>>> directly into this class. Are you going to have cgen() and rustgen()
>>> methods all here?
>>>
>>>> + pass
>>>> +
>>>
>>> I think you want raise NotImplementedError to specify a function that
>>> the inheriting class MUST implement. Otherwise, there's little value
>>> to allow a child class to call super() on a method that doesn't have a
>>> default implementation.
>>>
>>> You *could* drop the (ABC) and the @abstractmethod decorators if you do so.
>>>
>>> Matters of taste and style.
>>
>> We're not coding a library for use by thousands of people. If we did,
>> then complicating the code to guard against misuse could be a win. But
>> we don't.
>>
>> schema.py is full of methods that pass. Maybe some of them need to be
>> overriden by any conceivable subtype. Who cares? The subtypes either
>> work or they don't. I prefer
>>
>> def frobnicate:
>> pass
>>
>> to
>>
>> def frobnicate:
>> raise NotImplementedError
>>
>> One, pass is easier on the eyes. Two, a subtype's .frobnicate() can
>> blindly call super().frobnicate().
>>
>
> "pass" here operates as a syntactic sugar for "return None" which has
> implications on the return type. It's short, but wrong.
Nitpicking...
pass is not specified as syntactic sugar:
7.4. The pass statement
pass_stmt ::= "pass"
pass is a null operation — when it is executed, nothing happens. It is useful as a placeholder when a statement is required syntactically, but no code needs to be executed, for example:
def f(arg): pass # a function that does nothing (yet)
class C: pass # a class with no methods (yet)
What really happens in
def foo(): pass
is what *always* happens when control reaches the end of the function
body: the function returns None.
Further evidence:
>>> def baz():
... pass
... return 42
...
>>> baz()
42
> raise NotImplementedError means something different semantically.
>
> To me, pass is *NOT* easier on the eyes, it is misleading. It is
> idiomatic to use NotImplementedError if it is not acceptable for a
> default implementation to return None.
>
> I understand perfectly well the desire to keep things simple, but what
> is actually "simple" depends on the expectations of the programmer. I
> err towards idiomatic Python.
What's your take on "Two, a subtype's .frobnicate() can blindly call
super().frobnicate()"?
[...]
next prev parent reply other threads:[~2021-06-08 13:59 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-29 13:40 [PATCH v3 0/9] qapi: untie 'if' conditions from C preprocessor marcandre.lureau
2021-04-29 13:40 ` [PATCH v3 1/9] qapi: replace List[str] by QAPISchemaIfCond marcandre.lureau
2021-05-12 20:53 ` John Snow
2021-05-17 11:17 ` Marc-André Lureau
2021-05-17 16:30 ` John Snow
2021-04-29 13:40 ` [PATCH v3 2/9] qapi: move gen_if/gen_endif to QAPISchemaIfCond marcandre.lureau
2021-05-11 16:39 ` Stefan Hajnoczi
2021-05-12 12:36 ` Marc-André Lureau
2021-05-12 18:53 ` John Snow
2021-05-17 11:18 ` Marc-André Lureau
2021-05-12 21:01 ` John Snow
2021-05-21 14:35 ` Markus Armbruster
2021-04-29 13:40 ` [PATCH v3 3/9] qapi: start building an 'if' predicate tree marcandre.lureau
2021-05-12 21:39 ` John Snow
2021-05-17 11:18 ` Marc-André Lureau
2021-05-17 16:34 ` John Snow
2021-05-21 14:48 ` Markus Armbruster
2021-05-21 16:18 ` John Snow
2021-06-08 13:57 ` Markus Armbruster [this message]
2021-04-29 13:40 ` [PATCH v3 4/9] qapi: introduce IfPredicateList and IfAny marcandre.lureau
2021-05-12 23:26 ` John Snow
2021-05-17 11:18 ` Marc-André Lureau
2021-05-17 16:35 ` John Snow
2021-04-29 13:40 ` [PATCH v3 5/9] qapi: add IfNot marcandre.lureau
2021-05-12 23:32 ` John Snow
2021-04-29 13:40 ` [PATCH v3 6/9] qapi: normalize 'if' condition to IfPredicate tree marcandre.lureau
2021-05-12 23:47 ` John Snow
2021-05-17 11:18 ` Marc-André Lureau
2021-05-17 16:41 ` John Snow
2021-04-29 13:40 ` [PATCH v3 7/9] qapi: convert 'if' C-expressions to the new syntax tree marcandre.lureau
2021-05-12 23:51 ` John Snow
2021-05-17 11:20 ` Marc-André Lureau
2021-04-29 13:40 ` [PATCH v3 8/9] qapi: make 'if' condition strings simple identifiers marcandre.lureau
2021-05-12 23:56 ` John Snow
2021-04-29 13:40 ` [PATCH v3 9/9] docs: update the documentation about schema configuration marcandre.lureau
2021-05-13 0:01 ` John Snow
2021-05-11 16:52 ` [PATCH v3 0/9] qapi: untie 'if' conditions from C preprocessor Stefan Hajnoczi
2021-05-12 12:39 ` Marc-André Lureau
2021-05-12 17:43 ` Markus Armbruster
2021-05-12 18:58 ` John Snow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87v96oxxug.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=jsnow@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.