diff --git a/Misc/comparisons b/Misc/comparisons new file mode 100644 index 00000000000..8e52e82a323 --- /dev/null +++ b/Misc/comparisons @@ -0,0 +1,129 @@ +Comparing Python to Other Languages +----------------------------------- + +These comparisons are a personal view. Comments are requested. +--Guido van Rossum + +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.