Marlin
======

Created:      2025-12-11
Home page:    <https://metacpan.org/release/Marlin>
Bug tracker:  <https://github.com/tobyink/p5-marlin/issues>
Maintainer:   Toby Inkster (TOBYINK) <tobyink@cpan.org>

0.020002	2026-01-21

 [ Bug Fixes ]
 - Small bugfixes for MooX::Marlin and MooseX::Marlin.

0.020001	2026-01-20

 [ Bug Fixes ]
 - Avoid redefine warnings from Marlin::Attribute on Perl older than 5.36.

 [ Other ]
 - Updated: Require latest Class::XSConstructor.

0.020000	2026-01-19

 [ Packaging ]
 - All other Marlin::X::* and Marlin::XAttribute::* modules are now
   distributed separately.

 [ Other ]
 - Eliminated dependency on LV as only Marlin::XAttribute::Lvalue required
   it.
 - The functionality of Marlin::XAttribute::Alias is now available in
   Marlin itself without needing an extension.

0.016000	2026-01-16

 [ Bug Fixes ]
 - Marlin::Attribute sometimes thought its link back to the package it was
   defined in was called `marlin` and sometimes `_marlin`; fix it to always
   be the former.

 [ Documentation ]
 - Minor changes and reformatting of extended examples to make things
   cleaner.

 [ Other ]
 - An attribute that creates lexical accessors in a parent class won't
   automatically create matching ones in child classes.
 - In Perl versions too old to support lexical subs, use namespace::clean
   to clean away any non-lexical ones we wanted to be lexical.
 - Marlin now checks for conflicts between methods and init_args used by
   different attributes, so you can't (for example) have two attributes
   that have the same-named reader method.
 - Use attr=>{extends=>true} or Moose-like +attr to extend an inherited
   attribute.

0.015000	2026-01-15

 [ Bug Fixes ]
 - Constructing a new Marlin::Attribute object with added traits won't
   cause canonicalize_opts to be called twice.
 - Delay installation of DESTROY until after class has finished compiling;
   otherwise DEMOLISH methods might still not be defined yet.

 [ Test Suite ]
 - Improved tests for DESTROY.

 [ Other ]

 - Eliminated dependency on Class::XSAccessor, though it is still listed as
   a dependency in META.json because it improves runtime speed when
   installed. In the future, when Class::XSConstructor is able to provide
   more accessor-like methods, Class::XSAccessor may be listed as a
   recommendation rather than a requirement.
 - Eliminated dependency on Module::Runtime.
 - Factor out common parts of Marlin extensions into Marlin::X, a role for
   use by people writing Marlin extensions.
 - Significant internal refactoring and code tidying, including dogfooding
   a lot of the modules.

0.014000	2026-01-13

 [ Packaging ]
 - Bump version of Class::XSConstructor dependency.

 [ Other ]
 - Only bother creating a DESTROY method in classes which have (or inherit)
   a DEMOLISH method. Otherwise, there's no point as it just makes the
   object lifecycle slower even when implemented in XS.

0.013001	2026-01-12

 [ Packaging ]
 - Bump version of Class::XSConstructor dependency.

0.013000	2026-01-12

 [ Test Suite ]
 - Add a test for foreign inheritance.

 [ Other ]
 - Added: Attributes now support an undef_tolerant option.
 - Added: Marlin::X::UndefTolerant plugin to automatically apply
   undef_tolerant option to all attributes in a class or role (except those
   that don't make sense).
 - If you try to inherit from a class that uses Marlin::XAttribute::Alias
   in Moose, it will try to load MooseX::Aliases and use that, issuing a
   warning if the module is missing.
 - If you try to inherit from a class that uses Marlin::XAttribute::Lvalue
   in Moose, it will try to load MooseX::LvalueAttribute and use that,
   issuing a warning if the module is missing.
 - Marlin::X::Clone understands about required attributes and
   undef_tolerant attributes.
 - Moved a lot of the code for Moo/Moose compatibility into MooX::Marlin
   and MooseX::Marlin, so it clutters up the main Marlin modules less.

0.012001	2026-01-11

 [ Bug Fixes ]
 - Better detection if parent classes use Class::XSConstructor directly.

0.012000	2026-01-11

 [ Documentation ]
 - Marlin now has improved inheritance from foreign classes thanks to
   latest Class::XSConstructor.
 - Marlin now supports BUILDARGS thanks to latest Class::XSConstructor.
 - Update copyright years.

 [ Packaging ]
 - Require Class::XSConstructor 0.018001.

 [ Other ]
 - Updated: Improvements to Class::XSConstructor mean we should never need
   to generate pure Perl constructors, so stripped out all the code to do
   that and replaced with a few shims to send the right options to
   Class::XSConstructor.

0.011002	2026-01-09

 [ Bug Fixes ]
 - Certain setup steps were not running correctly for roles.
 - The before/after/around keywords exported to roles were ones only
   suitable for classes; they have been replaced with ones which work for
   roles.

 [ Documentation ]
 - Update benchmark script; compare some more simple classes too.

 [ Packaging ]
 - Require Sub::Accessor::Small 1.000003.

0.011001	2026-01-08

 [ Bug Fixes ]
 - Marlin::XAttribute::Alias pod syntax fix.

 [ Documentation ]
 - Marlin::X::Clone documentation improvements.

 [ Packaging ]
 - Require Class::XSAccessor 0.016002.

 [ Other ]
 - Check that code is actually compiling before using B::Hooks::AtRuntime,
   otherwise just run stuff immediately.
 - Marlin::X::Clone is now aware of Marlin::XAttribute::Alias.
 - Marlin::X::Clone now supports more on_clone options.
 - Marlin::X::Clone performance improvements.

0.011000	2026-01-07

 [ Packaging ]
 - Require Class::XSAccessor 0.016001.
 - Require Type::Tiny 2.010000.

 [ Other ]
 - Added: Provide MooseX::Marlin and MooX::Marlin to allow Moose and Moo to
   inherit from Marlin classes and compose Marlin roles.
 - Marlin::Struct's magical coercion from arrayrefs is now aware of
   ':Alias'.
 - Marlin::XAttribute::Alias no longer forces PP constructors to be
   generated.
 - Move some attribute logic from Marlin to Marlin::Attribute making it
   easier for attribute extensions to override.
 - Support inheritance from Class::Tiny classes.
 - Support inheritance from Mite classes and composing Mite roles.
 - Support inheritance from Mouse classes and composing Mouse roles.
 - Updated: Changes to work with newest Class::XSAccessor.

0.010000	2025-12-29

 [ Documentation ]
 - Show how easy it is to switch from Class::Tiny to Marlin.

 [ Other ]
 - Added: Marlin::XAttribute::Alias is bundled as a demonstration of the
   extension API (and because it can be useful).
 - Added: Marlin::XAttribute::LocalWriter is bundled as a demonstration of
   the extension API (and because it can be useful).
 - Added: Marlin::XAttribute::Lvalue is bundled as a demonstration of the
   extension API (and because it can be useful).
 - Marlin now provides a rudimentary API for attribute extension modules.

0.009000	2025-12-28

 - Added: Marlin::X::Clone is bundled as a demonstration of the extension
   API (and because it can be useful).
 - Marlin now provides a rudimentary API for extension modules.
 - Stop using `mkopt` to parse parameters; do it more manually to allow
   some options to take a simple string as their value instead of requiring
   a reference.

0.008000	2025-12-23

 [ Documentation ]
 - Better documentation of Marlin::Struct.
 - Document API.
 - Omit -strict from examples as that is now the default.

 [ Other ]
 - Classes built with Marlin::Struct now provide a default stringification
   and arrayrefification.
 - Internally use Clone::clone() instead of Storage::dclone() as it can
   cope with coderefs.
 - Marlin can now inherit from Moose and Moo classes and compose Moose and
   Moo roles.
 - Provide some useful utility API methods.
 - Various small improvements to Marlin::Struct.

0.007001	2025-12-22

 [ Bug Fixes ]
 - Get Marlin::Struct working on Perl older than 5.12.0.

0.007000	2025-12-21

 - Added: Marlin::Struct.
 - Make strict constructors the default.

0.006001	2025-12-19

 [ Test Suite ]
 - Restore test case which was marked TODO.

 [ Other ]
 - Use a newer version of Class::XSConstructor which fixes broken test
   case.

0.006000	2025-12-19

 [ Test Suite ]
 - Changes upstream in Class::XSConstructor have broken one test in the
   test suite, so this has been marked TODO for now.

 [ Other ]
 - Use a newer version of Class::XSConstructor with support for trigger,
   weak_ref, and init_arg.

0.005000	2025-12-18

 - Use a newer version of Class::XSConstructor with support for
   destructors.
 - Use a newer version of Sub::Accessor::Small with improvements for
   triggers.

0.004000	2025-12-17

 - Added: Allow attribute declarations to tweak how the attribute will be
   stored, including allowing inside-out attributes.
 - Added: Implement constant attributes.

0.003001	2025-12-16

 - Use a newer version of Class::XSConstructor with fixes for BUILD
   methods.
 - Use a newer version of Sub::Accessor::Small with fixes for builder
   methods.

0.003000	2025-12-15

 - Use a newer version of Class::XSConstructor which allows for type
   coercion and defaults/builders to run in the constructor.

0.002005	2025-12-15

 [ Bug Fixes ]
 - Remove usage of // operator from test case too.

0.002004	2025-12-15

 [ Bug Fixes ]
 - Remove usage of // operator.

0.002003	2025-12-15

 [ Bug Fixes ]
 - Fix case of MRO::Compat dependency on Perl older than v5.10.0.

0.002002	2025-12-13

 [ Documentation ]
 - Minor pod fix.

0.002001	2025-12-13

 [ Documentation ]
 - Minor pod fix.

0.002000	2025-12-13

 - Added: Marlin::Role.

0.001001	2025-12-13

 [ Documentation ]
 - Include Class::Tiny in examples/benchmark.

0.001000	2025-12-12	Initial release
