Брендан Эйх о создании JavaScript за 10 дней и о том, что сегодня он сделал бы по-другому +33


На днях JavaScript исполнилось 27 лет. Вспоминаем, к чему привели эксперименты в Netscape и как этот язык программирования появился на свет.

Миллионы современных разработчиков активно используют язык программирования, который родился буквально за 10 дней в период экспоненциального развития интернета. Создатель JavaScript Брендан Эйх не так давно заново обратился к истокам созданного им языка и рассказал о том, как семена, посеянные им в 1995 году, теперь наконец-то взошли.

Брендан Эйх на dotJS conference
Брендан Эйх на dotJS conference

Итак, далекий 1995 год, совершенно другая эпоха. Да что уж там говорить — практически другой мир! Тогда Netscape даже рассматривала совокупность браузера и сервера как новый вид распределенной операционной системы, вспоминает журнал Computer. Браузеры обладали потенциалом, позволявшим разработчикам охватить пользователей на любой платформе — Windows, Mac или Linux, — но им не хватало еще одного важного ингредиента, «своего» языка программирования. Netscape очень хотелось, чтобы, помимо Java, появился еще один язык, который смог бы увлечь многих начинающих разработчиков — так же как в свое время Visual Basic от Microsoft.

Статья из журнала Computer
Статья из журнала Computer
Статья из журнала Computer
Статья из журнала Computer

Вся технологическая индустрия тогда была охвачена желанием поспеть за поразительной популярностью интернета. «В те времена темпы развития веб-инноваций были бешеными, а Microsoft и вовсе сделала Интернет главным приоритетом своей новой операционной системы Windows 95 — в ответ на появление браузера и серверных продуктов Netscape.» Тогда 34-летний Брендан Эйх и разработал первую версию языка, который впоследствии превратился в JavaScript, всего за 10 дней. (Свой доклад на конференции dotJS Эйх начал словами: «22 года назад, в мае месяце, я 10 дней упорно работал», добавив: «И мало спал»).

Эйх как нельзя лучше справился с этой работой, ведь в студенческие годы он уже писал языки программирования, «просто чтобы поэкспериментировать с синтаксисом». Эйх вспоминает, что когда он дошел до лексического анализа и языковых парсеров, то «сразу же влюбился в эти штуки, потому что с теоретической точки зрения все выглядело очень красиво и чисто...». Еще до прихода в Netscape в компании Silicon Graphics он занимался языками для встроенных расширений инструментов сетевого мониторинга. (Кроме того, Эйх рассказывал своему интервьюеру: «Я делал это ради забавы, просто чтобы создавать свои собственные языки»).

По сути, именно основатель Silicon Graphics Джим Кларк впоследствии и создал Netscape, так что интерес к способностям Эйха в написании языков у него уже был. «Когда все только началось, меня тут же позвали поработать, но я вынужден был отказаться, поскольку участвовал тогда в другом стартапе — и занимался им еще целый год», — недавно рассказал Эйх в интервью InfoWorld.

Ровно через год Netscape таки удалось переманить Эйха к себе на работу многообещающей перспективой поработать над языком под названием Scheme. Идея у них была следующая: «Переходи к нам и реализуй Scheme для Netscape. Внедри этот язык программирования в браузер». Позже Эйх назовет Scheme «тем прекрасным исследовательским проектом, с которого все началось». Однако к тому времени, когда он полностью перешёл в Netscape, компания уже заключила сделку с Sun Microsystems, которая вовсю продвигала свой новоиспечённый язык Java. «И внезапно возникла такая картина: «Ну, мы не знаем, нужен ли нам Scheme. Мы вообще не уверены, что нам так уж нужен крохотный язык, который мы хотели у тебя заказать. Может быть, обойдемся только Java?».

Этот переломный момент Эйх запомнил на всю оставшуюся жизнь. Еще в 2012 году в интервью журналу Computer он говорил, что его начали теснить сразу по двум направлениям. «Мы предчувствовали, что Microsoft рано или поздно доберётся до Netscape, она ведь уже пыталась купить компанию в конце 94-го... А ещё у нас была какая-то странная история с Java, потому что даже в Netscape многие люди думали: «Ну, раз уж у нас есть Java, действительно ли нам позарез нужен ещё один язык?». Люди не видели пользы от языка-компаньона Visual Basic который, между тем, ориентировался на целую когорту программистов-любителей, дизайнеров и новичков в компьютерном мире.»

Brendan Eich | Gen Kanai | Flickr
Brendan Eich | Gen Kanai | Flickr

«Но Марк Андреессен из Netscape, Билл Джой из Sun, я и некоторые другие убедились, что существует потребность в доступном языке, который можно внедрить непосредственно в веб-страницу», — рассказывал он InfoWorld. Или, как он пояснил для журнала Computer, «я писал что-то, что могли бы использовать люди, не представляющие, что такое компилятор. Скрипты на моем языке можно было просто запустить — и всё тут.

«Это было похоже на Basic. Именно на такой эффект мы и рассчитывали».

«Я получил приказ от отдела маркетинга сделать язык похожим на Java, но при этом не переборщить. Должен был получиться этакий непутевый младший брат Java. Его попутчик и компаньон».

Что было дальше

Как Эйх отреагировал на успех своего детища? «Когда проект начал набирать обороты, несмотря на многочисленные баги и поспешные решения, я был немного удивлён. Но шока у меня не было, потому что, если хорошенько подумать, все произошло по задуманному нами сценарию: раньше программисты могли написать веб-страницу, а теперь они могут ее запрограммировать!»

«JavaScript оказался настолько мощным, несмотря на все свои изъяны и спешку при разработке, потому что он мог напрямую управлять всеми функциями браузера, до которых так хотелось добраться веб-разработчикам». А с журналом Эйх поделился суровой правдой: «Как только продукт попадает в релиз, его баги или недоработки вскоре становятся его ключевыми особенностями, которые практически невозможно изменить безболезненно.»

«Да, из-за спешки я наделал целую кучу ошибок. Но важно другое: я предвидел, что написать язык без багов будет весьма сложно, поэтому я сделал его очень гибким и податливым. Вы всегда можете исправить проблему, если она появилась по вине JavaScript».

Как он сказал публике на dotJS: «JavaScript очень сложно найти замену. Он чем-то походит на доминантный ген. Как только он проявился, от него уже никак не избавиться».

В качестве примера он приводит «открытие» asm.js и говорит, что это ещё одна вещь, которой он чрезвычайно гордится. В нём используются битовые операторы, входившие в оригинальный JavaScript, которые теперь являются основой языка для программ высокой производительности. «Если бы этих операторов не было там с 1995 года, их было бы сложно добавить в будущем. А тот факт, что он был там с самого начала, означает, что теперь можно писать невероятно быстрые программы на JavaScript».

В интервью InfoWorld он сказал, что это и есть его «семя, заложенное в оригинальный JavaScript в те самые 10 майских дней 1995 года». 32-битные математические операторы JavaScript (известные как побитовые операторы) ведут свою родословную от языка программирования C — и от Java. В конечном итоге это привело к WebAssembly — способу преобразования инструкций в быстро исполняемый двоичный формат для виртуальных машин — и осознанию того, что в движке JavaScript «может быть два языка — старый язык, который я сделал с фигурными скобками, функциями и операторами сдвига, и этот новый язык, двоичный, не предназначенный для чтения или написания людьми. Но он может быть сгенерирован компилятором, а затем успешно выполнен».

Что бы он сделал по-другому

Спустя 23 года рефлексии, нашлось ли что-нибудь, что он сделал бы по-другому? Кто-то говорит, что он должен был отказаться работать в таком напряженном графике — или что он должен был внедрить в Netscape другой язык, например Perl, Python или Scheme — но всё это Эйху изменить не хочется. Он лишь жалеет, что не был более избирателен в отношении отзывов, полученных от первых штатных тестировщиков JavaScript.

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

«И я это натворил. Об этом я сейчас горько сожалею, потому что это нарушает важное математическое свойство, свойство отношения эквивалентности... В результате пришлось добавить второй вид оператора равенства, когда мы стандартизировали JavaScript». Одним из тех, кто помог стандартизации JavaScript, был Гай Стил, один из соавторов Scheme. «Гай сказал мне: “Не парься на этот счет. В Lisp вообще целых пять видов операторов равенства. А мы просто добавим еще один"».

Годы размышлений и наблюдений заставили Эйха взглянуть на те 10 майских дней с другой стороны. «Когда я смотрю на то, что сделал всего за 10 дней, я вижу вовсе не язык, а крохотное семя. Это было мощное, пусть и отчасти компромиссное, но всё же сильное ядро, которое выросло в полноценный язык.»

Эйх также является соучредителем сообщества Mozilla (а также фонда Mozilla Foundation, который разрабатывает проекты с открытым исходным кодом, например, веб-браузер Firefox). В 2015 году он стал генеральным директором компании Brave Software, которая создала блокирующий рекламу веб-браузер под названием Brave (его аудитория по итогам 2021 года составила 50 млн пользователей в месяц). Всё это проистекает из его стремления к конфиденциальности, хотя в конце интервью Эйх шутит, что если проследить всё до самых истоков, то JavaScript является одним из базовых элементов, которые рекламодатели используют для веб-слежки.

«Так что теперь я, как могу, компенсирую это упущение», — говорит он, смеясь.




Комментарии (8):

  1. vassabi
    /#24985116 / +12

    ох уж эти новости от гуманитариев о технологиях - всё-то они хотят рассказать в виде длинной истории с множеством слов (кто что сказал и кто что ответил :) )

  2. furtaev
    /#24985360 / -4

    Он Айк а не эйх, уже много лет такая транслитерация используется, а вы решили велосипед переизобрести? Почему бы тогда не начать писать Айнстайн?

    • Alcpp
      /#24985408 / +2

      Википедия выводит его Ейхом, да и первая страница гугла тоже.

    • snaiper04ek
      /#24986912

      В эйнштейн/айнстайн такая же ошибка как Айк/эйх. Так что либо оба с ошибкой, либо оба без ошибок. Но в языки по всему миру постоянно ассимилируются куча слов с ошибками, и никого это не парит, так что не жили богато... ой, это не та песня. Суть в том что лучше уже писать так, как изначально его и перевели, а если делать исправления всех исковерканных названий, то мы до конца декады не управимся. Вассерман который десяток лет пытается исправить на СГА, но успехов пока что не видать.

      • Devoter
        /#24987638

        Никакой ошибки при первичном переводе его фамилии не было, просто была применена не транслитерация, а транскрипция.

        • snaiper04ek
          /#24993220

          Не понял мысли. Вот же транскрипция: ˈaɪk

  3. cher-nov
    /#24988178

    Статья вновь навела на мысль, что идея о continuous delivery пользователю приложений через веб-браузер (т.н. "progressive web app") проделала довольно забавный путь. Очень грубая её хронология для меня выглядит примерно так, если говорить об её ощутимых и видимых проявлениях в мейнстриме:

    1. Active Desktop (Windows Desktop Update) - провал, т.к. толком ещё даже ресурсов по скорости процессоров и сетей не хватало, не говоря уже о понимании сути и целей.

    2. Java-апплеты / Flash - фактически основа простенького интерактивного Интернета вплоть до конца нулевых.

    3. HTML5 + JavaScript - снесло лавиной всё предыдущее как только было стандартизировано.

    А затем:

    1. Google Chrome - браузер нового типа, созданный изначально с прицелом на интерактивность, а не простое отображение описанных языком разметки страниц.

    2. ChromiumOS - попытка повторить идею Active Desktop на новой технологической базе и с более чётким осознанием концепции.

    3. Electron - возврат к истокам в виде десктопных приложений.

    То есть по итогу пришли к тому же, с чего начали, но с возможностью развёртывать один и тот же код как в сети, так и на рабочих станциях - за счёт их производительности и эффективности. Для бизнеса хорошо, для пользователя - спорно.

    Что-то ещё? Вспоминается HTA, но вживую я ничего на нём так и не увидел.
    Добавьте / поправьте, кто разбирается - всё же я не вебщик, а интернет нулевых помню лишь ребёнком, хоть и любил побродить в нём.

  4. Xardas225
    /#24989944

    Спасибо за статью. Очень интересно!