5 ms·
> I am truly, truly horrified that this a language option in perl, although I'm not surprised. How about this in C(and thousand others): #define if while
by irahul 15y ago
> I am truly, truly horrified that this a language option in perl, although I'm not surprised.
How about this in C(and thousand others):
#define if while
I am pretty sure I can find something to horrify you in almost any language.
- pyre 15y agoOr more subtly: #define break continue Or Ruby: irb(main):001:0> if 0 irb(main):002:1> print "True!" irb(main):003:1> end True!=> nil (Though the Ruby example probably not as horrific as the others)
- rat 15y agotrue the ruby should be a type error
- Jach 15y agoLet's throw in a fun Python hack too: >>> import sys >>> import ctypes >>> pyint_p = ctypes.POINTER(ctypes.c_byte*sys.getsizeof(5)) >>> five = ctypes.cast(id(5), pyint_p) >>> 2 + 2 == 5 False >>> five.contents[five.contents[:].index(5)] = 4 >>> 2 + 2 == 5 True
- phzbOx 15y agoMay I ask how did you find about that? Sometime I would like to play in ctypes but I'm not sure where to start :-/ Here's a small snippet that let you add methods to built-ins: def inject(cls, wrapper=lambda x: x, name=None): def _builtin_hack(name): import ctypes as c _get_dict = c.pythonapi._PyObject_GetDictPtr _get_dict.restype = c.POINTER(c.py_object) _get_dict.argtypes = [c.py_object] return _get_dict(name).contents.value def wrap(method): name_ = name or method.func_name method = wrapper(method) try: setattr(cls, name_, method) except: _builtin_hack(cls)[name_] = method return wrap @inject(dict) def extend(self, new_dict): return dict(self, **new_dict) print {'a':2}.extend({'b':3})
- Jach 15y agoctypes is like god-mode for Python... I like your hack too. I just play around with it from time to time, I believe the only "serious" thing I've done with it so far is making a Python interface around a C library I made. I think I discovered the hack when I found out about the id() function, and hex(id(5)) looked suspiciously like a pointer value. (And http://docs.python.org/library/functions.html#id http://docs.python.org/library/functions.html#id confirms.) http://docs.python.org/library/ctypes.html http://docs.python.org/library/ctypes.html has usually been pretty useful. Apart from that, just play.
- MostAwesomeDude 15y agoYou can do anything in ctypes, though. :3 $ python -c "import ctypes; ctypes.memset(0, 0, 42)" Segmentation fault
- Sharlin 15y ago#defining reserved words is not permitted by standard C (or C++), although compilers do allow it in practice. Anyway, it's a totally different thing to abuse a general-purpose feature to do horrible thing X than to have a specific feature, only useful for doing horrible things, built into the language.