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.
Algol: Ассемблер слишком низкоуровневый.
Pascal: Algol doesn't have enough data types.
Pascal: В Algol недостаточно типов данных.
Modula: Pascal is too wimpy for systems programming.
Modula: Pascal слишком слаб для системного программирования.
Simula: Algol isn't good enough at simulations.
Simula: Algol недостаточно хорош для симуляций.
Smalltalk: Not everything in Simula is an object.
Smalltalk: В Simula не всё является объектом.
Fortran: Assembly language is too low-level.
Fortran: Ассемблер слишком низкоуровневый.
Cobol: Fortran is scary.
Cobol: Fortran пугающий.
PL/1: Fortran doesn't have enough data types.
PL/1: В Fortran недостаточно типов данных.
Ada: Every existing language is missing something.
Ada: Каждому существующему языку чего-то не хватает.
Basic: Fortran is scary.
Basic: Fortran пугающий.
APL: Fortran isn't good enough at manipulating arrays.
APL: Fortran недостаточно хорош для работы с массивами.
J: APL requires its own character set.
J: APL требует собственного набора символов.
C: Assembly language is too low-level.
C: Ассемблер слишком низкоуровневый.
C++: C is too low-level.
C++: C слишком низкоуровневый.
Java: C++ is a kludge. And Microsoft is going to crush us.
Java: C++ — это нагромождение. А Microsoft вот-вот нас раздавит.
C#: Java is controlled by Sun.
C#: Java контролируется Sun.
Lisp: Turing Machines are an awkward way to describe computation.
Lisp: Машины Тьюринга — неудобный способ описывать вычисления.
Scheme: MacLisp is a kludge.
Scheme: MacLisp — это нагромождение.
T: Scheme has no libraries.
T: У Scheme нет библиотек.
Common Lisp: There are too many dialects of Lisp.
Common Lisp: Слишком много диалектов Lisp.
Dylan: Scheme has no libraries, and Lisp syntax is scary.
Dylan: У Scheme нет библиотек, а синтаксис Lisp пугающий.
Perl: Shell scripts/awk/sed are not enough like programming languages.
Perl: Shell-скрипты/awk/sed недостаточно похожи на языки программирования.
Python: Perl is a kludge.
Python: Perl — это нагромождение.
Ruby: Perl is a kludge, and Lisp syntax is scary.
Ruby: Perl — это нагромождение, а синтаксис Lisp пугающий.
Prolog: Programming is not enough like logic.
Prolog: Программирование недостаточно похоже на логику.