Выбрать главу

Но я много писал на Perl и на Си, потом в колледже много писал на C++ по работе и для Windows. Потом я забыл C++, за ненадобностью, но за последний год, работая в Google, я много писал на C++, Python и Java. Я много писал на Java, когда этот язык только появился, но потом он мне осточертел. Сейчас я опять много пишу на Java, и он меня уже снова достал.

Сейбел: Насколько для вас важен язык, на котором вы пишете?

Фицпатрик: Полностью мне все еще не нравится ни один из них. И я не знаю, какой язык понравился бы мне полностью. Мне не нравится, что в текущем проекте приходится перепрыгивать с одного языка на другой. Я хочу статически типизированный язык, который бы проверял все во время компиляции, когда я этого захочу. Perl очень близок к этому — он позволяет мне кодировать так, как я хочу. Он не выполняет достаточное количество проверок во время компиляции, но я могу заставить делать их во время выполнения. Но и он все же недостаточно хорош.

Я хочу необязательную статическую типизацию. В Perlbal нет нужды в высокой производительности половины всех возможностей, за исключением ядра и копирования байтов туда-сюда. Я хочу, чтобы у меня была возможность во время выполнения давать подсказки в определенных частях кода и объявлять типы. Но если мне лень и хочется что-то протестировать, то могу оформить код соответствующим образом.

Сейбел: То есть типы вам нужны в основном, чтобы улучшить оптимизацию кода компилятором?

Фицпатрик:. Нет. Я хочу, чтобы компилятор говорил мне что-то вроде: «Ты делаешь глупость». Но иногда мне плевать на такие предупреждения и я хочу заставить код выполняться независимо ни от чего. Не хочу показаться слишком большим оптимистом по поводу Perl 6, но они обещают много вещей, которых мне не хватает. Правда, не думаю, что он вообще когда-либо будет выпущен.

Сейбел: А C++ вам нравится?

Фицпатрик: Даже говорить о нем не хочу. Жуткий синтаксис, совершенно непоследовательный, а сообщения об ошибках — по крайней мере компилятора GCC — просто нелепы. Можно получить 40 страниц сообщения только потому, что забыл поставить точку с запятой. Но, как и во многих других случаях, основные шаблоны быстро запоминаешь. Даже не вчитываешься в слова, а просто смотришь на структуру сообщения и понимаешь: «Ага, кажется, я забыл закрыть пространство имен в заголовочном файле». Думаю, новая версия спецификации C++, хотя и добавляет огромное количество сложностей, содержит много всего, что сделает процесс ввода не таким мучительным, по крайней мере, потребуется меньше стучать по клавишам. Переменные auto и нововведения в циклах for[21]. Очень напоминает Python. И лямбда-выражения. Можно даже подумать, что пишешь на Python, а не на C++.

Сейбел: А C++ вы используете из-за его эффективности.

Фицпатрик: Скорее всего, да. В основном я пишу на нем в Google. Там все, что более или менее требует производительности, пишется на C++. Кроме того, в Google я много пишу на Java.

Сейбел: Насколько я понимаю, в компании Google сложилась «С++-центрическая культура», поскольку они использовали этот язык с самого начала, построив на его основе обширную программную инфраструктуру. Хотя и нельзя просто так взять и забыть свою историю — пожалуй, на C++ в Google написана значительная часть кода, которая не требует такой эффективности.

Фицпатрик: Особенно учитывая, что со временем Java стал быстрее, a JVM — значительно умнее. В Java мне не нравится то, что у всех сложилось стойкое отвращение к JNI[22]. Есть библиотеки на C++. Разработчикам, использующим Python, как внутри компании Google, так и за ее пределами, все равно. Их первая мысль: «Да мы просто обернем все это с помощью SWIG[23]». У них есть собственный путь, и они счастливы. Разработчики на Python могут сразу же использовать все, что написано на C++, потому что они не относятся так благоговейно к языку источника.

А сторонники Java говорят: «Надо писать только на чистом Java. Мы не можем использовать JNI, потому что если JVM рухнет, то мы не узнаем, почему». Проблема в том, что все приходится писать дважды — один раз для C++, Python и прочих языков, а второй раз для Java. Так что если они найдут хороший способ взаимодействия или избавятся от страха перед JNI, то я не буду иметь ничего против Java.

вернуться

21

Имеется в виду новая версия языка C++, которую в настоящее время принято называть C++ Од:. Ключевое слово auto позволяет не указывать явно тип, вместо этого компилятор определит его автоматически (строгая типизация сохраняется). Что касается циклов, то здесь речь идет о так называемом range-based for, который в значительной степени упрощает итерирование коллекций. — Прим. науч.ред.

вернуться

22

JNI (Java Native Interface) — инфраструктура, позволяющая взаимодействовать коду внутри JVM с «неуправляемым» (native) кодом, таким как API операционной системы или любой код на Си или C++. — Прим. науч. ред.

вернуться

23

SWIG (Simplified Wrapper and Interface Generator) — инструмент с открытым исходным кодом, предназначенный для взаимодействия языков программирования C/C++ с языками сценариев, такими как Tel, Perl, Python, Ruby и др. — Прим. науч.ред.