[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