# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2001-2022, Python Software Foundation
# This file is distributed under the same license as the Python package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: Python 3.12\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-29 00:03+0000\n"
"PO-Revision-Date: 2018-05-23 14:31+0000\n"
"Last-Translator: Adrian Liaw \n"
"Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-"
"tw)\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../../c-api/gcsupport.rst:6
msgid "Supporting Cyclic Garbage Collection"
msgstr ""
#: ../../c-api/gcsupport.rst:8
msgid ""
"Python's support for detecting and collecting garbage which involves "
"circular references requires support from object types which are "
"\"containers\" for other objects which may also be containers. Types which "
"do not store references to other objects, or which only store references to "
"atomic types (such as numbers or strings), do not need to provide any "
"explicit support for garbage collection."
msgstr ""
#: ../../c-api/gcsupport.rst:15
msgid ""
"To create a container type, the :c:member:`~PyTypeObject.tp_flags` field of "
"the type object must include the :c:macro:`Py_TPFLAGS_HAVE_GC` and provide "
"an implementation of the :c:member:`~PyTypeObject.tp_traverse` handler. If "
"instances of the type are mutable, a :c:member:`~PyTypeObject.tp_clear` "
"implementation must also be provided."
msgstr ""
#: ../../c-api/gcsupport.rst:24
msgid ":c:macro:`Py_TPFLAGS_HAVE_GC`"
msgstr ":c:macro:`Py_TPFLAGS_HAVE_GC`"
#: ../../c-api/gcsupport.rst:22
msgid ""
"Objects with a type with this flag set must conform with the rules "
"documented here. For convenience these objects will be referred to as "
"container objects."
msgstr ""
#: ../../c-api/gcsupport.rst:26
msgid "Constructors for container types must conform to two rules:"
msgstr ""
#: ../../c-api/gcsupport.rst:28
msgid ""
"The memory for the object must be allocated using :c:macro:`PyObject_GC_New` "
"or :c:macro:`PyObject_GC_NewVar`."
msgstr ""
#: ../../c-api/gcsupport.rst:31
msgid ""
"Once all the fields which may contain references to other containers are "
"initialized, it must call :c:func:`PyObject_GC_Track`."
msgstr ""
#: ../../c-api/gcsupport.rst:34
msgid ""
"Similarly, the deallocator for the object must conform to a similar pair of "
"rules:"
msgstr ""
#: ../../c-api/gcsupport.rst:37
msgid ""
"Before fields which refer to other containers are invalidated, :c:func:"
"`PyObject_GC_UnTrack` must be called."
msgstr ""
#: ../../c-api/gcsupport.rst:40
msgid ""
"The object's memory must be deallocated using :c:func:`PyObject_GC_Del`."
msgstr ""
#: ../../c-api/gcsupport.rst:43
msgid ""
"If a type adds the Py_TPFLAGS_HAVE_GC, then it *must* implement at least a :"
"c:member:`~PyTypeObject.tp_traverse` handler or explicitly use one from its "
"subclass or subclasses."
msgstr ""
#: ../../c-api/gcsupport.rst:47
msgid ""
"When calling :c:func:`PyType_Ready` or some of the APIs that indirectly call "
"it like :c:func:`PyType_FromSpecWithBases` or :c:func:`PyType_FromSpec` the "
"interpreter will automatically populate the :c:member:`~PyTypeObject."
"tp_flags`, :c:member:`~PyTypeObject.tp_traverse` and :c:member:"
"`~PyTypeObject.tp_clear` fields if the type inherits from a class that "
"implements the garbage collector protocol and the child class does *not* "
"include the :c:macro:`Py_TPFLAGS_HAVE_GC` flag."
msgstr ""
#: ../../c-api/gcsupport.rst:57
msgid ""
"Analogous to :c:macro:`PyObject_New` but for container objects with the :c:"
"macro:`Py_TPFLAGS_HAVE_GC` flag set."
msgstr ""
#: ../../c-api/gcsupport.rst:62
msgid ""
"Analogous to :c:macro:`PyObject_NewVar` but for container objects with the :"
"c:macro:`Py_TPFLAGS_HAVE_GC` flag set."
msgstr ""
#: ../../c-api/gcsupport.rst:67
msgid ""
"Analogous to :c:macro:`PyObject_GC_New` but allocates *extra_size* bytes at "
"the end of the object (at offset :c:member:`~PyTypeObject.tp_basicsize`). "
"The allocated memory is initialized to zeros, except for the :c:type:`Python "
"object header `."
msgstr ""
#: ../../c-api/gcsupport.rst:73
msgid ""
"The extra data will be deallocated with the object, but otherwise it is not "
"managed by Python."
msgstr ""
#: ../../c-api/gcsupport.rst:77
msgid ""
"The function is marked as unstable because the final mechanism for reserving "
"extra data after an instance is not yet decided. For allocating a variable "
"number of fields, prefer using :c:type:`PyVarObject` and :c:member:"
"`~PyTypeObject.tp_itemsize` instead."
msgstr ""
#: ../../c-api/gcsupport.rst:88
msgid ""
"Resize an object allocated by :c:macro:`PyObject_NewVar`. Returns the "
"resized object or ``NULL`` on failure. *op* must not be tracked by the "
"collector yet."
msgstr ""
#: ../../c-api/gcsupport.rst:94
msgid ""
"Adds the object *op* to the set of container objects tracked by the "
"collector. The collector can run at unexpected times so objects must be "
"valid while being tracked. This should be called once all the fields "
"followed by the :c:member:`~PyTypeObject.tp_traverse` handler become valid, "
"usually near the end of the constructor."
msgstr ""
#: ../../c-api/gcsupport.rst:103
msgid ""
"Returns non-zero if the object implements the garbage collector protocol, "
"otherwise returns 0."
msgstr ""
#: ../../c-api/gcsupport.rst:106
msgid ""
"The object cannot be tracked by the garbage collector if this function "
"returns 0."
msgstr ""
#: ../../c-api/gcsupport.rst:111
msgid ""
"Returns 1 if the object type of *op* implements the GC protocol and *op* is "
"being currently tracked by the garbage collector and 0 otherwise."
msgstr ""
#: ../../c-api/gcsupport.rst:114
msgid "This is analogous to the Python function :func:`gc.is_tracked`."
msgstr ""
#: ../../c-api/gcsupport.rst:121
msgid ""
"Returns 1 if the object type of *op* implements the GC protocol and *op* has "
"been already finalized by the garbage collector and 0 otherwise."
msgstr ""
#: ../../c-api/gcsupport.rst:124
msgid "This is analogous to the Python function :func:`gc.is_finalized`."
msgstr ""
#: ../../c-api/gcsupport.rst:131
msgid ""
"Releases memory allocated to an object using :c:macro:`PyObject_GC_New` or :"
"c:macro:`PyObject_GC_NewVar`."
msgstr ""
#: ../../c-api/gcsupport.rst:137
msgid ""
"Remove the object *op* from the set of container objects tracked by the "
"collector. Note that :c:func:`PyObject_GC_Track` can be called again on "
"this object to add it back to the set of tracked objects. The deallocator (:"
"c:member:`~PyTypeObject.tp_dealloc` handler) should call this for the object "
"before any of the fields used by the :c:member:`~PyTypeObject.tp_traverse` "
"handler become invalid."
msgstr ""
#: ../../c-api/gcsupport.rst:146
msgid ""
"The :c:func:`!_PyObject_GC_TRACK` and :c:func:`!_PyObject_GC_UNTRACK` macros "
"have been removed from the public C API."
msgstr ""
#: ../../c-api/gcsupport.rst:149
msgid ""
"The :c:member:`~PyTypeObject.tp_traverse` handler accepts a function "
"parameter of this type:"
msgstr ""
#: ../../c-api/gcsupport.rst:154
msgid ""
"Type of the visitor function passed to the :c:member:`~PyTypeObject."
"tp_traverse` handler. The function should be called with an object to "
"traverse as *object* and the third parameter to the :c:member:`~PyTypeObject."
"tp_traverse` handler as *arg*. The Python core uses several visitor "
"functions to implement cyclic garbage detection; it's not expected that "
"users will need to write their own visitor functions."
msgstr ""
#: ../../c-api/gcsupport.rst:161
msgid ""
"The :c:member:`~PyTypeObject.tp_traverse` handler must have the following "
"type:"
msgstr ""
#: ../../c-api/gcsupport.rst:166
msgid ""
"Traversal function for a container object. Implementations must call the "
"*visit* function for each object directly contained by *self*, with the "
"parameters to *visit* being the contained object and the *arg* value passed "
"to the handler. The *visit* function must not be called with a ``NULL`` "
"object argument. If *visit* returns a non-zero value that value should be "
"returned immediately."
msgstr ""
#: ../../c-api/gcsupport.rst:173
msgid ""
"To simplify writing :c:member:`~PyTypeObject.tp_traverse` handlers, a :c:"
"func:`Py_VISIT` macro is provided. In order to use this macro, the :c:"
"member:`~PyTypeObject.tp_traverse` implementation must name its arguments "
"exactly *visit* and *arg*:"
msgstr ""
#: ../../c-api/gcsupport.rst:180
msgid ""
"If *o* is not ``NULL``, call the *visit* callback, with arguments *o* and "
"*arg*. If *visit* returns a non-zero value, then return it. Using this "
"macro, :c:member:`~PyTypeObject.tp_traverse` handlers look like::"
msgstr ""
#: ../../c-api/gcsupport.rst:193
msgid ""
"The :c:member:`~PyTypeObject.tp_clear` handler must be of the :c:type:"
"`inquiry` type, or ``NULL`` if the object is immutable."
msgstr ""
#: ../../c-api/gcsupport.rst:199
msgid ""
"Drop references that may have created reference cycles. Immutable objects "
"do not have to define this method since they can never directly create "
"reference cycles. Note that the object must still be valid after calling "
"this method (don't just call :c:func:`Py_DECREF` on a reference). The "
"collector will call this method if it detects that this object is involved "
"in a reference cycle."
msgstr ""
#: ../../c-api/gcsupport.rst:208
msgid "Controlling the Garbage Collector State"
msgstr ""
#: ../../c-api/gcsupport.rst:210
msgid ""
"The C-API provides the following functions for controlling garbage "
"collection runs."
msgstr ""
#: ../../c-api/gcsupport.rst:215
msgid ""
"Perform a full garbage collection, if the garbage collector is enabled. "
"(Note that :func:`gc.collect` runs it unconditionally.)"
msgstr ""
#: ../../c-api/gcsupport.rst:218
msgid ""
"Returns the number of collected + unreachable objects which cannot be "
"collected. If the garbage collector is disabled or already collecting, "
"returns ``0`` immediately. Errors during garbage collection are passed to :"
"data:`sys.unraisablehook`. This function does not raise exceptions."
msgstr ""
#: ../../c-api/gcsupport.rst:228
msgid ""
"Enable the garbage collector: similar to :func:`gc.enable`. Returns the "
"previous state, 0 for disabled and 1 for enabled."
msgstr ""
#: ../../c-api/gcsupport.rst:236
msgid ""
"Disable the garbage collector: similar to :func:`gc.disable`. Returns the "
"previous state, 0 for disabled and 1 for enabled."
msgstr ""
#: ../../c-api/gcsupport.rst:244
msgid ""
"Query the state of the garbage collector: similar to :func:`gc.isenabled`. "
"Returns the current state, 0 for disabled and 1 for enabled."
msgstr ""
#: ../../c-api/gcsupport.rst:251
msgid "Querying Garbage Collector State"
msgstr ""
#: ../../c-api/gcsupport.rst:253
msgid ""
"The C-API provides the following interface for querying information about "
"the garbage collector."
msgstr ""
#: ../../c-api/gcsupport.rst:258
msgid ""
"Run supplied *callback* on all live GC-capable objects. *arg* is passed "
"through to all invocations of *callback*."
msgstr ""
#: ../../c-api/gcsupport.rst:262
msgid ""
"If new objects are (de)allocated by the callback it is undefined if they "
"will be visited."
msgstr ""
#: ../../c-api/gcsupport.rst:265
msgid ""
"Garbage collection is disabled during operation. Explicitly running a "
"collection in the callback may lead to undefined behaviour e.g. visiting the "
"same objects multiple times or not at all."
msgstr ""
#: ../../c-api/gcsupport.rst:273
msgid ""
"Type of the visitor function to be passed to :c:func:"
"`PyUnstable_GC_VisitObjects`. *arg* is the same as the *arg* passed to "
"``PyUnstable_GC_VisitObjects``. Return ``0`` to continue iteration, return "
"``1`` to stop iteration. Other return values are reserved for now so "
"behavior on returning anything else is undefined."
msgstr ""