Re: Must DateTime load all Locales?

2014-08-11 Thread Dave Rolsky

On Sat, 9 Aug 2014, David E. Wheeler wrote:


What could speed things up would be to pre-generate the data structures that are 
built by calling -register on everything in the Catalog module.


It builds up in-memory data structures for all of the locales? Wow. Yeah, seems 
like those could be encapsulated in the locales themselves or something, no?


Or rather than building this all up via repeated calls to _register, the 
Catalog code could just contain the fully realized structure.



That all said, DT::Locale is woefully crufty and out of date. I haven't kept up 
to date with the CLDR data for years because the approach that DT::Locale uses 
to generate individual locales makes it incredibly hard to deal with data 
format changes in CLDR.


Ah. So some locale results will probably be wrong now, eh?


Oh yes.


Nick Patch had mentioned that he was interested in working on proper CLDR 
support for Perl (which is more than just DateTime info), and I was hoping he'd 
take all this over ;)


Is CLDR::Number part of that, perhaps?

 http://search.cpan.org/dist/CLDR-Number/


Probably. But CLDR is a huge beast. I really think we need a Perl 
interface to libicu, although there'd be a serious mismatch between how it 
handles dates (POSIX style with no leap seconds) and DateTime. So just 
having the interface would just be a first step.



-dave

/*
http://VegGuide.org   http://blog.urth.org
Your guide to all that's veg  House Absolute(ly Pointless)
*/


Re: Must DateTime load all Locales?

2014-08-11 Thread David E. Wheeler
On Aug 11, 2014, at 10:01 AM, Dave Rolsky auta...@urth.org wrote:

 It builds up in-memory data structures for all of the locales? Wow. Yeah, 
 seems like those could be encapsulated in the locales themselves or 
 something, no?
 
 Or rather than building this all up via repeated calls to _register, the 
 Catalog code could just contain the fully realized structure.

How hard would that be to do?

D



signature.asc
Description: Message signed with OpenPGP using GPGMail


Re: Must DateTime load all Locales?

2014-08-11 Thread Dave Rolsky

On Mon, 11 Aug 2014, David E. Wheeler wrote:


On Aug 11, 2014, at 10:01 AM, Dave Rolsky auta...@urth.org wrote:


It builds up in-memory data structures for all of the locales? Wow. Yeah, seems 
like those could be encapsulated in the locales themselves or something, no?


Or rather than building this all up via repeated calls to _register, the 
Catalog code could just contain the fully realized structure.


How hard would that be to do?


Hard and not hard ;)

The Catalog is currently generated as part of the code that generates each 
individual locale. Changing that part of the code generator isn't too 
hard. The trick is you have to use the exact version of the CLDR data that 
this generator can parse, which is CLDR 1.7.1. You can probably get it 
from their historical archives or repo.



-ave

/*
http://VegGuide.org   http://blog.urth.org
Your guide to all that's veg  House Absolute(ly Pointless)
*/


Re: Must DateTime load all Locales?

2014-08-09 Thread David E. Wheeler
On Aug 7, 2014, at 11:23 AM, Dave Rolsky auta...@urth.org wrote:

 I think the overhead comes in the DateTime::Locale::_register() function, 
 which is called once for each locale returned by DateTime::Locale::Catalog. 
 I would not think any locales would be loaded until they were needed.
 
 And you would be correct. The individual locale classes are not loaded until 
 you call DateTime::Locale-load

I see. So _register does not load them, but is still the startup bottleneck. 
What on earth is it doing?

 What could speed things up would be to pre-generate the data structures that 
 are built by calling -register on everything in the Catalog module.

It builds up in-memory data structures for all of the locales? Wow. Yeah, seems 
like those could be encapsulated in the locales themselves or something, no?

 That all said, DT::Locale is woefully crufty and out of date. I haven't kept 
 up to date with the CLDR data for years because the approach that DT::Locale 
 uses to generate individual locales makes it incredibly hard to deal with 
 data format changes in CLDR.

Ah. So some locale results will probably be wrong now, eh?

 Nick Patch had mentioned that he was interested in working on proper CLDR 
 support for Perl (which is more than just DateTime info), and I was hoping 
 he'd take all this over ;)

Is CLDR::Number part of that, perhaps?

  http://search.cpan.org/dist/CLDR-Number/

I have updated Sqitch to defer loading DateTime at all until it is needed. 
Alas, it is often needed. Sure would be nice to cut down on this startup time 
in general.

Best,

David


signature.asc
Description: Message signed with OpenPGP using GPGMail


Re: Must DateTime load all Locales?

2014-08-07 Thread Dave Rolsky

On Tue, 5 Aug 2014, David E. Wheeler wrote:


On Aug 5, 2014, at 4:18 PM, Olivier Mengué olivier.men...@gmail.com wrote:


Here is below the output (latest releases of DateTime, DateTime::Locale, 
DateTime::TimeZone on perl 5.20.0).
DateTime::Locale::Catalog is the module that contains all the locales names.
David, is it that module that you worry about or have you found something worse?


I think the overhead comes in the DateTime::Locale::_register() function, which 
is called once for each locale returned by DateTime::Locale::Catalog. I would 
not think any locales would be loaded until they were needed.


And you would be correct. The individual locale classes are not loaded 
until you call DateTime::Locale-load


What could speed things up would be to pre-generate the data structures 
that are built by calling -register on everything in the Catalog module.


That all said, DT::Locale is woefully crufty and out of date. I haven't 
kept up to date with the CLDR data for years because the approach that 
DT::Locale uses to generate individual locales makes it incredibly hard to 
deal with data format changes in CLDR.


Nick Patch had mentioned that he was interested in working on proper CLDR 
support for Perl (which is more than just DateTime info), and I was hoping 
he'd take all this over ;)



-dave

/*
http://VegGuide.org   http://blog.urth.org
Your guide to all that's veg  House Absolute(ly Pointless)
*/

Re: Must DateTime load all Locales?

2014-08-06 Thread Kaare Rasmussen

On 08/06/2014 12:34 AM, David E. Wheeler wrote:
Yeah, I saw that, too, but Sqitch requires localization, which 
Time::Moment does not support. Best, David 


I guess it's not enough for you, but T:M's strftime does support 
locales, it seems.


Re: Must DateTime load all Locales?

2014-08-06 Thread David E. Wheeler
On Aug 6, 2014, at 2:21 AM, Kaare Rasmussen ka...@jasonic.dk wrote:

 Yeah, I saw that, too, but Sqitch requires localization, which Time::Moment 
 does not support. Best, David 
 
 I guess it's not enough for you, but T:M's strftime does support locales, it 
 seems.

It does? The docs all say that it uses the C locale. Which is a good default, 
but unlocalizable, unless I’m missing something.

Best,

David



signature.asc
Description: Message signed with OpenPGP using GPGMail


Re: Must DateTime load all Locales?

2014-08-06 Thread Kaare Rasmussen





Yeah, I saw that, too, but Sqitch requires localization, which Time::Moment 
does not support. Best, David

I guess it's not enough for you, but T:M's strftime does support locales, it 
seems.

It does? The docs all say that it uses the C locale. Which is a good default, 
but unlocalizable, unless I’m missing something.


Yeah, guess I was sleepy when reading the docs.

I also guess it's a future development point, but it won't help you now.


Re: Must DateTime load all Locales?

2014-08-06 Thread Darren Duncan

On 2014-08-05, 3:34 PM, David E. Wheeler wrote:

On Aug 5, 2014, at 3:09 PM, Darren Duncan dar...@darrenduncan.net wrote:


Coincidentally, see this blog post I saw yesterday:

http://blogs.perl.org/users/chansen/2014/08/timemoment-vs-datetime.html


Yeah, I saw that, too, but Sqitch requires localization, which Time::Moment 
does not support.


By the way, my pointing to the blog post wasn't so much to specifically 
recommend Time::Moment as a solution for you, as that it had information 
comparing resource usage of a number of temporal data solutions, and in 
particular reinforced your comment of DateTime using a lot of resources, 
relative to most others. -- Darren Duncan




Re: Must DateTime load all Locales?

2014-08-05 Thread Darren Duncan

Coincidentally, see this blog post I saw yesterday:

http://blogs.perl.org/users/chansen/2014/08/timemoment-vs-datetime.html

This has a lot to say about performance issues.

-- Darren Duncan


Re: Must DateTime load all Locales?

2014-08-05 Thread David E. Wheeler
On Aug 5, 2014, at 3:09 PM, Darren Duncan dar...@darrenduncan.net wrote:

 Coincidentally, see this blog post I saw yesterday:
 
 http://blogs.perl.org/users/chansen/2014/08/timemoment-vs-datetime.html

Yeah, I saw that, too, but Sqitch requires localization, which Time::Moment 
does not support.

Best,

David



signature.asc
Description: Message signed with OpenPGP using GPGMail


Re: Must DateTime load all Locales?

2014-08-05 Thread Olivier Mengué
Here is another way to profile DateTime for the modules it loads at compile
time:

perl -d:TraceUse -MDateTime -c -e0

Here is below the output (latest releases of DateTime, DateTime::Locale,
DateTime::TimeZone on perl 5.20.0).
DateTime::Locale::Catalog is the module that contains all the locales names.
David, is it that module that you worry about or have you found something
worse?

Modules used from -e:
   1.  DateTime 1.10, -e line 0 [main]
   2.strict 1.08, DateTime.pm line 5
   3.warnings 1.23, DateTime.pm line 6
   4.warnings::register 1.03, DateTime.pm line 7
   5.Carp 1.3301, DateTime.pm line 9
   6.  Exporter 5.70, Carp.pm line 99
   7.DateTime::Duration 1.10, DateTime.pm line 10
   8.  DateTime::Helpers 1.10, DateTime/Duration.pm line 8
   9.Scalar::Util 1.38, DateTime/Helpers.pm line 6
  10.  List::Util 1.38, Scalar/Util.pm line 11
  11.XSLoader 0.17, List/Util.pm line 21
  12.  Params::Validate 1.10, DateTime/Duration.pm line 9
  13.Module::Implementation 0.07, Params/Validate.pm line 9
  14.  Module::Runtime 0.014, Module/Implementation.pm line 12
  23.Params::Validate::XS 1.10, Module/Runtime.pm line 317
  43.Class::Load::XS 0.08, Module/Runtime.pm line 317
  15.  Try::Tiny 0.22, Module/Implementation.pm line 13
  16.Sub::Name 0.05, Try/Tiny.pm line 18 (eval 4)
  17.  base 2.22, Sub/Name.pm line 49
  18.vars 1.03, base.pm line 4
  19.DynaLoader 1.25, base.pm line 99
  20.  Config 5.02, DynaLoader.pm line 22
  52.DateTime::Locale::en, base.pm line 99
  53.DateTime::Locale::root, base.pm line 99
  21.constant 1.31, Try/Tiny.pm line 144 [Try::Tiny::ScopeGuard]
  22.Params::Validate::Constants 1.10, Params/Validate.pm line 10
  24.  overload 1.22, DateTime/Duration.pm line 18
  25.overloading 0.02, overload.pm line 83
  26.DateTime::Locale 0.45, DateTime.pm line 12
  27.  DateTime::Locale::Base, DateTime/Locale.pm line 10
  28.List::MoreUtils 0.33, DateTime/Locale/Base.pm line 8
  29.  DateTime::Locale::Catalog, DateTime/Locale.pm line 11
  30.utf8 1.13, DateTime/Locale/Catalog.pm line 19
  51.  DateTime::Locale::en_US, DateTime/Locale.pm line 280 (eval 21)
  31.DateTime::TimeZone 1.72, DateTime.pm line 13
  32.  DateTime::TimeZone::Catalog 1.72, DateTime/TimeZone.pm line 10
  33.  DateTime::TimeZone::Floating 1.72, DateTime/TimeZone.pm line 11
  34.parent 0.228, DateTime/TimeZone/Floating.pm line 6
  35.  Class::Singleton 1.4, parent.pm line 20
  36.  DateTime::TimeZone::OffsetOnly 1.72, parent.pm line 20
  37.DateTime::TimeZone::UTC 1.72,
DateTime/TimeZone/OffsetOnly.pm line 8
  38.  DateTime::TimeZone::Local 1.72, DateTime/TimeZone.pm line 12
  39.Class::Load 0.21, DateTime/TimeZone/Local.pm line 6
  40.  Data::OptList 0.109, Class/Load.pm line 10
  41.Params::Util 1.07, Data/OptList.pm line 10
  42.Sub::Install 0.927, Data/OptList.pm line 11
  44.File::Spec 3.47, DateTime/TimeZone/Local.pm line 8
  45.  File::Spec::Unix 3.47, File/Spec.pm line 22
  46.POSIX 1.38_03, DateTime.pm line 16
  47.  Fcntl 1.11, POSIX.pm line 17
  48.  Tie::Hash 1.05, POSIX.pm line 422 [POSIX::SigRt]
  49.integer 1.01, DateTime.pm line 756
  50.DateTime::Infinite 1.10, DateTime.pm line 68
Possible proxies:
   3 base.pm line 99, sub base::import
   2 Module/Runtime.pm line 317, sub Module::Runtime::require_module
   2 parent.pm line 20, sub parent::import





2014-08-05 23:06 GMT+02:00 David E. Wheeler da...@justatheory.com:

 DateTimers,

 While profiling Sqitch, I found that the biggest suck on its time (now
 that I have removed Moose and Mouse in favor of Moo) is DateTime. The
 reason? It loads all of the locales in its BEGIN block. Run this to see for
 yourself:

 perl -d:NYTProf -e 'use DateTime;'  nytprofhtml --open

 Here's the topline:
 Top 15 Subroutines CallsP FExclusive
 Time Inclusive
 TimeSubroutine 4661 115.6ms 24.4ms DateTime::Locale::_register 1 11 11.2ms
 119ms main::BEGIN@1 4682 28.65ms 8.65ms Params::Validate::XS::validate
  (xsub) 1 11 8.29ms8.50ms DateTime::Locale::BEGIN@11 99 65.23ms 6.44ms
 base::import (recurses: max depth 2, inclusive time 1.79ms) 1 11 3.65ms
 7.98ms DateTime::BEGIN@16 11 13.53ms 4.54msDateTime::TimeZone::Local::
 BEGIN@8 1 11 3.22ms21.6ms DateTime::BEGIN@13 11 12.99ms 3.08ms
 DateTime::TimeZone::BEGIN@8 1 11 2.97ms3.19ms DateTime::BEGIN@9 11 12.91ms
 4.26ms DateTime::Locale::BEGIN@10 1 11 2.74ms6.58ms DateTime::Locale::
 add_aliases 2424 182.73ms 2.97ms Exporter::import 1 11 2.53ms2.87ms
 Try::Tiny::ScopeGuard::BEGIN@144 11 12.38ms 3.00ms Data::OptList::BEGIN@10

 Does DateTime *really* need to always load all 466 locales on startup?
 Couldn't it load them on 

Re: Must DateTime load all Locales?

2014-08-05 Thread David E. Wheeler
On Aug 5, 2014, at 4:18 PM, Olivier Mengué olivier.men...@gmail.com wrote:

 Here is below the output (latest releases of DateTime, DateTime::Locale, 
 DateTime::TimeZone on perl 5.20.0).
 DateTime::Locale::Catalog is the module that contains all the locales names.
 David, is it that module that you worry about or have you found something 
 worse?

I think the overhead comes in the DateTime::Locale::_register() function, which 
is called once for each locale returned by DateTime::Locale::Catalog. I would 
not think any locales would be loaded until they were needed.

Best,

David


signature.asc
Description: Message signed with OpenPGP using GPGMail