load metaclasses more liberally
[gitmo/Class-MOP.git] / Changes
CommitLineData
7c90a1a8 1Revision history for Perl extension Class-MOP.
b817e248 2
9e9e6b8f 30.66
fe05cbbe 4 !! This release has an incompatible change regarding !!
5 introspection of a class's method with Class::MOP::Class !!
6
9e9e6b8f 7 * Tests and XS
8 - We (us maintainers) now run all tests with XS and then without
9 XS, which should help us catch skew between the XS/pure Perl
e073e667 10 code. (Dave Rolsky)
9e9e6b8f 11
91b73829 12 * Class::MOP::Class
fe05cbbe 13 ! The alias_method method has been deprecated. It now simply
1190621f 14 calls add_method instead. There is no distinction between
15 aliased methods and "real" methods.
fe05cbbe 16
17 This means that methods added via alias_method now show up as
18 part of the class's method list/map. This is backwards
19 incompatible change, but seems unlikely to break any
20 code. Famous last words. (Dave Rolsky)
91b73829 21
155f0cba 22 * Class::MOP::Class
23 - Fixed the spelling of "compatibility", but we still have a
24 "check_metaclass_compatability" method for backwards
25 compatibility.
9e9e6b8f 26
94278c1b 270.65 Mon September 1, 2008
28 For those not following the series of dev releases, the changes
29 from 0.64 from 0.65 can mostly be summed up as a lot performance
30 improvements by nothingmuch, including new optional XS versions of
31 some methods. Also, Class::MOP now works _without_ any XS modules,
32 for sad systems without a compiler.
33
988fb42e 34 * Class::MOP::Method
35 - Added name and package_name XS accessors, and make sure all
36 the XS and Perl versions work the same way. (Dave Rolsky)
37
38 * MOP.xs
39 - The XS versions of various methods just returned undef when
40 called class methods, rather than dying like the pure Perl
41 versions. (Dave Rolsky)
42
13ac653a 430.64_07 Fri August 29, 2008
400982e3 44 * Class::MOP
13ac653a 45 - Silenced warnings that managed to break Moose tests when XS
46 was loaded. (Dave Rolsky)
47 - Some XS versions of methods were ignored because of typos in
48 MOP.xs. (Dave Rolsky)
400982e3 49
13ac653a 500.64_06 Mon August 25, 2008
9457b596 51 * Class::MOP (MOP.xs)
52 - Another MS VC++ fix, cannot declare a variable in the middle
53 of a scope (Taro Nishino).
54
550.64_05 Sun August 24, 2008
2a755fe8 56 * Class::MOP
57 - None of the dev releases actually loaded the XS properly, but
58 we silently fell back to the pure Perl version of the
59 code. (Dave Rolsky)
60
61 * Class::MOP (MOP.xs)
62 - Replaced some code that used functions not available on Visual
63 C++ with some Perl XS API bits (Dave Rolsky).
64
f65af096 650.64_04 Sat August 23, 2008
9ebc265d 66 * Class::MOP::Class
f65af096 67 - Workaround a bug in 5.8.1's goto sub (nothingmuch)
68
69 * pod.t and pod_coveraget.t
70 - These are no longer shipped with the tarball because of bogus
71 failures from CPAN testers. (Dave Rolsky)
9ebc265d 72
df7077cd 730.64_03 Thu August 21, 2008
74 * Class::MOP::Package
75 - Some (legit) code was misparsed by earlier 5.8.x
76 releases. (nothingmuch)
77
78 * Class::MOP
79 - Fix a constant in void context warning (nothingmuch)
80
09ed1ec5 810.64_02 Thu August 21, 2008
64c591d3 82 * Makefile.PL and Class::MOP
4dde2f23 83 - Explicitly require Perl 5.8.0+ (Dave Rolsky)
84
85 * Makefile.PL
86 - Add missing prereqs that got lost in the switch away from
87 Module::Install.
64c591d3 88
09ed1ec5 89 * Class::MOP::Instance
90 - New method - get_all_attributes (nothingmuch)
91
920.64_01 Wed August 20, 2008
f125b31e 93 * Makefile.PL
94 - We now check to see if you have a compiler. If you don't, the
95 module installs without some XS bits, but will work the same
96 as with XS. This should make it easier to install on platforms
97 without a compiler (like Windows). (Dave Rolsky)
2e5c1a3f 98
40b3c18f 99 * many modules
7f799c13 100 - Perl 6 style attribute naming replaced with sane style ('methods', not
101 '%!methods'). These changes should not impact any existing API uses.
102 (nothingmuch).
103
104 * many modules
40b3c18f 105 - Quite a number of optimizations based on profiling, including
106 allowing constructors to take hash references instead of
107 hashes, duplicating some frequently used code in XS, and
108 making constructors immutable. These changes should not impact
109 any existing API uses. (nothingmuch)
110
7f799c13 111 * Many modules
112 - Constructors now respect the meta attributes of their subclasses,
113 facilitating MOP extensibility. More related changes will happen in the
114 next several releases. (nothingmuch)
115
40b3c18f 116 * Class::MOP::Class
7f799c13 117 - New method - get_all_methods, replaces the deprecated
118 compute_all_applicable_methods. get_all_attributes provided for
119 consistency (nothingmuch)
120 - New method - wrap_method was refactored out of get_method_map
121 (nothingmuch)
122 - New API for meta instance invalidation - invalidate_meta_instance,
123 invalidate_meta_instances, add_dependent_meta_instance,
124 remove_dependent_meta_instance, called automatically when attribute
125 definitions change and allows notification of dependent subclasses.
126 (nothingmuch)
40b3c18f 127
7202116b 1280.64 Sun August 3, 2008
84bc89b3 129 * Class::MOP::Immutable
7202116b 130 - fixing subtle edge case in immutable when you
84bc89b3 131 call ->meta (stevan)
7202116b 132 - clean up option processing (nothingmuch)
133
134 * Class::MOP::Instance
135 - inlined initialize slot didn't match
136 non-inlined (nothingmuch)
84bc89b3 137
f079b1eb 1380.63 Mon July 7, 2008
07940968 139 * Class::MOP
140 - load_class will initialize a metaclass even if
141 the class is already loaded (sartak)
142 - load_class now returns the metaclass instance
143 instead of just 1 (sartak)
6e1c8b63 144
f079b1eb 145 * elsewhere
146 - better error messages (sartak and Dave Rolsky)
147
ebce5539 1480.62 Wed June 18, 2008
1377b506 149 - in is_class_loaded, recognize scalar references (as opposed to globs) in
150 the symbol table as methods (these are optimized constant subs)
151
70ad0655 1520.61 Fri. June 13, 2008
153 - Okay, lets give this another try and see if PAUSE
154 recognizes it correct this time.
a023763e 155
1560.60 Thurs. Jun 12, 2008
809a26fc 157 - Fixed a version number issue by bumping all modules
158 to 0.60.
8c5cc782 159
1600.59 Thurs. Jun 12, 2008
d1dba7a1 161 !! Several fixes resulting in yet another 25-30% speedup !!
9b522fc4 162
163 * Class::MOP::Class
164 - now stores the instance of the instance
165 metaclass to avoid needless recomputation
8b49a472 166 and deletes it when the cache is blown
119f3a92 167 - introduce methods to query Class::MOP::Class for
168 the options used to make it immutable as well as
169 the proper immutable transformer. (groditi)
8b49a472 170
171 * Class::MOP::Package
172 - {add, has, get, remove}_package_symbol all
173 now accept a HASH ref argument as well as the
174 string. All internal usages now use the HASH
175 ref version.
f6dc69d2 176
177 * Class::MOP
178 - MOP.xs does sanity checks on the coderef
179 to avoid a segfault
26fcef27 180 - is_class_loaded check now uses code that
181 was improved in Moose's ClassName type
ab5e2f48 182 check (Sartak)
183 - nonsensical (undef, empty, reference) class
184 names now throw a more direct error in
185 load_class (Sartak)
3f7759c1 186 - tests for this and other aspects of
187 load_class (Sartak)
9b522fc4 188
189 * Class::MOP
190 Class::MOP::Class
191 Class::MOP::Method
192 Class::MOP::Method::Wrapped
193 Class::MOP::Attribute
194 - switched usage of reftype to ref because
195 it is much faster
196
352c364f 1970.58 Thurs. May 29, 2008
62781d9f 198 (late night release engineering)--
199
200 - fixing the version is META.yml, no functional
201 changes in this release
202
de0f9e1c 2030.57 Wed. May 28, 2008
d1dba7a1 204 !! Several speedups resulting in 20-25% speedups !!
de0f9e1c 205 || (thanks to konobi, groditi, mst & CataMoose) !!
206
ae234dc6 207 * Class::MOP::Class
208 - made get_method_map use list_all_package_symbols
209 instead of manually grabbing each symbol
de0f9e1c 210 - streamlining &initialize somewhat, since it gets
211 called so much
ae234dc6 212
213 * Class::MOP::Package
214 - made {get, has}_package_symbol not call
215 &namespace so much
de0f9e1c 216 - inlining a few calls to &name with
217 direct HASH access key access
ae234dc6 218 - added get_all_package_symbols to fetch
219 a HASH of items based on a type filter
220 similar to list_all_package_symbols
221 - added tests for this
222
32202ce2 223 * Class::MOP::Method
224 Class::MOP::Method::Constructor
225 Class::MOP::Method::Generated
226 Class::MOP::Method::Accessor
227 - added more descriptive error message to help
228 keep people from wasting time tracking an error
47e20ba2 229 that is easily fixed by upgrading.
32202ce2 230
d1dba7a1 231 * Class::MOP::Immutable
232 - Don't inline a destructor unless the user actually
233 needs one
234 - added tests for this
235
b4009dc1 2360.56 Saturday, May 24, 2008
11b56828 237 * Class::MOP
238 - we now get the &check_package_cache_flag
239 function from MRO::Compat
d7d3f3cb 240 - All XS based functionality now has a
241 Pure Perl alternative
6c34db07 242 - the CLASS_MOP_NO_XS environment variable
d7d3f3cb 243 can now be used to force non-XS versions
6c34db07 244 to always be used
11b56828 245
9e517e01 246 * Class::MOP::Attribute
247 - add has_read_method and has_write_method
d7d3f3cb 248 - get_{read,write}_method_ref now wraps the
def5c0b5 249 anon-sub ref in the method metaclass when
250 possible
251 - added tests for this
d7d3f3cb 252
5f3efd66 253 * Class::MOP::Immutable
d7d3f3cb 254 - added the ability to "wrap" methods when
5f3efd66 255 making the class immutable
d7d3f3cb 256
5f3efd66 257 * Class::MOP::Class
daf8d8bc 258 - now handling the edge case of ->meta->identifier
d7d3f3cb 259 dying by wrapping add_package_symbol to specifically
5f3efd66 260 allow for it to work.
261 - added tests for this
d7d3f3cb 262
263 * Class::MOP::Attribute
6c34db07 264 Class::MOP::Class
d7d3f3cb 265 Class::MOP::Immutable
6c34db07 266 - any time a method meta object is constructed
d7d3f3cb 267 we make sure to pass the correct package and
6c34db07 268 method name information
d7d3f3cb 269
6c34db07 270 * Class::MOP::Method
271 Class::MOP::Method::Wrapped
272 Class::MOP::Method::Generated
273 Class::MOP::Method::Accessor
d7d3f3cb 274 Class::MOP::Method::Consructor
275 - the &wrap constructor method now requires that a
276 'package_name' and 'name' attribute are passed. This
277 is to help support the no-XS version, and will
278 throw an error if these are not supplied.
6c34db07 279 - all these classes are now bootstrapped properly
280 and now store the package_name and name attributes
d7d3f3cb 281 correctly as well
282
283 ~ Build.PL has been removed since the
284 Module::Install support has been removed
9e517e01 285
8adaad20 2860.55 Mon. April 28, 2008
287 - All classes now have proper C3 MRO support
288 - added MRO::Compat as a dependency to allow
289 for the C3 MRO support to Just Work in all
290 perl versions
d7d3f3cb 291
830b326c 292 * Class::MOP::Class
d7d3f3cb 293 - rebless_instance now returns the instance
294 it has just blessed, this is mostly to
830b326c 295 facilitate chaining
d7d3f3cb 296 - set the attr correctly in rebless_instance
6e2a700f 297 when it has no init_arg
77a143ba 298 - tweaked &linear_isa and &class_precedence_list
299 to support c3 classes.
830b326c 300
e0db39d2 3010.54 Fri. March, 14, 2008
8861fab2 302 * Class::MOP
214e4bd7 303 metaclass.pm
8861fab2 304 - making sure that load_class never gets
d7d3f3cb 305 passed a value from @_ or $_ to squash
8861fab2 306 Ovid's bug (http://use.perl.org/~Ovid/journal/35763)
307
09c6e1d2 308 * Class::MOP::Class
309 - make_{immutable,mutable} now return 1
310 (cause Sartak asked)
d7b2249e 311 - improved error handling in ->create method
d7d3f3cb 312 - rebless_instance now takes extra params which
313 will be used to populate values
214e4bd7 314 - added tests for this
d7d3f3cb 315
acce7fd6 316 * Class::MOP::Object
d7d3f3cb 317 - localizing the Data::Dumper configurations so
318 that it does not pollute others (RT #33509)
319
d7b2249e 320 * Class::MOP::Class
321 Class::MOP::Package
322 Class::MOP::Module
323 Class::MOP::Method
324 Class::MOP::Attribute
d7d3f3cb 325 - these classes no longer define their own ->meta,
326 but instead just inherit from Class::MOP::Object
327
d7b2249e 328 * Class::MOP::Instance
d7d3f3cb 329 Class::MOP::Immutable
d7b2249e 330 - these classes now inherit from Class::MOP::Object
d7d3f3cb 331
10dd437b 332 * t/
d7d3f3cb 333 - fixed the filename length on several
10dd437b 334 test files so we install on VMS better
335 (RT #32295)
d7d3f3cb 336 - fixed incorrect use of catdir when it
10dd437b 337 should be catfile (RT #32385)
338
2491730f 3390.53 Thurs. Feb. 14, 1008
7a536297 340 ~~ several doc. fixes and updates ~~
d7d3f3cb 341
0c6f4c4a 342 * Class::MOP::Class
343 Class::MOP::Method::Constructor
344 Class::MOP::Attribute
345 - making init_arg accept an undefined value
d7d3f3cb 346 to indicate that no constructor args can
0c6f4c4a 347 be passed (thanks to nothingmuch)
348 - added tests for this
339264d8 349 - added attribute initializer attribute (rjbs)
d7d3f3cb 350
0c6f4c4a 351 * Class::MOP.
352 - making this use the new init_arg => undef
d7d3f3cb 353 feature instead of the silly hack from
0c6f4c4a 354 before (thanks to nothingmuch)
ad074154 355
3e8e8f07 3560.52 Tues. Jan. 22, 2008
2a2b8458 357 * Class::MOP::Class
d7d3f3cb 358 - fixed bug in rebless_instance
2a2b8458 359 (discovered by ash)
360
361 * Class::MOP::Method::Constructor
d7d3f3cb 362 - removed assumptions about the existence of
2a2b8458 363 a &meta method
364
656ce3ba 3650.51 Mon. Jan. 14, 2008
69e3ab0a 366 ~~~ some misc. doc. fixes ~~~
367 ~~ updated copyright dates ~~
d7d3f3cb 368
c1d5345a 369 * Class::MOP
d7d3f3cb 370 - now sets the IS_RUNNING_ON_5_10
c1d5345a 371 constant so that we can take advantage
372 of some of the nice bits of 5.10
d7d3f3cb 373
c1d5345a 374 * Class::MOP::Class
d7d3f3cb 375 - uses the IS_RUNNING_ON_5_10 flag to
376 optimize the &linearized_isa method
c1d5345a 377 and avoid the hack/check for circular
d7d3f3cb 378 inheritence in &class_precedence_list
3d9e4646 379 - added rebless_instance method (Sartak)
380 - added tests for this
d7d3f3cb 381
382 * Class::MOP::Immutable
383 - the immutable class now keeps track of
c1d5345a 384 the transformer which immutablized it
69e3ab0a 385
3d9e4646 386 * Class::MOP::Instance
387 - added rebless_instance_structure method (Sartak)
388 - added tests for this
389
a780a6ff 3900.50 Fri. Dec. 21, 2007
6ff0d647 391 * Class::MOP::Class
d7d3f3cb 392 - fixed bug in immutable to make sure that
393 transformation arguments are saved
6ff0d647 394 correctly (mst)
b6bcc3a5 395 - added tests for this
d7d3f3cb 396
6ff0d647 397 * Class::MOP::Immutable
398 - fixed a bug (see above)
d7d3f3cb 399
6ff0d647 400 * Class::MOP::Attribute
401 - some doc updates
402
30b8af04 4030.49 Fri. Dec. 14, 2007
b6bcc3a5 404 !! Class::MOP now loads 2 x faster !!
30b8af04 405 !! with XS speedups (thanks konobi) !!
d7d3f3cb 406
30b8af04 407 * Class::MOP
408 - removed the dependency on B
409 - added two XS functions (thanks konobi)
410 - get_code_info($code) which replaces all
411 the B fiddling we were doing with
412 faster/leaner XS level fiddling
d7d3f3cb 413 - check_package_cache_flag($pkg_name) which
414 returns the PL_sub_generation variable to
30b8af04 415 be used to help manage method caching.
d7d3f3cb 416
417 NOTE:
418 In 5.10 or greater this will actually
419 use the mro::get_pkg_gen instead to give
420 even more accurate caching information.
30b8af04 421 blblack++ for that stuff :)
d7d3f3cb 422
6c9f390e 423 * Class::MOP::Class
424 - added the &subclasses method (thanks rlb)
d7d3f3cb 425 - added the update_package_cache_flag and
426 reset_package_cache_flag which help keep
427 track of when we need to re-fetch the
428 method map.
30b8af04 429 - Several small improvements to take advantage
430 of the new method map caching features
4c4a6c41 431
1b8b3e09 4320.48 Mon. Nov. 26, 2007
d14f6cbe 433 * Class::MOP::Attribute
d7d3f3cb 434 - fixed get_read/write_method to handle the
435 HASH ref case, which makes the
d14f6cbe 436 get_read/write_method_ref handle it too.
437 - added more tests for this
438
742fb371 4390.47 Sat. Nov. 24, 2007
440 * Class::MOP::Attribute
441 - fixed misspelling in get_write_method_ref
78d9bb38 442 - added more tests for this
742fb371 443
fe7c0b15 4440.46 Fri. Nov. 23, 2007
b7bdffc3 445 * Class::MOP::Class
d7d3f3cb 446 - added the linearized_isa method instead of constantly
447 pruning duplicate classes (this will be even more
b7bdffc3 448 useful in the 5.10-compat version coming soon)
d7d3f3cb 449
5da16d1b 450 * Class::MOP::Attribute
451 - added the get_read_method_ref and get_write_method_ref
d7d3f3cb 452 methods which allow you to retrieve a CODE ref which
5da16d1b 453 can always be used to read or write an attribute.
b7bdffc3 454
1a5cc82e 4550.45 Thurs. Nov. 13, 2007
232c4e13 456 * Class::MOP::Attribute
457 - Fix error message on confess (groditi)
458
544143b2 4590.44 Thurs. Nov. 13, 2007
460 - Apparently I didn't make dist correctly (groditi)
461
c0aeeb91 4620.43 Thurs. Nov. 13, 2007
b08fd50c 463 * Class::MOP
1d68af04 464 - Add support for the 'builder' attribute (groditi)
465
b08fd50c 466 * Class::MOP::Class
d7d3f3cb 467 - optimise metaclass-already-exists check in
b08fd50c 468 construct_class_instance (groditi)
d7d3f3cb 469 - duplicate check into initialize to save a
b08fd50c 470 call through (groditi)
471
1d68af04 472 * Class::MOP::Attribute
473 - Add support for the 'builder' attribute (groditi)
d7d3f3cb 474 - Make predicates check for the existence of a value, not whether
b08fd50c 475 it is defined (groditi)
8768ecf3 476
477 * Class::MOP::Instance
d7d3f3cb 478 - Make predicates check for the existence of a value, not whether
b08fd50c 479 it is defined (groditi)
8768ecf3 480
d7d3f3cb 481 * Class::MOP::Method::Accessor
565f0cbb 482 - made this a subclass of Class::MOP::Method::Generated
483 - removed the relevant attributes
484
485 * Class::MOP::Method::Constructor
486 - fixed the cached values we had to be more sane
487 - made this a subclass of Class::MOP::Method::Generated
d7d3f3cb 488 - fixed generated constructor so it properly handles
565f0cbb 489 subclasses now.
490 - added tests for this
d7d3f3cb 491 - added the option to allow for both inlined and
565f0cbb 492 non-inlined constructors.
b08fd50c 493 - Update inlined methods for builder and predicate changes (groditi)
565f0cbb 494
495 * Class::MOP::Method::Generated
d7d3f3cb 496 - added this class as an abstract base for the
565f0cbb 497 Class::MOP::Method::{Constructor,Accessor} classes
498 - added tests for this
499
b08fd50c 500 *t/
501 - Alter tests (005, 014 020, 021) for new builder addition (groditi)
502 - Tests for new predicate behavior (and corrections to old tests) (groditi)
503
504 *examples/
505 - Update ArrayRef based class example to work with predicate changes
506
367183c4 5070.42 Mon. July 16, 2007
9195ddff 508 !!! Horray for mst, he fixed it !!!
509
92af7fdf 510 * Class::MOP::Package
511 - alter symbol table handling to deal with 5.8.x and 5.9.x
d7d3f3cb 512
92af7fdf 513 * t/
9195ddff 514 - Get rid of the crappy workaround from 0.40/41
92af7fdf 515
829f7554 5160.41 Sun. July 15, 2007
517 * t/
518 Arghh!!! My TODO test didn't work, so I handle
d7d3f3cb 519 it manually now so that people can use this
829f7554 520 with 5.9.5/bleadperl without issue.
521
1d7205b8 5220.40 Tues, July 3, 2007
9f88b8ff 523 * t/
d7d3f3cb 524 ~ marked a test in 003_methods.t as TODO
525 for perl 5.9.5 (this test is irrelvant to
526 the module functioning on 5.9.5 for the most
1d7205b8 527 part anyway)
9f88b8ff 528
28acb786 5290.39 Mon. June 18, 2007
b817e248 530 * Class::MOP::Immutable
0ac992ee 531 - added make_metaclass_mutable + docs (groditi)
532 - removed unused variable
d9586da2 533 - added create_immutable_transformer
534 necessary for sane overloading of immutable behavior
d7d3f3cb 535 - tests for this (groditi)
0ac992ee 536
537 * Class::MOP::Class
538 - Immutability can now be undone,
539 added make_mutable + tests + docs (groditi)
04dd7510 540 - Massive changes to the way Immutable is done
541 for details see comments next to make_immutable
542 This fixes a bug where custom metaclasses broke
d7d3f3cb 543 when made immutable. We are now keeping one immutable
544 metaclass instance per metaclass instead of just one
04dd7510 545 to prevent isa hierarchy corruption. Memory use will go
546 up, but I suspect it will be neglible.
547 - New tests added for this behavior. (groditi)
7c90a1a8 548
c0fcd6ab 5490.38 Thurs. May 31, 2007
823a5d31 550 ~~ More documentation updates ~~
d7d3f3cb 551
823a5d31 552 * Class::MOP::Package
553 - we now deal with stub methods properly
554 - added tests for this
c0fcd6ab 555 - fixed some tests failing on 5.9.5 (thanks blblack)
d7d3f3cb 556
b25109b1 557 * Class::MOP::Attribute
558 - added get_read_method and get_write_method
d7d3f3cb 559 thanks to groditi for this code, tests
c81de280 560 and docs.
b25109b1 561 - added tests and POD for this
d7d3f3cb 562
795a0c8b 563 * Class::MOP::Class
d7d3f3cb 564 - fixed RT issue #27329, clone object now
795a0c8b 565 handles undef values correctly.
566 - added tests for this
d7d3f3cb 567 - Corrected anon-class handling so that they
568 will not get reaped when instances still
569 exist which need to reference them. This is
570 the correct behavior, hopefully this is an
571 obscure enough feature that there are not too
d4ba1677 572 many work arounds out in the wild.
d7d3f3cb 573 - added tests for this by groditi
95514cb4 574 - updated docs to explain this
575
576 * metaclass
c0fcd6ab 577 - load custom metaclasses automatically (thanks groditi)
f2266181 578 - added tests for this behavior
a06797b0 579
3dc99d93 5800.37 Sat. March 10, 2007
448b6e55 581 ~~ Many, many documentation updates ~~
d7d3f3cb 582
448b6e55 583 * Class::MOP
d7d3f3cb 584 - added &load_class and &is_class_loaded
448b6e55 585 - added tests and docs for these
2367814a 586
9363ea89 587 * Class::MOP::Attribute
d7d3f3cb 588 - default now checks the instance with defined to
9363ea89 589 avoid setting off bool-overloads (found by Carl Franks)
590
c23184fc 5910.37_002
d7d3f3cb 592 * /t
593 - bad name in a test, causing meaningless failuress.
c23184fc 594 No other changes.
595
5960.37_001
d7d3f3cb 597
c23184fc 598 ~~ GLOBAL CHANGES ~~
d7d3f3cb 599 - All attribute names are now consistent and follow Perl 6
600 style (prefixed with the sigil, and ! as the twigil for
601 private attrs). This should not affect any code, unless
602 you broke encapsulation, in which case, it is your problem
c23184fc 603 anyway.
d7d3f3cb 604
c23184fc 605 !! Class::MOP::Class::Immutable has been removed
d7d3f3cb 606
c23184fc 607 * Class::MOP::Method::Constructor
d7d3f3cb 608 - this has been moved out of Class::MOP::Class::Immutable
c23184fc 609 and is a proper subclass of Class::MOP::Method now.
d7d3f3cb 610
c23184fc 611 * Class::MOP::Class
d7d3f3cb 612 - this module now uses Class::MOP::Immutable for the
613 immutable transformation instead of
c23184fc 614 Class::MOP::Class::Immutable.
d7d3f3cb 615
616 + Class::MOP::Immutable
617 - this module now controls the transformation from a mutable
618 to an immutable version of the class. Docs for this will
c23184fc 619 be coming eventually.
d7d3f3cb 620
c23184fc 621
cdc1ecba 6220.36 Sun. Nov. 5, 2006
a651e249 623 * Class::MOP::Class
d7d3f3cb 624 - added a few 'no warnings' lines to keep annoying
625 (and meaningless) warnings from chirping during
a651e249 626 global destruction.
d7d3f3cb 627
0870928c 628 * Class::MOP
d7d3f3cb 629 - some more bootstrapping is now done on the new
0870928c 630 classes
d7d3f3cb 631
0870928c 632 * Class::MOP::Class::Immutable
d7d3f3cb 633 *** API CHANGE ***
634 - constructor generation is now handled by
0870928c 635 the Class::MOP::Method::Constructor class
d7d3f3cb 636
0870928c 637 * Class::MOP::Method::Constructor
d7d3f3cb 638 - created this to handle constructor generation
0870928c 639 in Class::MOP::Class::Immutable
d7d3f3cb 640
0870928c 641 * Class::MOP::Attribute
d7d3f3cb 642 *** API CHANGE ***
643 - attributes now delegate to the
644 Class::MOP::Method::Accessor to generate
0870928c 645 accessors
d7d3f3cb 646
0870928c 647 * Class::MOP::Method::Accessor
d7d3f3cb 648 - all accessor generation functions from
0870928c 649 Class::MOP::Attribute have been moved here
a651e249 650
80f00c79 6510.35 Sat. Sept. 30, 2006
8745cf22 652
653 * scripts/class_browser.pl
d7d3f3cb 654 - initial prototype of a class browser, more
655 on this to come. Comments and patches are
8745cf22 656 very much welcome.
b1897d4d 657
658 * Class::MOP
d7d3f3cb 659 - All Class::MOP::* accessors are no longer
660 re-generated in the bootstrap, instead
6d2118a4 661 they are aliased from the originals
6d2118a4 662 - fixed tests to reflect
d7d3f3cb 663 - added Class::MOP::Method (and its subclasses)
b1897d4d 664 to the bootstrap
665 - adjusted tests for this
86482605 666 - added the Class::MOP::Instance attributes
667 to the bootstrap
d7d3f3cb 668
b1897d4d 669 * Class::MOP::Method
670 *** API CHANGE ***
671 - methods are no longer blessed CODE refs
672 but are actual objects which can be CODE-ified
673 - adjusted tests to compensate
d7d3f3cb 674 - adjusted docs for this
b1897d4d 675
676 * Class::MOP::Class
d7d3f3cb 677 - changed how methods are dealt with to
678 encapsulate most of the work into the
b1897d4d 679 &get_method_map method
680 - made several adjustments for the change
681 in Class::MOP::Method
d7d3f3cb 682 - &add_attribute now checks if you are adding
683 a duplicate name, and properly removes the
b1897d4d 684 old one before installing the new one
685 - added tests for this
86482605 686 - adjusted docs for this
d7d3f3cb 687
b1897d4d 688 * Class::MOP::Class::Immutable
689 - added caching of &get_method_map
690 - fixed issue with &get_package_symbol
691 - cleaned up the methods that die (patch by David Wheeler)
d7d3f3cb 692
b1897d4d 693 * Class::MOP::Package
d7d3f3cb 694 - added filtering capabilities to
b1897d4d 695 &list_all_package_symbols
696
a549ce50 6970.34 Sat. Aug. 26, 2006
c4260b45 698 * Class::MOP::Class
699 - added the %:methods attribute, which like
d7d3f3cb 700 the $:version and such just actually goes
701 to the symbol table to get it's stuff.
c4260b45 702 However, it makes the MOP more complete.
88dd563c 703 ** API CHANGE **
d7d3f3cb 704 - The &create method now requires that all
705 but the package name now is passed in as
88dd563c 706 named parameters. See docs for more info.
707 - updated docs and tests for this
d7d3f3cb 708
c4260b45 709 * Class::MOP::Object
d7d3f3cb 710 - added &dump method to easily Data::Dumper
c4260b45 711 an object
d7d3f3cb 712
c4260b45 713 * Class::MOP
d7d3f3cb 714 - cleaned up the initialization of attributes
715 which do not store things in the instance
c4260b45 716 - added the %:methods attribute definition to
717 the bootstrap
d7d3f3cb 718
88dd563c 719 ~ lots of misc. test cleanup
c4260b45 720
56e8dd5d 7210.33 Sat. Aug. 19, 2006
be7677c7 722 * Class::MOP::Class
d7d3f3cb 723 - moved the metaclass cache out of here
be7677c7 724 and it is now in Class::MOP itself.
d7d3f3cb 725
56e8dd5d 726 * Class::MOP
727 - moved all the metaclass cache stuff here
728 - fixed all tests for this
be7677c7 729
148b4697 730 * Class::MOP::Attribute
d7d3f3cb 731 - reference values (other than CODE refs)
148b4697 732 are no longer allowed for defaults
733 - added tests for this
d7d3f3cb 734
56dcfc1a 735 * Class::MOP::Package
d7d3f3cb 736 - fixed an issue with perl 5.8.1 and how it deals
737 with symbol tables. The namespace hash is now
738 always reloaded from the symbol table.
e3a2c885 739
740 ~ lots of misc. documentation cleanup
1396f86b 741
716c5765 7420.32 Sat. Aug. 12, 2006
d7d3f3cb 743 + added Class::MOP::Object so that the
6e57504d 744 metamodel is more complete (and closer
745 to what Perl 6 will probably be).
746
9ca19585 747 * Class::MOP::Package
d7d3f3cb 748 - refactored entire class, this is now
9ca19585 749 the primary gateway between the metaclass
750 and the Perl 5 symbol table
751 - added many tests for this
d7d3f3cb 752 - this class is now a subclass of
6e57504d 753 Class::MOP::Object
716c5765 754 - added some tests to reflect this
d7d3f3cb 755
9ca19585 756 * Class::MOP::Class
d7d3f3cb 757 - refactored all symbol table access to
9ca19585 758 use Class::MOP::Package methods instead
d7d3f3cb 759
f0480c45 760 * Class::MOP::Module
761 - adding the $:version attribute in the bootstrap
762 so that Module has a version as an attribute
763 - see comment in Class::MOP for details
d7d3f3cb 764 - added the $:authority attribute to this module
765 as well as an &identifier method, to bring us
766 ever closer to Perl 6 goodness
767 - I have added $AUTHORITY to all the modules
716c5765 768 - added tests for this
d7d3f3cb 769
f0480c45 770 * Class::MOP::Instance
d7d3f3cb 771 - added &deinitialize_slot for removing slots
f0480c45 772 from an instance
d7d3f3cb 773 - added tests for this
774
775 * Class::MOP::Attribute
9ca19585 776 - added support for &deinitialize_slot for removing
777 slots from an instance
778 - added tests for this
779
1a09d9cc 7800.31 Sat. July 15, 2006
781
b679e644 782 * Class::MOP::Class
783 - added &find_method_by_name to locate a method
d7d3f3cb 784 anywhere within the class hierarchy
785
b679e644 786 * Class::MOP::Attribute
d7d3f3cb 787 - added &set_value and &get_value for getting
788 the value of the attribute for a particular
b679e644 789 instance.
790
373a16ae 7910.30 Wed. July 5, 2006
792 ---------------------------------------
d7d3f3cb 793 This is the first version of Class::MOP
373a16ae 794 to introduce the immutable features which
d7d3f3cb 795 will be used for optimizating the MOP.
373a16ae 796 This support should still be considered
797 experimental, but moving towards stability.
798 ---------------------------------------
d7d3f3cb 799
800 * Created Class::MOP::Class::Immutable
801
802 * Created the Class::MOP::Package and
803 Class::MOP::Module classes to more
373a16ae 804 closely conform to Perl 6's meta-model
e0a82090 805
806 * Class::MOP::Class
807 - now inherits from Class::MOP::Module
d7d3f3cb 808 - several methods moved to ::Module and
e0a82090 809 ::Package and now inherited
810 - added tests for this
d7d3f3cb 811
c0cbf4d9 812 * Class::MOP::Instance
d7d3f3cb 813 - added an is_inlinable method to allow other
c0cbf4d9 814 classes to check before they attempt to optimize.
d7d3f3cb 815 - added an inline_create_instance to inline
816 instance creation (of course)
817
2ba153a9 818 ** API CHANGE **
d7d3f3cb 819 - the Class::MOP::Class::*_package_variable
2ba153a9 820 methods are all now methods of Class::MOP::Package
d7d3f3cb 821 and called *_package_symbol instead. This is
822 because they are now more general purpose symbol
823 table manipulation methods.
e0a82090 824
cdfaa4cc 8250.29_02 Thurs. June 22, 2006
826 ++ DEVELOPER RELEASE ++
df7b4119 827 * Class::MOP::Class
d7d3f3cb 828 - small change in &create so that it behaves
df7b4119 829 properly when inherited
cdfaa4cc 830 - small fix to &clone_instance
df7b4119 831
667cecf3 8320.29_01 Fri. May 12, 2006
833 ++ DEVELOPER RELEASE ++
d7d3f3cb 834 - This release works in combination with
667cecf3 835 Moose 0.09_01, it is a developer release
d7d3f3cb 836 because it introduces a new instance
837 sub-protocol and has not yet been
838 optimized.
667cecf3 839
40483095 840 * Class::MOP::Class
841 - anon-classes are now properly garbage collected
d7d3f3cb 842 - added tests for this
843 - improved method modifier wrapping
40483095 844
2bab2be6 845 * Class::MOP::Instance
1becdfcc 846 - added new instance protocol
2bab2be6 847 - added tests for this
848 - changed all relevant modules and examples
849 - Class::MOP::Class
850 - Class::MOP::Attribute
851 - examples/*
852
1becdfcc 853 * metaclass
854 - you no longer need to specify the metaclass
855 itself, if it is not there, Class::MOP::Class
856 is just assumed
857 - updated tests for this
858
859 * examples/
d7d3f3cb 860 - added ArrayBasedStorage example to show
1becdfcc 861 instance storage using ARRAY refs instead of
d7d3f3cb 862 HASH refs.
1becdfcc 863 - added tests for this
d7d3f3cb 864 - InsideOutClass is totally revised using the
1becdfcc 865 new instance protocol
866 - added more tests for this
867
93b4e576 8680.26 Mon. April 24, 2006
e7f732e4 869 * Class::MOP::Class
870 - added find_attribute_by_name method
871 - added tests and docs for this
56a0b530 872 - some small optimizations
873
874 * Class::MOP::Attribute
875 - some small optimizations
e7f732e4 876
46666f33 8770.25 Thurs. April 20, 2006
587aca23 878 * Class::MOP::Class
879 - added create_anon_class for creating anonymous classes
880 - added tests for this
881 - added get_all_metaclasses, get_all_metaclass_names
882 and get_all_metaclass_instances method to allow
883 access to all the cached metaclass objects.
bd4e03f9 884 - attribute slot initialization is now the responsibility
d7d3f3cb 885 of the attribute itself, and construct_instance now
bd4e03f9 886 delegates appropriately
d7d3f3cb 887
bd4e03f9 888 * Class::MOP::Attribute
889 - attribute slot initialization is now the responsibility
890 of the attribute itself, so we added a method for it
891 called initialize_instance_slot
d7d3f3cb 892
fed4cee7 893 * examples/
d7d3f3cb 894 - adjusted all the examples to use the new attribute
895 initialize_instance_slot method
587aca23 896
1daaa2b2 8970.24 Tues. April 11, 2006
8c936afc 898 * Class::MOP::Class
d7d3f3cb 899 - cleaned up how the before/after/around method
8c936afc 900 modifiers get named with Sub::Name
901
b9dfbf78 9020.23 Thurs. March 30, 2006
a977cf65 903 * Class::MOP::Class
d7d3f3cb 904 - fixed the way attribute defaults are handled
a977cf65 905 during instance construction (bug found by chansen)
d7d3f3cb 906
b9dfbf78 907 * Class::MOP::Attribute
d7d3f3cb 908 - read-only accessors ('reader') will now die if
b9dfbf78 909 passed more than one argument (attempting to write
910 to them basically)
911 - added tests for this
d7d3f3cb 912 - adjusted all /example files to comply
a977cf65 913
f9eba090 9140.22 Mon. March 20, 2006
0eff2c16 915 * Class::MOP::Class
916 - localized $@ in the *_package_variable functions
917 because otherwise, it does ugly things in Moose.
918 - added test case for this
919
1988e85e 9200.21 Wed. March 15, 2006
2f6d5412 921 * Class::MOP::Class
d7d3f3cb 922 - fixed issue where metaclasses are reaped from
2f6d5412 923 our cache in global destruction, and so are not
924 available in DESTORY calls
925
96ceced8 9260.20 Thurs. March 2, 2006
d7d3f3cb 927 - removed the dependency for Clone since
d3cb0d4a 928 we no longer to deep-cloning by default.
d7d3f3cb 929
a4258ffd 930 * Class::MOP::Method
d7d3f3cb 931 - added &package_name, &name and
932 &fully_qualified_name methods, some of
933 which were formerly private subs in
a4258ffd 934 Class::MOP::Class
d7d3f3cb 935
a4258ffd 936 * Class::MOP::Method::Wrapped
d7d3f3cb 937 - allows for a method to be wrapped with
938 before, after and around modifiers
a4258ffd 939 - added tests and docs for this feature
d3cb0d4a 940
941 * Class::MOP::Class
58d75218 942 - improved &get_package_symbol
96ceced8 943 - &version and &superclasses now use it
a4258ffd 944 - methods are now blessed into Class::MOP::Method
945 whenever possible
d7d3f3cb 946 - added methods to install CLOS-style method modifiers
a4258ffd 947 - &add_before_method_modifier
d7d3f3cb 948 - &add_after_method_modifier
a4258ffd 949 - &add_around_method_modifier
950 - added tests and docs for these
d7d3f3cb 951 - added &find_next_method_by_name which finds the
96ceced8 952 equivalent of SUPER::method_name
d3cb0d4a 953
1c020571 9540.12 Thurs. Feb 23, 2006
d7d3f3cb 955 - reduced the dependency on B, no need to always
d89c0fad 956 have the latest
957
1c020571 958 * examples/
959 - added docs to the C3 method dispatch order test
d7d3f3cb 960 - fixed missing Algorithm::C3 dependency by making
1c020571 961 the test skip if it is not installed
962
0dea7280 9630.11 Mon Feb. 20, 2006
f3f5bd34 964 * examples/
965 - added example of changing method dispatch order to C3
d7d3f3cb 966
a27ae83f 967 * Class::MOP::Class
19d4b5b8 968 - changed how clone_instance behaves, it now only does a
969 shallow clone (see docs for more details)
a27ae83f 970 - added docs and tests
f3f5bd34 971
3bf7644b 9720.10 Tues Feb. 14, 2006
d7d3f3cb 973 ** This release was mostly about writing more tests and
974 cleaning out old and dusty code, the MOP should now
3bf7644b 975 be considered "ready to use".
976
22286063 977 - adding more tests to get coverage up a little higher,
978 mostly testing errors and edge cases.
979 - test coverage is now at 99%
d7d3f3cb 980
aa448b16 981 * Class::MOP
982 - no longer optionally exports to UNIVERSAL::meta or
d7d3f3cb 983 creates a custom metaclass generator, use the
aa448b16 984 metaclass pragma instead.
22286063 985
d7d3f3cb 986 * Class::MOP::Class
987 - fixed a number of minor issues which came up in the
988 error/edge-case tests
989
990 * Class::MOP::Attribute
991 - fixed a number of minor issues which came up in the
22286063 992 error/edge-case tests
d7d3f3cb 993
0b8eb325 994 * examples/
ea263060 995 - fixing the AttributesWithHistory example, it was broken.
663f8198 996
550d56db 9970.06 Thurs Feb. 9, 2006
677eb158 998 * metaclass
d7d3f3cb 999 - adding new metaclass pragma to make setting up the
677eb158 1000 metaclass a little more straightforward
d7d3f3cb 1001
7b31baf4 1002 * Class::MOP
d7d3f3cb 1003 - clean up bootstrapping to include more complete
1004 attribute definitions for Class::MOP::Class and
1005 Class::MOP::Attribute (accessors, readers, writers,
7b31baf4 1006 etc.) ... it is redundant, but is useful meta-info
1007 to have around.
677eb158 1008
99e5b7e8 1009 * Class::MOP::Class
d7d3f3cb 1010 - fixing minor meta-circularity issue with &meta, it
99e5b7e8 1011 is now more useful for subclasses
d7d3f3cb 1012 - added &get_attribute_map as an accessor for the
7b31baf4 1013 hash of attribute meta objects
c9e77dbb 1014 - &compute_all_applicable_attributes now just returns
1015 the attribute meta-object, rather than the HASH ref
d7d3f3cb 1016 since all the same info can be gotten from the
c9e77dbb 1017 attribute meta-object itself
1018 - updated docs & tests to reflect
5f3c057a 1019 - added &clone_instance method which does a deep clone
1020 of the instance structure created by &construct_instance
1021 - added docs & tests for this
550d56db 1022 - added Clone as a dependency
5f3c057a 1023 - added &new_object and &clone_object convience methods to
1024 return blessed new or cloned instances
2a7575a6 1025 - they handle Class::MOP::Class singletons correctly too
5f3c057a 1026 - added docs & tests for this
2a7575a6 1027 - cleaned up the &constuct_class_instance so that it behaves
1028 more like &construct_instance (and managed the singletons too)
550d56db 1029 - added the &check_metaclass_compatibility method to make sure
1030 that metaclasses are upward and downward compatible.
1031 - added tests and docs for this
d7d3f3cb 1032
99e5b7e8 1033 * examples/
1034 - adjusting code to use the &Class::MOP::Class::meta
1035 fix detailed above
677eb158 1036 - adjusting code to use the metaclass pragma
d7d3f3cb 1037
aa9c883e 10380.05 Sat Feb. 4, 2006
2e41896e 1039 * Class::MOP::Class
1040 - added the &attribute_metaclass and &method_metaclass
d7d3f3cb 1041 attributes which contain a metaclass name to use for
2e41896e 1042 attributes/methods respectively
d7d3f3cb 1043
351bd7d4 1044 * Class::MOP
d7d3f3cb 1045 - bootstrap additional attributes for Class::MOP::Class
1046
2e41896e 1047 * examples/
1048 - adjusted the example code and tests to use the new
1049 &attribute_metaclass feature of Class::MOP::Class
aa9c883e 1050 - added new example:
1051 - LazyClass
2e41896e 1052
d7c2cbe3 10530.04 Fri Feb. 3, 2006
d6fbcd05 1054 * Class::MOP::Class
1055 - some documentation suggestions from #perl6
d7d3f3cb 1056
d6fbcd05 1057 * Class::MOP::Attribute
d7d3f3cb 1058 - improved error messages
1059
d6fbcd05 1060 * examples/
1061 - added new examples:
1062 - AttributesWithHistory
d7c2cbe3 1063 - ClassEncapsultedAttributes
343203ee 1064
9ec169fe 10650.03 Fri Feb. 3, 2006
1066 - converted to Module::Build instead of EU::MM
d7d3f3cb 1067
9ec169fe 1068 * Class::MOP::Attribute
1069 - refactored method generation code
1070 - attributes are now associated with class directly
d7d3f3cb 1071
f71f4295 1072 * examples/
d7d3f3cb 1073 - refactored the InsideOut example to take advantage
9ec169fe 1074 of the Class::MOP::Attribute refactoring
f71f4295 1075 - changed example files to .pod files and hide thier
1076 package names from PAUSE (I don't want to own these
1077 namespaces really, they are just examples)
9ec169fe 1078
a57c7fa2 10790.02 Thurs Feb. 2, 2006
1080 - moving examples from t/lib/* to examples/*
1081 - adding POD documentation to the examples
1082
a2e85e6c 10830.01 Thurs Feb. 2, 2006
92af7fdf 1084 - Initial release