| Ruby (programming Language) |
Article Index for Ruby |
Website Links For Ruby |
Information AboutRuby (programming Language) |
Ruby is a Reflective , Dynamic , Object-oriented Programming Language . It combines syntax inspired by Perl with Smalltalk -like object-oriented features, and also shares some features with Python , Lisp , Dylan , and CLU . Ruby is a single-pass Interpreted Language . Its official implementation is Free Software written in C . HISTORY The language was created by Yukihiro "Matz" Matsumoto , who started working on Ruby on February 24 , 1993 , and released it to the public in 1995. "Ruby" was named as a gemstone because of a joke within Matsumoto's circle of friends alluding to Perl's name An Interview with the Creator of Ruby . As of March 2007, the latest stable version is 1.8.6. Ruby 1.9 (with some major changes) is also in development. Performance differences between the current Ruby implementation and other more entrenched programming languages has led to the development of several virtual machines for Ruby. These include JRuby , a port of Ruby to the Java platform, IronRuby , an implementation for the .NET Framework produced by Microsoft , and Rubinius , an interpreter modeled after Self-hosting Smalltalk virtual machines. The main developers have thrown their weight behind the virtual machine provided by the YARV project, which was merged into the Ruby source tree on 31 December 2006 , and will be released as Ruby 2.0. PHILOSOPHY The language's creator has said that Ruby is designed for programmer productivity and fun, following the principles of good User Interface design. The Ruby Programming Language by Yukihiro Matsumoto on 2000-06-12 (informit.com) He stresses that systems design needs to emphasize human, rather than computer, needs The Philosophy of Ruby, A Conversation with Yukihiro Matsumoto, Part I by Bill Venners on 2003-09-29 (Artima Developer) : Ruby is said to follow the Principle Of Least Surprise (POLS), meaning that the language should behave in such a way as to minimize confusion for experienced users. Matz has said his primary design goal was to make a language that he himself enjoyed using, by minimizing programmer work and possible confusion. He has said he hadn't applied the principle of least surprise to the design of Ruby, The Philosophy of Ruby, A Conversation with Yukihiro Matsumoto, Part I by Bill Venners on 2003-09-29 (Artima Developer) but nevertheless the phrase has come to be closely associated with the Ruby programming language. The phrase has itself been a source of surprise, as novice users may take it to mean that Ruby's behaviors try to closely match behaviors familiar from other languages. In a May 2005 discussion on the comp.lang.ruby newsgroup, Matz attempts to distance Ruby from POLS, explaining that since any design choice will be surprising to someone, he uses a personal standard in evaluating surprise. If that personal standard remains consistent there will be few surprises for those familiar with the standard. [http://www.rubyweeklynews.org/20050529] Matz defined it this way in an interview {Link without Title} : SEMANTICS Ruby is s, booleans, and "nil"). Every Function is a Method . Named values (variables) always designate references to objects, not the objects themselves. Ruby supports Inheritance with Dynamic Dispatch , Mixin s and Singleton Method s (belonging to, and defined for, a single Instance rather than being defined on the class). Though Ruby does not support Multiple Inheritance , classes can import Module s as mixins. Procedural syntax is supported, but all methods defined outside of the scope of a particular object are actually methods of the Object class. Since this class is parent to every other class, the changes become visible to all classes and objects. Ruby has been described as a (it has Anonymous Function s, Closures , and Continuation s; statements all have values, and functions return the last evaluation). It has support for Introspection , Reflection and Metaprogramming , as well as support for Thread sThough is only support Green Threads . Ruby features Dynamic Typing , and supports Parametric Polymorphism . According to the Ruby , you will like Ruby and be right at home with its syntax. If you like Smalltalk , you will like Ruby and be right at home with its semantics. If you like Python , you may or may not be put off by the huge difference in design philosophy between Python and Ruby/Perl." How Does Ruby Compare With Python? (FAQ) FEATURES
Ruby currently lacks full support for Unicode , though it has partial support for UTF-8 . Interaction The Ruby official distribution also includes "irb", an interactive command-line interpreter which can be used to test code quickly. The following code fragment represents a sample session using irb: $ irb irb(main):001:0> puts "Hello, World" Hello, World => nil irb(main):002:0> 1+2 => 3 SYNTAX The syntax of Ruby is broadly similar to Perl and Python. Class and method definitions are signaled by keywords. In contrast to Perl, variables are not obligatorily prefixed with a Sigil . When used, the sigil changes the semantics of scope of the variable. The most striking difference from C and Perl is that keywords are typically used to define logical code blocks, without braces (i.e., pair of { and }). Line breaks are significant and taken as the end of a statement; a semicolon may be equivalently used. Unlike Python, indentation is not significant. One of the differences of Ruby compared to Python and Perl is that Ruby keeps all of its instance variables completely private to the class and only exposes them through accessor methods (attr_writer, attr_reader, etc). Unlike the "getter" and "setter" methods of other languages like C++ or Java, accessor methods in Ruby can be written with a single line of code. As invocation of these methods does not require the use of parentheses, it is trivial to change an instance variable into a full function, without modifying a single line of code or having to do any refactoring achieving similar functionality to C# and VB.NET property members. Python's property descriptors are similar, but come with a tradeoff in the development process. If one begins in Python by using a publicly exposed instance variable and later changes the implementation to use a private instance variable exposed through a property descriptor, code internal to the class may need to be adjusted to use the private variable rather than the public property. Ruby removes this design decision by forcing all instance variables to be private, but also provides a simple way to declare set and get methods. This is in keeping with the idea that in Ruby, one never directly accesses the internal members of a class from outside of it. Rather one passes a message to the class and receives a response. See the '' Examples '' section for samples of code demonstrating Ruby syntax. "GOTCHAS" Language comparison Some features that differ notably from languages such as C or Perl :
Language features
A list of " Gotcha s" may be found in Hal Fulton's book ''The Ruby Way'', 2nd ed (ISBN 0-672-32884-4), Section 1.5. A similar list in the 1st edition pertained to an older version of Ruby (version 1.6), some problems of which have been fixed in the meantime. retry, for example, now works with while, until, and for, as well as iterators.EXAMPLES Classic Hello World example: puts "Hello World!" Some basic Ruby code: # Everything, including a literal, is an object, so this works: -199.abs # 199 "ruby is cool".length # 12 "Rick".index("c") # 2 "Nice Day Isn't It?".downcase.split(//).uniq.sort.join # " '?acdeinsty" Collections Constructing and using an Array : a = 'hi', 3.14, 1, 2, [4, 5 ] a {Link without Title} # 3.14 a.reverse # 5 , 2, 1, 3.14, 'hi', 1] a.flatten.uniq # 'hi', 3.14, 2, 4, 5 Constructing and using a Hash : hash = {:water => 'wet', :fire => 'hot'} puts hash {Link without Title} # Prints: hot   |
Hashdelete If {key, Value Key |
= :water} # Deletes :water => 'wet' |
|
|
|