Edit: 'main' as in the one doing the one doing the work, in the same spirit of the original post. In truth, the true main thread that runs in main() is where all the iOS GUI work happens. Apologies for the confusing wording.
https://docs.oracle.com/javase/7/docs/api/java/awt/EventQueu...
A thread? But that'll never scale!
Seriously. One notable Smalltalker sped up the compiler in VisualWorks this way. Yes, there is a compiler in Smalltalk, it just usually only compiles one method at a time, which had a lot to do with why no one noticed that printing notifications to the transcript took up most of the time. So for a bulk code load, turning off the notification sped up "compile time" a whole lot. In fact, the JIT-ed Smalltalk in VisualWorks actually outperformed the C/YACC implemented compiler in a different Smalltalk.
Someone needs to keep track of this stuff. Why do we keep making the same mistakes over the decades? (Insert famous Alan Kay quote here.)
Woah
> This particular app was an Eclipse Plugin
Ah ha ok so it just runs fairly slow now right? :)
installs are literally the #1 thing npm needs to do well, and I really hope we see some improvement soon.
This is the first time I've heard of ied, a little competition could go a long way!
some of the very fundamental designs of npm is seriously wrong.
Here's a side-by-side video: https://youtu.be/odoVfHHBYVM
[0] https://denpa.moe/~syrup/Screen%20Shot%202016-01-26%20at%206...
A good read: "Programmers need to learn statistics or I will kill them all" http://zedshaw.com/archive/programmers-need-to-learn-statist...
https://github.com/npm/npm/issues/10890
I started on a very (I would like to emphasize very a thousand times over) basic proof-of-concept to show how much faster it could be in the order of magnitudes:
https://gist.github.com/nijikokun/2f1f16325f8ffe14b1b3
All this does is build a json of every package you currently have installed, and utilizes that as a lookup store the next time instead of rebuilding it every install; this was targeted towards installing / uninstalling existing packages. Not fresh installs.
Fresh installs would benefit from bulk lookups via the API imo.
Or you know, it's 2016, and it's npm who does it badly.
I did this test on a npm library I wrote, installs some test tools and also has to compile some gyp stuff
2.14.2
progress=false real 0m26.589s user 0m12.086s sys 0m3.362s
progress=true real 0m29.553s user 0m12.455s sys 0m3.486s
3.5.2
progress=false real 0m57.489s user 0m13.298s sys 0m3.421s
progress=true real 1m1.084s user 0m15.690s sys 0m3.644s
While I don't see any significant difference between progress bars or none for 3.x, what is 3.x doing that causes almost 30 seconds more churning?
I believe the reason it is slower is it can't do as much parallelism as npm 2. Also, npm 2 was susceptible to a lot of race conditions and non-determinism, especially with compiled dependencies.
http://blog.ircmaxell.com/2014/12/what-about-garbage.html
(Or more accurately the cycle collector. You can't turn off reference counting.)
Edit, reminds me of this, which is why I'm wondering http://stackoverflow.com/q/21947452/923847
When I write utilities today that do similar things, I only display output when writing and testing the program. Otherwise I'll write to memory then dump the results in a logfile at the end.
In this case since there is probably a less intensive way of providing status updates, and can probably be resolved by doing intermittent checks.
One of the most often underestimated areas of product development, though certainly not among the most important underestimates.
Easy to underestimate its cost and impact. After all, it's just a progress indicator.