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

0

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

Предлагаю вашему вниманию перевод статьи «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.

You might also like More from author