Thread Schon jetzt an Perl 6 denken
(41 answers)
Opened by Gast at 2008-12-12 20:52
@LanX: Ich gebe mal ein relativ sinnfreies Beispiel, das aber verdeutlicht, welches Problem man zu loesen versucht: Angenommen, wir wollen ein Makro haben, das von
in Code: (dl
)
1 do { expandiert. Ohne Hygiene ist es nun so, dass bei jedem Aufruf dieses Makros der eingebettete Benutzercode die Variable $tmp sieht, die ihn aber nichts angeht. Insbesondere schreibt eventuell ein ahnungsloser Programmierer, der den Quellcode des Makros nicht kennt, mal so etwas hin: und wundert sich dann, warum er auf seine eigene lexikalische Variable $tmp nicht mehr zugreifen kann. Man sieht also, dass das Problem, das durch lokale Variablen geloest wird, in Anwesenheit von Makros komplizierter wird, da Makros ja effektiv Code in andere Geltungsbereiche injizieren. Ein hygienisches Makrosystem wuerde mir nun aber erlauben, mein Makro foo ganz natuerlich hinzuschreiben, in Phantasiesyntax zum Beispiel als Code: (dl
)
1 macro { foo <block> } = { und die lokale Variable $tmp automatisch so umbenennen oder markieren, dass sie in der Expansion von <block> nicht sichtbar waere. When C++ is your hammer, every problem looks like your thumb.
|