home *** CD-ROM | disk | FTP | other *** search
- 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.
-