Драматическая история Python и Zope

Олег Бройтман

История языка Python

Все началось в 1990 году, когда сотрудник голландского института CWI, тогда еще мало кому известный Гвидо ван Россум участвовал в проекте создания языка ABC. Язык был предназначен для замены языка BASIC, для обучения студентов основным концепциям программирования.

Как-то Гвидо надоело заниматься этим на работе, он пошел домой и в течение пары воскресений на своем домашнем Макинтоше написал интерпретатор другого простого языка; он, конечно, позаимствовал некоторое количество идей из ABC. Гвидо стал его распространять через Интернет.

На раннем этапе подключился довольно известный в Интернете человек Стив Маевский, который до 1996 года вел в Интернете страничку "Сравнительная критика языков программирования". Он тоже был (и до сих пор остается) поклонником Макинтоша, возможно, это их и сблизило с Гвидо. Гвидо в ту пору был фанатом комедийной серии BBC "Воздушный цирк Монти Пайтона" и назвал свой язык в честь Монти Пайтона или по-нашему, Питона (а не в честь змеи).

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

Через некоторое время Гвидо переехал из Голландии в Америку. Его пригласили работать в корпорации CNRI. Он там работал, используя Python для тех проектов, которыми занималась корпорация, а в свободное рабочее время развивал язык и интерпретатор.

Так это продолжалось до появления в 1999 году версии 1.5.2, когда у Гвидо в жизни начались пертурбации. Корпорация, в которой он работал, оставляла ему все меньше и меньше времени на развитие Питона, и это его перестало устраивать. Он оказался довольно упертым фанатом собственного языка :) К тому времени в Интернете сложилось немалое сообщество пользователей. Гвидо решил пожертвовать частью зарплаты и стал искать спонсора, который позволил бы ему работать именно над развитием языка и интерпретатора. И образовавшаяся как раз в то время фирма BeOpen решила его поддержать. Он ушел, но перед уходом обязался выпустить версию 1.6. Это была контрактная версия, которую он должен был выпустить в корпорации CNRI. В BeOpen он выпустил версию 2.0.

Версия 2.0 - это довольно большой шаг вперед, но в первую очередь в социальном плане. В этой версии самое главное, что процесс развития языка и интерпретатора стал более открытым. Гвидо перевел все на SourceForge. Процесс развития всех альфа версий стал виден гораздо большему количеству народа. Сообщество пользователей выросло и оно стало требовать возможности участия в развитии языка, и Гвидо на это пошел.

Кроме этой активности произошло много чего нового: появился Юникод; это большой шаг вперед. К Юникоду, соответственно, появился новый механизм регулярных выражений, который работает как для обычных строк, так и для Юникодовых.

Через некоторое время и в BeOpen начались проблемы. Они тоже решили, что Гвидо хорошо бы зарабатывать деньги, а не заниматься всякой фигней :) а Гвидо это не понравилось, он опять уволился и стал искать, куда бы ему податься. Это был большой шаг для него лично, потому что при переходе из корпорации CNRI в BeOpen он одновременно женился, поэтому в следующий раз уволиться ему было тяжелее.

Тем не менее, он это сделал. А вместе с ним два раза увольнялись и переходили на новую работу еще 5 человек - команда разработчиков Питона, такие же упертые и влюбленные в язык - Tim Peters, Jeremy Hilton, Barry Warsaw, Fred Drake. Уволились и опять стал искать место, где бы они мог развивать язык, не обращая внимания, или как можно меньше обращая внимания на коммерческие проблемы. И тут Digital Creations - авторы Zope, решили его принять к себе. И, как в это время выяснилось, они его приглашали уже в пятый или шестой раз, и Гвидо сказал, что, наверное, пора дать им шанс. И все решили, что пора, потому что авторам Zope самим Python очень нужен, и чтобы его не терзать они дадут Гвидо возможность работать. Возможность у него есть, потому что уже вышел Питон 2.1, тоже очень большой шаг по сравнению с Питоном 2.0.

В нем появились объекты из языков программирования под названием closures. Правильнее было бы сказать - статически вложенные функции, что следует наверное объяснить в терминах языка Pascal, потому что в языке C такого нет, есть только функции верхнего уровня; в Perl тоже такого нет, хотя вложенные функции есть. В Питоне появилась иерархия: можно функции вкладывать друг в друга, и они будут иметь доступ к переменным окружающих функций, и это большой шаг вперед. Он сильно меняет язык, меняет многие подходы и способы программирования. В версии 2.1 это опционально, но в версии 2.2 это уже будет стандартным свойством языка.

Вобщем, движется все вперед довольно интенсивно в последнее время, так что упертость Гвидо сделала свое дело :) несмотря на два увольнения. В этом он молодец.

Jpython

JPython - довольно позднее изобретение. Первая версия появилась уже после выхода Python 1.5.2. JPython - это пакет, состоящий из двух частей. Часть первая - интерпретатор Питона, написанный на Яве. А вторая - компилятор Питона в явский байт-код. То есть если мне понадобится писать Java-апплеты, я их тоже буду писать на Питоне. :)

Mailman

Mailman - еще одна из известных программ, написанных на Питоне. Mailman - это программа управления списками рассылки (mailing list manager). Кроме почты, Mailman имеет web интерфейс для управления подпиской, индивидуальными настройками подписчика, административными программами. Mailman оказался так хорош, что стал официальным менеджером списков рассылки проекта GNU.

Zope

История возникновения фирмы Digital Creations и Zope. Digital Creations подхватила Python довольно рано, в году примерно 1994. И стали они заниматься разработкой коммерческих интернет-решений . Обычная маленькая фирма, ничего интересного из себя не представляющая.

В 1996 году к фирме присоединился Джим Фултон, ничего не знающий о разработке интернет-решений, но довольно хорошо разбирающийся в Питоне, в тонкостях реализации, и вообще - человек, хорошо понимающий языки программирования. Твердый сторонник объектно-ориентированного подхода, он хорошо его понимает и хорошо умеет его использовать.

Одно из первых дел, с которого он начал - ему предложили где-то прочитать лекцию по протоколу CGI, а он ничего о CGI не знал, и, пока они летели в самолете, Пол Эверит, начальник (CEO) Digital Creations, прочел ему лекцию о CGI. С этой лекцией в голове Джим Фултон поехал на конференцию, где он должен был эту лекцию прочесть, успешно ее прочел, а после лекции подошел к Эвериту и к другим членам Digital Creations, ужаснулся и сказал: "это что ж за протокол такой!" Его поразил протокол CGI своей чрезмерной простотой. Хотя надо сказать, что во многом именно благодаря этой простоте WEB стал тем, что мы имеем сейчас.

Но к тому времени Фултон решил, что это стыдно - иметь такие протоколы, и надо создавать что-то объектно-ориентированное. Вот тут-то им и был задуман первый брокер объектных запросов, который расшифровывал URL и не просто тупо следовал каким-то простым заданным правилам, но честно в дереве объектов искал нужный объект и вызывал его на выполнение. И Digital Creations создала два продукта - один коммерческий, который они использовали внутри, а часть этого продукта - назывался он BoBo Object Publisher - они сделали полностью открытым.

Долгое время все, что они делали, развивалось у них внутри. Они занимались коммерцией, делали сайты, продавали свою коммерческую программу, давали по ней консультации, и за счет этого делали деньги. В основном ориентировались на новостные сайты, так сложилось. Потом они решили, что пора и остальную часть коммерческого софта, который у них есть, открывать, и в августе 1999 года они опубликовали то, что стало Zope версии 1.9. Они так же объявили, что на подходе версия 2.0, которая будет совсем открыта.

Так оно и оказалось, потому что 1.9 была под менее открытой лицензией, в ней было обязательно иметь на сайте ссылку на Digital Creations. А в 2.0 было уже необязательно, просто рекомендовано. То есть исходники стали совершенно свободными, бери Zope, ставь его, используй и вперед - наслаждайся жизнью. :) Они тоже не сразу все открыли. Первоначально была открыта довольно большая часть Zope, но некоторые значительные компоненты, которые на самом деле в маленьких сайтах особо не нужны, а нужны только для крупных сайтов, долгое время не открывали. Например, компонент ZTable, для манипуляций с большими таблицами данных, компонент Zope Enterprise Option для кластеризации нескольких инсталляций Zope в один большой сайт. Через некоторое время ZTable, совсем перестали развивать, а Zope Enterprise Option был открыт, то есть теперь его также можно скачать, как все остальное, и использовать.

Сейчас почти не осталось каких-то закрытых частей. Все исходные тексты раздаются, а деньги они делают за счет создания сайтов или консультаций по своим продуктам. Сами же они говорят, что с тех пор, как они открыли Zope, их бизнес увеличился в 3 раза!

При переходе от версии 1.9 к 2.0 кроме лицензии мало что изменилось. Но в течении 2000 года пользователи и разработчики довольно быстро подхватил исходники Zope, стали их развивать, и версия за версией вышли 2.1 и 2.2. Произошли довольно значительные изменения, появился и новый язык шаблонов: если старый язык шаблонов у них больше похож на Apache SSI (типа <!--#var foo-->), то новый больше похож на XML (<dtml-var bar>) - он проще. В 2.3 сделан совсем большой шаг, появился виртуальный хостинг. Если раньше для виртуального хостинга надо было мучиться с Apache, ставить сложные модули - модуль mod_pcgi2 или FastCgi, то сейчас виртуальный хостинг можно сделать на чистом Zope.

С переходом Гвидо в Digital Creations возникает интересная тонкость - дело в том, что Zope добавил в Python интересный механизм. В Python существует дихотомия между типами данных и классами. От классов можно наследовать обычным способом, от типов наследовать нельзя, и это иногда раздражает. Допустим, нужен какой-то особенный класс-список, но от типа "список" наследоваться нельзя, поэтому приходится применять не очень удобный механизм делегирования.

А в Digital Creations тот самый Джим Фултон написал механизм ExtensionClass, который залезает глубоко в интерпретатор Python и позволяет от типов наследоваться. Не совсем обычным образом, правда, то есть это все еще не совсем наследование. Но это наполовину решение проблемы. С переходом Гвидо в Digital Creations этот механизм, наверное, будет доведен до ума, и дихотомия между типами и классами исчезнет совсем, и все объекты станут нормальными классами.

Content

Драматическая история Python и Zope

История языка Python

Jpython

Mailman

Zope