LINUX.ORG.RU

Вышел PyPy 1.2 - интерпретатор Python, написанный на Python

 , ,


0

0

Буднично и обыденно вышла очередная версия PyPy - интерпретатора языка Python, написанного на Python.

В этой версии впервые появился JIT, благодаря которому PyPy уже обгоняет CPython в большинстве бенчмарков. Это важный этап в развитии проекта, отмечают разработчики, и хотя проект ещё далёк от практического применения, такими темпами светлое будущее не за горами.

Бенчмарки PyPy vs CPython: http://speed.pypy.org/

>>> Подробности



Проверено: boombick ()
Ответ на: комментарий от pythonist

>изменение структуры классов и объектов в процессе выполнения программы

/me представляет себе феерический дебаг

annulen ★★★★★
()
Ответ на: комментарий от annulen

>> изменение структуры классов и объектов в процессе выполнения программы

/me представляет себе феерический дебаг


если у кого-то мозг не способен осмыслить метапрограммирование и динамическое программирование в полной мере, то он может им и не пользоваться.

согласен, это нужно не часто, но когда нужно, то очень удобно. лиспы рулят, а питон в данном контесте почти лисп

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

>если у кого-то мозг не способен осмыслить метапрограммирование

Это не метапрограммирование, это попытка его имитировать когда язык его не позволяет.

theos ★★★
()
Ответ на: комментарий от annulen

>изменение структуры классов и объектов в процессе выполнения программы

/me представляет себе феерический дебаг

Ну это и в обычном питоне есть, и знаешь как-то при дебаге не сильно напрягает (оно ж не своей жизнью живя их меняет)))

Alesh
()
Ответ на: комментарий от theos

>> если у кого-то мозг не способен осмыслить метапрограммирование

Это не метапрограммирование, это попытка его имитировать когда язык его не позволяет.

ЩТО?! Какой язык? ПэХаПэ?

Alesh
()
Ответ на: комментарий от theos

>> если у кого-то мозг не способен осмыслить метапрограммирование

Это не метапрограммирование, это попытка его имитировать когда язык его не позволяет.


да ну. и метаклассы это тоже не метапрограммирование, да? модификация кода во время выполнения и интроспективные возможности это не динамическое программирование?

мисье хардкорный цппшник/жабер?

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

>модификация кода во время выполнения и интроспективные возможности это не динамическое программирование?

Про динамику ничего не писал. Спорить с тем что питон динамический язык глупо :)

и метаклассы это тоже не метапрограммирование

Нее, жалкое подобие. Настоящее - это когда у языка хватает семантической выразительности описать сущности с которыми он работает. Динамика это тот самый способ развязать узел без особого умения ;)

theos ★★★
()
Ответ на: комментарий от theos

>> и метаклассы это тоже не метапрограммирование

Нее, жалкое подобие. Настоящее - это когда у языка хватает семантической выразительности описать сущности с которыми он работает. Динамика это тот самый способ развязать узел без особого умения ;)

Ну тогда уж дайте в студию свое определение метапрограммированию и пример где это с вашей точки зрения реализовано семантически выразительно.

А то складывается впечатление, что мсье рассуждает о вкусе лангуста имея про себя ввиду главного героя детской сказки «Рики-Тики-Тави» )))

Alesh
()
Ответ на: комментарий от Alesh

>пример где это с вашей точки зрения реализовано семантически выразительно.

К сожалению, нигде не видел :)

героя детской сказки «Рики-Тики-Тави»

Блин, не читал. Как оно читается не в детском возрасте? Интересно?

Ну тогда уж дайте в студию свое определение метапрограммированию

Да к сожалению строгого дать не могу. Грань между программированием и метапрограммированием слишком размыта. Лучше чем то что сказал боюсь не дам. С моей точки зрения метапрограммирование - описание отображения сущностей из предметной области в код.

theos ★★★
()
Ответ на: комментарий от theos

>> героя детской сказки «Рики-Тики-Тави»

Блин, не читал. Как оно читается не в детском возрасте? Интересно?

Ну из вашего детства аналогичный герой Тимон из мультфильма про него и Пумбу ))) Хотя он не совсем мангуст, ну да ладно.

С моей точки зрения метапрограммирование - описание отображения сущностей из предметной области в код.

ОМГ! С вами все ясно, хотя бы потрудились посмотреть определение в педевикии до того как )))

Alesh
()
Ответ на: комментарий от Alesh

>ОМГ! С вами все ясно, хотя бы потрудились посмотреть определение в педевикии до того как )))

Мне не нравиться определение в википедии. Оно отвечает на вопрос как, а мое - почему.

theos ★★★
()
Ответ на: комментарий от theos

>> ОМГ! С вами все ясно, хотя бы потрудились посмотреть определение в педевикии до того как )))

Мне не нравиться определение в википедии. Оно отвечает на вопрос как, а мое - почему.

Метапрограммирование имеет четкое и устоявшееся определение. Которое в принципе отличается от вашего частного мнения по поводу расшифровки данного слова. Но при этом это не мешает вам заявлять, что оно это самое метопрограммирование всего лишь жалко имитируется в языке.

Сорри, но вы делаете заявление о плохом вкусе мяса мангуста в споре людей обсуждающих вкусовые качества лангустов. Дошло, нее?

Alesh
()
Ответ на: комментарий от Alesh

>Сорри, но вы делаете заявление о плохом вкусе мяса мангуста в споре людей обсуждающих вкусовые качества лангустов. Дошло, нее?

Наверно я плохо изъясняюсь. Оно плохо не потому что плохо меняет классы на лету. Меняет и не глючит, я тут не спорю. Я говорю что оно плохо этим решает насущные задачи. Метапрограммирование ценно не само по себе как факт. Я про цель, а не про средства.

theos ★★★
()
Ответ на: комментарий от theos

> Я говорю что оно плохо этим решает насущные задачи. Метапрограммирование ценно не само по себе как факт. Я про цель, а не про средства.

иными словами, вы считаете, что метапрограммирование не решает задачи «описания отображения сущностей из предметной области в код»? а вам не кажется, что это не совсем для этого инструмент?
вам не кажется, что это немного нерелевантно в контексте дискуссии?

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

>что метапрограммирование не решает задачи «описания отображения сущностей из предметной области в код»?

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

theos ★★★
()
Ответ на: комментарий от theos

> Блин, видимо я действительно так плохо изъясняюсь если по карайне мере два человека меня поняли не правильно.

Давайте что ли пример приведите. Что вы хотели сделать, какую «сущностей предметной области» пробовали реализовать, а питон вам в этом не помог? Без подкола, просто интересно.

Alesh
()
Ответ на: комментарий от Alesh

удваиваю. однако, надо отдать должное, новая формулировка заметно лучше предыдущей и вполне понятна, спасибо.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

>новая формулировка заметно лучше предыдущей и вполне понятна.

Я тоже заметил. Похоже, что собеседник познакомился с материалом. Понял, что не по теме ляпнул и теперь делает хорошую мину.

Alesh
()
Ответ на: комментарий от Alesh

>Я тоже заметил. Похоже, что собеседник познакомился с материалом. Понял, что не по теме ляпнул и теперь делает хорошую мину.

Метапрограммированием я занимался профессионально. Так что материалом немножко владею ;) Мои претензии скорее к динамическому подходу вообще и справедливы не только для питона. Да, в питоне на лету можно добавлять методы и атрибуты на лету. Конструировать на лету классы - можно одной такой динамикой. Но у этого подхода есть фундаментальный минус - вся логика происходящего будет только в вашей голове. Как следствие на основе такой модели дико неудобно или невозможно генерировать эффективный код, документацию, верификацию, спецификацию и так далее. То есть на самом деле вы не вносите в язык понятий предметной области. Вы можете сказать что метапрограммирование не об этом. Но блин, когда я говорю что на языке плохо программировать я не имею ввиду что на нем переменных нету. Я имею ввиду что на этом языке не удобно выражение концепций более высокого уровня. Так и с метапрограммированием в питоне: технически оно есть, но только много чего не позволяет.

theos ★★★
()
Ответ на: комментарий от val-amart

> лиспы рулят, а питон в данном контесте почти лисп

В данном контексте питон крайне неудобен и ограничен. Это совсем не «почти лисп», даже на «почти тикль» не тянет. Единственная техника «метапрограммирования», часто встречаемая в живом коде на питоне - это method chaining :) Порой из этого даже получается уродливое подобие декларативного мини-языка. Интроспекция, eval'ы, самомодификация кода - это конечно хорошо, но было бы странно, если бы динамический язык этого не умел. При том что вся эта магия считается дурным стилем, как мне не раз объясняли опытные питоноводы. По собственным ощущениям на питоне удобно и приятно быдлокодить, а вот метапрограммирование - отнюдь не сильная его сторона. Хотя смотря с чем сравнивать... Це с Паскалем конечно Питон рвёт на этом поле :)

Hjorn
()
Ответ на: комментарий от theos

> Метапрограммированием я занимался профессионально.

О Как! Все больше захотелось увидеть пример.

Да, в питоне на лету можно добавлять методы и атрибуты на лету. Конструировать на лету классы - можно одной такой динамикой. Но у этого подхода есть фундаментальный минус - вся логика происходящего будет только в вашей голове.

Открою вам секрет, изменять на лету методы и атрибуты класса действительно не хорошо и вредно для здоровья того кто будет разбираться с вашим кодом. Но не уже ли вы ничего не слушали к примеру о декораторах?

Так и с метапрограммированием в питоне: технически оно есть, но только много чего не позволяет.

На питоне не только простые и сложные типы являются объектами, но и функции, классы и их методы. Не наводит на мысли?

ЗЫ: Пример ждем!

Alesh
()
Ответ на: комментарий от Hjorn

>> лиспы рулят, а питон в данном контесте почти лисп

Единственная техника «метапрограммирования», часто встречаемая в живом коде на питоне - это method chaining :)

Харе уже газифицировать лужи. Напиши просто: «Пистон отстой, липс форева». Все, вопросов больше не будет )))

Лучше вон, расскажи Зеосу, что есть метапрограммирование, п то он до сих пор кажется его с математическим моделированием путает )))

Alesh
()
Ответ на: комментарий от Alesh

> Напиши просто: «Пистон отстой, липс форева»

Ну можно и так :) Питон как метаязык - это просто смешно. Особенно на фоне лиспа, ребола или форта. Или (для простых смертных) тикля. Да даже перл получше будет в этом контексте.

Лучше вон, расскажи Зеосу, что есть метапрограммирование, п то он до сих пор кажется его с математическим моделированием путает

Ничего он не путает. Он хорошо понимает основную цель метапрограммирования, которую питоньи инструменты решают плохо. Можно трактовать метапрограммирование шире, скажем кодогенерацию и внешние препроцессоры вспомнить. Но и тут Питон не на высоте со своим чудо-синтаксисом. Язык спроектирован точно не для метапрограммирования, просто его динамическая природа позволяет кое что. Я не против Питона, мне только не понятно, с чего вдруг динамический вижуал бейсик стали преподносить как «почти лисп»? Лавры лисповой илиты не дают покоя что ли?

Hjorn
()
Ответ на: комментарий от Hjorn

>> Напиши просто: «Пистон отстой, липс форева»

Ну можно и так :)

и тут Питон не на высоте со своим чудо-синтаксисом.

динамический вижуал бейсик

Походу ты читаешь «Справочник молодого тролля», раздел о Питоне?

tailgunner ★★★★★
()
Ответ на: комментарий от Alesh

>О Как! Все больше захотелось увидеть пример.

Не хочу. Я и так слишком много пиарю этот продукт)

Открою вам секрет, изменять на лету методы и атрибуты класса действительно не хорошо и вредно для здоровья того кто будет разбираться с вашим кодом. Но не уже ли вы ничего не слушали к примеру о декораторах?

Слышал. А вы видимо нет, потому что он делает так:

a.meth = decorator(a.meth)

а это как раз замена метода - что возможно и без декораторов. Да, можно не менять метод а только атрибуты добавлять. Только опять же - мы получаем все минусы динамического подхода к созданию структуру. Декоратор дает чуть более читабельнее код.

На питоне не только простые и сложные типы являются объектами, но и функции, классы и их методы. Не наводит на мысли?

Да знаю я. Только это не решает те проблемы которые я поставил. Вы по вашему описанию на питоне надорветесь тужу WSDLку строить. Особенно если у кого-то ручки шаловливые. Подробную документацию также. Ну и эффективный код не сгенирите.

theos ★★★
()
Ответ на: комментарий от Alesh

>то он до сих пор кажется его с математическим моделированием

Почему с математическим? А проблема в том, что вы не замечаете что разницы то между моделировнием и программированием метапрограммирование должно страрть. В «правильных» системах эту разницу почти и не заметишь. Если ваш язык не умеет понимать модели, то есть вводить предметные сущности, - то и метапрограммирование в нем не полноценное. Метапрограммирование решает определенные задачи, так вот питоновское метапрограммирование справляется не со всеми из них. какие - я перечислил.

theos ★★★
()
Ответ на: комментарий от theos

XML is like violence; if a little doesn't solve the problem, use more. (c)

> тужу WSDLку строить

Если так подходить к созданию себе проблем, то, безусловно, Питон не нужен.

anonymous
()
Ответ на: комментарий от theos

>> О Как! Все больше захотелось увидеть пример.

Не хочу. Я и так слишком много пиарю этот продукт)

Пример с продуктом путать начал? Про твой продукт НЕ НУЖНО, и так доставляет ))) А вот пример до сих пор хочется увидеть.

Слышал. А вы видимо нет, потому что он делает так:
а.meth = decorator(a.meth)

Это приводилось тебе как пример, что модификацию метода вполне читаемо можно сделать, в вообще-то )))

Декоратор дает чуть более читабельнее код.

Приведи пример, что дает более читабельный код в схожей ситуации.

Только это не решает те проблемы которые я поставил.

Читать о ваших проблемах, в купе с отмазками привести пример, становится все смешнее и смешнее. )))

Alesh
()
Ответ на: комментарий от theos

> проблема в том, что вы не замечаете что разницы то между моделировнием и программированием метапрограммирование должно страрть. В «правильных» системах эту разницу почти и не заметишь.

«Правильные» системы в студию с ПРИМЕРОМ!

Alesh
()
Ответ на: комментарий от Hjorn

> Питон как метаязык - это просто смешно.

Метаязык? Может быть, он просто хороший универсальный язык.

Ничего он не путает. Он хорошо понимает основную цель метапрограммирования, которую питоньи инструменты решают плохо.

Так помоги ему с рождением примера, может и действительно все так плохо )))

Лавры лисповой илиты не дают покоя что ли?

Ололо, прочитал книжку «Липс за 21 день», а все туда же, в элиту )))

Alesh
()
Ответ на: комментарий от theos

> Вы по вашему описанию на питоне надорветесь тужу WSDLку строить. Особенно если у кого-то ручки шаловливые.

Интересно а по описанию на каком динамическом, нетипизированном языке вы не надорветесь строить WSDLку? Очень хочется узнать ;)

Alesh
()
Ответ на: комментарий от Alesh

>Интересно а по описанию на каком динамическом, нетипизированном языке вы не надорветесь строить WSDLку? Очень хочется узнать ;)

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

theos ★★★
()
Ответ на: комментарий от Alesh

>Это приводилось тебе как пример, что модификацию метода

это просто синтаксичкеский сахар. более читатабельно - так я и не спорю. я так и написал.

theos ★★★
()
Ответ на: комментарий от Alesh

>Читать о ваших проблемах, в купе с отмазками привести пример, становится все смешнее и смешнее. )))

Я привел уже кучу раз: генерация документации, верификаци, построение прочих артефактов - например WSDL.

theos ★★★
()
Ответ на: комментарий от Alesh

>Пример с продуктом путать начал?

Если пример интересного решения является чьим-то продуктом то они могут совпадать.

theos ★★★
()
Ответ на: комментарий от Alesh

>может и действительно все так плохо )))

Кто говорит что плохо? Если не считать того что я не люблю динамическую типизацию, то Питон как язык мне нравится. Лисп - хороший язык для работы со списками, Питон - хороший язык для работы с хэштаблицами. Мне кажется оба вытащили из своих идей по-максимому. И лично мне Питон гораздо симпотичнее Лиспа.

theos ★★★
()
Ответ на: XML is like violence; if a little doesn't solve the problem, use more. (c) от anonymous

>XML is like violence; if a little doesn't solve the problem, use more. (c)

Да сравнивай XML с чем хочешь XML, XSD, WSDL - стандарт и это хорошо. Мог бы быть стандарт гораздо хуже. Или еще хуже отсутствие стандарта. Мнение XMLофобов как и вообще любой-технологии-фобов мне как то не очень интересно.

theos ★★★
()
Ответ на: комментарий от theos

> Как походить? Если хотеть ручками следить за соответствием кода и всдлки?

Воистину, жаба с зумелем съедают мозг.

shapka
() автор топика
Ответ на: комментарий от theos

>> А вот пример до сих пор хочется увидеть.

Да блин, я привел конкретный пример с WSDLкой.

Если это был пример, то можно и обсудить.

Если есть готовая WSDL, по построить по ней как серверную, так и клиентскую часть вполне можно (В гугле масса примеров))). А используя упоминавшиеся декораторы еще и вполне красиво. А генерить по существующему коду питона, да вряд ли получится. Хотя я себе слабо представляю необходимость такого хода.

Alesh
()
Ответ на: комментарий от theos

>> Интересно а по описанию на каком динамическом, нетипизированном языке вы не надорветесь строить WSDLку? Очень хочется узнать ;)

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

Это не проблемы, это его достоинство )))

Alesh
()
Ответ на: комментарий от Alesh

> по построить по ней как серверную, так и клиентскую часть вполне можно

Да там даже работать почти не придется ввиду того что весь контроль за соответствием все равно ляжет на программиста.

А генерить по существующему коду питона, да вряд ли получится. Хотя я себе слабо представляю необходимость такого хода.

WSDL - это просто пример с которым я сталкнулся. Когда структура меняется достаточно часто - особенно на этапе разработке, то очень удобно следить за консистенотностью. Причем как правило изменения в первую очередь в коде - по необходимости. Лично я использую как раз порождение WSDL по коду.

theos ★★★
()
Ответ на: комментарий от anonymous

>Настоящие программисты на Java могут писать на Java на любом языке.

WSDL придумал не я, не создатели джавы и не заказчик. WSDL это стандарт - в не зависимости от степени его кривизны, который лично мне (и много кому еще) нужно поддерживать вне зависимости от половых трудностей. А ругать XML это настолько общее место, что уже скушно.

theos ★★★
()
Ответ на: комментарий от anonymous

>Тебе нужно - поддерживай и крепись. Только в наш Питон не лезь.

Гвидо, ты?

theos ★★★
()
Ответ на: комментарий от theos

>> Я тоже заметил. Похоже, что собеседник познакомился с материалом. Понял, что не по теме ляпнул и теперь делает хорошую мину.

Метапрограммированием я занимался профессионально. Так что материалом немножко владею ;) Мои претензии скорее к динамическому подходу вообще и справедливы не только для питона. Да, в питоне на лету можно добавлять методы и атрибуты на лету. Конструировать на лету классы - можно одной такой динамикой. Но у этого подхода есть фундаментальный минус - вся логика происходящего будет только в вашей голове. Как следствие на основе такой модели дико неудобно или невозможно генерировать эффективный код, документацию, верификацию, спецификацию и так далее. То есть на самом деле вы не вносите в язык понятий предметной области. Вы можете сказать что метапрограммирование не об этом. Но блин, когда я говорю что на языке плохо программировать я не имею ввиду что на нем переменных нету. Я имею ввиду что на этом языке не удобно выражение концепций более высокого уровня. Так и с метапрограммированием в питоне: технически оно есть, но только много чего не позволяет.

...

Почему с математическим? А проблема в том, что вы не замечаете что разницы то между моделировнием и программированием метапрограммирование должно страрть. В «правильных» системах эту разницу почти и не заметишь. Если ваш язык не умеет понимать модели, то есть вводить предметные сущности, - то и метапрограммирование в нем не полноценное. Метапрограммирование решает определенные задачи, так вот питоновское метапрограммирование справляется не со всеми из них. какие - я перечислил.


если я хорошо понял утверждения выше, то я думаю, что создать язык «хорошо приспосабливаемый» к выражению любой модели любой предметной области невозможно, любой язык создаётся под какую-то общую, но ограниченную модель и имеет пределы «разумного» расширения.

вот относящийся к теме метапрограммирования пример, который мне интересен:
есть всевозможные интеллектуальные задачки/головоломки/итд для детей разных возрастов (от детсада до старшего школьного), нужно придумать язык, позволяющий «минимальными» усилиями создавать язык предметно-ориентированный для конкретного типа задачек, логического/лингвистического/геометрического/смешаного/итд. минимальными означает возможность реализации DSL за разумное время средним программистом, сгенерённый DSL должен:
1) быть способен описать любую задачку из области, под которую он сгенерён
2) школьник, решающий описываемые DSL задачки, должен быть способен _сам_ описать на этом DSL любую задачку из области, описываемой DSL и без помощи разработчика получить модель работающую на компьютере.
3) в общем виде тут можно наложить требование возможности описать модель задачек из любого школьного предмета, но это слишком сильно, поэтому это намёк куда двигаться

смысл описываемого примера в привлечении пользователей интеллектуальных игрушек к самостоятельному расширению набора игрушек, что позволяет к ограниченному штату разработчиков таких игрушек добавить _армию_ пользователей-разработчиков. Школы компьютеризировали, а зачем, по-большому счёту никто не знает (про откаты и распилы промолчим, нас интересует «полезный выхлоп»).

filin ★★
()
Ответ на: комментарий от filin

Что то мне таких задачек не попадалось в школьном возрасте. Достаточно странно требовать от школьника врубаться в идеи DSL - мне кажется это совсем своевременно - физика и математика для них полезней. Но это уже мое лично дело.

А можете привести пример таких задач? Очень интересно.

если я хорошо понял утверждения выше, то я думаю, что создать язык «хорошо приспосабливаемый» к выражению любой модели любой предметной области невозможно

Именно по-этому мне крайне импонирует идея Language Workbench.

theos ★★★
()
Ответ на: комментарий от filin

Кстати - ссылка в профиле у вас битая. Это так и задумано?

theos ★★★
()
Ответ на: комментарий от annulen

> /me представляет себе феерический дебаг
да всё замечательно дебажиться у питона отличный интерактивный режим и pdb и исходники читабельные и docstrings

pawnhearts ★★★★★
()
Ответ на: комментарий от theos

> А можете привести пример таких задач? Очень интересно.

дети изучают корни квадратных уравнений. Учитель на DSL описывает общее решение, и выдаёт индивидуальное уравнение каждому с помощью генератора коэффициентов в качестве дз или на контрольной. Общее решение описанное на DSL проверяет решение с заданными коэффициентами у каждого школьника и автоматом заносит оценку в тетрадку или в журнал. Имеем:
а. списать нельзя поскольку коэффициенты у всех разные,
б. у учителя появилось время объяснить доп материал поскольку проверка производится общим решением на компе.

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

проблемы:
1) задать общее решение может быть слишком тяжело
2) без контроля промежуточных шагов нельзя сказать, где учащийся ошибся и поправить его, описать модель, которая способна проверять ещё и промежуточные шаги решения может быть слишком тяжело
3) используя «подпольную программу-решалку» учащийся может «списывать» её ответы не понимая как задача была решена => нужен анализ промежуточных шагов решения учащегося, опять же усложнение задачи

в рамках тестов с выбором ответа из списка (ЕГЭ один из них) такой подход имеет право на существование

filin ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.