rack-devel archive mirror (unofficial) https://groups.google.com/group/rack-devel
 help / color / mirror / Atom feed
* Bloat?
@ 2009-08-13 17:04 Matt Todd
  2009-08-13 17:17 ` Bloat? Yehuda Katz
                   ` (5 more replies)
  0 siblings, 6 replies; 13+ messages in thread
From: Matt Todd @ 2009-08-13 17:04 UTC (permalink / raw)
  To: rack-devel

[-- Attachment #1: Type: text/plain, Size: 635 bytes --]

I was talking to a friend of mine yesterday and he mentioned that thought
the Rack package itself seemed to be slightly bloated by things like Basic
Auth et al. He mentioned two things I thought were interesting and I wanted
to get your feedback on it:

1. Like Merb, Rack probably could benefit from using a core and more
separation of functionality, and
2. Rack core should only include what's necessary for Rack::Lint to validate
a basic application at minimum.

Thoughts?

Matt

-- 
Matt Todd
Highgroove Studios
www.highgroove.com
cell: 404-314-2612
blog: maraby.org

Scout - Web Monitoring and Reporting Software
www.scoutapp.com

[-- Attachment #2: Type: text/html, Size: 885 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Bloat?
  2009-08-13 17:04 Bloat? Matt Todd
@ 2009-08-13 17:17 ` Yehuda Katz
  2009-08-13 17:45 ` Bloat? James Tucker
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Yehuda Katz @ 2009-08-13 17:17 UTC (permalink / raw)
  To: rack-devel

[-- Attachment #1: Type: text/plain, Size: 1747 bytes --]

I think Rack::Request and Rack::Response are convenient, but they need 
to undergo a fairly extensive performance audit if they are to remain in 
rack-core.

You might have seen that I did a bunch of performance work on Rails 3, 
and I got a lot of improvement by moving pieces of Rack::Response down 
into ActionDispatch::Response and rewriting them for performance. For 
instance, if people want a HeaderHash, they should probably have to 
specify that. Right now, there's no way to super to 
Rack::Response#initialize and avoid creating a fairly expensive HeaderHash.

My approach would be that Rack::Response would be extremely simple and 
performant, and that if people wanted to add special functionality to 
it, they should do it themselves (and possibly call super). I'd be happy 
to supply patches if people were interested, but I'm not sure if 
everything could be 100% compatible with the existing Response. Which 
frameworks are using Rack::Response?

-- Yehdua

Matt Todd wrote:
> I was talking to a friend of mine yesterday and he mentioned that 
> thought the Rack package itself seemed to be slightly bloated by 
> things like Basic Auth et al. He mentioned two things I thought were 
> interesting and I wanted to get your feedback on it:
>
> 1. Like Merb, Rack probably could benefit from using a core and more 
> separation of functionality, and
> 2. Rack core should only include what's necessary for Rack::Lint to 
> validate a basic application at minimum.
>
> Thoughts?
>
> Matt
>
> -- 
> Matt Todd
> Highgroove Studios
> www.highgroove.com <http://www.highgroove.com>
> cell: 404-314-2612
> blog: maraby.org <http://maraby.org>
>
> Scout - Web Monitoring and Reporting Software
> www.scoutapp.com <http://www.scoutapp.com>

[-- Attachment #2: Type: text/html, Size: 2318 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Bloat?
  2009-08-13 17:04 Bloat? Matt Todd
  2009-08-13 17:17 ` Bloat? Yehuda Katz
@ 2009-08-13 17:45 ` James Tucker
  2009-08-13 17:49 ` Bloat? Joshua Peek
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: James Tucker @ 2009-08-13 17:45 UTC (permalink / raw)
  To: rack-devel

[-- Attachment #1: Type: text/plain, Size: 3835 bytes --]

raggi@mbk: ~/dev/ext/rack % du -sh lib/
296K	lib/

And...

raggi@mbk: ~/dev/ext/rack % g grep autoload
bin/rackup:autoload :Rack, 'rack'
lib/rack.rb:# All modules meant for use in your application are  
<tt>autoload</tt>ed here,
lib/rack.rb:  autoload :Builder, "rack/builder"
lib/rack.rb:  autoload :Cascade, "rack/cascade"
lib/rack.rb:  autoload :Chunked, "rack/chunked"
lib/rack.rb:  autoload :CommonLogger, "rack/commonlogger"
lib/rack.rb:  autoload :ConditionalGet, "rack/conditionalget"
lib/rack.rb:  autoload :Const, "rack/constants"
lib/rack.rb:  autoload :ContentLength, "rack/content_length"
lib/rack.rb:  autoload :ContentType, "rack/content_type"
lib/rack.rb:  autoload :File, "rack/file"
lib/rack.rb:  autoload :Deflater, "rack/deflater"
lib/rack.rb:  autoload :Directory, "rack/directory"
lib/rack.rb:  autoload :ForwardRequest, "rack/recursive"
lib/rack.rb:  autoload :Handler, "rack/handler"
lib/rack.rb:  autoload :Head, "rack/head"
lib/rack.rb:  autoload :Lint, "rack/lint"
lib/rack.rb:  autoload :Lock, "rack/lock"
lib/rack.rb:  autoload :MethodOverride, "rack/methodoverride"
lib/rack.rb:  autoload :Mime, "rack/mime"
lib/rack.rb:  autoload :Recursive, "rack/recursive"
lib/rack.rb:  autoload :Reloader, "rack/reloader"
lib/rack.rb:  autoload :ShowExceptions, "rack/showexceptions"
lib/rack.rb:  autoload :ShowStatus, "rack/showstatus"
lib/rack.rb:  autoload :Static, "rack/static"
lib/rack.rb:  autoload :URLMap, "rack/urlmap"
lib/rack.rb:  autoload :Utils, "rack/utils"
lib/rack.rb:  autoload :MockRequest, "rack/mock"
lib/rack.rb:  autoload :MockResponse, "rack/mock"
lib/rack.rb:  autoload :Request, "rack/request"
lib/rack.rb:  autoload :Response, "rack/response"
lib/rack.rb:    autoload :Basic, "rack/auth/basic"
lib/rack.rb:    autoload :AbstractRequest, "rack/auth/abstract/request"
lib/rack.rb:    autoload :AbstractHandler, "rack/auth/abstract/handler"
lib/rack.rb:    autoload :OpenID, "rack/auth/openid"
lib/rack.rb:      autoload :MD5, "rack/auth/digest/md5"
lib/rack.rb:      autoload :Nonce, "rack/auth/digest/nonce"
lib/rack.rb:      autoload :Params, "rack/auth/digest/params"
lib/rack.rb:      autoload :Request, "rack/auth/digest/request"
lib/rack.rb:    autoload :Cookie, "rack/session/cookie"
lib/rack.rb:    autoload :Pool, "rack/session/pool"
lib/rack.rb:    autoload :Memcache, "rack/session/memcache"
lib/rack.rb:    autoload :Camping, "rack/adapter/camping"
lib/rack/handler.rb:    autoload :CGI, "rack/handler/cgi"
lib/rack/handler.rb:    autoload :FastCGI, "rack/handler/fastcgi"
lib/rack/handler.rb:    autoload :Mongrel, "rack/handler/mongrel"
lib/rack/handler.rb:    autoload :EventedMongrel, "rack/handler/ 
evented_mongrel"
lib/rack/handler.rb:    autoload :SwiftipliedMongrel, "rack/handler/ 
swiftiplied_mongrel"
lib/rack/handler.rb:    autoload :WEBrick, "rack/handler/webrick"
lib/rack/handler.rb:    autoload :LSWS, "rack/handler/lsws"
lib/rack/handler.rb:    autoload :SCGI, "rack/handler/scgi"
lib/rack/handler.rb:    autoload :Thin, "rack/handler/thin"


I don't think we have a bloat problem. I think you're judging bloat  
the wrong way.


On 13 Aug 2009, at 18:04, Matt Todd wrote:

> I was talking to a friend of mine yesterday and he mentioned that  
> thought the Rack package itself seemed to be slightly bloated by  
> things like Basic Auth et al. He mentioned two things I thought were  
> interesting and I wanted to get your feedback on it:
>
> 1. Like Merb, Rack probably could benefit from using a core and more  
> separation of functionality, and
> 2. Rack core should only include what's necessary for Rack::Lint to  
> validate a basic application at minimum.
>
> Thoughts?
>
> Matt
>
> -- 
> Matt Todd
> Highgroove Studios
> www.highgroove.com
> cell: 404-314-2612
> blog: maraby.org
>
> Scout - Web Monitoring and Reporting Software
> www.scoutapp.com


[-- Attachment #2: Type: text/html, Size: 5344 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Bloat?
  2009-08-13 17:04 Bloat? Matt Todd
  2009-08-13 17:17 ` Bloat? Yehuda Katz
  2009-08-13 17:45 ` Bloat? James Tucker
@ 2009-08-13 17:49 ` Joshua Peek
  2009-08-13 17:50   ` Bloat? James Tucker
  2009-08-13 20:20   ` Bloat? Christian Neukirchen
  2009-08-13 17:49 ` Bloat? James Tucker
                   ` (2 subsequent siblings)
  5 siblings, 2 replies; 13+ messages in thread
From: Joshua Peek @ 2009-08-13 17:49 UTC (permalink / raw)
  To: rack-devel


Here are a few candidates I'd like to see moved into rack-contrib.

Adapter::Camping
Auth::OpenID
ContentType
Recursive
Session::Memcache

On Thu, Aug 13, 2009 at 12:04 PM, Matt Todd<chiology@gmail.com> wrote:
> I was talking to a friend of mine yesterday and he mentioned that thought
> the Rack package itself seemed to be slightly bloated by things like Basic
> Auth et al. He mentioned two things I thought were interesting and I wanted
> to get your feedback on it:
> 1. Like Merb, Rack probably could benefit from using a core and more
> separation of functionality, and
> 2. Rack core should only include what's necessary for Rack::Lint to validate
> a basic application at minimum.
> Thoughts?
> Matt
> --
> Matt Todd
> Highgroove Studios
> www.highgroove.com
> cell: 404-314-2612
> blog: maraby.org
>
> Scout - Web Monitoring and Reporting Software
> www.scoutapp.com
>



-- 
Joshua Peek

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Bloat?
  2009-08-13 17:04 Bloat? Matt Todd
                   ` (2 preceding siblings ...)
  2009-08-13 17:49 ` Bloat? Joshua Peek
@ 2009-08-13 17:49 ` James Tucker
  2009-08-13 19:01 ` Bloat? Ryan Tomayko
  2009-08-15  3:30 ` Bloat? Kyle Drake
  5 siblings, 0 replies; 13+ messages in thread
From: James Tucker @ 2009-08-13 17:49 UTC (permalink / raw)
  To: rack-devel

[-- Attachment #1: Type: text/plain, Size: 1480 bytes --]


On 13 Aug 2009, at 18:04, Matt Todd wrote:

> I was talking to a friend of mine yesterday and he mentioned that  
> thought the Rack package itself seemed to be slightly bloated by  
> things like Basic Auth et al. He mentioned two things I thought were  
> interesting and I wanted to get your feedback on it:
>
> 1. Like Merb, Rack probably could benefit from using a core and more  
> separation of functionality, and

On this point, I have massive trouble agreeing. In recent months, the  
disparity of supported versions of thin/rack/sinatra has been a big  
problem for some folks (integrity mainly). Splitting up into a crazy  
number of gems causes a lot of management overhead and sysadmin /  
deployment crap that I almost never see done right. The only good  
solution is the recently released bundler system by wycats, halogrium  
and carllerche. Requiring something like that to "get by" is far far  
far worse in my opinion.

We're not as fat as you might think, because stuff you don't touch is  
never loaded. Do you have a genuine use case to drop 100K or so out of  
core, by adding ~500K (or more) to deployment overhead of *each*  
composite part?

> 2. Rack core should only include what's necessary for Rack::Lint to  
> validate a basic application at minimum.
>
> Thoughts?
>
> Matt
>
> -- 
> Matt Todd
> Highgroove Studios
> www.highgroove.com
> cell: 404-314-2612
> blog: maraby.org
>
> Scout - Web Monitoring and Reporting Software
> www.scoutapp.com


[-- Attachment #2: Type: text/html, Size: 1956 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Bloat?
  2009-08-13 17:49 ` Bloat? Joshua Peek
@ 2009-08-13 17:50   ` James Tucker
  2009-08-13 17:55     ` Bloat? Adrian Madrid
  2009-08-13 20:20   ` Bloat? Christian Neukirchen
  1 sibling, 1 reply; 13+ messages in thread
From: James Tucker @ 2009-08-13 17:50 UTC (permalink / raw)
  To: rack-devel



On 13 Aug 2009, at 18:49, Joshua Peek wrote:

>
> Here are a few candidates I'd like to see moved into rack-contrib.
>
> Adapter::Camping
> Auth::OpenID
> ContentType
> Recursive
> Session::Memcache

Whilst I sort of agree, doesn't this just shift the bloat problem  
somewhere else?

>
> On Thu, Aug 13, 2009 at 12:04 PM, Matt Todd<chiology@gmail.com> wrote:
>> I was talking to a friend of mine yesterday and he mentioned that  
>> thought
>> the Rack package itself seemed to be slightly bloated by things  
>> like Basic
>> Auth et al. He mentioned two things I thought were interesting and  
>> I wanted
>> to get your feedback on it:
>> 1. Like Merb, Rack probably could benefit from using a core and more
>> separation of functionality, and
>> 2. Rack core should only include what's necessary for Rack::Lint to  
>> validate
>> a basic application at minimum.
>> Thoughts?
>> Matt
>> --
>> Matt Todd
>> Highgroove Studios
>> www.highgroove.com
>> cell: 404-314-2612
>> blog: maraby.org
>>
>> Scout - Web Monitoring and Reporting Software
>> www.scoutapp.com
>>
>
>
>
> -- 
> Joshua Peek

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Bloat?
  2009-08-13 17:50   ` Bloat? James Tucker
@ 2009-08-13 17:55     ` Adrian Madrid
  2009-08-13 18:54       ` Bloat? James Tucker
  0 siblings, 1 reply; 13+ messages in thread
From: Adrian Madrid @ 2009-08-13 17:55 UTC (permalink / raw)
  To: rack-devel

[-- Attachment #1: Type: text/plain, Size: 1522 bytes --]

I don't think that rack is bloated considering the bloat is only
self-inflicted (autoload as mentioned) but Yahuda brings another point:
performance. I would love to have response more performant for everyone to
use.

Adrian Madrid
My eBiz, Developer
3082 W. Maple Loop Dr
Lehi, UT 84043
801-341-3824


On Thu, Aug 13, 2009 at 11:50, James Tucker <jftucker@gmail.com> wrote:

>
>
> On 13 Aug 2009, at 18:49, Joshua Peek wrote:
>
>
>> Here are a few candidates I'd like to see moved into rack-contrib.
>>
>> Adapter::Camping
>> Auth::OpenID
>> ContentType
>> Recursive
>> Session::Memcache
>>
>
> Whilst I sort of agree, doesn't this just shift the bloat problem somewhere
> else?
>
>
>
>> On Thu, Aug 13, 2009 at 12:04 PM, Matt Todd<chiology@gmail.com> wrote:
>>
>>> I was talking to a friend of mine yesterday and he mentioned that thought
>>> the Rack package itself seemed to be slightly bloated by things like
>>> Basic
>>> Auth et al. He mentioned two things I thought were interesting and I
>>> wanted
>>> to get your feedback on it:
>>> 1. Like Merb, Rack probably could benefit from using a core and more
>>> separation of functionality, and
>>> 2. Rack core should only include what's necessary for Rack::Lint to
>>> validate
>>> a basic application at minimum.
>>> Thoughts?
>>> Matt
>>> --
>>> Matt Todd
>>> Highgroove Studios
>>> www.highgroove.com
>>> cell: 404-314-2612
>>> blog: maraby.org
>>>
>>> Scout - Web Monitoring and Reporting Software
>>> www.scoutapp.com
>>>
>>>
>>
>>
>> --
>> Joshua Peek
>>
>
>

[-- Attachment #2: Type: text/html, Size: 2537 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Bloat?
  2009-08-13 17:55     ` Bloat? Adrian Madrid
@ 2009-08-13 18:54       ` James Tucker
  0 siblings, 0 replies; 13+ messages in thread
From: James Tucker @ 2009-08-13 18:54 UTC (permalink / raw)
  To: rack-devel

[-- Attachment #1: Type: text/plain, Size: 1659 bytes --]


On 13 Aug 2009, at 18:55, Adrian Madrid wrote:

> I don't think that rack is bloated considering the bloat is only  
> self-inflicted (autoload as mentioned) but Yahuda brings another  
> point: performance. I would love to have response more performant  
> for everyone to use.

As long as it's profiled off of real style applications, and profile  
guided, sure, that would be lovely.

>
>
> Adrian Madrid
> My eBiz, Developer
> 3082 W. Maple Loop Dr
> Lehi, UT 84043
> 801-341-3824
>
>
> On Thu, Aug 13, 2009 at 11:50, James Tucker <jftucker@gmail.com>  
> wrote:
>
>
> On 13 Aug 2009, at 18:49, Joshua Peek wrote:
>
>
> Here are a few candidates I'd like to see moved into rack-contrib.
>
> Adapter::Camping
> Auth::OpenID
> ContentType
> Recursive
> Session::Memcache
>
> Whilst I sort of agree, doesn't this just shift the bloat problem  
> somewhere else?
>
>
>
> On Thu, Aug 13, 2009 at 12:04 PM, Matt Todd<chiology@gmail.com> wrote:
> I was talking to a friend of mine yesterday and he mentioned that  
> thought
> the Rack package itself seemed to be slightly bloated by things like  
> Basic
> Auth et al. He mentioned two things I thought were interesting and I  
> wanted
> to get your feedback on it:
> 1. Like Merb, Rack probably could benefit from using a core and more
> separation of functionality, and
> 2. Rack core should only include what's necessary for Rack::Lint to  
> validate
> a basic application at minimum.
> Thoughts?
> Matt
> --
> Matt Todd
> Highgroove Studios
> www.highgroove.com
> cell: 404-314-2612
> blog: maraby.org
>
> Scout - Web Monitoring and Reporting Software
> www.scoutapp.com
>
>
>
>
> -- 
> Joshua Peek
>
>


[-- Attachment #2: Type: text/html, Size: 2927 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Bloat?
  2009-08-13 17:04 Bloat? Matt Todd
                   ` (3 preceding siblings ...)
  2009-08-13 17:49 ` Bloat? James Tucker
@ 2009-08-13 19:01 ` Ryan Tomayko
  2009-08-13 19:19   ` Bloat? Matt Todd
  2009-08-15  3:30 ` Bloat? Kyle Drake
  5 siblings, 1 reply; 13+ messages in thread
From: Ryan Tomayko @ 2009-08-13 19:01 UTC (permalink / raw)
  To: rack-devel


On Thu, Aug 13, 2009 at 10:04 AM, Matt Todd<chiology@gmail.com> wrote:
> I was talking to a friend of mine yesterday and he mentioned that thought
> the Rack package itself seemed to be slightly bloated by things like Basic
> Auth et al. He mentioned two things I thought were interesting and I wanted
> to get your feedback on it:
>
> 1. Like Merb, Rack probably could benefit from using a core and more
> separation of functionality, and

Matt, that's just crazy talk.

> 2. Rack core should only include what's necessary for Rack::Lint to validate
> a basic application at minimum.

You actually don't need Rack the library to write Rack apps. The Rack
SPEC uses only core Ruby data structures to define the basic protocol.
Rack would include only Rack::Lint at that point.

Thanks,
Ryan

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Bloat?
  2009-08-13 19:01 ` Bloat? Ryan Tomayko
@ 2009-08-13 19:19   ` Matt Todd
  2009-08-13 22:26     ` Bloat? James Tucker
  0 siblings, 1 reply; 13+ messages in thread
From: Matt Todd @ 2009-08-13 19:19 UTC (permalink / raw)
  To: rack-devel

[-- Attachment #1: Type: text/plain, Size: 2481 bytes --]

Great feedback!
1. Lot of disagreement here, and lots of valid points. To clarify, the point
wasn't runtime bloat (which is not a problem with Rack) but with the overall
package bloat. I tend to agree that runtime bloat is much more severe than
package bloat, and that Rack is hardly bloated even considering.

The question needs to be asked, though... are there things in Rack's library
that could be better elsewhere? I mention rack-more, and many don't like
this, which is fine. I think of rack-contrib to be much like rack-more
already, and like that some things are there instead of in Rack's core
library.

2. The point of this was to elaborate on the question "are there things in
Rack's library that could be better elsewhere?" by starting with the
minimum. Rack::Lint is, as Ryan points at, the wrong starting point because
we still want to support middleware and all of the server handlers and
framework adapters as well as Rack::Request and Rack::Response.

I think Yehuda understood this with his recommendations on improvements to
these last two. What else can we minimize and defer to the implementers
using Rack instead of doing it ourselves?

Should Rack concern itself with much more than a minimal implementation
covering these handlers, adapters, request/response interfaces, and
middleware functionality?

No dictating or anything quite so grave here, just raising the discussion.

Cheers!

Matt



On Thu, Aug 13, 2009 at 3:01 PM, Ryan Tomayko <r@tomayko.com> wrote:

>
> On Thu, Aug 13, 2009 at 10:04 AM, Matt Todd<chiology@gmail.com> wrote:
> > I was talking to a friend of mine yesterday and he mentioned that thought
> > the Rack package itself seemed to be slightly bloated by things like
> Basic
> > Auth et al. He mentioned two things I thought were interesting and I
> wanted
> > to get your feedback on it:
> >
> > 1. Like Merb, Rack probably could benefit from using a core and more
> > separation of functionality, and
>
> Matt, that's just crazy talk.
>
> > 2. Rack core should only include what's necessary for Rack::Lint to
> validate
> > a basic application at minimum.
>
> You actually don't need Rack the library to write Rack apps. The Rack
> SPEC uses only core Ruby data structures to define the basic protocol.
> Rack would include only Rack::Lint at that point.
>
> Thanks,
> Ryan
>



-- 
Matt Todd
Highgroove Studios
www.highgroove.com
cell: 404-314-2612
blog: maraby.org

Scout - Web Monitoring and Reporting Software
www.scoutapp.com

[-- Attachment #2: Type: text/html, Size: 3366 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Bloat?
  2009-08-13 17:49 ` Bloat? Joshua Peek
  2009-08-13 17:50   ` Bloat? James Tucker
@ 2009-08-13 20:20   ` Christian Neukirchen
  1 sibling, 0 replies; 13+ messages in thread
From: Christian Neukirchen @ 2009-08-13 20:20 UTC (permalink / raw)
  To: rack-devel

Joshua Peek <josh@joshpeek.com> writes:

> Here are a few candidates I'd like to see moved into rack-contrib.
>
> Adapter::Camping

This one is gone when Camping 2.0 is released anyway.

> Auth::OpenID
> Session::Memcache

Alright.

> ContentType
> Recursive

These are so small and general purpose that I'd rather keep them in core.

-- 
Christian Neukirchen  <chneukirchen@gmail.com>  http://chneukirchen.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Bloat?
  2009-08-13 19:19   ` Bloat? Matt Todd
@ 2009-08-13 22:26     ` James Tucker
  0 siblings, 0 replies; 13+ messages in thread
From: James Tucker @ 2009-08-13 22:26 UTC (permalink / raw)
  To: rack-devel



On 13 Aug 2009, at 20:19, Matt Todd wrote:

> Great feedback!
>
> 1. Lot of disagreement here, and lots of valid points. To clarify,  
> the point wasn't runtime bloat (which is not a problem with Rack)  
> but with the overall package bloat. I tend to agree that runtime  
> bloat is much more severe than package bloat, and that Rack is  
> hardly bloated even considering.
>
> The question needs to be asked, though... are there things in Rack's  
> library that could be better elsewhere? I mention rack-more, and  
> many don't like this, which is fine. I think of rack-contrib to be  
> much like rack-more already, and like that some things are there  
> instead of in Rack's core library.

Certainly, and I think the key question is usage frequency. The  
important consideration is that running two gems is significantly more  
overhead than a single gem. The observation is that if the most common  
use case after such changes involves running two or more gems, then  
the changes have introduced storage, packaging, maintenance, and  
runtime bloat. Loading gems (on 1.8) is not at all 'bloat free', in  
fact, if you check, you'll find that the gemspec details when loaded,  
live for quite an extended period of time in the application boot and  
run cycle. I wrote about this back in 2007, and to date, it has not  
changed (for 1.8). On 1.9 the gem_prelude shim can aid the situation,  
however, when there are gems in the system that use file discovery  
plugin loads, then all these gains are lost, too.

> 2. The point of this was to elaborate on the question "are there  
> things in Rack's library that could be better elsewhere?" by  
> starting with the minimum. Rack::Lint is, as Ryan points at, the  
> wrong starting point because we still want to support middleware and  
> all of the server handlers and framework adapters as well as  
> Rack::Request and Rack::Response.
>
> I think Yehuda understood this with his recommendations on  
> improvements to these last two. What else can we minimize and defer  
> to the implementers using Rack instead of doing it ourselves?

I agree, however, as I've otherwise said, it's also important to  
consider real world profiles for such improvements. If the real  
improvements are minor, but the change in complexity is high, then  
time might be better spent donating to the core language than to micro- 
optimising frameworks that are currently very simple and easy to  
understand and maintain.

> Should Rack concern itself with much more than a minimal  
> implementation covering these handlers, adapters, request/response  
> interfaces, and middleware functionality?

I can only re-iterate the common use case statement, and I won't claim  
to know what that is, but I will make keen the observation that "most  
users" don't tend to be signed up to every mailinglist, so polling for  
such information may be difficult - this aspect may require further  
thought and discussion.

> No dictating or anything quite so grave here, just raising the  
> discussion.

Absolutely, discussion is worthwhile.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Bloat?
  2009-08-13 17:04 Bloat? Matt Todd
                   ` (4 preceding siblings ...)
  2009-08-13 19:01 ` Bloat? Ryan Tomayko
@ 2009-08-15  3:30 ` Kyle Drake
  5 siblings, 0 replies; 13+ messages in thread
From: Kyle Drake @ 2009-08-15  3:30 UTC (permalink / raw)
  To: rack-devel


I like having a rich set of rack components available, and I think
splitting it up would just make it harder for newcomers to use Rack
because they would have to dig around for the parts needed to make it
useful. If these files all got loaded on runtime I would agree with
you, but as long as they aren't all used by default I'm content with
keeping all the components in one gem install. One of my favorite
things about Rack was getting a ton of cool toys to play with out of
the box, it's one of the principal things that really sold me on it.

-Kyle

On Thu, Aug 13, 2009 at 10:04 AM, Matt Todd<chiology@gmail.com> wrote:
> I was talking to a friend of mine yesterday and he mentioned that thought
> the Rack package itself seemed to be slightly bloated by things like Basic
> Auth et al. He mentioned two things I thought were interesting and I wanted
> to get your feedback on it:
> 1. Like Merb, Rack probably could benefit from using a core and more
> separation of functionality, and
> 2. Rack core should only include what's necessary for Rack::Lint to validate
> a basic application at minimum.
> Thoughts?
> Matt
> --
> Matt Todd
> Highgroove Studios
> www.highgroove.com
> cell: 404-314-2612
> blog: maraby.org
>
> Scout - Web Monitoring and Reporting Software
> www.scoutapp.com
>

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2009-08-15  3:30 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-08-13 17:04 Bloat? Matt Todd
2009-08-13 17:17 ` Bloat? Yehuda Katz
2009-08-13 17:45 ` Bloat? James Tucker
2009-08-13 17:49 ` Bloat? Joshua Peek
2009-08-13 17:50   ` Bloat? James Tucker
2009-08-13 17:55     ` Bloat? Adrian Madrid
2009-08-13 18:54       ` Bloat? James Tucker
2009-08-13 20:20   ` Bloat? Christian Neukirchen
2009-08-13 17:49 ` Bloat? James Tucker
2009-08-13 19:01 ` Bloat? Ryan Tomayko
2009-08-13 19:19   ` Bloat? Matt Todd
2009-08-13 22:26     ` Bloat? James Tucker
2009-08-15  3:30 ` Bloat? Kyle Drake

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).