LINUX.ORG.RU

Python и метапрограммирование


0

0

Хотелось бы чёткую и не слишком запутанную документацию на русском языке о сабже. Вот это http://www.ibm.com/developerworks/ru/library/l-cpdecor/index.html?S_TACT=105A... видел, но мне оно не подошло. Есть ли какие-нибудь вводные статьи по этому поводу? Спасибо.

★★

Давай честно. Метапрограммирования нет ни в одном языке, кроме lisp. И то, оно там есть только из-за скобок, не было бы скобок и такого корявенького (для не посвященных) стиля, не было бы того что имеем.

Грустно? Очень! Но у тебя есть шанс опробовать Lisp, что бы сравнить потом с тем что предлагают другие, в этом

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

>Метапрограммирования нет ни в одном языке, кроме lisp.

Надо же... Неужели есть ещё метаязыки, кроме Форта? ;)

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

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

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

Гм. Форт нужен для одного, что бы на нем написать lisp и дальше чувствовать себя белым человеком :)

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

> Давай пример задачи, а то как-то странно.

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

Статья на ibm лично мне мало чем помогла. Ну в общем, если есть что-то более простое и разжёванное - звоните (:

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

> Давай честно. Метапрограммирования нет ни в одном языке, кроме lisp.

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

2 OP:

Посмотри EasyExtend

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

>Метапрограммирования нет ни в одном языке, кроме lisp.

Ну, это вы загнули... CL, бесспорно, хорошь... Но есть же и другие языки. Тот же Meta O'Caml, Tcl, etc...

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

В Ocaml-е - это костыль сбоку. Во многих других - это формирование текста, что "родным" выглядит только у Tcl. И только в лиспе - это всё та-же работа со списками - роднее некуда.

Nemerle - это для истинных "гуру": на си/паскале подобном синтаксисе строить AST из его собственных узлов... - что там на счёт Форта?.. :))

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

> Посмотри EasyExtend

Сваргань на нём лисповый LOOP - посмотрим на количество кода.

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

> Дружище, может, следовало бы начать с определения того, что ты считаешь метапрограммированием?

Можно - я? Можно - я?! :))

Возможность _объявлять и использовать_ макры "_внутри_" базового языка (и вместе с ним) на любом уровне структуризации программы (локально по отношению к...) (библиотека/модуль/файл/функция/локальный блок кода) с возможностью не только создавать "выходной" AST, но и анализировать и произвольным образом модифицировать код, переданный самой макре. И желательно это делать проще, чем в том-же Nemerle или EE для Python.

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

Вот именно, в лиспе это просто удобнее всего.

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

Метапрограмирование это расширение базового языка до того состояния, что бы он позволял решать задачу на нужном уровне абстракции. Пример. Есть язык Си++ в нем есть шаблоны, причем тьюринг полные шаблоны, но они не могут мне помочь сделать в этом языке foreach.

Фишка lisp'а в том что ты на макросах создаешь такой же список, каким является твоя программа :)

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

Как красиво звучит, meta ocaml, когда в свою очередь ocaml это caml с объектами, а caml это диалект языка ml, который расшифровывается как meta language :)

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

> Господа, а с питоном глухо?

O_O

Ээээ.... Месье топик смотрел? Указание на ЕЕ видел? А о результатах применения доложишь через неделю... ;)

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

>> Дружище, может, следовало бы начать с определения того, что ты считаешь метапрограммированием?

> Можно - я? Можно - я?! :))

Дозволяю :D

> Возможность _объявлять и использовать_ макры

(устало) ну, теперь определи, что такое "макры"

> "_внутри_" базового языка (и вместе с ним) на любом уровне структуризации программы (локально по отношению к...) (библиотека/модуль/файл/функция/локальный блок кода)

Ну да, то есть всё метапрограммирование должно быть такое, как макры CL

"А на меньшее я не согласен" (c)

:/

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

> Дозволяю :D

Спасибо! :)

> (устало) ну, теперь определи, что такое "макры"

Такая фигня (функция/форма/х.з.), результатом выполнения которой является код (или АСТ), что и подставляется вместо вызова макры (макроса - как угодно).

> Ну да, то есть всё метапрограммирование должно быть такое, как макры CL

> "А на меньшее я не согласен" (c)

По крайней мере - не хуже :D

Хотя расти есть куда. Вон в том-же Nemerle в макрах можно анализировать типы всего и вся. Фича не для лиспа (хотя есть Qi), но весьма интересная. Но сама макросистема в нём делает её ещё более маргинальной, чем большая часть лисповых изысков...

Есть (известны мне) три "предельных" по оптимальности и лаконичности макросистем языка - тикль (текст), лисп (список), форт (слова-определения). Все не без недостатков. Но там макросистемы "родные". В большинстве остальных языков - "кастыли" и/или более громоздки (Nemerle + там некоторые ограничения).

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

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

> А зачем себя ограничивать?

Ну, это уже уклон в философию. "Не ограниченным" является только ассемблер, все остальные языки - это ограничения, наложенные с какими-то целями.

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

Да, на ассемблере ты не ограничен, как собственно, и нигде (вспомним о тьюринг полноте?)

Тут скорее вопрос в «удобстве рассширения на большом уровне абстракции», просто в Lisp, для меня, это делается максимально просто и естесвенно.

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