Leser: 13
![]() |
|< 1 2 3 4 5 >| | ![]() |
42 Einträge, 5 Seiten |
murphy+2008-12-14 16:03:23--Cool, muss ich mir unbedingt mal anschauen :-)
murphy+2008-12-13 16:11:01--moritz+2008-12-13 10:52:23--[...]
Wie kommst du auf die Idee, dass Perl 6 kein vernünftiges Makro-System habe?
Nun, Perl6 hat zwar ein Makrosystem, bei einer Sprache mit Operatoren und komplexer Syntax ist es aber fast unmöglich, das vollständig hygienisch und nicht-intrusiv zu gestalten. Ich denke zwar, dass das neue auf Patterns basierende Makrosystem von Perl 6 gegenüber Quellcodefiltern in Perl 5 eine riesige Verbesserung darstellt, es ist aber meiner Meinung nach von hygienischen Makrosystemen wie man sie vor allem in modernen Schemeimplementationen findet, noch weit entfernt.
QuoteQuoteUnd hat Lisp Junctions,
In der Regel nicht eingebaut. Mit CLOS und / oder Makros ist sowas aber in wenigen Zeilen Code implementierbar. Genauso einfach, wie man bei Bedarf zwischen eager und lazy evaluation wechseln kann oder ähnliches.
QuoteQuoteKontextsensitivität und
Ich bin nicht sicher, was Du hier meinst. Wenn es Dir um Konstrukte wie den "intelligenten" Matchoperator geht, so bin ich mir noch nicht so ganz sicher, ob ich den nicht eher gefährlich unberechenbar finde, solange er keine echte KI eingebaut hat ;-)
QuoteQuoteUnicode-Support auf Grapheme-Level?
Sowas haben doch heute die meisten Programmiersprachenimplementationen, im Zweifelsfall in irgendeiner Bibliothek.
QuoteQuote(Meistens wenn ich Leute über Perl 6 lästern sehe, habe ich den Eindruck, dass sie ziemlich schlecht informiert sind).
Erstens habe ich nicht behauptet, besonders gut über Perl 6 Bescheid zu wissen, sondern lediglich einen allgemeinen Eindruck geschildert, der sich nichtmal ausschließlich auf Perl 6 bezog, sondern mehr meine allgemeine Verwunderung über teilweise wenig Innovation im Programmiersprachensektor zum Ausdruck brachte. Außerdem hatte ich meine Bemerkung ja mit einem Augenzwinkern versehen um kenntlich zu machen, dass ich die Kritik nicht tierisch ernst meine, sondern absichtlich überspitzt formuliert habe.
Zweitens kann ich wohl guten Gewissens umgekehrt behaupten, dass die meisten Leute die über Lisp oder Scheme lästern wohl auch noch nie eine moderne Implementation dieser Sprachen zu Gesicht bekommen haben [1]. In vielen Fällen regt man sich sogar nur über die Syntax auf, die aber meiner Meinung nach mehr eine Gewöhnungsfrage ist und bisweilen ihre Vorteile hat.
moritz+2008-12-14 19:49:46--In welcher Hinsicht ist es davon weit entfernt?
Ich weiss nicht, was man mehr als Macros mit lexikalischem Scope, definierter precedence und der Fähigkeit, einen Syntax-Tree zurückzugeben braucht, daher frage ich.
lichtkind+2008-12-14 20:26:10--moritz+2008-12-14 19:49:46--In welcher Hinsicht ist es davon weit entfernt?
Ich weiss nicht, was man mehr als Macros mit lexikalischem Scope, definierter precedence und der Fa:higkeit, einen Syntax-Tree zuru:ckzugeben braucht, daher frage ich.
ich vermute er nimmt den punkt das p6 macros nicht hygienisch sind sehr wichtig. kein schelchtes feature von dem ich in synopsen noch nichts geho:rt haben, ko:nnte man mal in die diskussion einbringen.
lichtkind+2008-12-14 20:26:10--ich vermute er nimmt den punkt, daß p6 macros nicht hygienisch sind, sehr wichtig.
moritz+2008-12-15 13:55:55--[...]
Bei Perl 6 ist es so, dass die Symbole verwendet werden, die im lexikalischen Scope gelten, in dem das Makro definiert wird. Ist es damit hygenisch?
murphy+2008-12-15 17:27:19--Das ist zum Beispiel wichtig, wenn man ein Makro schreibt, das eine temporaere Variable anlegen und im Geltungsbereich dieser Variable an das Makro uebergebenen Code einbetten muss. Es sollte dann moeglich sein, die Variablendeklaration einfach hinzuschreiben, aber trotzdem sicher zu sein, dass sie nur innerhalb des vom Makro generierten Codes nicht aber im eigebetteten Code sichtbar ist.
1
2
3
4
5
6
do {
my $tmp = new FooMatic::Object();
$tmp->enter();
# benutzercode
$tmp->leave();
}
1
2
3
4
5
6
7
8
macro { foo <block> } = {
do {
my $tmp = new FooMatic::Object();
$tmp->enter();
<block>;
$tmp->leave();
}
},
![]() |
|< 1 2 3 4 5 >| | ![]() |
42 Einträge, 5 Seiten |