This is how we Roll

T

transfire

Hi--

I've decide to go ahead and announce Roll(s) today. Even though the
code still needs fine-tuning and the docs aren't completely up to
date, I've been using it productively for the last few weeks. So I
figure it's probably a good time being the end of RubyConf --it will
give the lucky attendees something interesting to come home to.

Note, the project is called "Roll", but that doesn't always sound
right in a sentence, so I call it 'Rolls' too, whenever that fits
better.

Okay. So what is it? Roll is a library manager. What it does is
provide an OOP interface to Ruby libs/apps. So you can do things like
this:

facets = library('facets')
facets.version #=> "2.0.4"
facets.require 'functor'

You can also specify versions:

facets = library('facets', "= 2.0.3")
facets.version #=> "2.0.3"
facets.require 'functor'

Of course, in common use, you probably would just do:

require 'facets:functor'

And for backward/non-roll compatibility (though lookup is less
efficient):

require 'facets/functor'

That's really the main of the code side of Roll. Pretty simple. It's
really just the loading of libs you're used to with some enhancements,
like versioning and prevention of file name clashing (with Rolls there
is always a way to get to a file).

The big advantage of Rolls plays out on the file system. Rolls can use
your development repositories as-is. There is no need to go through an
installation phase every time you make a change to you lib/app. This
can save a developer a lot of time. It also means that Ruby software
can be "installed" just by dropping a copy of a repository into a
location Rolls knows about --no need to create a specialized package.
For instance just doing an 'svn co', will effectively "install" a
project that's "ready-to-roll".

An important thing to understand is that Roll is not a package
manager. It does not download packages, resolved dependencies and
install them. Rolls is _library manager_ which is _package format
neutral_. It can work with any of them. However, it also largely
mitigates the need for specialized package formats --at least as far
as Ruby libs go, b/c a snapshot of a developers repo (minus anything
you don't want to distribute of course) would do just as well. As
such, it represents the first important piece in my overall strategy
for creating a near "zero-install" system for Ruby.

Alright, that's the super brief explanation. Like I said, there's
still work to do -- such as Windows bin/ support, and how best to
handle libs with c extensions. But it's coming along nicely. Anyone
who is interested in helping, just drop me a line.

http://roll.rubyforge.org

T.
 
G

gilesb

Note, the project is called "Roll", but that doesn't always sound
right in a sentence, so I call it 'Rolls' too, whenever that fits
better.

Just a note - the Rails team was kind of surprised to discover that
"rails" was drug slang for lines of cocaine. Rolls is also drug slang,
at least on the East Coast, for Ecstasy.

Obviously this whole R, L, S combination is cursed in terms of open
source project names that turn out to be accidental drug references.
That's why I'm doing away with that entire set of phonemes for my
naming scheme, and releasing a project called Acid instead. No R, no
L, no S. I'm good.

--
Giles Bowkett

Blog: http://gilesbowkett.blogspot.com
Portfolio: http://www.gilesgoatboy.org
Tumblelog: http://giles.tumblr.com/
 
Z

znmeb

Giles said:
Just a note - the Rails team was kind of surprised to discover that
"rails" was drug slang for lines of cocaine. Rolls is also drug slang,
at least on the East Coast, for Ecstasy.

Obviously this whole R, L, S combination is cursed in terms of open
source project names that turn out to be accidental drug references.
That's why I'm doing away with that entire set of phonemes for my
naming scheme, and releasing a project called Acid instead. No R, no
L, no S. I'm good.
Sometimes I just want to smack people ... how do we weed out that sort
of thing? Maybe I'm just a crank.

<ducking>
 
G

gilesb

R

robert.dober

Sometimes I just want to smack people ... how do we weed out that sort
of thing? Maybe I'm just a crank.

<ducking>
I believe "Roll" is a goof name for a project that "Rocks", well I
have not checked it out yet ;)

R.
 
R

robert.dober

I believe "Roll" is a goof name for a project that "Rocks", well I
have not checked it out yet ;)
WHY did they put the "f" right next to the "d" ????


G O O D name that was of course
Sorry Tom.
R.
 
B

barryahanna

Note: parts of this message were removed by the gateway to make it a legal Usenet post.

unsubscribe
 
T

transfire

Just a note - the Rails team was kind of surprised to discover that
"rails" was drug slang for lines of cocaine. Rolls is also drug slang,
at least on the East Coast, for Ecstasy.

Obviously this whole R, L, S combination is cursed in terms of open
source project names that turn out to be accidental drug references.
That's why I'm doing away with that entire set of phonemes for my
naming scheme, and releasing a project called Acid instead. No R, no
L, no S. I'm good.

Hmm... maybe I have a subconscious tendency I was unaware of...

http://blow.rubyforge.org

;)

Anyhow. I realize it's Sunday, and a lot of you are candy flipping
tonight, but I'd prefer to get the conversation back. Hey, no worries,
but if you don't mind...

Something I wanted to demonstrate that I forgot to put in my original
post:

irb(main):001:0> Library.list
=> ["box", "nitro", "roll", "icli", "mint", "og", "glue",
"tmail", "english", "webrite", "blow", "xact", "raw",
"ruby", "ratch", "facets"]

T.
 
V

vjoel

Trans said:
irb(main):001:0> Library.list
=> ["box", "nitro", "roll", "icli", "mint", "og", "glue",
"tmail", "english", "webrite", "blow", "xact", "raw",
"ruby", "ratch", "facets"]

Any reason this returns a list of strings, and not of library objects?
 
T

transfire

Trans said:
irb(main):001:0> Library.list
=> ["box", "nitro", "roll", "icli", "mint", "og", "glue",
"tmail", "english", "webrite", "blow", "xact", "raw",
"ruby", "ratch", "facets"]

Any reason this returns a list of strings, and not of library objects?

Very much so. Rolls doesn't bother to objectify a library until you
request it as such. This helps reduce the memory footprint, and boost
performance.

T.
 
M

mortee.lists

Trans said:
As
such, it represents the first important piece in my overall strategy
for creating a near "zero-install" system for Ruby.

The whole thing sounds great! Are the further planned steps secret?

mortee
 
T

transfire

Quoth Joel VanderWerf:
Trans wrote:
irb(main):001:0> Library.list
=> ["box", "nitro", "roll", "icli", "mint", "og", "glue",
"tmail", "english", "webrite", "blow", "xact", "raw",
"ruby", "ratch", "facets"]
Any reason this returns a list of strings, and not of library objects?

Maybe Library#inspect just returns a string of the name? :D

Nah. list is a class method. inspect is an instance method.

irb(main):002:0> library('facets').inspect
=> "#<Library facets/2.0.4>"

T.
 
T

transfire

Quoth Trans:




Quoth Joel VanderWerf:
Trans wrote:
irb(main):001:0> Library.list
=> ["box", "nitro", "roll", "icli", "mint", "og", "glue",
"tmail", "english", "webrite", "blow", "xact", "raw",
"ruby", "ratch", "facets"]
Any reason this returns a list of strings, and not of library objects?
Nah. list is a class method. inspect is an instance method.
irb(main):002:0> library('facets').inspect
=> "#<Library facets/2.0.4>"

Yes, I'm aware of that. I was saying maybe Library.list (class method) which
seems to return an array of strings in irb is actually returning an array of
Library instances, which each get rendered to a string by their respective
#inspect instance methods.

Oh, right. I see what you were saying. Not the case though.

It's late. I need to sleep.

T.
 
T

transfire

The whole thing sounds great! Are the further planned steps secret?

No secrets. But the time line is completely open at this point.

The main thing is remote requiring. I've already implemented some
working prototypes of this. I just need to give some consideration to
how it would work best in Rolls, tie it into the system, and add
signature support. The basic idea here is that you can require a file
which maps to a remote location, if it's not available locally it will
automatically go out and get it and cache/install it for subsequent
use. Hence zero-install.

Also, there is the potential for a traditional, but feather weight,
package manager to better compliment Rolls that can utilize
repositories directly rather than prepared packages. Though, this
isn't really urgent since Rolls can actually piggy back on RubyGems in
the mean time.

T.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top