[Из песочницы] Языковые слои

Привет, Хабр!

Предлагаю вашему вниманию перевод статьи «Language Layers» автора Robert C. Martin (Uncle Bob).

image


Я провожу время, играя в старую игру «Lunar Lander» 1969 года. Она была написана Джимом Сторером, учеником средней школы. Он написал ее на PDP-8 на языке FOCAL. Вот как выглядит программа:

image

А вот исходный код на FOCAL:

image

Джим Сторер был довольно талантливым учеником средней школы. Взгляни на этот код. У него там довольно интересные выражения Тейлора.

В общем, я провожу двоичный поиск, чтобы определить значение К, которое при последовательном использовании идеально посадит корабль. Поэтому я изменил программу, так чтобы она принимала только одно значение, а затем применяла его несколько раз, пока корабль не приземлится или не разобьется. Пока я пишу это, я знаю, что ответ лежит между 76.40625 и 76.4453125, и я попробую 76.4257813. Я начинаю думать, что у меня закончится время, прежде чем я найду ответ.

Между тем, мне пришло в голову, что я запустил эту программу на эмуляторе PDP-8, который написал на Lua для iPad.

Так, хорошо, давайте поразмыслим над этим.

  • iPad имеет чип A8X, с тремя ядрами, работающими на частоте гигагерц или около того.
  • Lua написан на C и компилируется в A8X.
  • Мой эмулятор PDP8 написан на языке Lua, используя пакет CODEA из раздела Two Lives Left.
  • FOCAL был написан в конце 1960-х годов на PDP8.
  • Lunar Lander был написан на FOCAL.


Значит, это A8X, C, Lua, PDP8 и FOCAL. Это пять разных языков. Пять различных механизмов, указывающих машине, что делать; все они уложены друг на друга!

Что это такое? Почему так много языков? На самом деле, забудьте про iPad, PDP-8, C, Lua и все остальное. Почему так много языков?

##Почему существует так много языков?

Подумай об этом! Сколько языков программирования вы можете назвать? Вот, позвольте мне дать вам небольшой список:

  • FORTRAN
  • ALGOL
  • COBOL
  • SNOBOL
  • LISP
  • BCPL
  • B
  • C
  • SIMULA
  • SMALLTALK
  • EIFFEL
  • C++
  • JAVA
  • C#
  • PYTHON
  • RUBY
  • LOGO
  • LUA
  • BASIC
  • PL/1
  • JAVASCRIPT
  • GO
  • DART
  • PROLOG
  • FORTH
  • SWIFT
  • ML
  • OCCAM
  • OCAML
  • ADA
  • ERLANG
  • ELIXER
  • FOCAL


Ты, конечно, можешь думать о других, которые я не упомянул. Вопрос в том, почему их так много? На этот вопрос действительно может быть только один ответ. Причина, по которой существует так много компьютерных языков:

Они нам не нравятся.


Ну, может быть, это слишком сильное заявление. Возможно, я должен сказать:

Мы были в Голливуде.
Мы были в Редвуде.
Мы пересекли океан ради золотого кода.
Мы были в своем уме,
Это такая тонкая грань.
Это заставляет нас искать золотой код.

А мы стареем.


Ладно, может, мне стоит говорить за себя… Неужели ты не хотел просто наорать на Нила Янга, чтобы он перестал жаловаться, нашел какую-то милую девушку и жил с ней? Разве вы не хотели сказать ему, что поиски золотого сердца были бесполезны? Скажите, что бы он с ним сделал, если бы нашел его?

И что бы мы сделали с идеальным языком, если бы нашли его?

Мы создали эмуляторы PDP-8 и FOCAL, чтобы играть в » Lunar Lander», написанную учеником средней школы в 1969 году!

Вот что я думаю.

Смиритесь с этим. Прекратите поиски. Нет никакого идеального языка. Мы искали везде. Мы смотрели сверху и снизу. Мы смотрели внутрь и снаружи.

Мы посмотрели на языки с обеих сторон.
Изнутри и снаружи
и до сих пор так или иначе.
Вспоминаем, что это языковые иллюзии.

Мы действительно ничего не понимаем в языках…
… совсем.


Да, сегодня необычный день.

Но, тем не менее, суть в том:

Нам не нужен другой язык.
Нам не нужно знать дорогу домой.
Все, чего мы хотим — это выйти за пределы жизни.
S.Q. L.

Да, странный день.

Итак, есть одна мысль. Может быть, нам нужно перестать создавать новые языки и просто успокоиться и выбрать один или два, которые действительно хороши. Это сделает жизнь намного проще, не так ли?

И, если вам интересно, 76.43844461 дает вам довольно хорошую посадку на 2.23 MPH.

© Habrahabr.ru