Marlin ====== Created: 2025-12-11 Home page: Bug tracker: Maintainer: Toby Inkster (TOBYINK) 0.023001 2026-02-14 [ Documentation ] - Add quick start for people already familiar with Moose/Moo. - Fix minor typos, etc in pod. 0.023000 2026-02-06 [ Documentation ] - Major documentation improvements. [ Other ] - Use Sub::HandlesVia::XS if it's installed. Currently this results in negligible speed-ups (and in some cases small slow-downs) for delegated methods. Over time it will hopefully make delegated methods faster. 0.022001 2026-01-23 [ Bug Fixes ] - Skip t/extend-eg.t on Perl 5.8.x for now as it's causing segfaults. - Various minor fixes for Perl 5.8.x. 0.022000 2026-01-23 [ Packaging ] - Require latest Sub::Accessor::Small. - Switch from depending on B::Hooks::AtRuntime to B::Hooks::AtRuntime::OnlyCoreDependencies. [ Other ] - Added: chain option for attributes, defaulting to true. 0.021000 2026-01-22 [ Packaging ] - Eliminated dependency on Clone as Class::XSConstructor and Class::XSReader now have built-in cloning support. [ Other ] - Added: clone_on_read, clone_on_write, and clone_bypass options for attributes. 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