benrg <benrud...@gmail.com> added the comment:

I am still interested in this for the same reason I was interested in this in 
the first place; nothing has changed. I guess I will reiterate, and try to 
expand.
The problem is that ctypes tries to enforce const correctness (inconsistently), 
but it has no way to declare its objects as const, and assumes they are all 
non-const. This is the worst possible combination. It would make sense to have 
no notion of const and never try to enforce it (like K&R C), and it would make 
sense to have constness and try to enforce it (like C++). But the present 
situation is like a compiler that treats string literals as const char[], and 
doesn't allow casting away const, but doesn't allow the use of the const 
keyword in user code, so there's no way to pass a string literal as a function 
argument because the necessary type can't be expressed. Instead you have to 
copy the literal to a char array and pass that.

Calling C functions is inherently unsafe. Calling C functions could always 
corrupt the Python heap or otherwise screw around with state that the Python 
environment thinks that it owns. All I want is some means to assert that my 
code is not going to do that, as a way of getting around the limited type 
system that can't provide those sorts of guarantees. More broadly, what I want 
from ctypes is a way to do the sorts of things that I can do in C. If I can 
call foo(&bar + 17) in C, I want to be able to make that call in Python.

I wasn't using (c_type*N).from_buffer because I wanted to. I was using it after 
wasting literally hours trying to find some other way to get ctypes to agree to 
pass a pointer into the buffer of a Python object to an external function 
(which was not going to alter it, I promise). This should be easy; instead it's 
nearly impossible. I don't want to wrestle with random un-overridable attempts 
to enforce correctness when calling a language where that can never be 
enforced. I just want to call my C function.

I'm pretty sure that I verified that this code worked in 3.1.3 before opening 
this bug, but it's been a while. I could try to reproduce it, but I think this 
functionality should be present regardless. You can call it a feature request 
instead of a regression if you want.

----------
resolution: invalid -> 
status: closed -> open

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue11427>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to