Comparing Python to Other Languages
-----------------------------------

These comparisons are a personal view.  Comments are requested.
--Guido van Rossum <guido@python.org>

Python is often compared to other interpreted languages such as Java,
JavaScript, Perl, Tcl, or Smalltalk.  Comparisons to C++, Common Lisp
and Scheme can also be enlightening. In this section I will briefly
compare Python to each of these languages. These comparisons
concentrate on language issues only. In practice, the choice of a
programming language is often dictated by other real-world constraints
such as cost, availability, training, and prior investment, or even
emotional attachment. Since these aspects are highly variable, it
seems a waste of time to consider them much for this publication.

Java

Python programs are generally expected to run slower than Java
programs, but they also take much less time to develop. Python
programs are typically 3-5 times shorter than equivalent Java
programs. This difference can be attributed to Python's built-in
high-level data types and its dynamic typing. For example, a Python
programmer wastes no time declaring the types of arguments or
variables, and Python's powerful polymorphic list and dictionary
types, for which rich syntactic support is built straight into the
language, find a use in almost every Python program. Because of the
run-time typing, Python's run time must work harder than Java's. For
example, when evaluating the expression a+b, it must first inspect the
objects a and b to find out their type, which is not known at compile
time. It then invokes the appropriate addition operation, which may be
an overloaded user-defined method. Java, on the other hand, can
perform an efficient integer or floating point addition, but requires
variable declarations for a and b, and does not allow overloading of
the + operator for instances of user-defined classes.

For these reasons, Python is much better suited as a "glue" language,
while Java is better characterized as a low-level implementation
language. In fact, the two together make an excellent
combination. Components can be developed in Java and combined to form
applications in Python; Python can also be used to prototype
components until their design can be "hardened" in a Java
implementation. To support this type of development, a Python
implementation written in Java is under development, which allows
calling Python code from Java and vice versa. In this implementation,
Python source code is translated to Java bytecode (with help from a
run-time library to support Python's dynamic semantics).

Javascript

Python's "object-based" subset is roughly equivalent to
JavaScript. Like JavaScript (and unlike Java), Python supports a
programming style that uses simple functions and variables without
engaging in class definitions. However, for JavaScript, that's all
there is. Python, on the other hand, supports writing much larger
programs and better code reuse through a true object-oriented
programming style, where classes and inheritance play an important
role.

Perl

Python and Perl come from a similar background (Unix scripting, which
both have long outgrown), and sport many similar features, but have a
different philosophy. Perl emphasizes support for common
application-oriented tasks, e.g. by having built-in regular
expressions, file scanning and report generating features. Python
emphasizes support for common programming methodologies such as data
structure design and object-oriented programming, and encourages
programmers to write readable (and thus maintainable) code by
providing an elegant but not overly cryptic notation. As a
consequence, Python comes close to Perl but rarely beats it in its
original application domain; however Python has an applicability well
beyond Perl's niche.

Tcl

Like Python, Tcl is usable as an application extension language, as
well as a stand-alone programming language. However, Tcl, which
traditionally stores all data as strings, is weak on data structures,
and executes typical code much slower than Python. Tcl also lacks
features needed for writing large programs, such as modular
namespaces. Thus, while a "typical" large application using Tcl
usually contains Tcl extensions written in C or C++ that are specific
to that application, an equivalent Python application can often be
written in "pure Python". Of course, pure Python development is much
quicker than having to write and debug a C or C++ component. It has
been said that Tcl's one redeeming quality is the Tk toolkit.  Python
has adopted an interface to Tk as its standard GUI component library.

Smalltalk

Perhaps the biggest difference between Python and Smalltalk is
Python's more "mainstream" syntax, which gives it a leg up on
programmer training. Like Smalltalk, Python has dynamic typing and
binding, and everything in Python is an object. However, Python
distinguishes built-in object types from user-defined classes, and
currently doesn't allow inheritance from built-in types. Smalltalk's
standard library of collection data types is more refined, while
Python's library has more facilities for dealing with Internet and WWW
realities such as email, HTML and FTP.  Python has a different
philosophy regarding the development environment and distribution of
code. Where Smalltalk traditionally has a monolithic "system image"
which comprises both the environment and the user's program, Python
stores both standard modules and user modules in individual files
which can easily be rearranged or distributed outside the system. One
consequence is that there is more than one option for attaching a
Graphical User Interface (GUI) to a Python program, since the GUI is
not built into the system.

C++

Almost everything said for Java also applies for C++, just more so:
where Python code is typically 3-5 times shorter than equivalent Java
code, it is often 5-10 times shorter than equivalent C++ code!
Anecdotal evidence suggests that one Python programmer can finish in
two months what two C++ programmers can't complete in a year. Python
shines as a glue language, used to combine components written in C++.

Common Lisp and Scheme

These languages are close to Python in their dynamic semantics, but so
different in their approach to syntax that a comparison becomes almost
a religious argument: is Lisp's lack of syntax an advantage or a
disadvantage? It should be noted that Python has introspective
capabilities similar to those of Lisp, and Python programs can
construct and execute program fragments on the fly. Usually,
real-world properties are decisive: Common Lisp is big (in every
sense), and the Scheme world is fragmented between many incompatible
versions, where Python has a single, free, compact implementation.
