Front page | perl.perl5.porters |
Postings from December 2011
=?UTF-8?B?W3BlcmwgIzEwNjk5OF0gREZTIGRvZXMgbm90IHJlc3BlY3Qgc3VwZXJjbGFz?==?UTF-8?B?c2Vz4oCZIE1ST3M=?=
Thread Next
From:
Father Chrysostomos
Date:
December 25, 2011 14:16
Subject:
=?UTF-8?B?W3BlcmwgIzEwNjk5OF0gREZTIGRvZXMgbm90IHJlc3BlY3Qgc3VwZXJjbGFz?==?UTF-8?B?c2Vz4oCZIE1ST3M=?=
Message ID:
rt-3.6.HEAD-14510-1324851388-1383.106998-75-0@perl.org
# New Ticket Created by Father Chrysostomos
# Please include the string: [perl #106998]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=106998 >
#!perl
# a
# / \
# b c
# \ /
# d
@d::ISA = qw 'b c';
@b::ISA = @c::ISA = 'a';
package d { use mro 'c3' }
package subclass { @ISA = 'd'; }
$\="\n";
print for @{mro'get_linear_isa 'd'};
print "----";
print for @{mro'get_linear_isa 'subclass'};
__END__
The output shows that a c3 class fails the empty subclass test, because the subclass, which uses dfs by default, imposes that on its superclasses.
I think this is a flawed model. It means that no existing module hierarchies can switch over to c3 without breaking subclasses.
I think dfs mro linearisation needs to use the mro linearisations of its parents, instead of traversing all the superclasses itself.
Likewise I think c3 needs to be modified. It may not follow the c3 algorithm any more, but right now it’s impossible to use the c3 mro in the example above if class ‘a’ happens to have dfs diamond inheritance from its superclasses. (Maybe the c3 algorithm should treat any class that does not use c3 as a ‘black box’: it just takes the mro linearisation from that class and considers it a list of immediate superclasses.)
Likewise, next::method should respect each class’s mro.
Otherwise, the current mro system is more a curiosity than anything else.
It’s not possible to use mro plugins to store the list of superclasses somewhere other than @ISA.
Right now, to subclass a random class, one has to ‘use mro(); use mro mro::get_mro $super’. Easy things should be simple and vice versa.
---
Flags:
category=core
severity=low
---
Site configuration information for perl 5.15.5:
Configured by sprout at Sun Dec 18 11:26:14 PST 2011.
Summary of my perl5 (revision 5 version 15 subversion 5) configuration:
Snapshot of: 5dca8ed9d28127c9f7a2e7ce5f8ba970da3608cd
Platform:
osname=darwin, osvers=10.5.0, archname=darwin-2level
uname='darwin pint.local 10.5.0 darwin kernel version 10.5.0: fri nov 5 23:20:39 pdt 2010; root:xnu-1504.9.17~1release_i386 i386 '
config_args='-de -Dusedevel -DDEBUGGING=-g'
hint=recommended, useposix=true, d_sigaction=define
useithreads=undef, usemultiplicity=undef
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=undef, use64bitall=undef, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc', ccflags ='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include',
optimize='-O3 -g',
cppflags='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
ccversion='', gccversion='4.2.1 (Apple Inc. build 5664)', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-protector -L/usr/local/lib'
libpth=/usr/local/lib /usr/lib
libs=-ldbm -ldl -lm -lutil -lc
perllibs=-ldl -lm -lutil -lc
libc=, so=dylib, useshrplib=false, libperl=libperl.a
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector'
Locally applied patches:
---
@INC for perl 5.15.5:
/usr/local/lib/perl5/site_perl/5.15.5/darwin-2level
/usr/local/lib/perl5/site_perl/5.15.5
/usr/local/lib/perl5/5.15.5/darwin-2level
/usr/local/lib/perl5/5.15.5
/usr/local/lib/perl5/site_perl
.
---
Environment for perl 5.15.5:
DYLD_LIBRARY_PATH (unset)
HOME=/Users/sprout
LANG=en_US.UTF-8
LANGUAGE (unset)
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/bin
PERL_BADLANG (unset)
SHELL=/bin/bash
Thread Next
-
=?UTF-8?B?W3BlcmwgIzEwNjk5OF0gREZTIGRvZXMgbm90IHJlc3BlY3Qgc3VwZXJjbGFz?==?UTF-8?B?c2Vz4oCZIE1ST3M=?=
by Father Chrysostomos