На днях JavaScript исполнилось 27 лет. Вспоминаем, к чему привели эксперименты в Netscape и как этот язык программирования появился на свет.
Миллионы современных разработчиков активно используют язык программирования, который родился буквально за 10 дней в период экспоненциального развития интернета. Создатель JavaScript Брендан Эйх не так давно заново обратился к истокам созданного им языка и рассказал о том, как семена, посеянные им в 1995 году, теперь наконец-то взошли.
Итак, далекий 1995 год, совершенно другая эпоха. Да что уж там говорить — практически другой мир! Тогда Netscape даже рассматривала совокупность браузера и сервера как новый вид распределенной операционной системы, вспоминает журнал Computer. Браузеры обладали потенциалом, позволявшим разработчикам охватить пользователей на любой платформе — Windows, Mac или Linux, — но им не хватало еще одного важного ингредиента, «своего» языка программирования. Netscape очень хотелось, чтобы, помимо Java, появился еще один язык, который смог бы увлечь многих начинающих разработчиков — так же как в свое время Visual Basic от Microsoft.
Вся технологическая индустрия тогда была охвачена желанием поспеть за поразительной популярностью интернета. «В те времена темпы развития веб-инноваций были бешеными, а 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 который, между тем, ориентировался на целую когорту программистов-любителей, дизайнеров и новичков в компьютерном мире.»
«Но Марк Андреессен из 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 является одним из базовых элементов, которые рекламодатели используют для веб-слежки.
«Так что теперь я, как могу, компенсирую это упущение», — говорит он, смеясь.