Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Hynek Schlawack
Am 04.12.2012 um 00:42 schrieb Gregory P. Smith :

> * How would we convert all the builtins to use Clinic?  I fear any
>   solution will involve some work by hand.  Even if we can automate
>   big chunks of it, fully automating it would require parsing arbitrary
>   C.  This seems like overkill for a one-shot conversion.
>   (Mark Shannon says he has some ideas.)
> 
> A lot of hand work.  Sprints at pycon.  etc.  Automating nice chunks of it 
> could be partially done for some easy cases such as things that only use 
> ParseTuple today.

I don’t see this as a big problem. There’s always lots of people who want to 
get into Python hacking and don’t know where to start. These are easily 
digestible pieces that can be *reviewed in a timely manner*, thus ideal. We 
could even do some (virtual) sprint just on that.

As for Larry: great approach, I’m impressed!___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] cpython: Issue #16455: On FreeBSD and Solaris, if the locale is C, the

2012-12-04 Thread Victor Stinner
Hi,

2012/12/4 Christian Heimes :
> Am 04.12.2012 03:23, schrieb victor.stinner:
>> http://hg.python.org/cpython/rev/c25635b137cc
>> changeset:   80718:c25635b137cc
>> parent:  80716:b845901cf702
>> user:Victor Stinner 
>> date:Tue Dec 04 01:34:47 2012 +0100
>> summary:
>>   Issue #16455: On FreeBSD and Solaris, if the locale is C, the
>> ASCII/surrogateescape codec is now used, instead of the locale encoding, to
>> decode the command line arguments. This change fixes inconsistencies with
>> os.fsencode() and os.fsdecode() because these operating systems announces an
>> ASCII locale encoding, whereas the ISO-8859-1 encoding is used in practice.
>>
>> files:
>>   Include/unicodeobject.h  |2 +-
>>   Lib/test/test_cmd_line_script.py |9 +-
>>   Misc/NEWS|6 +
>>   Objects/unicodeobject.c  |   24 +-
>>   Python/fileutils.c   |  240 +-
>>   5 files changed, 241 insertions(+), 40 deletions(-)
>
> ...
>
>> @@ -3110,7 +3110,8 @@
>>  *surrogateescape = 0;
>>  return 0;
>>  }
>> -if (strcmp(errors, "surrogateescape") == 0) {
>> +if (errors == "surrogateescape"
>> +|| strcmp(errors, "surrogateescape") == 0) {
>>  *surrogateescape = 1;
>>  return 0;
>>  }
>
> Victor, That doesn't look right. :) GCC is complaining about the code:
>
> Objects/unicodeobject.c: In function 'locale_error_handler':
> Objects/unicodeobject.c:3113:16: warning: comparison with string literal
> results in unspecified behavior [-Waddress]

Oh, I forgot to commit this change in a separated commit. It's a
micro-optimization.

PyUnicode_EncodeFSDefault() calls PyUnicode_EncodeLocale(unicode,
"surrogateescape"), and PyUnicode_DecodeFSDefaultAndSize() calls
PyUnicode_DecodeLocaleAndSize(s, size, "surrogateescape").

I chose to compare the address because I expect that GCC generates the
same address for "surrogateescape" in PyUnicode_EncodeFSDefault() and
in locale_error_handler(), comparing pointers is faster than comparing
the string content.

I remove this micro-optimization. The code path is only used during
Python startup, and I don't expect any real speedup.

> I'm also getting additional warnings in PyUnicode_Format().
>
> Objects/unicodeobject.c: In function 'PyUnicode_Format':
> Objects/unicodeobject.c:13782:8: warning: 'arg.sign' may be used
> uninitialized in this function [-Wmaybe-uninitialized]
> Objects/unicodeobject.c:13893:33: note: 'arg.sign' was declared here
> Objects/unicodeobject.c:13779:12: warning: 'str' may be used
> uninitialized in this function [-Wmaybe-uninitialized]
> Objects/unicodeobject.c:13894:15: note: 'str' was declared here

These members *are* initialized, but it's even hard to me (author of
this code) to check them. I rewrote how these members are initialized
to make the warnings quiet but also to simplify the code.

Thanks for the review!

Victor

PS: I hope that I really fixed the FreeBSD/Solaris issue :-p
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Antoine Pitrou
Le Mon, 03 Dec 2012 14:29:35 -0800,
Larry Hastings  a écrit :
> 
>/*[clinic]
>dbm.open -> mapping
>basename=dbmopen
> 
>const char *filename;
>The filename to open.

So how does it handle the fact that filename can either be a unicode
string or a fsencoding-encoded bytestring? And how does it do the right
encoding/decoding dance, possibly platform-specific?

>static char *_keywords[] = {"filename", "flags", "mode", NULL};
> 
>if (!PyArg_ParseTupleAndKeywords(args, kwargs,
>"s|si", _keywords,
>&filename, &flags, &mode))
>return NULL;

I see, it doesn't :-)

> But the biggest unresolved question... is this all actually a terrible
> idea?

I like the idea, but it needs more polishing. I don't think the various
"duck types" accepted by Python can be expressed fully in plain C types
(e.g. you must distinguish between taking all kinds of numbers or only
an __index__-providing number).

Regards

Antoine.


___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Ulrich Eckhardt

Am 03.12.2012 23:29, schrieb Larry Hastings:
[...autogen some code from special comment strings...]

   /*[clinic]
   dbm.open -> mapping
   basename=dbmopen

   const char *filename;
   The filename to open.

   const char *flags="r";
   How to open the file.  "r" for reading, "w" for writing, etc.

   int mode=0666;
   default=0o666
   If creating a new file, the mode bits for the new file
   (e.g. os.O_RDWR).

   Returns a database object.

   [clinic]*/


Firstly, I like the idea. Even though this "autogenerate in-place" seems 
a bit strange at first, I don't think it really hurts in practice. Also, 
thanks for introducing me to the 'cog' tool, I think I'll use this now 
and then!


This also brings me to a single question I have for your proposal: Why 
did you create another DSL instead of using Python, i.e. instead of 
using cog directly? Looking at the above, I could imagine this being 
written like this instead:


/*[[[cog
import pycognize
with pycognize.function('dbmopen') as f:
f.add_param('self')
f.add_kwparam('filename',
  doc='The filename to open',
  c_type='char*')
f.add_kwparam('flags',
  doc='How to open the file.'
  c_type='char*',
  default='r')
f.set_result('mapping')
]]]*/
//[[[end]]]

Cheers!

Uli


**
Domino Laser GmbH, Fangdieckstra�e 75a, 22547 Hamburg, Deutschland
Gesch�ftsf�hrer: Hans Robert Dapprich, Amtsgericht Hamburg HR B62 932
**
Visit our website at http://www.dominolaser.com
**
Diese E-Mail einschlie�lich s�mtlicher Anh�nge ist nur f�r den 
Adressaten bestimmt und kann vertrauliche Informationen enthalten. Bitte 
benachrichtigen Sie den Absender umgehend, falls Sie nicht der beabsichtigte 
Empf�nger sein sollten. Die E-Mail ist in diesem Fall zu l�schen und darf 
weder gelesen, weitergeleitet, ver�ffentlicht oder anderweitig benutzt werden.
E-Mails k�nnen durch Dritte gelesen werden und Viren sowie nichtautorisierte 
�nderungen enthalten. Domino Laser GmbH ist f�r diese Folgen nicht 
verantwortlich.
**

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Larry Hastings

On 12/04/2012 04:10 AM, Ulrich Eckhardt wrote:
This also brings me to a single question I have for your proposal: Why 
did you create another DSL instead of using Python, i.e. instead of 
using cog directly? Looking at the above, I could imagine this being 
written like this instead:


Actually my original prototype was written using Cog.  When I showed it 
to Guido at EuroPython, he suggested a DSL instead, as writing raw 
Python code for every single function would be far too wordy.  I agree.



//arry/
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Stefan Behnel
Larry Hastings, 03.12.2012 23:29:
> Say there, the Python core development community!  Have I got
> a question for you!
> 
> *ahem*
> 
> Which of the following four options do you dislike least?  ;-)
> 
> 1) CPython continues to provide no "function signature"
>objects (PEP 362) or inspect.getfullargspec() information
>for any function implemented in C.

I would love to see Cython generated functions look and behave completely
like normal Python functions at some point, so this is the option I dislike
most.


> 2) We add new hand-coded data structures representing the
>metadata necessary for function signatures for builtins.
>Which means that, when defining arguments to functions in C,
>we'd need to repeat ourselves *even more* than we already do.
> 
> 3) Builtin function arguments are defined using some seriously
>uncomfortable and impenetrable C preprocessor macros, which
>produce all the various types of output we need (argument
>processing code, function signature metadata, possibly
>the docstrings too).
> 
> 4) Builtin function arguments are defined in a small DSL; these
>are expanded to code and data using a custom compile-time
>preprocessor step.
> [...]
> * There's actually a fifth option, proposed by Brett Cannon.  We
>   constrain the format of docstrings for builtin functions to make
>   them machine-readable, then generate the function signature objects
>   from that.  But consider: generating *everything* in the signature
>   object may get a bit tricky (e.g. Parameter.POSITIONAL_ONLY), and
>   this might gunk up the docstring.

Why not provide a constructor for signature objects that parses the
signature from a string? For a signature like

   def func(int arg1, float arg2, ExtType arg3, *,
object arg4=None) -> ExtType2:
   ...

you'd just pass in this string:

   (arg1 : int, arg2 : float, arg3 : ExtType, *, arg4=None) -> ExtType2

or maybe prefixed by the function name, don't care. Might make it easier to
pass it into the normal parser.

For more than one alternative input type, use a tuple of types. For builtin
types that are shadowed by C type names, pass "builtins.int" etc.

Stefan


___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread David Malcolm
On Mon, 2012-12-03 at 14:29 -0800, Larry Hastings wrote:

[...snip compelling sales pitch...]

I like the idea.

As noted elsewhere, sane generated C code is much easier to step through
in the debugger than preprocessor macros (though "sane" in that sentence
is begging the question, I guess, but the examples you post look good to
me).  It's also seems cleaner to split the argument handling from the
implementation of the function (iirc Cython already has an analogous
split and can use this to bypass arg tuple creation).

The proposal potentially also eliminates a source of bugs: mismatches
between the format strings in PyArg_Parse* vs the underlying C types
passed as varargs (which are a major pain for bigendian CPUs where int
vs long screwups can really bite you).

I got worried that this could introduce a bootstrapping issue (given
that the clinic is implemented using python itself), but given that the
generated code is checked in as part of the C source file, you always
have the source you need to regenerate the interpreter.

Presumably 3rd party extension modules could use this also, in which
case the clinic tool could be something that could be installed/packaged
as part of Python 3.4 ?

[...snip...]

> Big unresolved questions:
> 
> * How would we convert all the builtins to use Clinic?  I fear any
>solution will involve some work by hand.  Even if we can automate
>big chunks of it, fully automating it would require parsing arbitrary
>C.  This seems like overkill for a one-shot conversion.
>(Mark Shannon says he has some ideas.)

Potentially my gcc python plugin could be used to autogenerate things.
FWIW I already have Python code running inside gcc that can parse the
PyArg_* APIs:
http://git.fedorahosted.org/cgit/gcc-python-plugin.git/tree/libcpychecker/PyArg_ParseTuple.py

Though my plugin runs after the C preprocessor has been run, so it may
be fiddly to use this to autogenerate patches.


Hope this is helpful
Dave

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Larry Hastings



On 12/04/2012 01:08 AM, Antoine Pitrou wrote:

Le Mon, 03 Dec 2012 14:29:35 -0800,
Larry Hastings  a écrit :

/*[clinic]
dbm.open -> mapping
basename=dbmopen

const char *filename;
The filename to open.

So how does it handle the fact that filename can either be a unicode
string or a fsencoding-encoded bytestring? And how does it do the right
encoding/decoding dance, possibly platform-specific?

[...]
I see, it doesn't :-)


If you compare the Clinic-generated code to the current implementation 
of dbm.open (and all the other functions I've touched) you'll find the 
"format units" specified to PyArg_Parse* are identical.  Thus I assert 
the replacement argument parsing is no worse (and no better) than what's 
currently shipping in Python.


Separately, I contributed code that handles unicode vs bytes for 
filenames in a reasonably cross-platform way; see "path_converter" in 
Modules/posixmodule.c.  (This shipped in Python 3.3.)  And indeed, I 
have examples of using "path_converter" with Clinic in my branch.


Along these lines, I've been contemplating proposing that Clinic 
specifically understand "path" arguments, distinctly from other string 
arguments, as they are both common and rarely handled correctly.  My 
main fear is that I probably don't understand all their complexities 
either ;-)


Anyway, this is certainly something we can consider *improving* for 
Python 3.4.  But for now I'm trying to make Clinic an indistinguishable 
drop-in replacement.




I like the idea, but it needs more polishing. I don't think the various
"duck types" accepted by Python can be expressed fully in plain C types
(e.g. you must distinguish between taking all kinds of numbers or only
an __index__-providing number).


Naturally I agree Clinic needs more polishing.  But the problem you fear 
is already solved.  Clinic allows precisely expressing any existing 
PyArg_ "format unit"** through a combination of the type of the 
parameter and its "flags".  The flags only become necessary for types 
used by multiple format units; for example, s, z, es, et, es#, et#, y, 
and y# all map to char *, so it's necessary to disambiguate by using the 
"flags".  The specific case you cite ("__index__-providing number") is 
already unambiguous; that's n, mapped to Py_ssize_t.  There aren't any 
other format units that map to a Py_ssize_t, so we're done.


** Well, any format unit except w*.  I don't handle it just because I 
wasn't sure how best to do so.



//arry/
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Brett Cannon
On Mon, Dec 3, 2012 at 5:29 PM, Larry Hastings  wrote:

>
> Say there, the Python core development community!  Have I got
> a question for you!
>
> *ahem*
>
> Which of the following four options do you dislike least?  ;-)
>
> 1) CPython continues to provide no "function signature"
>objects (PEP 362) or inspect.getfullargspec() information
>for any function implemented in C.
>
> 2) We add new hand-coded data structures representing the
>metadata necessary for function signatures for builtins.
>Which means that, when defining arguments to functions in C,
>we'd need to repeat ourselves *even more* than we already do.
>
> 3) Builtin function arguments are defined using some seriously
>uncomfortable and impenetrable C preprocessor macros, which
>produce all the various types of output we need (argument
>processing code, function signature metadata, possibly
>the docstrings too).
>
> 4) Builtin function arguments are defined in a small DSL; these
>are expanded to code and data using a custom compile-time
>preprocessor step.
>
>
> All the core devs I've asked said "given all that, I'd prefer the
> hairy preprocessor macros".  But by the end of the conversation
> they'd changed their minds to prefer the custom DSL.  Maybe I'll
> make a believer out of you too--read on!
>
>
[snip]


> * There's actually a fifth option, proposed by Brett Cannon.  We
>   constrain the format of docstrings for builtin functions to make
>   them machine-readable, then generate the function signature objects
>   from that.  But consider: generating *everything* in the signature
>   object may get a bit tricky (e.g. Parameter.POSITIONAL_ONLY), and
>   this might gunk up the docstring.
>

I should mention that I was one of the people Larry pitched this to and
this fifth option was before I fully understood the extent the DSL
supported the various crazy options needed to support all current use-cases
in CPython.

Regardless I fully support what Larry is proposing.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Barry Warsaw
On Dec 04, 2012, at 11:47 AM, David Malcolm wrote:

>As noted elsewhere, sane generated C code is much easier to step through
>in the debugger than preprocessor macros (though "sane" in that sentence
>is begging the question, I guess, but the examples you post look good to
>me).

And to me too.

-Barry



signature.asc
Description: PGP signature
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Antoine Pitrou
On Tue, 04 Dec 2012 11:04:09 -0800
Larry Hastings  wrote:
> 
> Along these lines, I've been contemplating proposing that Clinic 
> specifically understand "path" arguments, distinctly from other string 
> arguments, as they are both common and rarely handled correctly.  My 
> main fear is that I probably don't understand all their complexities 
> either ;-)
> 
> Anyway, this is certainly something we can consider *improving* for 
> Python 3.4.  But for now I'm trying to make Clinic an indistinguishable 
> drop-in replacement.
> 
[...]
> 
> Naturally I agree Clinic needs more polishing.  But the problem you fear 
> is already solved.  Clinic allows precisely expressing any existing 
> PyArg_ "format unit"** through a combination of the type of the 
> parameter and its "flags".

Very nice then! Your work is promising, and I hope we'll see a version
of it some day in Python 3.4 (or 3.4+k).

Regards

Antoine.


___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Guido van Rossum
On Tue, Dec 4, 2012 at 11:35 AM, Antoine Pitrou  wrote:
> On Tue, 04 Dec 2012 11:04:09 -0800
> Larry Hastings  wrote:
>>
>> Along these lines, I've been contemplating proposing that Clinic
>> specifically understand "path" arguments, distinctly from other string
>> arguments, as they are both common and rarely handled correctly.  My
>> main fear is that I probably don't understand all their complexities
>> either ;-)
>>
>> Anyway, this is certainly something we can consider *improving* for
>> Python 3.4.  But for now I'm trying to make Clinic an indistinguishable
>> drop-in replacement.
>>
> [...]
>>
>> Naturally I agree Clinic needs more polishing.  But the problem you fear
>> is already solved.  Clinic allows precisely expressing any existing
>> PyArg_ "format unit"** through a combination of the type of the
>> parameter and its "flags".
>
> Very nice then! Your work is promising, and I hope we'll see a version
> of it some day in Python 3.4 (or 3.4+k).

+1 for getting this into 3.4. Does it need a PEP, or just a bug
tracker item + code review? I think the latter is fine -- it's
probably better not to do too much bikeshedding but just to let Larry
propose a patch, have it reviewed and submitted, and then iterate.
It's also okay if it is initially used for only a subset of extension
modules (and even if some functions/methods can't be expressed using
it yet).

-- 
--Guido van Rossum (python.org/~guido)
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Armin Rigo
Hi,

On Mon, Dec 3, 2012 at 3:42 PM, Gregory P. Smith  wrote:
> In fact allowing a version of Clinic to work stand alone as a
> PyPI project and generate Python 2.7 and 3.2/3.3 extension module
> boilerplate could would increase its adoption and improve the quality of
> some existing extension modules that choose to use it.

I agree: the same idea applies equally well to all existing 3rd-party
extension modules, and does not depend on new CPython C API functions
(so far), so Clinic should be released as a PyPI project too.


A bientôt,

Armin.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Brett Cannon
On Tue, Dec 4, 2012 at 4:17 PM, Guido van Rossum  wrote:

> On Tue, Dec 4, 2012 at 11:35 AM, Antoine Pitrou 
> wrote:
> > On Tue, 04 Dec 2012 11:04:09 -0800
> > Larry Hastings  wrote:
> >>
> >> Along these lines, I've been contemplating proposing that Clinic
> >> specifically understand "path" arguments, distinctly from other string
> >> arguments, as they are both common and rarely handled correctly.  My
> >> main fear is that I probably don't understand all their complexities
> >> either ;-)
> >>
> >> Anyway, this is certainly something we can consider *improving* for
> >> Python 3.4.  But for now I'm trying to make Clinic an indistinguishable
> >> drop-in replacement.
> >>
> > [...]
> >>
> >> Naturally I agree Clinic needs more polishing.  But the problem you fear
> >> is already solved.  Clinic allows precisely expressing any existing
> >> PyArg_ "format unit"** through a combination of the type of the
> >> parameter and its "flags".
> >
> > Very nice then! Your work is promising, and I hope we'll see a version
> > of it some day in Python 3.4 (or 3.4+k).
>
> +1 for getting this into 3.4. Does it need a PEP, or just a bug
> tracker item + code review? I think the latter is fine -- it's
> probably better not to do too much bikeshedding but just to let Larry
> propose a patch, have it reviewed and submitted, and then iterate.
> It's also okay if it is initially used for only a subset of extension
> modules (and even if some functions/methods can't be expressed using
> it yet).
>

I don't see a need for a PEP either; code review should be plenty since
this doesn't change how the outside world views public APIs. And we can
convert code iteratively so that shouldn't hold things up either.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Chris Angelico
On Tue, Dec 4, 2012 at 9:29 AM, Larry Hastings  wrote:
> To save you a little time, here's a preview of using Clinic for
> dbm.open().  The stuff at the same indent as a declaration are
> options; see the "clinic.txt" in the repo above for full documentation.
>
>   /*[clinic]
>... hand-written content ...
>   [clinic]*/
>
>  ... generated content ...
>   /*[clinic end:eddc886e542945d959b44b483258bf038acf8872]*/
>

One thing I'm not entirely clear on. Do you run Clinic on a source
file and it edits that file, or is it a step in the build process?
Your description of a preprocessor makes me think the latter, but the
style of code (eg the checksum) suggests the former.

ChrisA
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Antoine Pitrou
On Tue, 4 Dec 2012 16:45:54 -0500
Brett Cannon  wrote:
> >
> > +1 for getting this into 3.4. Does it need a PEP, or just a bug
> > tracker item + code review? I think the latter is fine -- it's
> > probably better not to do too much bikeshedding but just to let Larry
> > propose a patch, have it reviewed and submitted, and then iterate.
> > It's also okay if it is initially used for only a subset of extension
> > modules (and even if some functions/methods can't be expressed using
> > it yet).
> >
> 
> I don't see a need for a PEP either; code review should be plenty since
> this doesn't change how the outside world views public APIs. And we can
> convert code iteratively so that shouldn't hold things up either.

I think the DSL itself does warrant public exposure. It will be an
element of the CPython coding style, if its use becomes widespread.

Regards

Antoine.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Brett Cannon
On Tue, Dec 4, 2012 at 4:48 PM, Antoine Pitrou  wrote:

> On Tue, 4 Dec 2012 16:45:54 -0500
> Brett Cannon  wrote:
> > >
> > > +1 for getting this into 3.4. Does it need a PEP, or just a bug
> > > tracker item + code review? I think the latter is fine -- it's
> > > probably better not to do too much bikeshedding but just to let Larry
> > > propose a patch, have it reviewed and submitted, and then iterate.
> > > It's also okay if it is initially used for only a subset of extension
> > > modules (and even if some functions/methods can't be expressed using
> > > it yet).
> > >
> >
> > I don't see a need for a PEP either; code review should be plenty since
> > this doesn't change how the outside world views public APIs. And we can
> > convert code iteratively so that shouldn't hold things up either.
>
> I think the DSL itself does warrant public exposure. It will be an
> element of the CPython coding style, if its use becomes widespread.
>

That's what the issue will tease out, so this isn't going in without some
public scrutiny. But going through python-ideas for this I think is a bit
much. I mean we don't clear every change to PEP 7 or 8 with the public and
that directly affects people as well in terms of coding style.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Antoine Pitrou
On Tue, 4 Dec 2012 16:54:27 -0500
Brett Cannon  wrote:
> On Tue, Dec 4, 2012 at 4:48 PM, Antoine Pitrou  wrote:
> 
> > On Tue, 4 Dec 2012 16:45:54 -0500
> > Brett Cannon  wrote:
> > > >
> > > > +1 for getting this into 3.4. Does it need a PEP, or just a bug
> > > > tracker item + code review? I think the latter is fine -- it's
> > > > probably better not to do too much bikeshedding but just to let Larry
> > > > propose a patch, have it reviewed and submitted, and then iterate.
> > > > It's also okay if it is initially used for only a subset of extension
> > > > modules (and even if some functions/methods can't be expressed using
> > > > it yet).
> > > >
> > >
> > > I don't see a need for a PEP either; code review should be plenty since
> > > this doesn't change how the outside world views public APIs. And we can
> > > convert code iteratively so that shouldn't hold things up either.
> >
> > I think the DSL itself does warrant public exposure. It will be an
> > element of the CPython coding style, if its use becomes widespread.
> >
> 
> That's what the issue will tease out, so this isn't going in without some
> public scrutiny. But going through python-ideas for this I think is a bit
> much. I mean we don't clear every change to PEP 7 or 8 with the public and
> that directly affects people as well in terms of coding style.

Not necessarily python-ideas, but python-dev.
(I hope we don't need a separate clinic-dev mailing-list, although it
certainly sounds funny)

Regards

Antoine.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Barry Warsaw
On Dec 04, 2012, at 10:48 PM, Antoine Pitrou wrote:

>I think the DSL itself does warrant public exposure. It will be an
>element of the CPython coding style, if its use becomes widespread.

We do have PEP 7 after all.

No matter what, this stuff has to eventually be well documented outside of the 
tracker.

-Barry
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Brian Curtin
On Tue, Dec 4, 2012 at 3:54 PM, Brett Cannon  wrote:
> But going through python-ideas for this I think is a bit much.

It would never end.

I think an issue on roundup could work just fine.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Larry Hastings

On 12/04/2012 01:49 PM, Chris Angelico wrote:

One thing I'm not entirely clear on. Do you run Clinic on a source
file and it edits that file, or is it a step in the build process?
Your description of a preprocessor makes me think the latter, but the
style of code (eg the checksum) suggests the former.


You run Clinic on a source file and it edits that file in-place (unless 
you use -o).  It's not currently integrated into the build process.  At 
what time Clinic gets run--manually or automatically--is TBD.


Here's my blue-sky probably-overengineered proposal: we (and when I say 
"we" I mean "I") write a cross-platform C program that could be 
harmlessly but usefully integrated into the build process.  First, we 
add a checksum for the *input* into the Clinic output.  Next, when you 
run this program, you give it a C file as an argument. First it tries to 
find a working Python on your path.  If it finds one, it uses that 
Python to run Clinic on the file, propagating any error code outward.  
If it doesn't find one, it understands enough of the Clinic format to 
scan the C file looking for Clinic blocks. If it finds one where the 
checksum doesn't match (for input or output!) it complains loudly and 
exits with an error code, hopefully bringing the build to a screeching 
halt.  This would integrate Clinic into the build process without making 
the build reliant on having a Python interpreter available.


I get the sneaking suspicion that I'm going to rewrite Clinic to run 
under either Python 2.7 or 3,



//arry/
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Larry Hastings

On 12/04/2012 02:10 PM, Brian Curtin wrote:

I think an issue on roundup could work just fine.


http://bugs.python.org/issue16612

Cheers,


//arry/
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Chris Angelico
On Wed, Dec 5, 2012 at 9:17 AM, Larry Hastings  wrote:
> Here's my blue-sky probably-overengineered proposal: we (and when I say "we"
> I mean "I") write a cross-platform C program that could be harmlessly but
> usefully integrated into the build process.  First, we add a checksum for
> the *input* into the Clinic output.  Next, when you run this program, you
> give it a C file as an argument.  First it tries to find a working Python on
> your path.  If it finds one, it uses that Python to run Clinic on the file,
> propagating any error code outward.  If it doesn't find one, it understands
> enough of the Clinic format to scan the C file looking for Clinic blocks.
> If it finds one where the checksum doesn't match (for input or output!) it
> complains loudly and exits with an error code, hopefully bringing the build
> to a screeching halt.  This would integrate Clinic into the build process
> without making the build reliant on having a Python interpreter available.

That would probably work, but it implies having two places that
understand Clinic blocks (the main Python script, and the C binary),
with the potential for one of them to have a bug. Is it possible,
instead, to divide the build process in half, and actually use the
newly-built Python to run all Clinic code? That would put some (maybe
a lot of) restrictions on what functionality the Clinic parser is
allowed to use, but if it can work, it'd be clean. (The main code of
Clinic could still demand a fully-working Python if that's easier; I'm
just suggesting making the "check the checksums" part of the same
Python script as does the real work.)

ChrisA
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

2012-12-04 Thread Nick Coghlan
On Wed, Dec 5, 2012 at 8:17 AM, Larry Hastings  wrote:

> I get the sneaking suspicion that I'm going to rewrite Clinic to run under
> either Python 2.7 or 3,
>

For bootstrapping purposes, isn't it enough to just ignore the checksums if
there's no Python interpreter already built? We can have a commit hook that
rejects a checkin if the checksums don't match so you can't push a change
if you've modified the headers without regenerating them.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncogh...@gmail.com   |   Brisbane, Australia
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Keyword meanings [was: Accept just PEP-0426]

2012-12-04 Thread PJ Eby
On Mon, Dec 3, 2012 at 2:43 PM, Daniel Holth  wrote:
> How to use Obsoletes:
>
> The author of B decides A is obsolete.
>
> A releases an empty version of itself that Requires: B
>
> B Obsoletes: A
>
> The package manager says "These packages are obsolete: A". Would you like to
> remove them?
>
> User says "OK".
>

Um, no.  Even if the the author of A and B are the same person, you
can't remove A if there are other things on the user's system using
it.  The above scenario does not work *at all*, ever, except in the
case where B is simply an updated version of A (i.e. identical API) --
in which case, why bother?  To change the project name?  (Then it
should be "Formerly-named" or something like that, not "Obsoletes".)

Please, *please* see the previous Catalog-SIG discussion I linked:
this is only one of multiple metadata fields that were thoroughly
debunked in that discussion as completely useless for automated
dependency management.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Keyword meanings [was: Accept just PEP-0426]

2012-12-04 Thread Donald Stufft
On Wednesday, December 5, 2012 at 2:13 AM, PJ Eby wrote:
> On Mon, Dec 3, 2012 at 2:43 PM, Daniel Holth  (mailto:dho...@gmail.com)> wrote:
> > How to use Obsoletes:
> > 
> > The author of B decides A is obsolete.
> > 
> > A releases an empty version of itself that Requires: B
> > 
> > B Obsoletes: A
> > 
> > The package manager says "These packages are obsolete: A". Would you like to
> > remove them?
> > 
> > User says "OK".
> 
> Um, no. Even if the the author of A and B are the same person, you
> can't remove A if there are other things on the user's system using
> it. The above scenario does not work *at all*, ever, except in the
> case where B is simply an updated version of A (i.e. identical API) --
> in which case, why bother? To change the project name? (Then it
> should be "Formerly-named" or something like that, not "Obsoletes".)
> 
> 

You can automatically uninstall A from B in an automatic dependency
management system. I *think* RPM does this, at the very least
I believe it refuses to install B if A is already there (and the reverse
as well).*

There's nothing preventing an installer from, during it's attempt to
install B, see it Obsoletes A, looking at what depends on A and
warning the user what is going to happen and prompt it.

I think Obsoletes as is an alright bit of information. I think the biggest
flaw with Obsoletes isn't in Obsoletes itself, but is in the lack of a
Conflicts tag that has the same functionality (minimally refusal to
install both, possibly uninstall the previous one with a prompt to the
user).

Obsoletes has the semantics of a logical successor (typically renames)
while Conflicts should have the semantics of a competitor.

distribute would conflict with setuptools, foo2 would Obsoletes foo.

* I could be wrong about RPM's treatment of Obsoletes

 
> 
> Please, *please* see the previous Catalog-SIG discussion I linked:
> this is only one of multiple metadata fields that were thoroughly
> debunked in that discussion as completely useless for automated
> dependency management.
> 
> 

I don't see this in this thread, could you link it again? 
> ___
> Python-Dev mailing list
> Python-Dev@python.org (mailto:Python-Dev@python.org)
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: 
> http://mail.python.org/mailman/options/python-dev/donald.stufft%40gmail.com
> 
> 


___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com