Ruby is an interpreted multiparadigm programming language: dynamic, object-oriented, reflexive, imperative, functional. It is actively used in web development, system administration and operating systems (Mac OS X, Linux, BSD).
Ruby has OS-independent implementation of multithreading, strict dynamic typing, garbage collector and many other features. The language is close in syntax to Perl and Eiffel, and in object-oriented approach to Smalltalk. Also, some features of the language are taken from Python, Lisp, Dylan and Clu. Ruby was developed on Linux, but works on many versions of Unix, DOS, Microsoft Windows, Mac OS (where it is built into the operating system by default), BeOS, OS/2, etc.
Ruby was developed in early 1993 and released in late 1995, by Yukihiro Matsumoto (Matz):
Ruby was born on February 23, 1993. That day I was having a conversation with a colleague about the possibility of having an object-oriented scripting language. I knew Perl (Perl4, not Perl5), but I didn’t like it; it had a certain toy-like flavor (and still does). But the object-oriented interpreted language seemed to hold a lot of promise. At that time I knew Python. But I didn’t like it, because I didn’t think it was a real object-oriented language. Its OO features seemed like an add-on to the language. As a language maniac and a fan of object-oriented programming with 15 years of experience, I really, really wanted to have a truly object-oriented, easy-to-use language. I tried to find such a language, but there wasn’t one. So I decided to create one. It took a few months before the interpreter worked. I added to my language what I wanted – iterators, exception handling, and automatic garbage collection. Then I reorganized the Perl properties and implemented them as a class library. In December of 1995 I published Ruby 0.95.
The language follows the principle of “least surprise”: the program must behave the way the programmer expects it to behave. However, in the context of Ruby, this means the least surprise, not when you get to know the language, but when you learn it thoroughly. Matsumoto himself claims that the design goal was to minimize surprises in programming for him, but after the language spread, he was surprised to learn that programmers’ thinking is similar, and for many of them the principle of “least surprise” coincided with his principle.
Ruby also inherited the ideology of the Perl programming language in terms of allowing the programmer to achieve the same result in several different ways. People are different, and they need to be able to choose to be free.