[Vienna-pm] Hausbackene Syntaxerweiterung mit Perl5?

Robert Barta rho at devc.at
Wed May 7 08:43:21 PDT 2008


On Tue, May 06, 2008 at 06:44:12PM +0200, Roland Giersig wrote:
> Zum Thema rechts-nach-links für grep/map:
> 
> autobox (http://search.cpan.org/~chocolate/autobox-2.23/autobox.pod) 
> erlaubt es, das andersrum zu schreiben, also
> 
> @cleverlies = @students->
>               grep(sub {$_->{marks} > 85})->
>               map(sub {$_->{matrikelnr}});
> 
> Vielleicht hilft dir das... :-)

Das kommt schon in die Richtung, ja. Wie gesagt, ich moechte den
syntactic noise moeglichst gering halten (deswegen auch eigene Syntax)
und vom backend moeglichst unabhaengig sein.

Uebrigens vielen Dank fuer die vielen Hinweise.

\rho

> Robert Barta wrote:
> >On Mon, May 05, 2008 at 04:41:46PM +0200, Roland Giersig wrote:
> >>Mein Beileid, wenn das dein Job ist, für .NET eine Umsetzung zu finden...
> >
> >Was sagt das ueber mich, wenn ich das freiwillig tu! :-)
> >
> >Nein, es geht darum Teile der LINQ Funktionalitaet, d.h. selber access
> >Mechanismus fuer in-memory collections, DBI backends, XML backends und
> >Topic Maps backends zu implementieren.
> >
> >Und dafuer moechte ich auch ...
> >
> >>Das größte Problem scheint zu sein, dass die Listen-Operatoren in Perl 
> >>rechts-nach-links funktionieren und .NET OO-mäßig links-nach-rechts, 
> >>also verkettete Methodenaufrufe.
> >
> >... die Syntax erweiteren. Ich verwende map/grep exzessiv, aber das
> >verkehrt von hinten nach vorn lesen/schreiben ueberless ich lieber den
> >Chinesen.
> >
> >>Aber das kann man nachbilden:
> >>
> >>@cleverlies = from(@ListOfObjects)
> >>              ->where({$_->score() > 85})
> >>              ->select({$_->matrikelnr()});
> >>
> >>from() baut ein Objekt aus den Argumenten und die Methoden führen dann 
> >>die Operationen durch, wobei sie Code-Refs als Parameter nehmen. Damit 
> >>lässt sich alles nachbilden, da .NET eine normale OO-Syntax hat. Leider 
> >>gibts noch kein Object::DotNet::Query auf CPAN...
> >
> >Tja. Nicht alles, was M$ da erfunden hat, ist Klumpert. Aber das
> >meiste....
> >
> >\rho
> >
> >>Robert Barta wrote:
> >>>On Wed, Apr 30, 2008 at 05:21:33PM +0200, Robert Barta wrote:
> >>>>On Wed, Apr 30, 2008 at 04:26:19PM +0200, Roland Giersig wrote:
> >>>>>und wie schaut das aus?
> >>>>>
> >>>>>@cleverlies = select {$_->{matrikelnr}} where {$_->{marks} > 85} from 
> >>>>>@students;
> >>>>>
> >>>>>extra bonuspunkte für diejenigen, die jetzt lachend am boden liegen, 
> >>>>>weil sie die implementation von select, where und from schon vor augen 
> >>>>>haben... ;o)
> >>>>Ja. Lustig. ;-/
> >>>Fuer alle, die lustig aus der Huefte schiessen: Es geht um diese
> >>>Liste von Operatoren:
> >>>
> >>> http://download.microsoft.com/download/5/8/6/5868081c-68aa-40de-9a45-a3803d8134b8/standard_query_operators.doc
> >>>
> >>>\rho
> >>>
> >>>>>Robert Barta wrote:
> >>>>>>On Wed, Apr 30, 2008 at 12:02:52PM +0200, Roland Giersig wrote:
> >>>>>>>Oder das alles nur per SQL abhandeln, mit DBI und einer in-memory 
> >>>>>>>SQLite DB im Hintergrund.
> >>>>>>Um SQL geht's eigentlich nicht...
> >>>>>>
> >>>>>>>Der Punkt ist: für wen sind diese Syntax-Überlegungen? Für einen 
> >>>>>>>Maintainer, der mehr SQL als Perl versteht?
> >>>>>>... sondern um einen Weg (persistente) Collections ueber _ein und
> >>>>>>denselben_ Mechanismus anzusprechen. D.h. bei
> >>>>>>
> >>>>>> @collection = from $s in @students .....
> >>>>>>
> >>>>>>ist es fuer den Programmierer egal, ob die Studis aus einer SQL
> >>>>>>Datenkrank, aus dem memory oder einem XML Dokument, oder einem RDF
> >>>>>>Graphen geholt werden.
> >>>>>>
> >>>>>>>Dem tust du keinen Gefallen, 
> >>>>>>>wenn du ihm SQL-ishe Perl-Syntax bietest, die dann doch nicht genau 
> >>>>>>>SQL ist. Da bist du besser dran, wenn du ihm einen 
> >>>>>>>Vereinfachungs-Wrapper um DBI schreibst, sodass die Operationen 
> >>>>>>>echtes SQL sind.
> >>>>>>Right. Aber fuer das gibt's ja schon nen Haufen.
> >>>>>>
> >>>>>>\rho
> >>>>>>
> >>>>>>>Robert Barta wrote:
> >>>>>>>>On Wed, Apr 30, 2008 at 08:20:23AM +0200, Thomas Klausner wrote:
> >>>>>>>>>>auf in-memory Objekte, relational DBs, XML structures, und - das
> >>>>>>>>>>interessiert mich hier hauptsaechlich - auf Topic Map und RDF KBs
> >>>>>>>>>>zugreifen kann. LINQ ist nun Teil von C# (das langsam Perl6 immer
> >>>>>>>>>>aehnlicher wird, naja langsam).
> >>>>>>>>>Naja, in Perl ist dieser Zugriffsmechanismus halt map, grep, each, 
> >>>>>>>>>etc, mit dem man auf in-memory Objekte, DBs, XML, ... zugreift.
> >>>>>>>>D.h., ich koennte das 1) einmal sehr Perl-ish angehen und etwas an
> >>>>>>>>
> >>>>>>>>  Tie::Array
> >>>>>>>>
> >>>>>>>>binden. Oder ...
> >>>>>>>>
> >>>>>>>>>In deinem konkreten Fall:
> >>>>>>>>>
> >>>>>>>>>> my @students = ....;
> >>>>>>>>>> my @cleverlies = from $s in @students
> >>>>>>>>>>                  where $s->{marks} > 85
> >>>>>>>>>>                  select $s->{matrikelnr};
> >>>>>>>>>koenntest du schon eine sub from { } machen, die die 
> >>>>>>>>>Parameterliste durchgeht, andere "keywords" wie 'where' und 
> >>>>>>>>>'select' identifziert, 
> >>>>>>>>.... 2) 'from' in the namespace laden, oder ....
> >>>>>>>>
> >>>>>>>>>From: Stefan Weiss <spaceman at foo.at>
> >>>>>>>>>Um deinen Sourcecode so umzuschreiben, dass nachher Perl rauskommt,
> >>>>>>>>>schau dir mal die Source Filter in "perldoc perlfilter" an, oder 
> >>>>>>>>>das
> >>>>>>>>>Modul Filter::Simple.
> >>>>>>>>.... 3) ein Praeprozessor einschieben.
> >>>>>>>>
> >>>>>>>>Klingt alles gangbar. Ich haette auch nicht notfalls vor
> >>>>>>>>
> >>>>>>>> @collection = new LINQ::TM ('from ...');
> >>>>>>>>
> >>>>>>>>zurueckgeschreckt.
> >>>>>>>>
> >>>>>>>><loud-thinking>
> >>>>>>>>3) Bei preprocessors habe ich immer das Problem, dass sie nicht
> >>>>>>>>  leicht immer miteinander kombinierbar sind.
> >>>>>>>>
> >>>>>>>>2) mit dem 'from' als Routine muss man analysieren, ob die 
> >>>>>>>>Parameterliste
> >>>>>>>>  mit der Syntax, die ich erreichen will, halbwegs kompatibel ist. 
> >>>>>>>>  Bei
> >>>>>>>>
> >>>>>>>>    $s->{marks} > 85
> >>>>>>>>
> >>>>>>>>  hab ich schon das Problem, dass Perl das fuer mich auswerten 
> >>>>>>>>  will, bevor
> >>>>>>>>  'from' zum Zug kommt.
> >>>>>>>>
> >>>>>>>>1) Tie::Array ist halt SEHR perl-ish. Not bad per se, aber nicht 
> >>>>>>>>Sinn der
> >>>>>>>>  Uebung hier.
> >>>>>>>>
> >>>>>>>></loud-thinking>
> >>>>>>>>
> >>>>>>>>\rho
> >>>>>>>>
> >>>>>>>>_______________________________________________
> >>>>>>>>Vienna-pm mailing list
> >>>>>>>>Vienna-pm at pm.org
> >>>>>>>>http://mail.pm.org/mailman/listinfo/vienna-pm
> >>>>>>>>
> >>>>>>>_______________________________________________
> >>>>>>>Vienna-pm mailing list
> >>>>>>>Vienna-pm at pm.org
> >>>>>>>http://mail.pm.org/mailman/listinfo/vienna-pm
> >>>>>>>
> >>>>>_______________________________________________
> >>>>>Vienna-pm mailing list
> >>>>>Vienna-pm at pm.org
> >>>>>http://mail.pm.org/mailman/listinfo/vienna-pm
> >>>>>
> >>>>_______________________________________________
> >>>>Vienna-pm mailing list
> >>>>Vienna-pm at pm.org
> >>>>http://mail.pm.org/mailman/listinfo/vienna-pm
> >>>>
> >
> 


More information about the Vienna-pm mailing list