Fix forced arg format in AC-processed modules with custom converters
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 36k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
There are custom Argument Clinic converters that define format_unit but omit parse_arg. As a result, generation of positional argument parsers is forced to back up from the fastest possible _PyArg_CheckPositional to slower _PyArg_ParseStack-based format strings.
Here is a list of such classes (and fixing PRs except complex cases):
-
Modules\_multiprocessing\multiprocessing.c (gh-94517)
- HANDLE_converter
-
Modules\_multiprocessing\semaphore.c
- SEM_HANDLE_converter
-
Modules\overlapped.c (gh-94516)
- OVERLAPPED_converter
- HANDLE_converter
- ULONG_PTR_converter
- DWORD_converter
- BOOL_converter
-
Modules\posixmodule.c (gh-122516)
- pid_t_converter
- idtype_t_converter
- id_t_converter
- intptr_t_converter
- Py_off_t_converter
-
Modules\resource.c (gh-94515)
- pid_t_converter
-
PC\msvcrtmodule.c (gh-94514)
- HANDLE_converter
-
PC\winreg.c (gh-94513)
- REGSAM_converter
- DWORD_converter
- HKEY_converter
An example of such a converter:
class BOOL_converter(CConverter):
type = 'BOOL'
format_unit = 'i'
class pid_t_converter(CConverter):
type = 'pid_t'
format_unit = '" _Py_PARSE_PID "'
I'm going to teach all of them about low-level generation by replacing manual format_unit definitions with:
- inheritance from a corresponding builtin converter where possible
- and custom
parse_args in other places.
For the example it gives:
class BOOL_converter(int_converter):
type = 'BOOL'
class pid_t_converter(CConverter):
type = 'pid_t'
# Left as a backup for potential complex cases
format_unit = '" _Py_PARSE_PID "'
def parse_arg(self, argname, displayname):
return """
{paramname} = PyLong_AsPid({argname});
if ({paramname} == -1 && PyErr_Occurred()) {{{{
goto exit;
}}}}
""".format(argname=argname, paramname=self.parser_name)
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu với Modules/_multiprocessing/semaphore.c và SEM_HANDLE_converter của nó, sau đó đọc các ví dụ converter được liệt kê và các module tương ứng đã được đánh dấu hoàn tất để so sánh. Xem xét cách Argument Clinic sử dụng format_unit và parse_arg trong quá trình tạo positional parser. Hoàn thành khi converter không còn buộc sử dụng format-string parser chậm hơn mà vẫn duy trì việc phân tích đối số chính xác.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- c, python
- Lĩnh vực
- performance, tooling
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 45/100