Журнал LinuxFormat - перейти на главную

LXF84:Интервью

Материал из Linuxformat
Версия от 17:05, 12 марта 2008; Skryabin yuri (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Железный человек

Ненавидите .NET? Джим Хаганин [Jim Hugunin] тоже ненавидел, пока сам не попробовал – после этого он написал IronPython. Что думает сообщество пользователей Python по поводу его неуемной жажды программирования?

Джим Хаганин любит программировать на Python – динамическом языке, про который он впервые услышал от разработчика Павла Кэртиса [Pavel Curtis]. Но ему нравится ещё и расширять его, и его любопытство насчет Java заставило его создать Jython, версию для Java-разработчиков. То же произошло и с .NET – Джим просто не мог поверить, что все настолько плохо, как говорят, потом убедился, что не настолько, и создал IronPython для использования с такими API, как .NET и Mono. Возможно, именно это любопытство и увело его от открытого кода, который поддерживал Кэртис, и Хаганин сейчас работает в Microsoft. И, как он сказал Полу Хадсону, не жалеет об этом.

Linux Format: Как вы считаете, что это за инстинкт в вас такой, которому все время надо заново переделывать Python?

Джим Хаганин: Это сложный вопрос. До работы над Jython я трудился над проектом под названием Numeric Python. Я тогда завершал обучение в MIT, и мне приходилось делать множество научных вычислений. Раньше я пользовался языками типа Matlab, и был серьезно расстроен тем фактом, что Matlab – отличный язык для вычислений и для многого другого, что нужно ученым… но как только надо что-то спрограммировать и требуются словари, списки и классы, он просто «ломается», и мой код в итоге получался пугающе уродливым.

В MIT я возился со многими другими языками программирования: одним из них был Scheme, а еще – Perl, Python, многие языки этого класса. И мне по-настоящему понравился Python, я начал развлекаться с его возможностью расширения объектов – очень легко расширить Python новыми объектами – и вдруг обнаружил, что могу добавлять в Python все эти числовые массивы, которые были основными в Matlab. Добавляя эти числовые массивы, я чувствовал, что, программируя на Python, программирую на Matlab. Куда бы я ни метнулся – я чувствовал мощь Python. Вот так я и «подсел» на него впервые. И это была положительная сторона.

LXF: И он работает!

ДжХ: Да, он отлично работает, и сегодня Numeric Python по-прежнему довольно широко используется. Но вот расширение языка в C меня сильно расстроило. Потому что, и это проходит красной нитью через всю историю, согласно терминологии Microsoft... «управляемый язык» (managed language) в основном означает язык, предусматривающий сборку мусора, рефлексию, безопасность типов и динамическую загрузку.

Именно этими функциями всегда и обладал Python. А вот в С их нет. В этом огромное расхождение между миром С и миром Python, так что, когда бы я ни взялся писать расширения для Python на C, всегда расстраиваюсь, потому что вдруг ни с того ни с сего приходится снова задумываться об управлении памятью или о безопасности типов. И когда я работал над этим проектом, наткнулся на Java. Впервые поглядев на Java, я подумал, что это какая-то шутка, потому что он работал ничуть не быстрее Python. При выполнении сложных вычислительных задач, например,быстрого преобразования Фурье (Fast Fourier Transform, FFT) – такие алгоритмы С обрабатывает в сотни раз быстрее, чем Python – я попробовал это делать на Java, и там эти операции проходили на той же скорости, что и в Python. И тогда я подумал: «Кому нужна смена платформы, если она не дает выигрыша по скорости?»

А потом – и это правда, хоть и кажется, что я это придумал, потому что сейчас работаю в Microsoft – именно Microsoft-версия Java убедила меня в ошибочности этого мнения. Потому что Microsoft стала первой фирмой, создавшей очень быстрый, JIT-компилятор для Java, и я стал работать с ним, и мои показатели сразу же изменились. Теперь те же серьезные и трудные вычисления на Java делались почти так же быстро, как и на С.

И я увидел все преимущества Java над С, и мне стало интересно, смогу ли я заставить Python и Java работать вместе. А окончательно убедил меня приняться за Jython Аарон Уотерс [Aaron Waters], и я очень ему обязан. Я сказал: «Круто бы вышло», а Аарон Уотерс ответил: «Да тебе нипочём не удастся заставить Python работать на JVM [Java Virtual Machine]». Я думаю, это была уловка Аарона, чтобы меня подначить – знаете, вам говорят, что нечто невозможно сделать, а это… воодушевляет.

Я уселся за работу, попробовал запрограммировать, и одним из этих сказочных проектов стал Jython. Это – один лучших проектов, над которыми я работал, потому что он становился все проще и проще, а это весьма нетипчно для проектов разработки ПО. Обычно сначала идет нечто вроде медового месяца, когда все отлично работает, а потом ты вдруг осознаешь: «Боже, я ведь забыл и про то, и про это!»

Я понял, что JVM обладает всеми функциями, которые я искал, подходящими для Python и по производительности сравнимыми с С и С++. Я открыл для себя много нового о том, как работает рефлексия, и загрузчики классов, и как вообще все это работает, и постепенно проект становился все проще. Я обнаружил, как хорош Java в качестве модели расширения, поэтому с того момента мне больше не нужен был С, теперь у меня был этот замечательный мягкий переход. Когда мне нужно было сделать что-то, как в С, я мог это сделать на Java с той же самой производительностью. Вот почему я занялся Jython. Я думаю, это было чудесно.

Персональные инструменты
купить
подписаться
Яндекс.Метрика