Драматична історія Python і Zope, Програмування, Статті, Бібліотека Лінуксцентру, – експерт

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

Якось Гвідо набридло займатися цим на роботі, він пішов додому і протягом кількох воскресінь на своєму домашньому Макінтоші написав інтерпретатор іншої простої мови; він, звичайно, запозичив кілька ідей з ABC. Гвідо почав його розповсюджувати через Інтернет.

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

Мова стала швидко розвиватися, оскільки з'явилася велика кількість зацікавлених та розуміючих у розвитку мов програмування людей. Спочатку це була дуже проста мова, просто невеликий інтерпретатор, кілька функцій, був об'єктно-орієнтованого програмування, але це швидко з'явилося. Вже 1991 року з'явилися перші засоби об'єктно-орієнтованого програмування.

Через деякий час Гвідо переїхав із Голландії до Америки. Його запросили працювати до корпорації CNRI. Він там працював, використовуючи Python для тих проектів, якими займалася корпорація, а у вільний робочий час розвивав мову та інтерпретатор.

Так це тривало до появи в 1999 версії 1.5.2, коли у Гвідо в житті почалися пертурбації. Корпорація, в якійвін працював, залишала йому дедалі менше часу на розвиток Пітона, і це його перестало влаштовувати. Він виявився досить упертим фанатом власної мови :) На той час в Інтернеті склалася велика спільнота користувачів. Гвідо вирішив пожертвувати частиною зарплати і почав шукати спонсора, який дозволив би йому працювати саме над розвитком мови та інтерпретатора. І фірма BeOpen, що утворилася саме в той час, вирішила його підтримати. Він пішов, але перед виходом зобов'язався випустити версію 1.6. Це була контрактна версія, яку він мав випустити до корпорації CNRI. У BeOpen він випустив версію 2.0.

Окрім цієї активності сталося багато чого нового: з'явився Юнікод; це великий крок уперед. До Юнікод, відповідно, з'явився новий механізм регулярних виразів, який працює як для звичайних рядків, так і для Юнікодових.

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

У ньому з'явилися об'єкти мов програмування під назвою closures. Правильніше було б сказати – статично вкладені функції, що слід напевно пояснити у термінах мови Pascal, тому що у мові C такого немає, є лише функції верхнього рівня; Perl теж такого немає, хоча вкладені функції є. У Пітоні з'явилася ієрархія: можна функції вкладати одна в одну, і вони матимуть доступом до змінним оточуючих функцій, і це великий крок уперед. Він сильно змінює мову, змінює багато підходів та способів програмування.У версії 2.1 це опціонально, але у версії 2.2 це буде стандартною властивістю мови.

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

JPython - досить пізній винахід. Перша версія з'явилася після виходу Python 1.5.2. JPython – це пакет, що складається з двох частин. Частина перша – інтерпретатор Пітона, написаний на Яві. А друга - компілятор Пітона у явський байт-код. Тобто якщо мені знадобиться писати Java-аплети, я їх теж писатиму на Пітоні. :)

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

Історія виникнення фірми Digital Creations та Zope. Digital Creations підхопила Python досить рано, року приблизно 1994. І стали вони займатися розробкою комерційних інтернет-рішень. Звичайна маленька фірма, яка нічого цікавого не представляє.

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

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

Але на той час Фултон вирішив, що це соромно – мати такі протоколи, і треба створювати щось об'єктно-орієнтоване. Ось тут їм і був задуманий перший брокер об'єктних запитів, який розшифровував URL і не просто тупо дотримувався якихось простих заданих правил, але чесно в дереві об'єктів шукав потрібний об'єкт і викликав його на виконання. І Digital Creations створила два продукти – один комерційний, який вони використовували всередині, а частина цього продукту – називався він BoBo Object Publisher – вони зробили повністю відкритим.

Так воно і виявилося, тому що 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 (типу ), то нова більше схожа на XML ( ) - вона простіше. У 2.3 зроблено дуже великий крок, виник віртуальний хостинг. Якщо раніше для віртуального хостингу треба було мучитися з Apache, ставити складні модулі – модуль mod_pcgi2 або FastCgi, то зараз віртуальний хостинг можна зробити на чистому Zope.

З переходом Гвідо в Digital Creations виникає цікава тонкість - справа в тому, що Zope додав Python цікавий механізм. У Python існує дихотомія між типами даних та класами. Від класів можна успадковувати звичайним способом, від типів успадковувати не можна, і це іноді дратує. Припустимо, потрібен якийсь особливий клас-список, але від типу "список" успадковуватись не можна, тому доводиться застосовувати не дуже зручний механізм делегування.

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