Чтение онлайн

на главную - закладки

Жанры

Кодеры за работой. Размышления о ремесле программиста

Сейбел Питер

Шрифт:

Сейбел: Итак, урок в основном таков: “Имейте план на тот день, когда ваши данные перестанут влезать в одну базу”.

Фицпатрик: Думаю, сегодня это уже общеизвестный факт в сообществе веб-разработчиков. Сейчас многие перегибают палку, считая что их сайт разрастется до неимоверных размеров. Но в то время все считали, что Apache и MySQL достаточно.

Сейбел: Думаю, вы разрабатывали все эти штуки не только по необходимости, но вам было интересно делать все это.

Фицпатрик: Конечно. Я определенно пытался найти повод применить или изучить что-то новое. Никогда не изучишь что-либо, не написав для этого программу и не начав жить и дышать этим. Одно дело выучить язык ради удовольствия, но нельзя говорить о том, что знаешь его, пока не напишешь на нем большую сложную систему.

Сейбел:

Итак, какие языки вы можете назвать своими, какими языками вы жили и дышали?

Фицпатрик: Perl. Си. Когда-то Бейсик, но не уверен, что его стоит учитывать. Еще я много писал на Лого. В школе у нас были уроки по Лого. Ребята что-то рисовали, а я сумел выйти из графического режима - это можно сделать, когда знаешь, как, - и писал функции. Учитель подошел и сказал: “Что ты делаешь? Ты должен рисовать домики”.
– “Нет, я пишу на Лого. Посмотрите”.
– “Ты все делаешь не так”. В конце урока у меня уже была библиотека, позволяющая рисовать буквы алфавита любого размера и повернутые под любым углом. Я мог выводить целые сообщения на волнистых баннерах, которые отдалялись, приближались и все такое, и все стали спрашивать: “Какого черта?” Не знаю, считать этот язык или нет.

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

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

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

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

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

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

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

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

21

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

который в значительной степени упрощает итерирование коллекций.
Прим. науч.ред.

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

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

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

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

22

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

23

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

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

Сейбел: А как насчет вопроса “ручное управление памятью против автоматического”? Об этом все еще спорят. У вас есть твердое мнение на этот счет?

Фицпатрик: По правде говоря, нет. Занятно смотреть, как люди высказывают твердое, ничем не подкрепленное мнение. Лично мне ручное управление памятью не кажется таким уж раздражающим, по крайней мере, в C++ с умными указателями. Я могу днями писать на C++, ни разу не применив явно оператор new или delete. Вот так.

Я переписал memcached, уже работая в Google, для работы с инфраструктурой Google и для добавления ее к Арр Engine [24] . Она написана целиком на C++, потому что мне было нужно очень строгое управление памятью для уменьшения фрагментации. И я очень рад возможности ручного управления памятью в C++.

24

Google Арр Engine - сервис хостинга сайтов и веб-приложений на серверах Google с помощью различных служб Google. См. http://ru.wikipedia.org/wiki/Google_App_Engine.
– Прим. науч. ред.

Сейбел: Изначально программа memcached была написана на Си. Вы переписали ее на C++, потому что этот язык предпочтительнее в Google или у него есть другие преимущества?

Фицпатрик: Сперва я хотел просто взять существующую реализацию и перенести ее на C++, но работы оказалось слишком много. Оказалось не так много кода, которым я мог бы воспользоваться, поэтому было гораздо быстрее просто переписать его на C++. Объем кода уменьшился вдвое.

Сейбел: Это из-за C++ или из-за того, что вы стали опытнее?

Поделиться:
Популярные книги

Сумеречный стрелок 8

Карелин Сергей Витальевич
8. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Сумеречный стрелок 8

Мимик нового Мира 13

Северный Лис
12. Мимик!
Фантастика:
боевая фантастика
юмористическая фантастика
рпг
5.00
рейтинг книги
Мимик нового Мира 13

Отмороженный 10.0

Гарцевич Евгений Александрович
10. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 10.0

Бывший муж

Рузанова Ольга
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Бывший муж

Безнадежно влип

Юнина Наталья
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Безнадежно влип

Гром над Академией Часть 3

Машуков Тимур
4. Гром над миром
Фантастика:
фэнтези
5.25
рейтинг книги
Гром над Академией Часть 3

Убийца

Бубела Олег Николаевич
3. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Убийца

По осколкам твоего сердца

Джейн Анна
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
По осколкам твоего сердца

Жена фаворита королевы. Посмешище двора

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Жена фаворита королевы. Посмешище двора

Последняя Арена 7

Греков Сергей
7. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 7

Возвращение Безумного Бога 4

Тесленок Кирилл Геннадьевич
4. Возвращение Безумного Бога
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Возвращение Безумного Бога 4

Варлорд

Астахов Евгений Евгеньевич
3. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Варлорд

Авиатор: назад в СССР

Дорин Михаил
1. Авиатор
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Авиатор: назад в СССР

Кодекс Охотника. Книга III

Винокуров Юрий
3. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Кодекс Охотника. Книга III