История изменений
Исправление 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/