In the old days, the distinction between languages was simple: they
were either compiled, like C or Fortran, or interpreted, like BASIC.
Compiled languages gave you speed and low-level access; interpreted
languages were higher-level but slower.
Times change, and things aren't that simple anymore. Some language
designers have taken to calling their creations ``scripting
languages.'' By this, we guess they mean that their languages are
interpreted and can be used to replace batch files and shell
scripts, orchestrating the behavior of other programs and the
underlying operating system. Perl, TCL, and Python have all been
called scripting languages.
What exactly
is a scripting language? Frankly we don't know if
it's a distinction worth making. In Ruby, you can access all the
underlying operating system features. You can do the same stuff in
Ruby that you can in Perl or Python, and you can do it more cleanly.
But Ruby is fundamentally different. It is a true programming language,
too, with strong theoretical roots and an elegant, lightweight syntax.
You
could hack together a mess of ``scripts'' with Ruby, but
you probably won't. Instead, you'll be more inclined to
engineer a solution, to produce a program that is easy to
understand, simple to maintain, and a piece of cake to extend and
reuse in the future.
Although we have used Ruby for scripting jobs, most of the time we use
it as a general-purpose programming language. We've used it to write
GUI applications and middle-tier server processes, and we're using it to
format large parts of this book. Others have used it for managing
server machines and databases. Ruby is serving Web
pages, interfacing to databases and generating dynamic content. People
are writing artificial intelligence and machine learning programs in
Ruby, and at least one person is using it to investigate natural evolution.
Ruby's finding a home as a vehicle for
exploratory mathematics. And people all over the world are using it as
a way of gluing together all their different applications. It truly
is a great language for producing solutions in a wide variety of
problem domains.