Форум сайта python.su
Не знаю как создать PEP (Python Enhancement Proposals, Предложение по Улучшению Питона).
У меня есть предложение, которое будет интересно для программистов на C++.
Идея состоит в том, чтобы добавить в API Питона немножко ООП.
Сейчас при написание модулей к Питону прихожится использовать функции вида PyList_Size(list), PyTuple_GetItem(tuple, index), др. Это связано с тем, что Питон полностью написан на C.
C++ позволяет добавлять к структурам (struct) методы наподобии классов. Эти методы будут поголовно inline, и будут состоят в большинстве своем из одной строки. Например:
в файле listobject.h (Python 2.5.1) есть объявление объекта “список”.
typedef struct {
PyObject_VAR_HEAD
PyObject **ob_item;
Py_ssize_t allocated;
} PyListObject;
typedef struct {
PyObject_VAR_HEAD
PyObject **ob_item;
Py_ssize_t allocated;
#ifdef __cplusplus
static inline PyObject * New (Py_ssize_t size) { return PyList_New(size); }
inline Py_ssize_t Size () { return PyList_Size(this); }
inline PyObject * GetItem (Py_ssize_t index) { return PyList_GetItem(this, index); }
inline PyObject * AsTuple () { return PyList_AsTuple(this); }
/*etc*/
#endif
} PyListObject;
count = PyList_Size(list);
count = list->Size();
Офлайн
Для С++ нет стандартизированного ABI (Application Binary Interface), так что С99 наше все:) Если вам не хватает высокоуровновасти при написании модулей расширений используйте pyrex.
Офлайн
Python C API - низкоуровневый стандарт. И именно по причине низкоуровнвости это С API, а не C++.
И эта ситуация никогда не изменится.
Другое дело - ООП. Самому очень нравится. Но в том как раз и вся фишка, что API менять не нужно. Достаточно создать хорошую С++ надстройку (как это принято делать в подобных случаях).
Спасибо Дейву Абрамсу - она уже есть. boost.python
Хочется изобрести что-то еще? Свою уникальную модель велосипеда?
Офлайн
ClericНо ведь я не добавляю никакие поля в структуры PyObject, PyListObject, PyFileObject, др. Я предлагаю лишь добавить методы. В результате получится, что sizeof(…) не изменится.
Для С++ нет стандартизированного ABI (Application Binary Interface), так что С99 наше все:)
Офлайн
Андрей Светловboost.python, pyrex - это все объекто-ориентированные надстройки. А любый надстройки замедляют работу. То что я предложил - это лишь украшение синтаксиса, которое не влияет (почти) на скорость.
Python C API - низкоуровневый стандарт. И именно по причине низкоуровнвости это С API, а не C++.
И эта ситуация никогда не изменится.
Другое дело - ООП. Самому очень нравится. Но в том как раз и вся фишка, что API менять не нужно. Достаточно создать хорошую С++ надстройку (как это принято делать в подобных случаях).
Спасибо Дейву Абрамсу - она уже есть. boost.python
Андрей СветловЯ погарячился, сказав об ООП. Мне больше хочется просто красивого синтаксиса object->method(argments…).
Хочется изобрести что-то еще? Свою уникальную модель велосипеда?
Офлайн
Trumpдело не в размере, а в компиляторе. в С нет методов у структур, а значит чтобы реализовать твою идею понадобится С++ компилятор. тут то и скажется отсутсвие ABI
Но ведь я не добавляю никакие поля в структуры PyObject, PyListObject, PyFileObject, др. Я предлагаю лишь добавить методы. В результате получится, что sizeof(…) не изменится.
Trumpмягко-говоря повод не велик:)
Мне больше хочется просто красивого синтаксиса object->method(argments…).
Офлайн