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

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

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

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

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

А мы стареем.

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

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

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

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

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

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

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

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

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

Комментарии (11)


  1. LibrarianOok
    20.11.2019 12:01

    Перевод немного странный. Ссылка хорошая.


  1. Tollanin
    20.11.2019 13:27

    Ну никого же не удивляет, что мы читаем национальную китайскую фантастику в переводе с английского?..


  1. FForth
    20.11.2019 13:40

    На языке на сайте проекта rosettacode.org нашлось аж 7 решённых примеров на Focal :)
    Интересно, наверное, сравнить, а сколько решений и какого уровня из списка приведённых языков имеется в рамках rosettacode.

    P.S. Скажу, наверное, банальность, но — Будет ли «жить» тот или иной язык решается
    интересом к его дизайну и практикой решений сделанных в рамках данного языка.

    Но корпорации вносят своё видение в развитие и навязывания тех или иных языков.

    Выступление Ч.Мура (видео) на Forth Day — 16 ноября 2019г.


  1. v1000
    20.11.2019 17:47

    1. nitrosbase
      21.11.2019 01:10
      +1

      Чуть более серьезное: Collapsing the IT Stack and Clearing a Path for AI Adoption от Алана Моррисона из PwC, особенно слайд 12. Докладчик, кстати, владеет русским.


      Название статьи содержит каламбур: language layers / language lawyers. Стихотворные фрагменты — переделки популярных песен, стоило бы дать на них ссылки.


      P.S. В оригинале тоже «ELIXER», а не «ELIXIR».


  1. andreyverbin
    21.11.2019 02:09

    Языков слишком много и это факт. Но говорить «давайте оставим один язык программирования» все равно, что говорить давайте оставим только язык теории категорий в математике или давайте оставим только язык квантовой механики в физике.

    В разных областях программирования должны быть разные языки, также как в физике нужны разные языки описания реальности. Но автор не приводит критериев выбора, а без них это все пустая болтовня. В физике все ясно, сложность описания движения макроскопического объекта на языке квантовой механики такова, что нельзя ничего вычислить за приемлемое время. Это и подобные соображения оправдывают наличие разных языков. Что оправдывает наличие разных языков в программировании?


    1. vassabi
      21.11.2019 14:18

      а видели разницу в вводе-выводе между обычными простыми printf в C и print в Perl? Если бы пробовали — сразу бы увидели.
      А регекспы? А поддержка платформ (привет котлину)?


      1. vintage
        21.11.2019 15:57

        Беда в том, что в разных языках есть как классные фичи, так и фатальные недостатки. и в каждом языке свои. При этом вместо того, чтобы развивать один язык вбирая в него всё лучшее и выкидывая худшее мы каждый раз пилим с нуля новый со своими достинствами и недостатками. Я думаю идеальный язык должен быть не просто языком, а языковой платформой, позволяющей легко пробовать новые идеи, не изобретая всю экосистему заново. и позволяющий легко рефакторить старый код под новые версии языка.


        1. Muzzy0
          22.11.2019 00:10

          Лёгкость рефакторинга почти не зависит от языка. Во много раз больше она зависит от косорукости кодеров, ошибок в архитектуре и применённых костылей.


          1. VolCh
            22.11.2019 06:47

            Ох не сказал бы. Рефакторинг TS и. JS очень сильно отличается


        1. VolCh
          22.11.2019 06:45

          Вы про платформы типа Java и .Net? :l