What Languages Fix
Кевин Келлехер предложил интересный способ сравнивать языки программирования — описывать каждый через проблему, которую он решает. Удивительно, насколько многие языки можно охарактеризовать таким образом. Пол Грэм проходится по длинному списку: от Algol, Fortran и Cobol до C, C++, Java и C#, показывая, что каждый язык появился как ответ на недостаток предшественника. Также рассматриваются Lisp и его диалекты (Scheme, T, Common Lisp, Dylan), скриптовые языки (Perl, Python, Ruby) и логический Prolog. Общая закономерность: язык рождается, когда существующий инструмент оказывается слишком низкоуровневым, слишком пугающим, слишком неуклюжим или ему не хватает нужных типов данных.
Kevin Kelleher suggested an interesting way to compare programming
languages: to describe each in terms of the problem it
fixes. The surprising thing is how many, and how well, languages can be
described this way.
Algol: Assembly language is too low-level.
Pascal: Algol doesn't have enough data types.
Modula: Pascal is too wimpy for systems programming.
Simula: Algol isn't good enough at simulations.
Smalltalk: Not everything in Simula is an object.
Fortran: Assembly language is too low-level.
Cobol: Fortran is scary.
PL/1: Fortran doesn't have enough data types.
Ada: Every existing language is missing something.
Basic: Fortran is scary.
APL: Fortran isn't good enough at manipulating arrays.
J: APL requires its own character set.
C: Assembly language is too low-level.
C++: C is too low-level.
Java: C++ is a kludge. And Microsoft is going to crush us.
C#: Java is controlled by Sun.
Lisp: Turing Machines are an awkward way to describe computation.
Scheme: MacLisp is a kludge.
T: Scheme has no libraries.
Common Lisp: There are too many dialects of Lisp.
Dylan: Scheme has no libraries, and Lisp syntax is scary.
Perl: Shell scripts/awk/sed are not enough like programming languages.
Python: Perl is a kludge.
Ruby: Perl is a kludge, and Lisp syntax is scary.
Prolog: Programming is not enough like logic.