oops, forgot the SVN url http://svn.coderepos.org/share/lang/perl/DateTime-Lite/trunk
--d Daisuke Maki wrote: > Hi, > > I have an RFC/request for blessing for a module. > > So I have this requirement to make DateTime leaner, in terms of speed, > load time, and the amount of memory consumed. The target is for casual > users, so the use of XS code is not an option either. > > I've done my share of hacking DateTime before, and I believe that > changing the DateTime.pm code base itself is not really an option since > DateTime needs to be backward compatible and what not. > > Instead I took the approach of using DateTime.pm as a reference > implementation, and rearranged the code somewhat to get the desired effect. > > Now I have something that passes all current DateTime tests and named it > DateTime::Lite. I intend to do some more hacking soon ish, but thought > I'd ask for your comments before hand. > > I've pasted the current POD for DateTime::Lite at the end of this email. > Also, if you are interested, the code is at > > note that the location of time zones and locales are hard coded now, so > DateTime::Lite will only work from the checked out root. > > regards, > > --d > > =head1 NAMEDateTime::Lite - A Low Calorie DateTime > > =head1 SYNOPSIS > > use DateTime::Lite; > > my $dt = DateTime::Lite->new(year => 2008, month => 12, day => 1); > $dt->year; > $dt->month; > $dt->day; > $dt->hour; > $dt->minuute; > $dt->second; > > # Arithmetic doesn't come with DateTime::Lite by default > use DateTime::Lite qw(Arithmetic); > $dt->add( DateTime::Lite::Duration->new(days => 5) ); > > =head1 DESCRIPTION > > This is a complete rip-off of the great DateTime module. The author > simply copy > and pasted about 90% of the code, tweaked it and repackaged it. All > credits go t > o the original DateTime.pm's authors.However, this module was conceived > out of a few specific desires : > > (1) Target those who do not need the full feature of DateTime.pm > (2) Get better performance: > * Reduce the amount of memory consumed, and * Reduce the time > it takes to load the module (3) Make it easy to install on rental servers > (4) Bundle everything in one distribution, including timezones and locales > > To achieve this, we've taken the original DateTime and rearranged it as > follows: > > =over 4 > > =item DateTime::Lite is Pure Perl > > No XS, pronto. Since we expect the audience to be people who are not > sysadmins, we don't expect them to have a full compiler support > either.=item Parameter validation is done by hand > =item Parameter validation is done by hand > > Params::Validate is a great module, but it slows things down. We don't > see the merit of removing it from the original DateTime.pm, but we did > so in this version. > > =item Non-essential methods are loaded on demand > > A lot of times you don't even need to do date time arithmetic, for > example. These methods are separated out onto a different file, so you > need to load it on demand. > > use DateTime::Lite qw(Arithmetic); > use DateTime::Lite qw(Strftime); > > =item DateTime::Lite::TimeZone and DateTime::Lite::Locale > > DateTime::Lite::TimeZone and DateTime::Lite::Locale have big changes > from their original counterparts. > > First, you do NOT call new() on these objects (unless this is something > you explicitly want to do). Instead, you need to call load(). So if you > were mucking with DateTime::Lite::TimeZone and DateTime::Locale, you > need to find out every occurance of > > DateTime::Lite::TimeZone->load( name => 'Asia/Tokyo' ); > > and change them to > > DateTime::Lite::TimeZone->load( name => 'Asia/Tokyo' ); > > Singletons are okay, they serve a particular purpose. But besides being > a memory hog of relative low benefit, when given the number of time > zones are locales, they are just way too overwhelming for underlings. > > With this version, the objects are mostly the just plain objects, and > the exact definition for each timezone/locale is stored in data files. # > TODO: They can be located anywhere DateTime::Lite can find them > > TODO: We want to make it easy to pick and choose which locales/timezones > to be available -- DateTime::TimeZone and Locale comes with the > full-set, and normally we don't need this feature. For example, I only > use Asia/Tokyo and UTC time zones for my dayjob. When we ask casual > users to install a datetime package, we do not want to overwhelm then > with 100+ timezones and locales. > > =cut >