Já mám takovou krásnou ukázku flexibility dynamického jazyka. Implementace funkce undo pro libovolné proměnné libovolného typu. Jak složité bude tohle implementovat ve statickém jazyce, který se používá v produkční sféře, tedy C, C++, Java, C#?
~ $ python2 history.py
var1: 4
var1 after undo: 2 <type 'int'>
var2: 4
var2 after undo: 2 <type 'str'>
~ $ cat history.py
import sys
def undo(name):
undo.data[name].pop(-1)
return undo.data[name][-1]
undo.data = {}
def history(frame, event, arg):
for name,val in frame.f_locals.items():
if name not in undo.data:
undo.data[name] = []
else:
if undo.data[name][-1] is val:
continue
undo.data[name].append(val)
return history
def main():
for i in range(5):
var1 = i
var2 = str(i)
print "var1:", var1
var1 = undo('var1')
var1 = undo('var1')
print "var1 after undo:", var1, type(var1)
print "var2:", var2
var2 = undo('var2')
var2 = undo('var2')
print "var2 after undo:", var2, type(var2)
if __name__ == '__main__':
sys.settrace(history)
main()
sys.settrace(None)