[Vienna-pm] Hausbackene Syntaxerweiterung mit Perl5?

Robert Barta rho at devc.at
Tue May 6 00:23:43 PDT 2008


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