Favorite non-python language trick?
Roy Smith
roy at panix.com
Sat Jun 25 09:45:14 EDT 2005
Steve <lonetwin at gmail.com> wrote:
> One thing that I miss every once in a while is "pre-processing".
There are so many things wrong with preprocessing, at least if you're
thinking of the way C/C++ implements it (cpp). Cpp a number of things.
1) It does file inclusion. Pythons "import" serves that purpose and does a
better job of it.
2) It defines constants. A simple assignment in Python does that just fine
(and in C++, enums and const variables do it).
3) It does conditional compilation. Just use "if" in Python. You can even
enclose function definitions inside an "if" body.
4) It lets you do macro expansion. Just write a function in Python.
The big problem with cpp is that it essentially lets you define a whole new
language. The code that is compiled/executed isn't anything like the code
that you see on the screen. This can lead to debugging nightmares.
BTW, if you *really* want to, you can use cpp with Python. For example, I
just wrote the following little program. It's in a language I'll call
Prethon, for lack of a better name. It comes in two files:
-------------------------------
Roy-Smiths-Computer:play$ cat pp.h
#define foo(bar) mySillyFunction(bar, 0)
def mySillyFunction(x, y):
x / y
-------------------------------
and
-------------------------------
Roy-Smiths-Computer:play$ cat pp.pre
#include "pp.h"
foo(37)
-------------------------------
I can use cpp to turn this into a Python program by doing "cpp pp.pre >
pp.py". When I run that, I get a run-time exception and a stack trace:
Roy-Smiths-Computer:play$ python pp.py
Traceback (most recent call last):
File "pp.py", line 13, in ?
mySillyFunction(37, 0)
File "pp.py", line 10, in mySillyFunction
x / y
ZeroDivisionError: integer division or modulo by zero
This is really confusing. I'm looking at my source code and don't see any
calls to mySillyFunction(). In the trivial example I've given, it's
obvious that it's a #define in pp.h, but in a real-life example, there can
be hundreds or thousands of included files in a project, scattered about
all sorts of different directories you may not even know exist. Trying to
figure out what's going on becomes a nightmare.
More information about the Python-list
mailing list