Код
#статьи

Джеймс Гослинг: как создавались Java и виртуальная Java-машина

Блогер Лекс Фридман беседует с Джеймсом Гослингом о его любимых числах, разработке редактора Emacs, создании Java и JVM.

Кадр: Lex Fridman / YouTube

Лекс Фридман — англоязычный учёный-компьютерщик и подкастер. Он взял интервью у Джеймса Гослинга, разработчика Java, одного из самых популярных языков программирования. Ниже — наш краткий пересказ этого интервью.

Фридман. Я где-то читал, что ваше любимое число — это квадратный корень из двух. А что вообще красивого в числах?

Гослинг. В математике есть много красивых вещей. Ещё в юности я прочитал книгу The Penguin Dictionary of Curious and Interesting Numbers. С тех пор у меня появилась привычка считать сумму цифр на квитанциях или кредитных картах — хотелось, чтобы получилось какое-нибудь интересное число.

Фридман. А есть какие-то числа, которые нравятся вам больше всего?

Гослинг. Да, например 42 — магическое число. А ещё квадратный корень из двух, который разрушил религию пифагорейцев. Они думали, что всё на свете можно выразить рациональными числами. Но, как оказалось, не существует рациональной дроби, равной квадратному корню из двух. И это означает, что ничто в мире не идеально, даже математика. Или что определение совершенного — несовершенно.

Фридман. А в XX веке появилась теорема Гёделя о неполноте, которая опять разрушила все представления об идеальном.

Гослинг. Да, и урок, который я извлёк из теоремы Гёделя, состоит не в том, что я могу чего-то не знать. Нет, на самом деле, хотя люди предпочитают чёткие ответы в стиле «чёрное — белое», «правда — ложь», где-то действует логика трёх состояний: «правда», «ложь» и «возможно».

Фридман. Чем похожи мир математики и программирование?

Гослинг. Подобно математике, программирование ищет кратчайший путь решения задачи. Это постоянное движение по графику возможностей в попытке создать наиболее короткую программу, выполняющую свою работу. Здесь важно не только найти ответ, но и определить наилучший путь от вопроса к ответу.

Фридман. В одном из видео, которые я смотрел, вы упомянули Дона Кнута и рекомендовали почитать его книги по теории информатики. Находили ли вы красоту в его мире сложных алгоритмов? Вдохновляла ли она вас, когда вы работали над языками программирования? Или эти отвлечённые математические понятия вам не понадобились?

Гослинг. Нет, всё это пригодилось. Для меня важно посмотреть на фрагмент кода и доказать себе, что он работает, — а для этого необходимы теоретические знания. Вообще, я визуальный мыслитель: когда смотрю на код, то воспринимаю его как изображение, а не текст. Поэтому предпочитаю плотный стиль оформления кода, с минимальным числом скобок и пустого пространства — это помогает видеть функцию без скроллинга, хотя и нередко вызывает недовольство у инженеров, которые со мной работают.

Фридман. Какую программу вы написали первой?

Гослинг. Я не помню свою первую программу, зато хорошо помню первую машину, на которой работал. Это были 1970-е годы прошлого века. В углу лаборатории Университета Калгари стоял мини-компьютер PDP-8. Его не особо использовали, поэтому я мог развлекаться с ним сколько хотел. В то время он для меня был всего лишь игрушкой.

PDP-8 был первым компьютером на интегральных схемах, причём на одной интегральной схеме было 10–12 транзисторов, а не 10–12 млрд, как в современных машинах. У него была клавиатура и нечто вроде монитора, а ещё телетайп со считывателем перфоленты, около 4 килобайт оперативной памяти и процессор с тактовой частотой около трети мегагерца.

Фридман. А какие программы вы писали в Калгари и на каком языке?

Гослинг. В основном это был код на ассемблере. А на PDP-8 тогда ещё использовался язык Focal — урезанный Fortran. Я помню, как создавал программы для игры в блек-джек, пасьянсы, функции для построения графиков.

Фридман. Когда вы поняли, что действительно влюбились в программирование, какой язык показался вам самым красивым?

Гослинг. Я никогда не задумывался о том, какие языки программирования могут считаться красивыми. Ценность языка для меня определяется не столько его синтаксисом, сколько тем, что на нём можно написать. В те дни я выучил PL/1, Fortran, COBOL. В основном я работал на ассемблере и Fortran.

Фридман. Одним из величайших языков программирования вы назвали Lisp.

Гослинг. Да, я считаю, что Lisp — это один из лучших когда-либо существовавших языков программирования. Но я бы не поставил его на первое место — главным образом из-за огромного количества скобок. И хотя надо признать, что благодаря этим скобкам получается интересная языковая структура, мне кажется, где-то есть более дружелюбная версия Lisp.

Фридман. В то время кое-кто из программистов использовал Simula. Это был первый объектно-ориентированный язык программирования.

Гослинг. Да, язык Simula оказал огромное влияние на программирование. Он был не просто объектно-ориентированным — в Simula 67 уже были сопрограммы и поддерживался параллелизм. Просто потрясающе для того времени!

Фридман. Вернёмся в мир Lisp. В CMU вы написали версию Emacs, оказавшуюся весьма полезной для развития этого редактора. Что вас подвигло на это?

Гослинг. Это был 1985 или 1986 год. Я работал с Unix и использовал редактор Ed. Он был неплох — но только если для ввода-вывода данных использовался телетайп. Для остальных случаев он не годился.

Но Ed всё же был проще популярного в то время TECO — текстового редактора и корректора, который работал в командном режиме. Программа для TECO была похожа на случайный набор символов: чтобы осуществить в редакторе какое-то действие (открыть или закрыть файл, сохранить и так далее), приходилось вводить команду, состоящую из цепочки инструкций.

Первоначально Emacs был набором макросов для TECO. Макросы позволяли вызывать соответствующие команды с помощью комбинаций клавиш — это облегчало работу с редактором. Позже Emacs несколько раз переписывали на Lisp — например, был создан Multics Emacs, написанный на MacLisp.

Однажды летом мне поручили работу над компилятором Pascal для Multics. Я использовал Multics Emacs и увидел, что это отличный редактор. Когда я вернулся в CMU, где мы работали с Unix, то подумал, что неплохо было бы иметь Emacs и для этой ОС.

Так я написал реализацию Emacs на С — потому что в то время это был единственный язык для работы с Unix. Пару месяцев я работал в одиночку, потом мне стали помогать сотрудники CMU. Вскоре к созданию Emacs для Unix подключились и неуниверситетские программисты. Мы общались через ARPANET.

Когда я работал в Университете Карнеги — Меллона, вокруг ARPANET была сосредоточена большая часть общественной жизни. Она заменяла нам сотовые телефоны, электронную почту и чаты. По ARPANET мы обменивались сообщениями о том, куда пойти обедать, назначали свидания, делились новостями. Можно сказать, это была наша социальная сеть. И когда появился интернет, он не стал для нас такой уж новинкой — от ARPANET он отличался лишь масштабами. Хотя, конечно, их возможности несравнимы.

Фридман. Вы проделали огромную работу, создавая Emacs. Как вы считаете, он мог бы быть более популярным, если бы не проблемы с открытым исходным кодом и лицензированием?

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

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

Что касается Emacs — возможно, если бы я занимался только им, то стал бы сказочно богат. Но я в то время учился в аспирантуре и не хотел её бросать. На Emacs мне не хватало времени. В конце концов я передал его другим людям (издательству United Press International) с условием, что редактор будет бесплатным для школ, университетов и других образовательных учреждений.

Фридман. Я слышал, у вас напряжённые отношения с Ричардом Столлманом?

Гослинг. Да, для него идея открытого исходного кода превратилась в догму. Мне это кажется экстремизмом. А как же тысячи людей, участвующих в производстве всего — от фильмов до софта? Они тоже должны дать обет бедности, потому что информация должна быть бесплатной?

Сам я не хочу быть безумно богатым, но всё-таки я могу накормить своих детей. И мне бывает грустно от того, что исходный код закрывается, а программы становятся проприетарными. Но мне кажется, можно найти какой-то баланс — например, зарабатывать деньги на обслуживании и поддержке ПО.

Фридман. Вы создали Java — один из самых популярных языков программирования, который используется в миллиардах устройств. Расскажите историю его создания.

Гослинг. Это началось в 1991 году, когда я работал в компании Sun Microsystems. Нас беспокоило, что компьютерная индустрия уделяла мало внимания бытовой технике: мобильным телефонам, аудио-, видеооборудованию и другим устройствам, хотя у них тоже были процессоры.

Для многих приборов существовали индивидуальные пульты управления. И зачастую в доме скапливалось множество таких пультов: от телевизоров, видеомагнитофонов, музыкальных центров. Мы изучили множество разнообразных бытовых приборов и решили создать устройство, управляющее всей техникой в доме.

Я занимался созданием программного обеспечения для такого устройства. Сначала я попытался модифицировать C++ и его компилятор: что-то добавить, а что-то убрать. Но затем понял, что нужно создавать новый язык.

Главное достоинство программ на С++ — это скорость работы. А вот с надёжностью у них не так хорошо, к тому же они грешат перерасходом памяти. Многочисленные ошибки связаны с указателями, а это недопустимо, потому что надёжность — основное требование к бытовым приборам. Поэтому я взялся за создание нового языка и назвал его Oak — в честь дуба под окном. Потом название поменяли на Java.

Фридман. Одной из самых интересных вещей, созданных вами, была виртуальная Java-машина. Как такая идея пришла вам в голову?

Гослинг. Как я говорил, в начале 1990-х мы много занимались бытовыми приборами. В них были микропроцессоры разных видов. Программное обеспечение для процессоров одного вида не работало на других процессорах. Тогда мы решили создать программу, позволяющую запускать код на Java на любом процессоре.

Фридман. Но как вы осмелились взяться за такую сложную задачу?

Гослинг. Меня подтолкнуло воспоминание о летней работе, которую я выполнял ещё в аспирантуре. В одном отделе было несколько рабочих станций производства компании 3RCC с программным обеспечением на байт-коде UCSD Pascal (p-код).

Мой научный руководитель предложил адаптировать эти программы для машин с VAX-архитектурой. Предполагалось, что я перепишу их с Pascal на С. Но я решил, что гораздо проще будет перевести программы c p-кода на ассемблерный код для VAX-машин. И я написал код более высокого качества, чем тот код, который мог бы быть получен через компилятор С.

Когда мы работали над JVM, я вспомнил летнюю практику в аспирантуре и подумал, что можно было бы написать несколько переводчиков для разных видов процессоров. Так мы и поступили.

Конечно, не обошлось и без сложностей. Затруднения возникали как с целочисленной арифметикой, так и с операциями с плавающей точкой — в некоторых видах процессоров они выполнялись по-разному. Были проблемы с округлениями, с трансцендентными функциями и другие. Но постепенно мы с этим справились.

Фридман. Я хотел бы спросить у вас об Android, через который Java оказывает огромное влияние на наш мир. Довольны ли вы этим или хотели бы что-то изменить?

Гослинг. Программы на Java много лет успешно работают на сотовых телефонах. Но руководство Android много раз нарушало условия контрактов и преступало закон. Не стоило этого делать — последовали громкие судебные процессы, а компания понесла убытки.

Фридман. Какой совет вы дали бы молодым инженерам-разработчикам?

Гослинг. Не бояться риска. Делать глупости один, два и даже три-четыре раза — это нормально. Так приобретается опыт.

Проверьте свой английский. Бесплатно ➞
Нескучные задания: small talk, поиск выдуманных слов — и не только. Подробный фидбэк от преподавателя + персональный план по повышению уровня.
Пройти тест
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована