Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feature] Storable doesn't support classes #21

Open
tonycoz opened this issue Aug 29, 2022 · 1 comment
Open

[feature] Storable doesn't support classes #21

tonycoz opened this issue Aug 29, 2022 · 1 comment
Labels
help wanted Extra attention is needed

Comments

@tonycoz
Copy link

tonycoz commented Aug 29, 2022

Per subject.

There's a couple of issues I can see in implementing it.

non-hooked

If we freeze an object it's going to be very sensitive to the class definition, unlike a typical hash-based object.

If the user inserts a new field or re-orders the fields and we've just frozen each of the member variables in order the values will end up in different member variables on thaw.

hooked

One design problem with STORABLE_thaw is it pre-creates the hash/array object that's passed to STORABLE_thaw and doesn't allow it to be replaced.

This means Storable would need to be able to create a blank object of class to pass to STORABLE_thaw.

I've considered adding an alternative to STORABLE_thaw that accepts a returned object, but this has problems with object tag ordering (the mechanism used to ensure multiple references to the same object thaw to references to the same object).

@leonerd
Copy link
Owner

leonerd commented Sep 9, 2022

Yeah it's all messy however you do it.

In particular with respect to field ordering, it gets even worse when you consider the "naked" representation of non-scalar fields.

Store one of these:

class TrickyContainers {
   field @arr; field %hash;
}

and you'll write a plain AV and an HV into the stored representation. Now swap the order of the fields and load it again. Without at least a bit of sanity-checking you'll attempt to stuff an HV into an array variable, and an AV into a hash one.

Even with sanity checking at that level, there's nothing to tell you you've messed up the assignments into two e.g. scalar fields.

Should the Storable representation involve the names of the fields, by way of at least some amount of sanity-check? Perhaps so.

More design discussion needed.

@leonerd leonerd added the help wanted Extra attention is needed label Sep 9, 2022
leonerd pushed a commit that referenced this issue Jul 19, 2024
v6.0.0 - 2024-07-10

 - Drop support for Perl 5.10.  podlators now requires Perl 5.12 or later.

 - podlators now uses semantic versioning for the package and module
   versions, with a v prefix to work with Perl's packaging system.

 - Pod::Man now translates all "-" characters in the input into *roff "\-"
   escapes (normally rendered as an ASCII hyphen-minus, U+002D) rather
   than using fragile heuristics to decide which characters represent true
   hyphens and which represent ASCII hyphen-minus.  The previous
   heuristics misrendered command names such as apt-get, causing search
   and cut-and-paste issues.  This change may cause line-break issues with
   long hyphenated phrases.  In cases where the intent is a true hyphen,
   consider using UTF-8 as the POD character set (declared with =encoding)
   and using true Unicode hyphens instead of the ASCII "-" character.

 - Pod::Man now disables the special *roff interpretation of "`" and "'"
   characters as paired quotes everywhere, not just in verbatim text, thus
   forcing them to be interpreted as the regular ASCII characters.  This
   also disables the use of "``" and "''" for paired double-quotes.  The
   rationale is similar to that for hyphens: there is no way to tell from
   the POD source that the special interpretation as quotes is intended.
   To produce paired typographic quotes in the output, use UTF-8 and
   Unicode paired quote characters.

 - Man page references in L<> that are detected as such by Pod::Simple are
   now always formatted as man page references even if our normal
   heuristic would not detect them.  This fixes the formatting of
   constructions such as @@RXVT_NAME@@Perl(3), which are used by packages
   that format a man page with POD and then substitute variables into it
   at build time.  Thanks to Marco Sirabella for the analysis and an
   initial patch.  (GitHub #21)

 - Add a workaround to Pod::Man to force persistent ragged-right
   justification under nroff with groff 1.23.0.  Thanks to Guillem Jover
   for the report and G. Branden Robinson for the analysis.  (GitHub Perl#23)

 - Fix wrapping of text with S<> markup in all subclasses of Pod::Text.
   Thanks to Jim Avera for the report.  (GitHub #24)

 - Pod::Man now forces a blank line after a nested list contains only
   =item tags without bodies.  In previous versions, the blank line before
   the next item in the surrounding =over block was not included.  Thanks
   to Julien ÉLIE for the report.  (GitHub #26)

 - Import PerlIO before checking for layers so that PerlIO::F_UTF8 is
   available, which fixes double-encoding of output when a :utf8 layer is
   in place and PerlIO is not imported.  Thanks to youpong for the bug
   report, James Keenan for the elaboration, and Graham Knop for the fix.
   (GitHub #25)

 - pod2text --help now exits with status 0, not 1, matching normal UNIX
   command behavior and the behavior of pod2man.  (GitHub #19)

 - Fix tests when NO_COLOR is set in the environment.  (GitHub #20)

v6.0.1 - 2024-07-12

 - Remove autodie from the module build process.  When built as part of
   Perl core, podlators is built before autodie is available.  Thanks to
   James E Keenan for the report and a draft patch.  (GitHub Perl#33)

v6.0.2 - 2024-07-14

 - Fix removal of scripts/pod2man and scripts/pod2text by make realclean,
   broken in the v6.0.0 release.  Thanks to James E Keenan for the report.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants