Ruby 1.8.0 Released 97
waieitch writes "A long-waited new version of the scripting language, Ruby 1.8.0 has just been released. You can download from here, and the changelog is available. With many new libraries, say dRuby, ERB, REXML, this version is doubled by 1.6.8 in size."
Best. Clause. Evar. (Score:5, Funny)
No more text.
Re:Best. Clause. Evar. (Score:2, Informative)
Re:Best. Clause. Evar. (Score:2)
Re:Best. Clause. Evar. (Score:1)
Re:math (Score:2)
Re:Hmmm... (Score:4, Informative)
Former perl, python, java geek gone to Ruby (Score:5, Interesting)
This language is definitely worth a look. It's not just a python knock-off, as many have supposed -- it offers features python doesn't.
Re:Former perl, python, java geek gone to Ruby (Score:2)
I looked at Ruby a year or so ago and determined that it had the same
conceptual structure as Python, but the cryptic syntax of perl. Perhaps
my evaulation was too simplistic.
Re:Former perl, python, java geek gone to Ruby (Score:5, Interesting)
it had the same conceptual structure as Python, but the cryptic syntax of perl
I'm not sure what language you looked at, but it doesn't sound like ruby.
Re:Former perl, python, java geek gone to Ruby (Score:2)
Mind you, I don't have any problem with alternative ways to write stuff, or with shortcuts. I
Re:Former perl, python, java geek gone to Ruby (Score:4, Insightful)
Agreed. I'm not saying ruby is perfect, just that I like it slightly more than python and a lot more than perl. Its syntax isn't as clean as, say postscript, smalltalk, or scheme, but it's much better than bash, c++ or vb. Maybe somewhere around common lisp?
My biggest gripes:
Re:Former perl, python, java geek gone to Ruby (Score:3, Informative)
Why do you feel they are ugly? Ok, they are not real functions like scheme has them, but Ruby wants to be an object oriented language, so it's ok that they are (can be transformed to) objects. Ruby is just consistent in not having any functions but only methods, so you have to use Proc#call(x) or Proc#[x] to call a procedure with arguments.
They are real lexical closures, too, which wasn't mentioned in any thread before:
def m
Re:Former perl, python, java geek gone to Ruby (Score:5, Insightful)
> * Blocks are litteraly a bag hung on the side. Needlessly ugly and limiting.
Why do you feel they are ugly? Ok, they are not real functions like scheme has them, but Ruby wants to be an object oriented language, so it's ok that they are (can be transformed to) objects.
I don't object to blocks being objects; I object to them being arbitrarily forced into a special-syntax-optional-singleton-parameter gheto. Why can't I define a method that takes two or more blocks (e.g. if/then/else) with the same syntax I use for methods that take a single block? Why can't I introspect the structure of a block? Why the duality with Proc objects? In short, why aren't blocks first class objects?
>* The typographic hungarian notation ($ for globals, capitals for constants, etc)
Hungarian notation encodes the type of a variable into the variable name. In Ruby the sigils are used to show the scope of the variables.
Hungarian notation (as the term is generaly used) encodes metadata into the variable name. Type, class, scope, storage class, etc. are all metadata. None of them should be duct-taped on to variable names (IMHO) because it obscures the intent of the code with a clutter of details about the means.
You can see at one glance that @@foo is class variable, @bar is an instance variable and $baz is a global variable. I found this to be very useful while refactoring code.
Sure, and I can imagine cases where it would be handy to have a language require that every variable reference includes a comma seperated list of the line numbers of each reaching assignment. It sure would make it easy to spot uninitialized variables, for example. But in general, it would make the code harder to read and maintain.
More to the point, in ruby I'd like to be able to change the scope or storage class of an object reference without having to rename it.
-- MarkusQ
Re:Former perl, python, java geek gone to Ruby (Score:5, Informative)
Why can't I define a method that takes two or more blocks (e.g. if/then/else) with the same syntax I use for methods that take a single block? Why can't I introspect the structure of a block? Why the duality with Proc objects? In short, why aren't blocks first class objects?
To clarify this first: It's always possible to create multiple Proc objects with Proc.new, lambda or proc and pass them to a method.
There are two reasons why there are blocks AND Proc objects:
It would perhaps be possible to have something like that:
But there is an ambiguity because the first block could also be a hash constructor. I am not sure if it would be possible to solve that problem by changing the parser. You could limit yourself to use only doBTW: The if/then/else is not a method call and the selectors consist only of a single word in Ruby unlike in Smalltalk. So it would require a big change to the language and the interpreter if blocks should be used there.
Introspection of blocks is a good idea. Perhaps this will be possible if the new VM for Ruby 2.0, called Rite, is implemented. AFAIK it also should be possible to change code in the parse tree on the fly at arbitrary places then.
More to the point, in ruby I'd like to be able to change the scope or storage class of an object reference without having to rename it.
This is clearly a tradeoff. You can choose between having to look up the variables everytime you want to know their scope or between seeing it easily and change every variable if you want to extract a method. I think to choose the latter is a good choice for a language where you don't usually program in a code browser.
Re:Former perl, python, java geek gone to Ruby (Score:2)
Mostly agree, so just responding to selected points:
To use a block it's not necessary to create an object and that's good for the performance, e. g. if you have to iterate very often over some collection.
I suspect that an iterator could reuse the same block without breaking the semantics, but in any case I'm not strongly motivated by perfomance in this context.
But there is an ambiguity because the first block could also be a hash constructor. I am not sure if it would be possible to solve that proble
Re:Former perl, python, java geek gone to Ruby (Score:1)
I'm not sure: a Proc object is a closure and some memory most be allocated for the environment. In a block it's easy because the environment is always the current environment.
Easy. Hashes have "=>"; blocks don't. :)
Not necasserily, {:a,1,:b,2} is also possible and blocks and hashes could also include hashes. One has really to look into the pa
Re:Former perl, python, java geek gone to Ruby (Score:2)
I suspect that an iterator could reuse the same block without breaking the semantics,...
I'm not sure: a Proc object is a closure and some memory most be allocated for the environment. In a block it's easy because the environment is always the current environment.
Hmm. I would think (hope?) that it would be possible to make a Proc which "shared" the current environment in a way that was semantically equivalent to a block. But I haven't looked into it.
Easy. Hashes have "=>"; blocks don't. :)
Not n
Re:Former perl, python, java geek gone to Ruby (Score:2)
I think the idea of blocks is wonderful, but the syntax and special handling of blocks is ugly. Since a block can be converted to a Proc, why not just make { |args| body } be a literal for a Proc object, which would have no special meaning or limits in an argument list.
Re:Former perl, python, java geek gone to Ruby (Score:2)
Yes! That would solve 95% of my objections (and I'm fighting the urge to bring up the source to see how hard it would be). { ||
-- MarkusQ
Re:Former perl, python, java geek gone to Ruby (Score:4, Interesting)
method_call
Along the same line, you could just as easily say that C++'s basic syntax is:
method_call
and perl's:
method_call
So C++ and Perl must be languages with simple, elegant and clean syntax, right? The method call syntax doesn't mean a thing. (well, if the language was particularily ugly it would- like some OO Cobol implementations)
Ruby has substantially less syntax than Perl and C++, that much is true and pretty commonly known. However, IMHO, Ruby has a bit much syntax, compared to languages like Smalltalk or Scheme. Smalltalk is a language which manages to be expressive, but without the amount of syntax that Ruby has.
Re:Former perl, python, java geek gone to Ruby (Score:1)
Yes, but it has *loads* less parentheses than scheme. :)
Jacob Fugal
Re:Former perl, python, java geek gone to Ruby (Score:4, Insightful)
Yes, but it has *loads* less parentheses than scheme.
If they bother you too much, try writing a little pre-processor (you can do it in about 20 lines of lex/yacc or so) that takes code with sailent structure (python style indentation) and spits it out with the parens?
-- MarkusQ
Re:Former perl, python, java geek gone to Ruby (Score:2)
Also, in the case you anti-parensers don't actually have any experience programming (which is often the case), you can get pre-made packages for a number of Scheme and other Lisp implementations which allow you to use C- or Python-like syntax. There is one for KSM [umin.ac.jp], [redhog.org], and python/haskell/C syntaxes for Scheme [accesscom.com], among others.
Re:Former perl, python, java geek gone to Ruby (Score:3, Interesting)
Initially. Once macros came around, there was nothing like it in programming-land, and when you notice how many program structures you can implement with macros, there's still nothing quite like it, except perhaps for stuff like OpenC++ and camlp4, both of which have their *own* nasty syntax that doesn't look like anything else... Sexps became a feature very early on.
Re:Former perl, python, java geek gone to Ruby (Score:4, Insightful)
*laugh*
I should have read your post before responding to __past__; I could have mostly said "see RevAaron's comment."
The main point on which I disagree with you is that method calls are actually a small part of C++ & perl syntax. Control structures, expressions, etc. are all distinct (and ad hoc), because the types they opperate on (booleans, integers, etc.) are not objects. Conversely, in ruby everything is an object, and (if you want to) you can skip the sugar and write code that only passes messages to objects. This isn't as obvious as it is in (say) smalltalk, but it's at least true in ruby, whereas it's not in c++ or perl.
-- MarkusQ
P.S. I just thought of two even better examples of (syntactically) clean languages: both forth and prolog have very clean basic syntax.
Re:Former perl, python, java geek gone to Ruby (Score:2)
Indeed- many other languages have tons of syntax past message sending. Incidentally, the syntax I think isn't needed in Ruby doesn't have much to do directly with message sending/method invocation.
Forth and Prolog are two other good examples. I should start using those instead of mentioning Scheme or Lisp. Lisp is a very clean and elegant language, but too many people just make a bad joke about parens being too confusing. Now there's a language pretty much all of the syntax can be summarized in:
funct
Re:Former perl, python, java geek gone to Ruby (Score:2)
Lisp is a very clean and elegant language
I used to think that, until I had to do some serious digging through X3J13.
IMHO, common lisp isn't all that clean (unless you are comparing it to something like C).
-- MarkusQ
Re:Former perl, python, java geek gone to Ruby (Score:3, Insightful)
Sure, it's clean compared to C++, but not too much else!
Re:Former perl, python, java geek gone to Ruby (Score:1)
Gotta love committees, no?
Re:Smalltalk elegance & Ruby elegance (Score:2, Interesting)
I'm a Smalltalk-er who likes Ruby for its Smalltalk-eyness.
After all, here are 5 lines of Ruby code that give the count of unique IP numbers listed from a webserver logfile which downloaded a particular file from the server
Ruby code:
anIpNum = Regexp.new(/[0-9.]+/)
aFile = File.open('D:/Savant/copyOfGeneral.txt')
aDicti onary = Hash.new
aFile.each_line { | line | aDictionary[line.slice(anIpNum)] = 1 if l
That's not what we mean by clean, friend. (Score:3, Insightful)
A good example of this is the lack of need for semicolons at the end of each line. Ruby has semicolons for statement separators, but you only need to use them when there are multiple statemen
Re:That's not what we mean by clean, friend. (Score:2)
I'm a big fan of Ruby and its clean syntax too, but I think MarkusQ (and subsequent repliers) mistake what that means. Ruby's syntax is clean in that there isn't a lot of stuff in the syntax just to define statements, expressions, lists and whatnot.
You definition of "clean syntax" doesn't quite work the way you seem to think it does. Ruby does have a lot of stuff to define lists, etc. The fact that these things are optional doesn't mean they aren't there. That's why (rather than using your definition
Re:That's not what we mean by clean, friend. (Score:2, Informative)
Matz held a talk on his intentions at OSCON (and it's fun to read) named
The Power and Phil [rubyist.net]
Now I know I'm a geek, and not a very good one (Score:1)
Time to learn another language...
Re:Former perl, python, java geek gone to Ruby (Score:5, Interesting)
For a simple example, look at this:
x = [1,2,3,4]
x.each do |e|
puts e
done
This is NOT syntactic sugar. The list class has a each method that takes a piece of code as an argument and executes it for each element in the list. This can do the same as generators now coming into the new Python and is very similar to higher-order functions in functional languages.
Basically the do...done part is a parameter (albeit a special one, a method may only have one).
It is difficult and syntactiucally tricky to do this in most OO languages and trivial to add an each method (or whatever you want to call it) to your own classes. It is also extremely powerful way of doing many thing which requires a lot of messiness in other languages.
This high-erorder code blocks now allow you to really do the everything-is-anobject thing because you MUST have code blocks to implement control structures such as if or while as an object. It is also very pervasively used in all collections and for instance in REXML where you can say
x = some XML...
x.each( xpath expression ) do |element|
done
Another example
String.each_regexp( regexp ) do
Does the code for each place where the regexp was found in the string. Same sort of thing can be done for databases and so forth.
Ruby also has things like mix-in classes which are usually dissed by OO theoreticians but turn out to be very useful. Mix-in classes were pioneered by some dialect of LISP and are a form of restricted multiple inheritance,. A class can inherit methods from other modules but not instance variables (except for its parent class). This allows you to this (this is pseudocode)
myclass inherits Ord
implement = and other operators in terms of and = (which are supplied by your class). And now your class implements all of these methods. This is again tricky to implement in traditional top-down inheritance trees. Think of Java's interface system, but with default implementations.
This is used to great effect in the collections to implement many things in terms of some primitve operators.
Re:Former perl, python, java geek gone to Ruby (Score:2)
From what I understand, code blocks are basically anonymous functions that the method they are passed to can only invoke with yield, right? Or is it possible to treat them as any other parameter, i.e. store them, pass them further around, take more than one etc?
When I looked at Ruby (not in much detail yet), I thought that code block
Re:Former perl, python, java geek gone to Ruby (Score:2)
Re:Former perl, python, java geek gone to Ruby (Score:2, Interesting)
Ruby is a completely first-class language, as in scheme, smalltalk, et al. In other words, anything can be passed
Re:Former perl, python, java geek gone to Ruby (Score:5, Informative)
You did.
Code blocks are probably one of the most important features of Ruby that differentiates it from Python.
From what I understand, code blocks are basically anonymous functions that the method they are passed to can only invoke with yield, right?
wrong.
Or is it possible to treat them as any other parameter, i.e. store them, pass them further around, take more than one etc?
Yes. Yes. Yes. Yes (well, that last one is a qualified yes, if I understand your question correctly: you have to convert them to Proc objects before you can pass more than one of them to another method due to the fact that the '&' block delimiter in the method's parameter list can only be on the last parameter - it's not a big limitation).
At first glance, code blocks don't seem that interesting, cool or useful, however, I was able to create a domain-specific hardware description language using them without the need to create any parser for that langauge. It was written in pure Ruby, but to the user it looks like another language in it's own right.
So I could do things like (if you're familiar with VHDL this should look familiar):
process(clk,rst) {
if clk.event and clk == '1'
counter.assign counter + 1
elsif rst == '1'
#do resest:
counter.assign 0
end
}
#
It's all written in pure Ruby. The part between the '{' and '}' is a code block that's being passed to the process method which will execute the block whenever the value of clk or rst changes. So essentially, code blocks allowed me to make Ruby look a lot like VHDL. It looks very natural. AFAIK, this sort of thing is not (easily) doable in Python.
Other uses of blocks (Score:2)
They can be used in unique ways that are pretty darn useful. For instance, you can use them to create configuration blocks for objects, without cluttering the constructor. myServer = Server.new( socket, something ) { set_sercurity_mode 2 set_logfile_path "/var/logs/speciallogs/" } /ECO
Thanks, IE. Repost that isn't ruined (Score:3, Informative)
Don't forget some of the other unique uses of blocks, that make them very, very powerful.
They can be used in unique ways that are pretty darn useful. For instance, you can use them to create configuration blocks for objects, without cluttering the constructor.
A constructor aware of this can use this block to config
Re:Thanks, IE. Repost that isn't ruined (Score:4, Insightful)
The {
Re:Thanks, IE. Repost that isn't ruined (Score:2)
this.addListener(new Listener() {
protected void handleAction() {
});
Re:Thanks, IE. Repost that isn't ruined (Score:1)
add_listener do
end
Java also forces you to declare variables from the outer environment as final if you want to use them
in your method. So it's NOT possible to do something like that in Java:
called = 0
add_listener do
called += 1
puts "Called " + called + " times."
end
But java is also inconsistent in this respect because at the same time it's possible to work around this arbitrary limitation:
class IntCollection {
priva
Re:Thanks, IE. Repost that isn't ruined (Score:3, Funny)
And yet another use... (Score:3, Insightful)
One of the most useful instances of blocks I've found, and the one that truly converted me to Ruby, is registering them as callbacks.
I was working on a program while learning Ruby where we wanted to filter an incoming stream of events and filter them out to handlers. Some events needed to be dispatched to multiple handlers, others could be ignored.
The traditional approach would be to modify Dispatcher (any capitalized noun will be a class in my example here) and add some filtering logic each time a new
Re:Former perl, python, java geek gone to Ruby (Score:1)
From resolv.rb in 1.6.8:
def each_name(address, &proc)
__lazy_initialize
__if @addr2name.include?(address)
____@addr2name[address].each(&proc)
__end
end
The &proc means to convert the block passed to the "each" function to a proc object and assign it to the variable proc. It is then passed down to the next "each" function in turn.
Its treatment of "functions as data" isn't quite as complete as something like Lisp, but Ruby is a language that programmers tend to rave about, not CS theoris
Re:Former perl, python, java geek gone to Ruby (Score:2)
I'm surprised no one's mentioned the most significant difference (IMHO, anyway) between Ruby and Perl
Re:Former perl, python, java geek gone to Ruby (Score:2)
Re:Former perl, python, java geek gone to Ruby (Score:2)
Re:Former perl, python, java geek gone to Ruby (Score:2, Interesting)
Plus, I get all the regexp power of Perl, and a substantial part of the Windows-ness of Smalltalk MT.
Remember, Dave Thomas (the PragmaticProgrammer who co-wrote the first English-language Ruby book, and who helps promote Ruby to the English speaking world) is a Smalltalker.
Leaping back and forth between Ruby and Smalltalk is, IMO, far
Re:Former perl, python, java geek gone to Ruby (Score:4, Informative)
Re:Former perl, python, java geek gone to Ruby (Score:4, Insightful)
Someone already mentioned blocks, which is one big difference. The other is the true OO-ness of the language.
irb(main):001:0> 1.type=> Fixnum
irb(main):002:0> 1.upto(3) {|i| puts i}
1
2
3
=> 1
irb(main):003:0> class MoreThanArray < Array; def is_even?; 0 == length % 2; end; end
=> nil
irb(main):004:0> ma = MoreThanArray.new
=> []
irb(main):005:0> ma[0] = "hello"
=> "hello"
irb(main):006:0> ma.is_even?
=> false
irb(main):007:0> ma[1] = "booga"
=> "booga"
irb(main):008:0> ma.is_even?
=> true
AFAIK, Python doesn't let you subclass built-in types, and it certainly doesn't let you treat integers as objects. At first glance, Ruby does appear similar to python, but if you really look at the OO aspects of the language you'll see some huge differences.
As far as cryptic syntax... the only real similarities I've found between Perl and Ruby are the @ and $ symbols in front of variables. But in Perl @ is an array, and $ is a regular variable. In Ruby, @ is an instance variable of a class (accessible only within the class) and $ is a global variable. Ruby also keeps some of Perl's global variables, which allows for some cryptic looking syntax, but I rarely see or use them.
In summary though, I don't know Python or Ruby well enough to enumerate all the differences between them. I just find that nearly every program I want to write becomes much shorter and easier in Ruby than it was in Python.
Re:Former perl, python, java geek gone to Ruby (Score:2, Interesting)
You can even extend instances of classes, rather than the classes themselves:
Re:Former perl, python, java geek gone to Ruby (Score:2)
Yeah, cool ain't it? I knew about these other ways but I guess I was stuck on the "Python doesn't let you subclass built-in types" idea. Of course, I'm sure it doesn't let you extend them or modify instances of them either.
That's a pretty funny comment though: You love Ruby so much it makes you want to learn Smalltalk! ;)
As for me, I looked at Smalltalk, hated the syntax, and haven't really felt the interest to go back again.
Congratulations... (Score:2)
(I kid you not.) Imagine a C++-like language that can do all that (and more). That's javascript.
Yeah, but... (Score:1)
Have you ever taken a look at the OO syntax of Javascript? It's damn ugly! I was really impressed at things like Function() though. If it weren't for the browser-specific parts of Javascript then it would be a pretty good language... but used to manipulate browsers it's a real pain.
Re:Former perl, python, java geek gone to Ruby (Score:4, Informative)
This is no longer true. As of Python 2.2, I'm pretty sure that both of these
complaints have been addressed (the first one for sure).
Re:Former perl, python, java geek gone to Ruby (Score:2)
Hrm, interesting. After seeing this I went to the Python home page and found a document [python.org] on this subject. After initially being overwhelmed with underscores, I tried to understand what was going on. It talked a lot about subclassing things like dictionaries, but I couldn't find anything about subclassing int and such.
Anyhow, I then fired up Python and said dir(1) and it gave me a list of methods. I then tried 1.__add__(2), and it didn't like it. Do I have the syntax wrong? If I do something equival
Re:Former perl, python, java geek gone to Ruby (Score:1)
>>> (1).__add__(2)
3
>>> class FixNum(int):
... def dist_from_42(self):
... return abs(self-42)
...
>>> b = FixNum(2)
>>> b.dist_from_42()
40
Re:Former perl, python, java geek gone to Ruby (Score:1)
Interesting. The Ruby syntax sure looks cleaner to me though. Fewer underscores and parentheses to worry about. =) I also like that "abs" is a Fixnum method in Ruby, whereas in Python it appears to be a top-level function.
Re:Former perl, python, java geek gone to Ruby (Score:1)
Re:Former perl, python, java geek gone to Ruby (Score:1)
Yup, Numeric [rubycentral.com].
Re:Former perl, python, java geek gone to Ruby (Score:5, Insightful)
AFAIK, Python doesn't let you subclass built-in types, and it certainly doesn't let you treat integers as objects.
>>> class IntegerSubclass(int):
... pass
>>> issubclass(IntegerSubclass, int)
1
In summary though, I don't know Python or Ruby well enough to enumerate all the differences between them. I just find that nearly every program I want to write becomes much shorter and easier in Ruby than it was in Python.
Doesn't sound like you've really spent enough time in Python to make that comparison.
Re:Former perl, python, java geek gone to Ruby (Score:2)
I spent about 2 months total on Python before I found Ruby and abandoned Python. Ruby was just much easier right from the start.
I admit that there are languages that have really cool features that Ruby lacks (like Smalltalk, Lisp, ...) but I just don't find them easy to use. Python seems to overwhelm me with underscores, and needless use of "self" in method definitions. I personally find Ruby easier to read and to write.
It looks like Python has changed a lot since the last version I used (2.0 I th
A couple of things Python doesn't have (Score:1, Informative)
Two features that come to mind immediately:
1) continuations - Python doesn't have'em. While this is a fairly obscure and difficult to understand feature, I've found it to be vary valuable in a couple of instances where without them I would have had to write a lot more code to get the job done.
2) code blocks - at first they seem trivial, but after you start using them and thinking in terms of passing code blocks around you end up usi
Re:Former perl, python, java geek gone to Ruby (Score:1)
From all I have read about Ruby, it is flexible and clearly OO, but what about speed. Most of my Perl scripts are for text manipulation. I have seen some benchmarks where Perl has beaten out compiled languages in text manipulation. Where does Ruby fall in the speed spectrum? I did some searching on Google, but the on
Re:Former perl, python, java geek gone to Ruby (Score:1, Informative)
How much faster really depends on what you're doing, ranging from as little as 10% faster to as much as twice as fast (in my own benchmarks at least). But then as many Perl folks used to be fond of saying, "If you need speed...use C".
On that note, you'll find writing C extensions a helleva lot easier than Perl.
Re:Former perl, python, java geek gone to Ruby (Score:2)
I'm a former Perl programmer myself and my reason for moving to Ruby as my primary development language a couple of years ago was Ruby's great OO features. I tried to like doing OO Perl, I really did, but it hurt too much. I tried to like Python's indention-as-syntax, but that hurt too. But Ruby was just right.
I recently spoke with a developer who is doing a lot of OO Perl (he'd like to be doing a lot of Ruby, but ther
Re:Former perl, python, java geek gone to Ruby (Score:2)
correct link (Score:4, Informative)
Re:correct link (Score:2)
Includes YAML support (Score:3, Informative)
Thanks to Matz for such a great language!
Re:Includes YAML support (Score:2, Informative)
Absolutely. Ruby 1.8 contains a C extension ( Syck [whytheluckystiff.net]) for parsing YAML. Benchmarks [whytheluckystiff.net] have shown that Ruby's YAML parser is competitive with the marshalling standards of other popular languages. Which is a big win for developers, as YAML is much more readable.
I will also mention that if you'd like to learn YAML, you might head over to the YAML Wiki [freepan.org], where general documentation is starting. There's also a complete manual [sf.net] for the Ruby extension.
Re:Includes YAML support (Score:1)
Pretty please, could we have an all-on-one-page, no frames version, so I can read it easily on my PDA?
Many thanks.
Re:Popular at OSCON (Score:1)
Python works and has a powerfully simple syntax. Ruby's syntax is hard to stomach once you're used to Python: I don't want to type extra characters again.
Python evolves to be practical. It adds the most-shouted-about features, with Guido tossing out anything that do
i18n? (Score:2)
Now will someone please document it? (Score:4, Informative)
Re:Now will someone please document it? (Score:2)
Plus, help for the built-in library is available via the commandline tool ri
1.8.0 explanations and sample code (Score:1)
last post (Score:1)
--
Baby Ruby says "bwarghhhhh!" [uklinux.net]