Lifetime of a “String” representation of a PyObject*
up vote
0
down vote
favorite
I compare 2 languages… Tcl and Python on C-API… interacting with a external C-API function… the problem is the const char*
String-Representation…
Tcl
Tcl_Obj *obj=…;
const char *str=Tcl_GetStringFromObj(obj,NULL);
→ the str
is part of the obj
and hast the same lifetime as the obj
… dito… no cleanup is required
Python
PyObject *obj=…;
PyObject *strObj=PyObject_Str(obj);
const char *str=PyBytes_AsString(strObj);
Py_XDECREF(strObj);
→ the str
is part of the strObj
an a cleanup Py_XDECREF(strObj)
is required…
the cleanup in python is the problem because this requires a freaky housekeeping…because the lifetime of str
depends code-logic
even if I do my OWN str
copy using strstr
I have to cleanup my OWN copy.
Question: what is the general lifetime of an PyObject
and the String-Representation
python c tcl
add a comment |
up vote
0
down vote
favorite
I compare 2 languages… Tcl and Python on C-API… interacting with a external C-API function… the problem is the const char*
String-Representation…
Tcl
Tcl_Obj *obj=…;
const char *str=Tcl_GetStringFromObj(obj,NULL);
→ the str
is part of the obj
and hast the same lifetime as the obj
… dito… no cleanup is required
Python
PyObject *obj=…;
PyObject *strObj=PyObject_Str(obj);
const char *str=PyBytes_AsString(strObj);
Py_XDECREF(strObj);
→ the str
is part of the strObj
an a cleanup Py_XDECREF(strObj)
is required…
the cleanup in python is the problem because this requires a freaky housekeeping…because the lifetime of str
depends code-logic
even if I do my OWN str
copy using strstr
I have to cleanup my OWN copy.
Question: what is the general lifetime of an PyObject
and the String-Representation
python c tcl
:-) yes… lifetime
– Andreas Otto
Nov 19 at 15:31
1
Technically, the string returned byTcl_GetStringFromObj
is managed by the object, and can be freed (viaTcl_Free
) providing thebytes
field of theTcl_Obj
is then set toNULL
so that everything else knows that the string representation is no longer there.
– Donal Fellows
Nov 19 at 15:40
thanks… but the good think of Tcl is… that the string returned is not required toTcl_Free
… as I understand… this mean I'm very flexible…
– Andreas Otto
Nov 19 at 15:45
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I compare 2 languages… Tcl and Python on C-API… interacting with a external C-API function… the problem is the const char*
String-Representation…
Tcl
Tcl_Obj *obj=…;
const char *str=Tcl_GetStringFromObj(obj,NULL);
→ the str
is part of the obj
and hast the same lifetime as the obj
… dito… no cleanup is required
Python
PyObject *obj=…;
PyObject *strObj=PyObject_Str(obj);
const char *str=PyBytes_AsString(strObj);
Py_XDECREF(strObj);
→ the str
is part of the strObj
an a cleanup Py_XDECREF(strObj)
is required…
the cleanup in python is the problem because this requires a freaky housekeeping…because the lifetime of str
depends code-logic
even if I do my OWN str
copy using strstr
I have to cleanup my OWN copy.
Question: what is the general lifetime of an PyObject
and the String-Representation
python c tcl
I compare 2 languages… Tcl and Python on C-API… interacting with a external C-API function… the problem is the const char*
String-Representation…
Tcl
Tcl_Obj *obj=…;
const char *str=Tcl_GetStringFromObj(obj,NULL);
→ the str
is part of the obj
and hast the same lifetime as the obj
… dito… no cleanup is required
Python
PyObject *obj=…;
PyObject *strObj=PyObject_Str(obj);
const char *str=PyBytes_AsString(strObj);
Py_XDECREF(strObj);
→ the str
is part of the strObj
an a cleanup Py_XDECREF(strObj)
is required…
the cleanup in python is the problem because this requires a freaky housekeeping…because the lifetime of str
depends code-logic
even if I do my OWN str
copy using strstr
I have to cleanup my OWN copy.
Question: what is the general lifetime of an PyObject
and the String-Representation
python c tcl
python c tcl
edited Nov 19 at 15:39
Fiddling Bits
7,10021938
7,10021938
asked Nov 19 at 15:27
Andreas Otto
638
638
:-) yes… lifetime
– Andreas Otto
Nov 19 at 15:31
1
Technically, the string returned byTcl_GetStringFromObj
is managed by the object, and can be freed (viaTcl_Free
) providing thebytes
field of theTcl_Obj
is then set toNULL
so that everything else knows that the string representation is no longer there.
– Donal Fellows
Nov 19 at 15:40
thanks… but the good think of Tcl is… that the string returned is not required toTcl_Free
… as I understand… this mean I'm very flexible…
– Andreas Otto
Nov 19 at 15:45
add a comment |
:-) yes… lifetime
– Andreas Otto
Nov 19 at 15:31
1
Technically, the string returned byTcl_GetStringFromObj
is managed by the object, and can be freed (viaTcl_Free
) providing thebytes
field of theTcl_Obj
is then set toNULL
so that everything else knows that the string representation is no longer there.
– Donal Fellows
Nov 19 at 15:40
thanks… but the good think of Tcl is… that the string returned is not required toTcl_Free
… as I understand… this mean I'm very flexible…
– Andreas Otto
Nov 19 at 15:45
:-) yes… lifetime
– Andreas Otto
Nov 19 at 15:31
:-) yes… lifetime
– Andreas Otto
Nov 19 at 15:31
1
1
Technically, the string returned by
Tcl_GetStringFromObj
is managed by the object, and can be freed (via Tcl_Free
) providing the bytes
field of the Tcl_Obj
is then set to NULL
so that everything else knows that the string representation is no longer there.– Donal Fellows
Nov 19 at 15:40
Technically, the string returned by
Tcl_GetStringFromObj
is managed by the object, and can be freed (via Tcl_Free
) providing the bytes
field of the Tcl_Obj
is then set to NULL
so that everything else knows that the string representation is no longer there.– Donal Fellows
Nov 19 at 15:40
thanks… but the good think of Tcl is… that the string returned is not required to
Tcl_Free
… as I understand… this mean I'm very flexible…– Andreas Otto
Nov 19 at 15:45
thanks… but the good think of Tcl is… that the string returned is not required to
Tcl_Free
… as I understand… this mean I'm very flexible…– Andreas Otto
Nov 19 at 15:45
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
These are two different approaches to how the string representation of objects is managed.
From Tcl docs for Tcl_GetStringFromObj
:
The storage referenced by the returned byte pointer is owned by the
object manager.
From Python docs for PyObject_Str
:
Return value: New reference. Compute a string representation of object
o.
So Python decides to compute the string representation of the object every time it's requested and invoking PyObject_Str
is basically the same as invoking Tcl_NewStringObj
. This does require the developer to do some memory management on the returned object, but on the other hand it means you don't have to worry about managing the internal string representation of the object every time the object is changed: the string is simply computed every time it's requested.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
These are two different approaches to how the string representation of objects is managed.
From Tcl docs for Tcl_GetStringFromObj
:
The storage referenced by the returned byte pointer is owned by the
object manager.
From Python docs for PyObject_Str
:
Return value: New reference. Compute a string representation of object
o.
So Python decides to compute the string representation of the object every time it's requested and invoking PyObject_Str
is basically the same as invoking Tcl_NewStringObj
. This does require the developer to do some memory management on the returned object, but on the other hand it means you don't have to worry about managing the internal string representation of the object every time the object is changed: the string is simply computed every time it's requested.
add a comment |
up vote
1
down vote
These are two different approaches to how the string representation of objects is managed.
From Tcl docs for Tcl_GetStringFromObj
:
The storage referenced by the returned byte pointer is owned by the
object manager.
From Python docs for PyObject_Str
:
Return value: New reference. Compute a string representation of object
o.
So Python decides to compute the string representation of the object every time it's requested and invoking PyObject_Str
is basically the same as invoking Tcl_NewStringObj
. This does require the developer to do some memory management on the returned object, but on the other hand it means you don't have to worry about managing the internal string representation of the object every time the object is changed: the string is simply computed every time it's requested.
add a comment |
up vote
1
down vote
up vote
1
down vote
These are two different approaches to how the string representation of objects is managed.
From Tcl docs for Tcl_GetStringFromObj
:
The storage referenced by the returned byte pointer is owned by the
object manager.
From Python docs for PyObject_Str
:
Return value: New reference. Compute a string representation of object
o.
So Python decides to compute the string representation of the object every time it's requested and invoking PyObject_Str
is basically the same as invoking Tcl_NewStringObj
. This does require the developer to do some memory management on the returned object, but on the other hand it means you don't have to worry about managing the internal string representation of the object every time the object is changed: the string is simply computed every time it's requested.
These are two different approaches to how the string representation of objects is managed.
From Tcl docs for Tcl_GetStringFromObj
:
The storage referenced by the returned byte pointer is owned by the
object manager.
From Python docs for PyObject_Str
:
Return value: New reference. Compute a string representation of object
o.
So Python decides to compute the string representation of the object every time it's requested and invoking PyObject_Str
is basically the same as invoking Tcl_NewStringObj
. This does require the developer to do some memory management on the returned object, but on the other hand it means you don't have to worry about managing the internal string representation of the object every time the object is changed: the string is simply computed every time it's requested.
answered Nov 19 at 15:54
mnistic
6,7231820
6,7231820
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53377814%2flifetime-of-a-string-representation-of-a-pyobject%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
:-) yes… lifetime
– Andreas Otto
Nov 19 at 15:31
1
Technically, the string returned by
Tcl_GetStringFromObj
is managed by the object, and can be freed (viaTcl_Free
) providing thebytes
field of theTcl_Obj
is then set toNULL
so that everything else knows that the string representation is no longer there.– Donal Fellows
Nov 19 at 15:40
thanks… but the good think of Tcl is… that the string returned is not required to
Tcl_Free
… as I understand… this mean I'm very flexible…– Andreas Otto
Nov 19 at 15:45