Changes for version 0.03
- Core C/XS Runtime & Conformance
- Added support for ignore_unknown_fields in JSON decoder by propagating options from Perl to C upb_JsonDecode_IgnoreUnknown in serialize.c.
- Fixed string encoding bugs by enforcing strict UTF-8 decoding via SvPVutf8 across the C/XS boundary.
- Refactored C/XS header files (all_descriptors.h, convert.h, descriptor.h, etc.) to clean up declarations and internal APIs.
- Fixed XS compilation scanning in Makefile.PL to include xs/protobuf/utils.c.
- Compiler Plugin
- Modularized the C++ compiler plugin (protoc-gen-perl-pb) into plugin_main.cc, generator.cc, and helpers.cc.
- Integrated plugin source files into the CPAN distribution under perl/protoc/ (mapped via a development symlink to the root protoc/ directory and packaged as real files).
- Fixed C++ plugin linking by running the post-processor on plugin.upb.h and restoring compatibility aliases in generator.h.
- Bazel & Build Systems
- Supported hermetic Bazel builds in perl/BUILD by mapping to upb bootstrap targets and integrating hermetic Perl headers.
- Defined the perl_proto_c_test macro in build_defs.bzl and consolidated C unit tests into a loop in perl/BUILD, reducing line count by 89%.
- Fixed Makefile.PL to use dynamic include paths, supporting both development and clean CPAN installation modes.
- Untracked MANIFEST from Git and added it to perl/.gitignore to ensure it is only generated dynamically.
- Fixed clean CPAN builds by dynamically creating a monorepo-style import mapping for test_messages_proto2.proto in perl/Makefile.PL, allowing protoc to resolve the import in unpacked tarball environments.
- Tests & Quality Assurance
- Updated PurePerl tests (t/028_pureperl_*.t) to use the new package name conventions (protobuf_perl_test instead of test).
- Corrected integration tests (299_3_error.t, 299_5_embedded.t) to use standard package nesting.
- Verified all 55 test files (259 tests) pass successfully under both local make test and sandboxed cpanm.
- Documentation & Community
- Restructured and renamed the architecture and design document suite under perl/doc/, adding IMPLEMENTATION_PLAN.md, OVERVIEW.md, API_DESIGN.md, and XS_CORE_DEEP_DIVE.md.
- Updated THANKS.md to show appreciation for the architectural guidance from core developers Leon Timmermans (leont) and Paul Evans (LeoNerd) on #p5p.
- Licensing & Dependencies
- Replaced the Apache License 2.0 with the 3-Clause BSD License in perl/LICENSE.
- Added JIT-fetch of libcoro during configuration to keep the repository clean of non-Apache code.
Modules
High-performance Google Protocol Buffers implementation
Memory arena for Protocol Buffer messages
Generates Perl classes from Protocol Buffer descriptors
Descriptor for a Protocol Buffer enum
Descriptor for a field in a Protocol Buffer message
Descriptor for a .proto file
Descriptor for a Protocol Buffer message
Descriptor for a Protocol Buffer oneof
Manages a collection of Protocol Buffer descriptors
Internal XS functions and utilities
Internal XS implementation for map fields
Internal XS implementation for map iterators
Base class for tied XS objects
Internal XS implementation for repeated fields
Base class for Protocol Buffer messages
Represents unknown fields in a message
Well-Known Type Registry
Mixin for google.protobuf.Any message
Mixin for google.protobuf.Duration
Mixin for google.protobuf.FieldMask
Mixin for google.protobuf.Struct, Value, and ListValue
Mixin for google.protobuf.Timestamp
Provides
in lib/Conformance/Conformance.pm
in lib/Conformance/Conformance/Types.pm
in lib/Google/Protobuf/Any.pm
in lib/Google/Protobuf/Any/Types.pm
in lib/Google/Protobuf/Duration.pm
in lib/Google/Protobuf/Duration/Types.pm
in lib/Google/Protobuf/Empty.pm
in lib/Google/Protobuf/Empty/Types.pm
in lib/Google/Protobuf/FieldMask.pm
in lib/Google/Protobuf/FieldMask/Types.pm
in lib/Google/Protobuf/Struct.pm
in lib/Google/Protobuf/Struct/Types.pm
in lib/Google/Protobuf/Timestamp.pm
in lib/Google/Protobuf/Timestamp/Types.pm
in lib/Google/Protobuf/Wrappers.pm
in lib/Google/Protobuf/Wrappers/Types.pm
in lib/Protobuf/Descriptor/Base/PurePerl.pm
in lib/Protobuf/Descriptor/EnumDef/PurePerl.pm
in lib/Protobuf/Descriptor/EnumValue.pm
in lib/Protobuf/Descriptor/EnumValueDef/PurePerl.pm
in lib/Protobuf/Descriptor/FieldDef/PurePerl.pm
in lib/Protobuf/Descriptor/File/PurePerl.pm
in lib/Protobuf/Descriptor/MessageDef/PurePerl.pm
in lib/Protobuf/Descriptor/OneofDef/PurePerl.pm
in lib/Protobuf/DescriptorPool/PurePerl.pm
in lib/Protobuf/Engine.pm
in lib/Protobuf/Engine/PurePerl.pm
in lib/Protobuf/Engine/PurePerl/DescriptorParser.pm
in lib/Protobuf/Engine/XS.pm
in lib/Protobuf/Internal/Map.pm
in lib/Protobuf/Internal/Repeated.pm
in lib/Protobuf/Internal/Repeated.pm
in lib/Protobuf/WKT/Struct.pm
in lib/Protobuf/WKT/Struct.pm
in lib/Protobuf_test_messages/Proto2/TestMessagesProto2.pm
in lib/Protobuf_test_messages/Proto2/TestMessagesProto2/Types.pm
in lib/Protobuf_test_messages/Proto3/TestMessagesProto3.pm
in lib/Protobuf_test_messages/Proto3/TestMessagesProto3/Types.pm
in xlib/Sideload/Build/FileLists.pm