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

LXF84:Интервью

Материал из Linuxformat
Перейти к: навигация, поиск

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

Ненавидите .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. Я думаю, это было чудесно.

LXF: Вы вышли из сообщества пользователей Python и занялись AspectJ. Откуда же появился IronPython?

ДжХ: IronPython начался просто для потехи. Я прочел все о новой общей языковой среде Microsoft, об этой новой классной штуке, которая появилась у Microsoft и может работать со всеми этими языками. И я над ними только смеялся, потому что я знал, что Java достаточно эффективно работает с сотнями языков. В частности, меня поразило то, что все утверждали, что с динамическими языками он работать не может. В некоторой степени это произошло из-за ранних экспериментов – попыток заставить Python и Perl работать на .NET, приведших к заключению, что это невозможно; а мне очень захотелось узнать, как это Microsoft умудрился сваять .NET настолько скверно, что он оказался даже хуже, чем JVM для работы с динамическими языками.

Я решил написать небольшую, но содержательную статью «Почему .NET – ужасная платформа для работы с динамическими языками». Это повысило бы мой рейтинг в сообществе пользователей Java, а это сообщество доставило мне бездну удовольствия и помогло мне понять структуру, когда я ею заинтересовался. Я начал этим заниматься, и вышло так же, как при разработке Jython, когда я понял, что на самом деле все работает отлично. Было и кое-что, отличающееся от начала разработки Jython: очень хороший генератор байт кода, поставлявшийся со средой времени выполнения. И производительность была очень хорошей – на 70% быст- рее, чем CPython.

Так что мне кажется, я сделал это [IronPython] не из-за потребности снова и снова реформировать Python, а из желания ответить на вызов – что, дескать, это сделать невозможно…

LXF: Так вот что сподвигло вас на это?

ДжХ: Да, а также и то, что это сработало, а потом покатилось – «Ну, это сработало, а если я еще кое-что добавлю, может, будет еще лучше?».

Так что я пошел тем же самым путем и с .NET, надо было попробовать разные способы создания многоязычной платформы. И поэтому первым моим шоком было то, что формат байт-кода в Java предполагает, что ваш исходный код написан на Java. Когда вы генерируете отладочную информацию, вы никогда не указываете, на каком языке написан этот код, потому что 99% всех людей считает, что он написан на Java. Но в байт-коде для .NET появился флажок, требующий: «Сообщите мне GUID, который вы зарегистрировали для своего языка и его реализации, потому что мы рассчитываем на использование различных языков». И снова это привело меня на тот же путь – когда отлично начинает работать то, о чем раньше говорили, что оно не может хорошо работать.

LXF: А вы не ощутили, что создание Jython и IronPython вызвало враждебность к вам со стороны сообщества пользователей Python?

ДжХ: Вы знаете, нет. Но, честно говоря, я думал, что это могло бы произойти. Я занимался Jython недолго, а потом ушел – но ушел нормально, оставив преемника, способного продолжить проект, и был уверен, что и с лицензированием, и с хостингом все в порядке, и другие смогут продолжать всем этим пользоваться и работать.

Всегда немного больно уходить из проекта, когда ты больше не можешь работать над ним, но это приходится делать, нельзя вечно быть привязанным к одному проекту. Лично я так не могу, может быть, другие и могут. Гвидо [ван Россум – Guido van Rossum, создатель Python] поступает именно так, но даже он не связан с Python слишком тесно, и он может так поступать благодаря большому пользовательскому сообществу. Вокруг Jython существует отличное сообщество, хотя и не такое большое, как сообщество пользователей CPython, поэтому и работать так же здорово у него не получается.

Однако никто не рассматривал IronPython как уход от Jython. Что мне нравится в сообществе Python – что это языковое сообщество, я думаю, наиболее открыто для различных реализаций. Они рассматривают язык – и это пошло от Гвидо – как единую крутую штуку, но реализация может быть отдельной от языка, и они действительно тепло принимают любые другие платформы. Python уже долгое время лучше всего поддерживает Windows среди «Р-языков», во многом благодаря [консультанту Microsoft] Марку Хэммонду (Mark Hammond), проделавшему огромную работу, но в некоторой степени и благодаря своему сообществу, которое утверж- дает: «Windows – отличная вещь, мы хотим, чтобы Python хорошо работал под Windows. А еще мы хотим, чтобы он отлично работал на Linux и Mac...»

Jython рассматривали как еще одну возможность для Python глубже проникнуть в ряды разработчиков Java. А что касается IronPython – похоже, его рассматривают так: «Вот отличная возможность продвинуть Python в новое крутое пространство .NET». Я не чувствую, что разработчики Jython и IronPython предаются скорби. Кто-то хотел бы моего возвращения – чтобы я все свое время посвящал Jython, но есть и такие, кто хочет, чтобы я много чем занимался.

LXF: А спрашивали: «Почему вы пошли в Microsoft?»

ДжХ: Ну, не особо. Я представил IronPython сообществу Python в марте 2004 в качестве независимого консультанта, планирующего, чем заняться дальше. А затем, через четыре-пять месяцев, я объявил на OSCon, что ухожу в Microsoft. Люди просто видели IronPython, и знать не знали, что я ушел в Microsoft, они раздумывали: «А будет ли IronPython летать?». Они понимали, что это – крутая штука, но были не совсем уверены, что это произойдет. Я тратил свое время, занимаясь консалтингом – жить-то надо, и большая часть моего времени уходила на это. Так что, я думаю, мой уход в Microsoft был воспринят как реальный шанс на процветание проекта IronPython.

Интересно, как все сложилось бы, поступи я по-другому. Если бы мое первое заявление об IronPython звучало, как «Я ухожу в Microsoft», и люди не успели бы привыкнуть к одному до того, как узнали о другом, вряд ли реакция была бы такой, как сейчас.

LXF: При работе над IronPython в MS вы прошли через GotDotNet [www.gotdotnet.com] – схему частично открытого кода (Shared Source).

ДжХ: Да.

LXF: И что вы думаете по этому поводу, есть ли разница – до и после Microsoft?

ДжХ: Не собираюсь сводить какие-либо счеты по этому поводу: GotDotNet не является моим любимым сайтом частично открытого кода (Shared Source). Я не считаю, что он – из той же лиги, что большинство сайтов разработки программ с открытым/частично открытым кодом. Я полагаю, что он просто нужен Microsoft, чтобы лучше работать в нем. Но Microsoft учится играть в этом пространстве. Это никогда не было основным бизнесом Microsoft, но Microsoft делает все больше и больше – мы создали WTL [Windows Template Library] и Flex Wiki [открытые проекты Microsoft, размещенные на SourceForge, – прим. ред.].

Мы продолжаем выяснять, насколько эффективно Microsoft может играть в этой области без тотальных изменений в своей основной деятельности. GotDotNet – пример того, что впереди очень долгий путь, по моему личному мнению.

LXF: Но, по крайней мере, они уже в пути!

ДжХ: Тот факт, что GotDotNet существует, уже здорово. Это – большой шаг в верном направлении. Но я надеюсь, что мы зайдем намного дальше. Конечно, мы сменили направление… у нас отличная обратная связь с нашими пользователями, многие из них не в восторге от GotDotNet. В списке рассылки полно сообщений с жалобами по этому поводу. А мы ответили, может быть, лишь на половину из жалоб. Мы закрыли форумы, но продолжаем поддерживать списки рассылки, чтобы сохранить возможность эффективной дискуссии.

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

LXF: Интересно, какова оборотная сторона лицензии Shared Source License? Вы говорите, что она короткая и ясная. А есть ли у нее недостатки, с точки зрения открытого кода?

ДжХ: Тот факт, что она называется Частично Открытым кодом – я думаю, это неудачно. Это скорее восприятие лицензии, а не реальность. Я не думаю, что с лицензией что-то не так. Это – лицензия в стиле BSD, я сам их предпочитаю, но вы можете применить ее к коммерческому коду, и вы не обязаны открывать свой коммерческий код всему миру, так что получается, что терминология лицензии мне очень нравится.

LXF: Значит, она похожа на LGPL? ДжХ: Больше всего она похожа на Лицензию BSD. А самой похожей, наиболее близкой, наверное, будет MPL [Mozilla Public License].

LXF: Что вы думаете о работе IronPython на Mono? ДжХ: Для начала – предисловие: все, что я вам сказал – мое личное мнение. А то, что я вам скажу, тем более мое личное мнение. Когда я заговорил об IronPython, я прежде всего сказал, что есть отличная реализация .NET. Она отличная по двум причинам. Одна – те огромные усилия, которые Microsoft в нее вкладывает, и я вижу колоссальный импульс, исходящий оттуда, и она станет очень эффективной, успешной и мощной. Вторая причина в том, что это – международный стандарт, стандарт ECMA/ISO, и это действительно стандарт, потому что есть люди, которые создают его альтернативные реализации, а не выдумывают свой. Так что для меня Mono – это частичное объяснение причины, по которой я, как разработчик языков, нахожу .NET особенно интересным. Это платформа, и она широка. В конце моего первого выступления на OSCon 2004, IronPython работал только на моем ноутбуке. Единственным компьютером в мире, на котором он работал, был мой ноутбук с Windows. К концу моего выступления его уже скачали, и он начал работать на OS X и Linux – причем эффективно работать. Мне это показалось потрясающим. А парни из Mono делают отличную работу. Производительность улучшается от релиза к релизу, и мне нравится наблюдать за этим. Здесь я это вижу.

LXF: А каково ваше будущее в Microsoft? Вы будете продолжать работу над IronPython или займетесь, ну, не знаю, SchemePython?

ДжХ: Нет, нет, лучше PhyrricPython, ладно?

LXF: PHPython? ДжХ: Python на движке PHP? Вы что, хотите, чтобы я еще и о PHP порассуждал?!.

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