LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

В Си по дизайну встроен текстовый препроцессор, который ничего не знает про AST.

Так в Си и не надо.

А в питоне кодогенерация нахрен не нужна, потому что он динамический и вся магия делается в рантайме.

Кодогенерация не ради вычислений при компиляции, а ради синтаксиса.

Например, чтобы можно было сделать так:

with trace:
    sum([x + 5 for x in range(3)])

@case
class Point(x, y): pass

p = Point(1, 2)

print str(p)    #Point(1, 2)
print p.x       #1
print p.y       #2
print Point(1, 2) == Point(1, 2) # True

И это можно сделать (правда с тележкой костылей): https://macropy3.readthedocs.io/en/latest/

Исправление monk, :

В Си по дизайну встроен текстовый препроцессор, который ничего не знает про AST.

Так в СИ и не надо.

А в питоне кодогенерация нахрен не нужна, потому что он динамический и вся магия делается в рантайме.

Кодогенерация не ради вычислений при компиляции, а ради синтаксиса.

Например, чтобы можно было сделать так:

with trace:
    sum([x + 5 for x in range(3)])

@case
class Point(x, y): pass

p = Point(1, 2)

print str(p)    #Point(1, 2)
print p.x       #1
print p.y       #2
print Point(1, 2) == Point(1, 2) # True

И это можно сделать (правда с тележкой костылей): https://macropy3.readthedocs.io/en/latest/

Исходная версия monk, :

В Си по дизайну встроен текстовый препроцессор, который ничего не знает про AST.

Так в СИ и не надо.

А в питоне кодогенерация нахрен не нужна, потому что он динамический и вся магия делается в рантайме.

Кодогенерация не ради вычислений при компиляции, а ради синтаксиса.

Например, чтобы можно было сделать возможность:

with trace:
    sum([x + 5 for x in range(3)])

@case
class Point(x, y): pass

p = Point(1, 2)

print str(p)    #Point(1, 2)
print p.x       #1
print p.y       #2
print Point(1, 2) == Point(1, 2) # True

Можно сделать (правда с тележкой костылей): https://macropy3.readthedocs.io/en/latest/