LINUX.ORG.RU

Гвидо ван Россум о будущем Python


0

0

ГВР как всегда смотрит в будущее и ставит в новом году перед сообществом PSF новые задачи, среди которых архиважнейшей является поддержка статической типизации в Python 3. Подробнее о потенциальных выгодах статической типизации и о трудностях которые предстоит преодолеть на пусти к ней можно прочитать в двух следующих статьях ГВР:

http://www.artima.com/weblogs/viewpos...
http://www.artima.com/weblogs/viewpos...

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

★★★

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

> Повторяю вопрос - есть интерпретатор C/C++ > http://root.cern.ch/root/Cint.html > http://root.cern.ch

> тут тебе и mультиметоды,

В плюсах? Да ещё не полных? Или Вы overloading с мультиметодами путаете?

> и символьные выражения,

Хде?

> и metaprogramming,

C++ Templates что ли? Или C preprocessor? Не смешите мои тапочки. Да, я порядком работал с C++ BOOST. Сравнивать это убожество с Лисповским defmacro - всё равно что сравнивать детский лесопед с МиГ-29...

> и нормальный REPL

Ни в жисть не поверю.

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

Читаем
http://www.lisp.org/table/glossary.htm#mop
а также
http://www.lisp.org/mop/concepts.html

>>> тут тебе и mультиметоды,
>В плюсах? Да ещё не полных? Или Вы overloading с мультиметодами путаете?

Начнем с методов (цитата из http://www.lisp.org/mop/concepts.html)
"A method metaobject contains information about a specific method"

все metaobject классы содержатся тут:
http://root.cern.ch/root/html/META_Index.html

"information about a specific method" представлена TMethod классом
http://root.cern.ch/root/html/TMethod.html

Кстати вся ROOT HTML документация сгенерирована автоматически
на основе имеено этой metaobject информации


>> и символьные выражения,
>Хде?

Примером "символьные выражения" является TFormula класс
http://root.cern.ch/root/htmldoc/TFormula.html

Живой пример, как это работает можно попробывать здесь
http://carrot.cern.ch/CarrotExamples/hsimple.root?/2764078/ntuple;1/

Наберите в поле "Expression" что-нибудь типа "sin(px)/px"


>> и metaprogramming,
>C++ Templates что ли? Или C preprocessor? Не смешите мои тапочки. Да, я порядком >работал с C++ BOOST. Сравнивать это убожество с Лисповским defmacro - всё равно >что сравнивать детский лесопед с МиГ-29...

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

>>> и нормальный REPL
>Ни в жисть не поверю.

1. запусти ROOT
2. командную строку
3. и занимайся REPLингом

Могу еще добавить, что в ROOTе есть такое мошьная концептуальная вещь, как
синалы-слоты
http://root.cern.ch/root/HowtoSignalSlot.html

которая, на пример, позволяет динамически (из интепретатора) методы
класса. У нас это называется "class connection"

Жду продолжения беседы

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

коррекция:

фраза
"которая, на пример, позволяет динамически (из интепретатора) методы "
читается как
"которая, на пример, позволяет динамически (из интепретатора) перегружать методы "

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

Добавлю, именно metaobject является ключевым моментом.
Например, это позволяет автомaтически генерить Streamer method
используемый для спасания обьектов в файл(persistency).
При этом можно записывать "Heterogeneous" обьекты с любой
степенью вложенности, как здесь (фаиловая система внутри файла)
http://carrot.cern.ch/CarrotExamples/hsimple.root?/8895343/

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

В случае с Python мы помимо самого языка и его возможностей имеем в эшелон уже готовых и мощных библиотек, которые как говориться ready to use :) А у Cint есть биндинги к wxWindows, Qt, сетевые библиотеки, шифрование, доступ к базам данных ну и аналог ZODB тоже бы хотелось :)

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

> Читаем > http://www.lisp.org/table/glossary.htm#mop > а также > http://www.lisp.org/mop/concepts.html

> >>> тут тебе и mультиметоды, > >В плюсах? Да ещё не полных? Или Вы overloading с мультиметодами > путаете?

> Начнем с методов (цитата из http://www.lisp.org/mop/concepts.html) > "A method metaobject contains information about a specific method"

> все metaobject классы содержатся тут: > http://root.cern.ch/root/html/META_Index.html

> "information about a specific method" представлена TMethod классом ? > http://root.cern.ch/root/html/TMethod.html

> Кстати вся ROOT HTML документация сгенерирована автоматически > на основе имеено этой metaobject информации

"Бобёр, ты не вкурил". Мультиметоды - это нечто совсем другое. Чем-то очень и очень издали похоже на специализацию темплейтов в плюсах, только в рантайме. Вот, например, никем не используемая попытка добавить их в плюсы - с описанием: http://www.op59.net/accu-2003-multimethods.html Язык на самом деле для таких вещей просто не предназначен, объектная модель плюсов - single dispatch или "передача сообщений".

>>> и символьные выражения, >>Хде?

> Примером "символьные выражения" является TFormula класс > http://root.cern.ch/root/htmldoc/TFormula.html

> Живой пример, как это работает можно попробывать здесь > http://carrot.cern.ch/CarrotExamples/hsimple.root?/2764078/ntuple;1/

> Наберите в поле "Expression" что-нибудь типа "sin(px)/px"

Не, а чтоньть вроде кода в виде символьных выражений? Или `(html (head (title ,document-title)) (body (h2 ,document-title) ,document-contents)) ? cons cells?

>>> и metaprogramming, >>C++ Templates что ли? Или C preprocessor? Не смешите мои тапочки. > Да, я порядком >работал с C++ BOOST. Сравнивать это убожество с >Лисповским defmacro - всё равно >что сравнивать детский лесопед с >МиГ-29...

>ROOT позволяет динамически подгружать разделяемые библиотеки. >Классы содержашиеся в этих библиотеках автоматически становятя >доступны интерпретатору, чем не defmacro?

А могу я в эти плюсы добавить чтоньть вроде, например, with_mutex_lock (my_mutex) { do_something(...); } (подразумевается автоматическая защита от повисания блокировки мьютекса при исключении)?

>>>> и нормальный REPL >>Ни в жисть не поверю.

>1. запусти ROOT >2. командную строку >3. и занимайся REPLингом

А вот я слот (data member/field в терминах убогих языков) в класс добавил, надавил F5 в емаксе (забиндено у меня так), и класс проапдейтился в работающем имейдже Лиспа, вместе со всеми существующими в данный момент instances? А? Или хотя бы то же самое сделать с простой функцией или методом? А как насчёт TRACE, TIME?

>Могу еще добавить, что в ROOTе есть такое мошьная концептуальная >вещь, как синалы-слоты >http://root.cern.ch/root/HowtoSignalSlot.html

> которая, на пример, позволяет динамически (из интепретатора) методы > класса. У нас это называется "class connection"

А в Лиспе, да вроде и в Питоне тоже (равно как и в JavaScript'е ;-) , есть такая концептуальная вещь, как lamdba и closures, и она делает эти самые сигналслоты ненужными в одних случаях, и реализуемыми в две-три строчки кода в других ;-)

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

CINT/ROOT vs Python

Вот такой флейм мне нравиться ;-)
>"Бобёр, ты не вкурил". Мультиметоды - это нечто совсем другое.

Теперь согласен, не туда посмотрел

>Чем-то очень и очень издали похоже на специализацию темплейтов в плюсах, только >в рантайме.

btw, y нас темплейты в рантайме есть. Более того есть и STL в рантайме.

>Вот, например, никем не используемая попытка добавить их в плюсы - с описанием: >http://www.op59.net/accu-2003-multimethods.html

Это просто детский лепет ...
Повторяю, у нас есть "full RTTI" - мы знaем об обьекте ВСЕ! Вплоть до
комментриев в "class declaration". Не говоря уж о том кто он такой, от
кого наследован ... вплоть до всех его пращуров.

>Язык на самом деле для таких >вещей просто не предназначен, объектная модель >плюсов - single dispatch >или "передача сообщений".

После вышеизложенного, я надеюсь Вы измените свое мнение.

>Не, а чтоньть вроде кода в виде символьных выражений? Или `(html (head
>(title ,document-title)) (body (h2 ,document-title) ,document-contents)) ?
>cons cells?

Честно, не совсем понял .. по-подробнее, plz

>А могу я в эти плюсы добавить чтоньть вроде, например, with_mutex_lock
>(my_mutex) { do_something(...); }

Угу, можно.

>А вот я слот (data member/field в терминах убогих языков) в класс добавил, >надавил F5 в емаксе (забиндено у меня так), и класс проапдейтился в работающем >имейдже Лиспа, вместе со всеми существующими в данный момент instances? А? Или >хотя бы то же самое сделать с простой функцией или методом? А как насчёт TRACE, >TIME?

Может не совсем то:
root [0] .L Tetris.dll
root [1] Tetris t

корректируем class Tetris

root[2]gROOT->Reset()
root [3] .L Tetris.dll <-- новый Tetris
root [4] Tetris t <--- играем в улучшенный Tetris

Signal-Slots:
это - концепция черного ящика со входами и выходами (чип в электронике)
Имеем 2 DLL (Tetris, Aclock) написанные разными людьми
Aclock имеет сигнал "Время_обедать"
Tetris имеет метод (в ROOTe любой метод может быть слотом) "Стоп"

root [0] .L Tetris.dll
root [1] Tetris t
root [2] .L Aclock.dll
root [3] Aclock a
root[4]a->Connect("Время_обедать()", &t, "Стоп()")

когда натанет "время обедать" - игра закончится

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

CINT - чисто интерпретатор.

Вообще этих биндингов, как грязи ...
http://root.cern.ch/root/ExApplications.html
... и нет проблем добавить еще один.

Только у ROOTа, см. http://root.cern.ch/root/Categories.html
- это не все, включая http://root.bnl.gov/

> доступ к базам данных
есть

Но, вот это http://carrot.cern.ch/~onuchin/RDBC/
я хотел бы добавить в ROOT ASAP.

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

> А вот я слот (data member/field в терминах убогих языков) в класс добавил, надавил F5 в емаксе (забиндено у меня так), и класс проапдейтился в работающем имейдже Лиспа, вместе со всеми существующими в данный момент instances? А? Или хотя бы то же самое сделать с простой функцией или методом? А как насчёт TRACE, TIME?

Круто, возьми с полки пирожок. Правда, не понимаю, чему тут удивляться.

Кусочек из моей местной xml_enhancements.py
-------------
...
from xml.dom.minidom import Element, Document

from itertools import ifilter

def innerText(obj):
.    if not obj.hasChildNodes():
.        return ''
.    else:
.        return ''.join([child.toxml() for child in obj.childNodes])

Element.innerText = property(fget = innerText,  doc = "A R/O property to retrieve inner content of an element")
...

Ну, и, разумеется, теперь все экземпляры x.d.m.Element имеют соответствующую property.

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

> которая, на пример, позволяет динамически (из интепретатора) методы класса. У нас это называется "class connection" 

Супер. А чем это лучше чем:
----------
def g(arbitrary_callback): return arbitrary_callback()

class A(object):
.    def f(self):
.         print "a.f()"

a = A()
g(a.f)
----------
за исключением более странного синтаксиса? Или я чего-то все же недопонимаю в колбасных обрезках?

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

Ну, хоть один Питон-профи показался ... может обьянит мне бестолковому
"почему Питон?".

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

0. "Питон проще".
Интерeсно, что когда Qt начали разрабатывать их QSA, на аналогичный
вопрос был примерно такой же ответ - "C/C++ - это не для л'юзеров,
а для людей with Comuting Sience Degree"

1. Другой часто встречающийся аргумент - CINT не покрывает всего
C/C++ стандарта, поэтому возникают bugs, не по вине л'юзера.
Особенно, проблемы на уровне C-preporcessorных директив #define, и пр.
Ваще, полезно прочитать http://root.cern.ch/root/Cint.phtml?limitations

В этом смысле Питон преставляется, как "bug-free langauge".
btw, гурус, так ли это?

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

2. почему-то все молчат о ZOPE?

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

Re:

> "почему Питон?".

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

Примерно так же и языки программирования ранжируются.

> 0. "Питон проще".

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

Кстати, питон, в общем, и создавался скорее как академический язык людьми с computer science degree. Другое дело, его сейчас уже можно использовать и для ремесленных поделок неплохого качества (что-то я не наблюдаю большого количества ремесленных поделок на лиспе :-)).

> 1. Другой часто встречающийся аргумент - CINT не покрывает всего C/C++ стандарта, поэтому возникают bugs, не по вине л'юзера.

Ой, это ваши личные половые трудности, с C++ стандартом :-). Вообще, в C++ стандарте есть такие моменты, которых лучше бы не было. Я даже некоторое время назад помнил страницу в последнем страуструповском издании (на русском, ну, толстая такая, в мягкой пегой обложке), что-то там с темплейтами связанное, от которой возникает вопрос "ну почему??", и ответ на этот вопрос получить было довольно сложно.

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

> "bug-free langauge"

Не, ну имплементация cpython, в общем, довольно предсказуема :-). Или про то, получаются ли на нем bug-free программы? Дак это от писателя зависит, и от того, что и как он делает, разве нет? :-)

> 2. почему-то все молчат о ZOPE?

zope. Zope. ZOPE. Так достаточно? ;-) Или чего-то другого услышать хотелось? ;-)

AlexM ★★★★★
()
Ответ на: Re: от AlexM

Re:

>>К тому же, язык по природе своей аполлонический...
А какой язык у нас тогда дионисийский? (Испуганно озираясь и шепотом) - уж не перл ли?

geekkoo
()
Ответ на: CINT vs Python от carrot

забыл, "С Рождествон Христовым!"

"... наверно, точно напьюсь ... " (ДДТ)

carrot
()
Ответ на: Re: от geekkoo

Re:

"Ты знал, ты знал" :-)

А еще есть различные вариации на тему C и, как мне показалось, ruby. В общем, ничего страшного, вопрос в том, опять-таки, в прокладке между стулом и клавиатурой :-).

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