Added 'description' class attribute to every command class (to help the
[python/dscho.git] / Misc / comparisons
blob8e52e82a323e44cba44e17a4f8b90a331f36c664
1 Comparing Python to Other Languages
2 -----------------------------------
4 These comparisons are a personal view.  Comments are requested.
5 --Guido van Rossum <guido@python.org>
7 Python is often compared to other interpreted languages such as Java,
8 JavaScript, Perl, Tcl, or Smalltalk.  Comparisons to C++, Common Lisp
9 and Scheme can also be enlightening. In this section I will briefly
10 compare Python to each of these languages. These comparisons
11 concentrate on language issues only. In practice, the choice of a
12 programming language is often dictated by other real-world constraints
13 such as cost, availability, training, and prior investment, or even
14 emotional attachment. Since these aspects are highly variable, it
15 seems a waste of time to consider them much for this publication.
17 Java
19 Python programs are generally expected to run slower than Java
20 programs, but they also take much less time to develop. Python
21 programs are typically 3-5 times shorter than equivalent Java
22 programs. This difference can be attributed to Python's built-in
23 high-level data types and its dynamic typing. For example, a Python
24 programmer wastes no time declaring the types of arguments or
25 variables, and Python's powerful polymorphic list and dictionary
26 types, for which rich syntactic support is built straight into the
27 language, find a use in almost every Python program. Because of the
28 run-time typing, Python's run time must work harder than Java's. For
29 example, when evaluating the expression a+b, it must first inspect the
30 objects a and b to find out their type, which is not known at compile
31 time. It then invokes the appropriate addition operation, which may be
32 an overloaded user-defined method. Java, on the other hand, can
33 perform an efficient integer or floating point addition, but requires
34 variable declarations for a and b, and does not allow overloading of
35 the + operator for instances of user-defined classes.
37 For these reasons, Python is much better suited as a "glue" language,
38 while Java is better characterized as a low-level implementation
39 language. In fact, the two together make an excellent
40 combination. Components can be developed in Java and combined to form
41 applications in Python; Python can also be used to prototype
42 components until their design can be "hardened" in a Java
43 implementation. To support this type of development, a Python
44 implementation written in Java is under development, which allows
45 calling Python code from Java and vice versa. In this implementation,
46 Python source code is translated to Java bytecode (with help from a
47 run-time library to support Python's dynamic semantics).
49 Javascript
51 Python's "object-based" subset is roughly equivalent to
52 JavaScript. Like JavaScript (and unlike Java), Python supports a
53 programming style that uses simple functions and variables without
54 engaging in class definitions. However, for JavaScript, that's all
55 there is. Python, on the other hand, supports writing much larger
56 programs and better code reuse through a true object-oriented
57 programming style, where classes and inheritance play an important
58 role.
60 Perl
62 Python and Perl come from a similar background (Unix scripting, which
63 both have long outgrown), and sport many similar features, but have a
64 different philosophy. Perl emphasizes support for common
65 application-oriented tasks, e.g. by having built-in regular
66 expressions, file scanning and report generating features. Python
67 emphasizes support for common programming methodologies such as data
68 structure design and object-oriented programming, and encourages
69 programmers to write readable (and thus maintainable) code by
70 providing an elegant but not overly cryptic notation. As a
71 consequence, Python comes close to Perl but rarely beats it in its
72 original application domain; however Python has an applicability well
73 beyond Perl's niche.
75 Tcl
77 Like Python, Tcl is usable as an application extension language, as
78 well as a stand-alone programming language. However, Tcl, which
79 traditionally stores all data as strings, is weak on data structures,
80 and executes typical code much slower than Python. Tcl also lacks
81 features needed for writing large programs, such as modular
82 namespaces. Thus, while a "typical" large application using Tcl
83 usually contains Tcl extensions written in C or C++ that are specific
84 to that application, an equivalent Python application can often be
85 written in "pure Python". Of course, pure Python development is much
86 quicker than having to write and debug a C or C++ component. It has
87 been said that Tcl's one redeeming quality is the Tk toolkit.  Python
88 has adopted an interface to Tk as its standard GUI component library.
90 Smalltalk
92 Perhaps the biggest difference between Python and Smalltalk is
93 Python's more "mainstream" syntax, which gives it a leg up on
94 programmer training. Like Smalltalk, Python has dynamic typing and
95 binding, and everything in Python is an object. However, Python
96 distinguishes built-in object types from user-defined classes, and
97 currently doesn't allow inheritance from built-in types. Smalltalk's
98 standard library of collection data types is more refined, while
99 Python's library has more facilities for dealing with Internet and WWW
100 realities such as email, HTML and FTP.  Python has a different
101 philosophy regarding the development environment and distribution of
102 code. Where Smalltalk traditionally has a monolithic "system image"
103 which comprises both the environment and the user's program, Python
104 stores both standard modules and user modules in individual files
105 which can easily be rearranged or distributed outside the system. One
106 consequence is that there is more than one option for attaching a
107 Graphical User Interface (GUI) to a Python program, since the GUI is
108 not built into the system.
112 Almost everything said for Java also applies for C++, just more so:
113 where Python code is typically 3-5 times shorter than equivalent Java
114 code, it is often 5-10 times shorter than equivalent C++ code!
115 Anecdotal evidence suggests that one Python programmer can finish in
116 two months what two C++ programmers can't complete in a year. Python
117 shines as a glue language, used to combine components written in C++.
119 Common Lisp and Scheme
121 These languages are close to Python in their dynamic semantics, but so
122 different in their approach to syntax that a comparison becomes almost
123 a religious argument: is Lisp's lack of syntax an advantage or a
124 disadvantage? It should be noted that Python has introspective
125 capabilities similar to those of Lisp, and Python programs can
126 construct and execute program fragments on the fly. Usually,
127 real-world properties are decisive: Common Lisp is big (in every
128 sense), and the Scheme world is fragmented between many incompatible
129 versions, where Python has a single, free, compact implementation.