New submission from Jason R. Coombs <jar...@jaraco.com>:

While investigating issue44461, I observed some complexities to the current 
pdb.main implementation, some of which likely contributed to the bug being 
present.

- variables are initialized to defaults 
(https://github.com/python/cpython/blob/ec8759b060eff83ff466f42c5a96d83a685016ce/Lib/pdb.py#L1677-L1678)
 and then mutated 
(https://github.com/python/cpython/blob/ec8759b060eff83ff466f42c5a96d83a685016ce/Lib/pdb.py#L1684-L1686)
 based on other variables.

- mainpyfile is conditionally mutated based on previous values of conditionally 
mutated variables 
(https://github.com/python/cpython/blob/ec8759b060eff83ff466f42c5a96d83a685016ce/Lib/pdb.py#L1696).

- There are three different blocks of code 
(https://github.com/python/cpython/blob/ec8759b060eff83ff466f42c5a96d83a685016ce/Lib/pdb.py#L1690-L1691,
 
https://github.com/python/cpython/blob/ec8759b060eff83ff466f42c5a96d83a685016ce/Lib/pdb.py#L1696-L1698,
 and 
https://github.com/python/cpython/blob/ec8759b060eff83ff466f42c5a96d83a685016ce/Lib/pdb.py#L1711)
 that are conditionally run based on run_as_module.

These factors mean that all of these lines of code are entangled in ways that 
are somewhat difficult to reason about. For example, it's unclear what states 
have been achieved by the time `pdb._run*` is constructed, or what exceptions 
may or may not be expected for these calls.

A functional or OO approach would limit the amount of mutation and entanglement 
(through encapsulation or scoping).

An OO approach would have a protocol or interface that captures the different 
behaviors required prior to and on invocation of `Pdb._run*`.

For example, the PDB "targets" (script or module) could be modeled as separate 
classes and provide symmetric interfaces with (possibly degenerate) equivalent 
operations for each use-case.

To be sure, the code that's present is adequate and in my opinion right on the 
border of benefiting from a more rigorous abstraction. The current imperative 
approach is fairly readable and mostly comprehensible. It's only because of the 
surprise behavior in the reported issue that I propose to step back and 
contemplate ways to alleviate the concerns above.

----------
components: Library (Lib)
messages: 396877
nosy: iritkatriel, jaraco
priority: normal
severity: normal
status: open
title: pdb.main is unnecessarily complicated
versions: Python 3.11

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

Reply via email to