pugs.blogs.com | pugscode.org | pugs.kwiki.org | paste: sial.org/pbot/perl6 | <stevan> Moose... it's the new Camel ":P | .pmc == PPI source filters! Set by Alias_ on 16 March 2006. |
|||
00:01
jdrago left
00:06
JohnDrago joined
00:56
nirgle joined
|
|||
svnbot6 | r9873 | fglock++ | PC-Tokenizer - more tests; failing match stringification | 00:57 | |
00:57
nirgle left
01:08
ayrnieu joined,
Quell joined
|
|||
meppl | gute nacht | 01:12 | |
01:30
hexmode joined
|
|||
audreyt | 'morning | 01:45 | |
Steve_p | Good evening :) | 01:48 | |
01:48
xern joined
01:49
xern joined
01:50
frederico joined
|
|||
dduncan | good 6:51pm | 01:51 | |
audreyt | :) | 01:54 | |
emeijer++ # very nice memoir to which I agree 150% | 01:56 | ||
# research.microsoft.com/~emeijer/Pap...ICFP06.pdf | |||
dduncan | what in the who now? | 01:58 | |
audreyt | what? | ||
dduncan | I'm just starting to look at that link ... | 01:59 | |
02:00
stclare joined
|
|||
dduncan | but speaking for relational databases, there is no such thing as a impedence mismatch between them and ordinary programming languages or objects if the system is built properly | 02:00 | |
on that note, I'm borrowing many pages from functional programming in my design of Rosetta | |||
audreyt | right. same can be said of O/X | 02:01 | |
it's just "properly" designed systems are rare to comeby | |||
dduncan | and in Rosetta, I'm trying to build a proper system | ||
audreyt | *nod* | ||
dduncan | that *is* relational, but can represent anything natively | ||
existing (SQL) systems are half-baked | 02:02 | ||
and hence we have all these impedence mismatches | |||
audreyt | *nod* | 02:03 | |
dduncan | now, as I'm trying to borrow from Haskell et al, but don't know Haskell much, I have a few questions for you | ||
audreyt | sure | ||
dduncan | first of all, the meaning of a 'pure' function ... | 02:04 | |
in Haskell, is there such a thing as 'global' variables, besides monads? | |||
audreyt | a pure function is one that always returns the same thing given the same arguments. | ||
there is no global variable in Haskell | |||
but there are global variables in GHC. | |||
dduncan | okay, no globals | ||
can a function read said variables in GHC? | 02:05 | ||
audreyt | (which we use in pugs to perform end-of-program finalization etc) | ||
ayrnieu | use Memoize; memoize('pure_function'); | ||
dduncan | a Haskell function | ||
audreyt | a function cannot read said variables without being in the IO monad. | ||
dduncan | okay | ||
wolverian | I don't like this "object initializer" stuff in c#. isn't it just a special syntax rule for named parameters? heh | ||
dduncan | now, ... | ||
as a main part of making Rosetta, which is now its own relational DBMS (with swappable back-ends) ... | 02:06 | ||
I am designing a new language, for now called "Rosetta D" | |||
my current thought is to make that language as pure as possible | |||
ayrnieu | why do you want that? | ||
dduncan | easier to implement, and optimize | 02:07 | |
and validate | |||
I'm putting a strong emphasis on correctness and reliability | |||
so my current thought of the language is that it is mainly pure, but that in appearance it is mainly imperative ... or so much so that Perl is | 02:08 | ||
now, with traditional databases ... | 02:09 | ||
the actual persistent data appears like a set of global data | |||
if I were providing operators that were pure in the Haskell sense, invokers of those would have to pass a reference or copy of that same data as an argument rather than the operator just referring to it directly | 02:10 | ||
as a side note, audreyt, ... | |||
can a pure function take references as arguments, or do all inputs have to be pass-by-value? | 02:11 | ||
eg, how would the assignment operator be defined in Haskell, if there is one? | |||
ayrnieu | Haskell does not have an assignment operator. | ||
audreyt | mutable imperative "references" in haskell are IORefs. | 02:12 | |
the assignment in haskell is spelled | |||
dduncan | okey ... pure functional | ||
audreyt | writeIORef :: IORef a -> a -> IO () | ||
and if you cannot change something a reference refers to | |||
then it's indistinguishable with the thing it refers to anyway. | |||
dduncan | yes | ||
to put in a bit of context ... | 02:13 | ||
Rosetta is now officially implementing thethirdmanifesto.com/ | |||
audreyt | oooooh | ||
dduncan | according to its definition ... | ||
audreyt | wish you said that sooner! | ||
dduncan | operators fall into read-only and update operators | 02:14 | |
the first sounds like Haskell's pure functions | |||
audreyt | (it's like when I introduced various javascript-2 features and raved about them in japan | ||
to dankogai, he listened passively for a while | |||
until I said "javascript2 is self-hosting" | |||
and then he went "ooooh, wish you said that sooner") | |||
dduncan | the latter is how an assignment operator is defined; it is not a 'function' and doesn't return a value; it takes at least one argument by reference and updates it | 02:15 | |
02:15
q[uri]_ joined
|
|||
dduncan | audreyt, admittedly I haven't hung around #perl6 much in the last month, as I have now gained my first paid work in a long while that keeps me busy ... it isn't related to Perl alas | 02:16 | |
but right now I'm taking a day's break from that | |||
otherwise you might have heard my plan sooner | |||
now, in Haskell terms, a persistent relational data store is a monad, though a non-persistent one doesn't have to be | 02:18 | ||
but given that the 'main' data I address is persistent (what people usually use databases for), its access will probably be monadic | 02:19 | ||
however, I would like my operators themselves to be pure where at all possible | |||
eg, operators that derive numbers from numbers, strings from strings, relations from relations, each from others, etc | |||
the built-in ones anyway | 02:20 | ||
but I know people will want to make the equivalent of 'stored procedures', which would not be pure as they change monadic data | 02:21 | ||
anyway, thanks for your feedback ... I was wondering about Haskell purity and whatnot | 02:22 | ||
audreyt | np :) | 02:31 | |
dduncan | FYI, my current working plan for Rosetta D is that it resembles Perl 6 in appearance, though the grammar is very simple (eg, all function calls are in prefix notation), and it expressly does not support the concept of 'undef'. | 02:34 | |
audreyt | woot | 02:35 | |
also it should not contain any BEGIN parts | |||
i.e. you'd have to say | |||
&sub := sub { ... }; | |||
to define a function | |||
dduncan | Theoretically, Perl 6 itself could have the functionality I'm designing built-in and/or a module, if it were possible to make Perl 6 itself less permissive | ||
er, not only is it a much simpler grammar, but much simpler functionality | 02:36 | ||
audreyt | sure, but so far p6's must troublesome functionality | ||
is the BEGIN block | |||
and I discovered once we did without that | |||
dduncan | that won't exist | ||
audreyt | then the runtime parts become very simple | ||
dduncan | the relationship between compile time and run time is somewhat like it is with standard SQL databases | 02:37 | |
but I'm trying to make it possible that all language error checking (besides logic mistakes) can be checked at compile time | |||
audreyt | yup | 02:38 | |
dduncan | one way that's being made so is that the language is strongly typed only | ||
though users can define strong types that emulate weak types | |||
so if you pass an argument to a function that is of the wrong data type, that is caught at compile time | 02:39 | ||
as a result, Rosetta D is probably more verbose than some languages | |||
but I anticipate that much of it will be generated anyway, rather than hand written, by wrapper modules | 02:40 | ||
kind of like how no one writes PIL directly | |||
02:44
r0nny joined
|
|||
audreyt | that seems sane, yeah. | 02:47 | |
(sorry for the high latency; post-conference multitasking) | |||
02:48
Quell joined
02:50
qu1j0t3 joined
|
|||
dduncan | about that conference ... I should check up on your blog ... | 03:04 | |
on a different note ... | |||
I assume this is just due to being in a transition, but a couple days ago it seems that Pugs took orders of magnitude longer to compile something simple than it used to; eg, taking about 70 seconds where it used to take maybe 10 seconds. | 03:05 | ||
or maybe its just me | 03:06 | ||
03:06
FurnaceBoy joined
03:07
coumbes joined
|
|||
dduncan | audreyt, and everyone ... while this isn't Perl 6, I suggest that anyone interested in databases should look at Jeffrey Cohen's Genezzo project, on CPAN and at www.genezzo.com/ ... my current hope is to form an alliance between Genezzo and Rosetta, where the former handles the data layer and the latter handles the public interface layer | 03:15 | |
eg, if that works out, that will be my favored back-end | 03:16 | ||
I'm not sure how high a profile Genezzo keeps in different circles, so I'm not sure if you've heard of it ... but you should know of it for the future | 03:17 | ||
svnbot6 | r9874 | Darren_Duncan++ | ext/Rosetta/ : rewrote half the DESCRIPTION pod in Rosetta.pm | 03:55 | |
audreyt | dduncan: interesting indeed | 04:08 | |
dduncan | yes | 04:09 | |
from what I know of Genezzo, I think our projects are a great match | |||
innovation below plus innovation above | |||
audreyt | it looks like so. yes. | ||
dduncan | moreover, my Rosetta design probably lends itself more to larger databases than lite ones anyway | 04:10 | |
audreyt, addressing your earlier "wish you said that sooner" | 04:13 | ||
... | |||
did you have previous experience with The Third Manifesto? | 04:14 | ||
or was it just that the link helped you understand what I was trying to do? | |||
mind you, with all the advanced and/or theory materials you like to read, TTM may be right up your alley | |||
audreyt | I've read TTM before | 04:15 | |
dduncan | okay | ||
fyi, there's a new mailing list for discussion on it, started this last July | |||
myself and a couple other CPAN folks are on it | |||
and Darwen | 04:16 | ||
audreyt | cool | ||
dduncan | apparently, while its only planning stage, Darwen liked what I was doing enough that he offered to send me a complementary copy of the 3rd edition book | ||
I accepted and got it signed too ... its currently in the mail system | 04:17 | ||
meanwhile, a different book I already read is the Oreilly 'Database in Depth', which I added to our ReadThem file a few months ago | |||
audreyt | dduncan++ | 04:18 | |
shamu | Do you have recommendations for prereqs needed to understand what 'The Third Manifesto' is about? I'm familiar with SQL, normalization, ... up to ERDs (but don't have any language design background -- ex EE) | 04:19 | |
dduncan | if my plan works out, Rosetta should be a FULL implementation of what Darwen and Date want, and not just a partial or compromising one | ||
shamu, you have enough rereqs to get started | |||
TTM is aimed at people that already know about databases, and want to know them better | 04:20 | ||
shamu | can you give me 25-words or less on what problem it's trying to solve? | ||
dduncan | or more specifically, the "Database in Depth" book is aimed at people who are already db developers | ||
shamu | let me check that out | ||
dduncan | the book "The Third Manifesto" is more of a thicker college text | ||
DiD is easy to read and not so deep on details | 04:21 | ||
the core of TTM is about 10 pages long, and a PDF copy is on the web site ... the rest of the book expands on it | |||
see web.onetel.com/~hughdarwen/TheThird...CHAP04.pdf | 04:22 | ||
that's the core of the TTM college book right there, which everything else is in support of | |||
shamu, to answer your question, TTM is basically a recipe for how to make a relational database properly ... and not the half-baked way that SQL databases do it | 04:23 | ||
s/relational database/relational database manager/ | |||
a database that follows the recipe of TTM should be easier to use, more reliable, and developers don't have an impedence mismatch problem between it and other languages | 04:26 | ||
no one has yet implemented it completely, but I intend to with Rosetta | |||
that pdf link was for the 3rd edition of TTM, which just went on sale last month | 04:27 | ||
shamu | sorry, 'impedance mismatch problem between it (RDBM) and 'other'? languages ' | ||
audreyt adds it to her huge to-read pile | |||
dduncan | maybe I used the wrong word | ||
shamu | you mean a proper way to match RDBM <->programming language , instead of the | ||
dduncan | but its the same subject matter as audreyt's link | 04:28 | |
yes | |||
shamu | current mechanism of RDBM<->SQL<->languag? | ||
dduncan | if you have a proper relational database, you don't need object-relational mappers, for example | ||
since a proper RDBMS can store objects somewhat natively | |||
technically, you probably still need a lite wrapper, but it is fairly straightforward | 04:29 | ||
not big bulky mappers like we have now | |||
now, when I say store natively, I mean that a proper RDBMS can let you define arbitrary data types, so you can define one that matches up with your object structure | 04:30 | ||
shamu | example of the o-r mappers you're referring to? | ||
dduncan | so mapping is very straight forward | ||
lets see: Class::DBI to start | |||
04:31
Khisanth joined
|
|||
dduncan | okay, Tangram, Alzabo, DBIx::Class, DBIx::SQLEngine, Rose::DB | 04:31 | |
SPOPS, DBIx::Abstract, DBIx::DBSchema | 04:32 | ||
yadda yadda yadda | |||
er, technically only some of those are actually object-relational mappers in one sense | |||
others are "object persistence tools" | 04:33 | ||
audreyt | (also Jifty::DBI) | ||
dduncan | or others allow you to use perl data structures to define things that you would use sql for | ||
audreyt, yes | |||
essentially, I see a large number of modules doing that sort of thing | |||
at a glance, Rosetta may look like yet another of those, but I like to think differently | 04:34 | ||
I've got a long list of perl modules that do data or database stuff in my SeeAlso; I'll do a brute paste here | |||
L<DBI>, L<Tangram>, L<DBIx::Class>, L<HDB>, L<Genezzo>, L<Class::DBI>, L<Pixie>, L<Alzabo>, L<DBIx::SQLEngine>, L<SPOPS>, L<DBIx::SearchBuilder>, L<DBIx::RecordSet>, L<DBIx::Abstract>, L<DBIx::AnyDBD>, L<DBIx::Browse>, L<DBIx::DBH>, L<MKDoc::SQL>, L<Data::Transactional>, L<DBIx::ModelUpdate>, L<DBIx::ProcedureCall>, L<DB::Ent>, L<DBIx::DBSchema>, L<DBIx::Namespace>, L<TripleStore>, L<Data::Table>, L<ORM>, L<OOPS>, L<SQL::Statement>, L<S | 04:35 | ||
and even that excludes a lot | |||
I may have never added Jifty for example | |||
shamu | some of what you pasted is targeted at sql-style interaction directly, but I get your point | ||
dduncan | but it seems like new modules of that type come along on a regular basis, and I'm not trying to keep an exhaustive list | 04:36 | |
one commonality is that every one of those seems to be SQL centered, despite all their differences | |||
mugwump ahems | |||
dduncan | I am trying to be very not like SQL | 04:37 | |
shamu | probably because SQL is what's out there | ||
mugwump | Pixie isn't, and I don't think Tangram is, either | ||
dduncan | yes | ||
I understand why people do it ... SQL is what most people use | |||
but I'm trying to tackle a different problem and not do it the same as others | |||
mugwump | having said that, Tangram's querying does import a lot of the brain damage of SQL | 04:38 | |
dduncan | s/others/the masses/ | ||
shamu | I had a roomie in 1993 who ended up working for Versant; they were doing object databases back then | ||
mugwump | not all, mind | ||
dduncan | and that was my main point, actually | ||
I haven't looked at all of Pixie's internals, but it seemed to be centered on a SQL model | |||
shamu | what's the different problem? My quick skim of chap04 seems to be trying to force the interface into the db to effectively enforce object encapsulation, of a sort? | 04:39 | |
mugwump | dduncan: Pixie is basically just a lazy (oid) => (structure) system. it can run atop BDB, for instance | ||
dduncan | one thing that TTM emphasizes is that users should not have to know any implementation details for their database | ||
that a proper relational database simply provides consistent views of data | 04:40 | ||
and how its implemented underneath can change without affecting them | |||
shamu | well, that's sort of the case with sql -- you just need to know you're working with tables | ||
dduncan | by contrast, lots of things in SQL are a symptom of implementation leaking through to the interface | ||
for example, the char vs varchar type distinctions | |||
shamu | I read that sql has the problem of a set of fields from a db having an implementation/design wart of being ordered, when it really needs to be an associative fieldname->value -- a level up of 'not knowing about the details of the implementation' -- am I correct? | 04:41 | |
dduncan | or the fact that you explicitly declare indexes | ||
you shouldn't have to say anything to help the database be faster, ... | |||
you should simply have a good logical design | |||
and the database engine should figure out itself how to do it quickly | |||
but more bluntly, there's still the char vs varchar thing | 04:42 | ||
that screams implementation: fixed width storage vs not | |||
auto padding or not | |||
shamu | it should be able to figure it out itself as a side effect of it storing data structures at the object level, and indexing more based on its idea of an object instance, rather than some random field in a table? | ||
dduncan | you still indicate logical relationships of data | 04:43 | |
eg, a certain attribute (column) is supposed to be unique | |||
shamu | and hence an index | ||
dduncan | or one is related to another | ||
shamu | ok, so it's still basically relational | ||
dduncan | an index is implicitly used behind the scenes to enforce a constraint you specify | 04:44 | |
mugwump offers popcorn around the channel | |||
shamu wants some without butter (dairy intolerance), please | |||
dduncan | but you shouldn't need to declare an index which doesn't specify an explicit constraint or relationship | ||
an 'index' is an implementation detail | 04:45 | ||
shamu | sure | ||
hmm -- but sometimes you want to speed up queries on a non-unique field, right? | |||
dduncan | all the user cares about is that a unique constraint is a constraint | ||
speeding up your example is not up to the user | |||
the user shouldn't have to care about that ... the program should do it for them | 04:46 | ||
shamu | based solely on data relationships? Or based on usage patterns? I | ||
dduncan | eg, the program can analyse usage and dynamically make indexes when they would help | ||
shamu | gotcha | ||
dduncan | the program would use both constraints, relationships, and runtime analysis | ||
the point is that making things fast is automatic | 04:47 | ||
not something the user specifies | |||
think of it like this ... | |||
lots of things people specify in SQL is something to make one brand of db faster, but with another brand, they have to rewrite their sql for its implementation | |||
a proper db has that automatic so you don't have to rewrite when changing vendors | 04:48 | ||
another thing the db should do automatically is rearrange queries to perform faster, but have the same result | |||
shamu | err, could you restate that with a little more specificity as to your terms? | ||
when you switch db vendors, you're switching dbs, right? | 04:49 | ||
dduncan | eg, if you use Oracle, you may write your queries or create your indexes or tune things in one specific way, but if you switch to Postgres or Sybase or something, those special optimizations that you specify yourself don't work and you have to make new ones | ||
each db vendor has a different db program | 04:50 | ||
usually | |||
shamu | sure | ||
mugwump | yes, quite often "tuning" becomes a little too application intrusive | ||
dduncan | people waste lots of time on tuning | ||
on a proper db, they wouldn't | |||
this is one example of ease of use that TTM brings | |||
mugwump | dduncan, I'm thinking a great way to demonstrate your concept would be to have a "reference" database, that's just a pure Perl implementation that doesn't support saving its state (except perhaps via complete dump/loads) | 04:51 | |
shamu | many corporations pay big bucks to dedicated dbas to service tuning requests (creating indices, etc) | ||
dduncan | then they can redirect that money to some use that is more productive | ||
mugwump, I agree | 04:52 | ||
shamu | so this could be implemented in an intermediate sql layer that would generate the vendor-specific index creation, et al requests? | ||
dduncan | my Rosetta DBMS, which is to implement TTM, has swappable back-ends | ||
I will make a simple one myself, which is for learning, and slow | 04:53 | ||
I hope to use Genezzo as another fast powerful one | |||
and many others can be made which actually sit over SQL databases, and generate tuned SQL and indexes for them | |||
shamu | or altenately, if someone wants to, they could rip the sql front-end off a free db (sqlite, etc) and use rosetta instead? | 04:54 | |
dduncan | so if a SQL back end is used that can't tune itself (some actually can, to an extent), the Rosetta back-end for it will try to generate the most tuned SQL possible | ||
that is possible | |||
shamu | if the proper interface layer is made available | ||
dduncan | replace the SQL layer with a Rosetta D layer | ||
04:54
Nouk joined
|
|||
mugwump | dduncan: have you looked at mnesia? | 04:54 | |
dduncan | well, as it happens, SQLite does have a layered implementation; we could strip out the SQl parser and just use its virtual machine and btree and pager layers | 04:55 | |
audreyt | yeah, a reusable vdbe sounds useful | ||
dduncan | however, in the short term I see better milage trying to use Genezzo instead of SQLite for that approach ... Genezzo is Perl for one thing, and it is a clustered database | ||
look at sqlite.org | 04:56 | ||
shamu | sure. | ||
dduncan | despite the shortcomings of SQL, SQLite is a great product, one of my favorite SQL databases | ||
sqlite.org has the specs for its structure there | |||
shamu | well, sql is not the database engine. Like you said, relational dbs are oo to some extent, and sql is definitely not. | ||
dduncan | here: sqlite.org/arch.html | 04:57 | |
that has the architecture diagram | |||
easy to read | |||
I call things SQl databases that use SQl as their primary interface, and so their behaviour as a whole product is strongly influenced by it | |||
FurnaceBoy whispers Mnesia .. | 04:58 | ||
dduncan | yes, about that | ||
I've never heard of Mnesia, will have to look | |||
FurnaceBoy | I was looking at it a while back, most intriguing | ||
Erlang db | |||
i.e. functional (not that I'm an expert on FP) | |||
shamu | so, on a related note ... is there anything like ruby on rails/activerecord that's usable as a framework under perl? | ||
dduncan | oh, any of you that didn't look at genezzo.com should do so now | ||
mugwump | erlang is an interesting language alright. it has no mutable state :) | ||
FurnaceBoy | I did look at genezzo, also interesting | ||
ayrnieu | mugwump - no, it has mutable state. | 04:59 | |
FurnaceBoy | thx for the link | ||
wolverian | shamu, catalyst, jifty | ||
dduncan | if you wanna put up links for Mnesia, Erlang, that may speed up people looking at them | ||
er, urls | |||
some irc clients turn 'em into links | |||
FurnaceBoy | www.catalystframework.org | ||
ayrnieu | start at www.erlang.org | ||
dduncan | I am aware of catalyst | 05:00 | |
its an mvc where you plug what you want | |||
FurnaceBoy | www.erlang.org/faq/x1351.html | ||
^ mnesia | |||
dduncan | I planned to make a Rosetta binding for it | ||
or help someone do so | |||
mugwump | www.erlang.org/~hakan/mnesia_overview.pdf # perhaps a bit heavy, but goes through the basics | 05:01 | |
ayrnieu: I recently had a description from someone who uses it about how it doesn't. I don't know whether that was only under certain conditions etc. | |||
he just said that each code pointer returns a pointer to the current state, so to change state you return a new state pointer that points to a replica of the old state, with the state changes in it | 05:02 | ||
ayrnieu | mugwump - processes have a local dictionary, which is not often used -- and anyway across processes 'state' can be kept easily enough in recursion loops that this is transparent. | 05:03 | |
mugwump - I've no idea what you just said. | |||
dduncan | now, if you guys are interested in doing this, please look at the lib/SeeAlso.pod file in my Rosetta distribution (in ext/ of pugs, and also on mugwump's utsl server), then go ahead and add links and descriptions to things | 05:04 | |
sometimes that's better than just telling me | |||
mugwump | ayrnieu: ok, I'll rephrease. basically as I understood you can only return new state, not change old state. | ||
dduncan | but just edit one copy; I'll resync the other one with it regularly | 05:05 | |
ayrnieu | mugwump - um, let's just say that Erlang does not have 'variables' and that it does not have mutable data structures, with the small exception of the process dictionary. | 05:06 | |
dduncan | no mutable data structures? | ||
mugwump | :) you'd have to be a lisp geek to understand it :) | ||
dduncan | is it supposed to be a ROM database engine? | ||
mugwump | no, you can create new structures, and the old ones get GC'd | 05:07 | |
ayrnieu | dduncan - yes, there are no mutable data structures. | ||
FurnaceBoy | no -- you should read that Mnesia paper... it seems relevant to Rosetta ideas | ||
mugwump | basically a GC is constantly doing that anyway | ||
(well, some do) | |||
dduncan | will try to look at it | ||
FurnaceBoy | s/no// | ||
shamu | dduncan, have you heard of 'Versant'? They're an object database company, at least 13 years old at this point. | 05:10 | |
dduncan | boing boing | ||
shamu, I have not | |||
shamu | It's faster than a wingped pig on a lightning bolt, if I am to believe the t-shirt I got from my roomie. | ||
dduncan | but there are hundreds of db companies out there | 05:11 | |
can't track 'em all | |||
shamu | These guys were specifically focusing on object storage in databases back then. | ||
dduncan | however, I do plan for the Rosetta distro to have an index of all the other dbs, for reference | ||
FurnaceBoy | Kdb is supposed to be pretty fast ;-) and Genezzo seems to have a lot of potential ... love the low-level ops idea | ||
dduncan | and Genezzo is written in perl ... can any other db say that? | ||
shamu | pro'lly not | 05:12 | |
dduncan | said index of other dbs will be in the SeeAlso.pod file ... my aggregation point of external links | ||
anyway, Rosetta is in version control for a reason, you guys are welcome to make reasonable changes to it as you see fit, though perhaps stick more to adding stuff for now | 05:13 | ||
like all those wonderful other projects people really should look at | |||
mugwump | ok, mnesia and genezzo are quite similar in some ways. but mnesia is probably more robust, and offering much finer control over replication/transactions/etc, using the power of erlang | 05:17 | |
dduncan | well, I'm going to bed ... good night! | 05:26 | |
FurnaceBoy too | |||
thanks for the interesting discussion | |||
shamu | good night | ||
FurnaceBoy | I hope this channel is logged, otherwise I was tempted to clip :) | ||
dduncan | it is logged, but I tend to clip such things and email them to myself for backup | 05:27 | |
after all, the log is huge, and where would you know to look | |||
FurnaceBoy | yeah. | ||
nite | |||
shamu | colabti.de/irclogger/irclogger_log/...-04-10,Mon | ||
dduncan | um, if any of you want copies, give me your email ... or clip yourself | ||
yes, that's the log | 05:28 | ||
shamu | good, because that's what this guy 'dduncan' on that web page says too | ||
bbiab | 05:29 | ||
audreyt | TimToady: why allow non-whitespace in the | 05:30 | |
$x. .foo | |||
form of long dot? | |||
I've implemented the whitespace-only variant | 05:31 | ||
but I'd like to understand what the value is in | 05:32 | ||
$x. foo(3) .bar | |||
to be parsed as $x.bar | |||
svnbot6 | r9875 | audreyt++ | * Support for "long dot" in method calls: | 05:35 | |
r9875 | audreyt++ | 4. .sqrt(); | |||
r9875 | audreyt++ | Currently only whitespace is allowed between the two dots | |||
r9875 | audreyt++ | to save lookahead time; further clarifications needed to | |||
r9875 | audreyt++ | support the full form. | |||
05:44
GeJ joined
|
|||
mugwump | audreyt: isn't that to support method chaining? | 05:48 | |
eg, like the current practice of some authors to make a function that doesn't have anything else worth returning to return $self | |||
so that you can go $object.do_this.do_that.do_something_else | 05:49 | ||
except s/\./\n\t->/g :) | |||
ayrnieu | some authors? Who doesn't do that? GIVE ME THEIR NAMES. | 05:53 | |
mugwump | it's an idiom that's makes me groan every time | 05:55 | |
gaal | with 'given' this becomes less of an issue | 06:01 | |
06:03
avar joined
06:13
dduncan left
06:19
GeJ joined
06:32
elmex joined
06:44
Aankhen`` joined,
nothingmuch joined
|
|||
nothingmuch | do we have a seen bot nowadays/ | 06:46 | |
? | |||
06:47
Grrrr joined
|
|||
mugwump | Hi all, I'm giving a talk tomorrow about doing perl 6 things on perl 5 today. I've knocked out a structure for my talk, and would be interested in feedback. particularly whether there are any recent developments I have overlooked. | 07:02 | |
the initial sketch is at www.utsl.gen.nz/talks/perl6.now/ | |||
nothingmuch | spork spork spork spork spork | ||
wasn't pX renamed lrep? | |||
mugwump | right, I'll fix that | ||
nothingmuch | ESLIDETOOLONG: www.utsl.gen.nz/talks/perl6.now/slide2f.html#end | 07:03 | |
make each project it's own slide | |||
i like the haskell joke ;-) | |||
mugwump | thanks :) | 07:04 | |
nothingmuch | what about 'use v5'? | ||
err | |||
v6? | |||
mugwump | ah yes, good point | ||
nothingmuch | actually, you have Module::Compile | ||
just expand on it | |||
mugwump nods | |||
nothingmuch | again: one slide per topic: | 07:05 | |
www.utsl.gen.nz/talks/perl6.now/slide3g.html#end | |||
also, abolish Contextual::Return | |||
it is the work of satan! | |||
mugwump | heh | ||
I'll tell dconway that the next time I see him :) | 07:06 | ||
the plan is to talk a bit about each of those areas. so I'll probably break up the slides a lot | |||
going afk for a bit, travelling home ... will be back later on | 07:07 | ||
07:14
drrho joined
07:15
KingDiamond joined
|
|||
gaal | seen jabbot | 07:22 | |
nothingmuch: guess not | |||
nothingmuch | err, sorry, back | 07:24 | |
mugwump: i was just kidding about Contexttual::Return =) | 07:25 | ||
07:41
Alias_ joined
|
|||
Alias_ | audreyt: ping? | 07:41 | |
07:44
bsb joined
|
|||
mugwump | thanks nm, I'll put it back :-P | 07:50 | |
nothingmuch | mugwump: it's not very Perl 6 related | 07:59 | |
and it is pretty evil (what with the ties and all) | 08:00 | ||
but that doesn't mean that dconway is satan ;-) | |||
just... half way there | |||
paste.scsys.co.uk/1073 (my YAPC::NA talk proposals) | 08:02 | ||
08:16
lisppaste3 joined
|
|||
Alias_ | You can never find a MakeMaker expert when you need one | 08:18 | |
buu | Did I leave my bot in here/ | 08:19 | |
nothingmuch | audreyt: you'll be at YAPC::NA, right? | ||
buu | Oh I did. How nice. | ||
08:21
elmex joined,
digwuren joined
|
|||
nothingmuch | ingy: ping | 08:24 | |
stevan: ping | |||
audreyt: ping | 08:27 | ||
luqui: also ping | |||
maybe | |||
gaal | hey nothingmuch, i submitted a 20 minute talk on smokes | 08:28 | |
nothingmuch | you're going to YAPC::NA? yay! | ||
gaal | that's the plan | ||
nothingmuch | in that case we should collaborate | ||
gaal | okay. rub my back | ||
nothingmuch | i think i'm going to play the "Ooh! shiney" card | ||
Alias_ | on smokes? | 08:29 | |
Why haven't I drafted you for PITA yet | |||
:) | |||
gaal | Alias_: 'make smoke' | ||
i'm not known to be a very draftable moose | |||
Alias_ | I was thinking more 'pita-server run pugs-smoke.xml platforms/*' | 08:30 | |
What's the difference between smoke and test | 08:31 | ||
gaal | Alias_: make test is with the mainstream Test::Harness | ||
Alias_: make smoke is with util/yaml_harness.pl, a hacked up possibly-parallelizable harness that stores TAP output in yaml | 08:32 | ||
all our fancy tools use the make smoke output | |||
Alias_ | interesting | ||
I guess I'm just working in a slightly more abstract direction | |||
gaal | Alias_: then you want to look at Test::TAP::Model which is not related to serialization encoding | 08:33 | |
Alias_ | Storing the entire output, TAP-inclusive, as XML documents, and lunching test runs inside of virtual machines | ||
Yeah, I've been watching the model stuff | |||
I'm hoping there's a good way for my to XSLT the PITA-XML out to something I can plug into that | |||
s/my/me/ | |||
Which shouldn't be too hard, because the actual TAP details aren't XMLified | 08:34 | ||
08:34
hcchien joined
|
|||
Alias_ | Each test output is a saved as-is | 08:34 | |
nothingmuch | Alias_: i'm currently generalizing that stuff | 08:35 | |
into a more "deployable" smoke server | |||
Alias_ | hmm | ||
nothingmuch | dev.catalyst.perl.org/repos/Catalys...mokeServer | 08:36 | |
smoke.woobling.org/ | |||
Alias_ | I was kind of going to just do all the platforms on one | ||
nothingmuch | well, that works | ||
Alias_ | By installing into the virtual machines | ||
nothingmuch | these are orthogonal =) | ||
Alias_ | true | ||
nothingmuch | the smoke server is just for displaying results | ||
and collecting them | |||
Alias_ | oh, the analysis part? | ||
nothingmuch | yes | ||
that's what gaal was talking about | 08:37 | ||
Alias_ | ok | ||
nothingmuch | make smoke creates a smoke report | ||
anyway, that smoke server thing abuses tags with prefixes to hack a group-by like behavior | |||
Alias_ | If you were to install PITA::XML, take a look at PITA::XML::Install | ||
nothingmuch | so you have 'platform.osx' and if you "group by" platform you get the reports partitioned by platform | ||
and also you can filter by tag, ofcourse | |||
err, not right now | |||
ETOOBUSY | 08:38 | ||
Alias_ | It would be interesting if you could convert a PITA::XML::Install object into a smoke report compatible with your system | ||
nothingmuch | reverse engineering oracle insanities | ||
Alias_ | ah | ||
nothingmuch | the smoke reports are really just TAP output | ||
serialized into a deep hash | |||
with some tags and timing info | |||
think of tags as extended attrs | |||
Alias_ | A PITA::XML::Install is just the output of the C< perl Makefile.PL; make; make test > | ||
nothingmuch | theoreticallyh all of perl -V or pugs -V should go into tags if it affects the behavior of the system | ||
Alias_ | As a complete thing | ||
with metadata and such | 08:39 | ||
nothingmuch | ah | ||
this is slightly lower level than make test | |||
since it replaces Test::Harness | |||
T::H is for humans | |||
Alias_ | sort of | ||
nothingmuch | Test::TAP::Model is for machines | ||
(i mean our system) | |||
Alias_ | I'm working on a patch for Test::Harness that will make it dump a copy of each TAP run to a dir | ||
nothingmuch | err | ||
Alias_ | As a side effect | ||
nothingmuch | integrate it with Test::TAP::Model somehow | 08:40 | |
you can "parse" recorded taps with TTM | |||
or you can replace Test::TAP::Harness::Straps | |||
Alias_ | Right, which is why I'm just recording the TAP | ||
As is | |||
As little analysis as possible happens inside the virtual machine | |||
nothingmuch | the diff is that if TTM replaces ::Straps you can capture timing info | ||
Alias_ | It just records | ||
nothingmuch | but that's usually overkill | ||
aye | |||
Alias_ | Then the XML document gets extracted, and saved into a whopping DB | 08:41 | |
So we can do whatever we like to it later | |||
nothingmuch | anyway, i suggest that your "hierarchal" report format contains a dump of Test::TAP::Model | ||
Alias_ | Why? | ||
Can't I build that later? | |||
Oh, right | |||
There's an <analysis> tag | |||
So you can attach post-processing anaylsis of various types | |||
nothingmuch | i mean in the object that analysis tools will get | ||
Alias_ | We'd just need to invent you a mime type :) | ||
nothingmuch | just because it's slightly STD | ||
Alias_ | STD? | 08:42 | |
nothingmuch | standard | ||
there are a few tools that abuse this already | |||
see also sourceforge.net/projects/smolder | |||
it's a more "serious" smoke server | |||
Alias_ | If Test::TAP::Model just processes TAP, then it's a post-processing stage | ||
nothingmuch | with deployment issues =/ | ||
again, Test::TAP::Model takes TAP and gives you an introspectable thing | |||
like how many failed | |||
Alias_ | That's fine | ||
nothingmuch | how many passed | ||
sub tests | 08:43 | ||
etc | |||
Alias_ | I'll post-process it and attach | ||
nothingmuch | it's just a "view" | ||
it can even be a temporary thing, such that the analysis server holds the "raw" TAP output and rebuilds the model on the fly | |||
08:43
lypie joined
|
|||
nothingmuch | think of it as a DOM for TAP | 08:43 | |
Alias_ | Well, I don't care about the analysis so much | ||
nothingmuch | right | ||
so it really doesn't matter where Test::TAP::Model fits in | |||
lypie waves to all | 08:44 | ||
Alias_ | At the moment I'm just building the enormous clusterable intrastructure part | ||
nothingmuch | i'm just lobbying that you use it in the API that you expose | ||
Alias_ | I expose XML | ||
nothingmuch | with CDATA? | ||
Alias_ | You send me a testing require file, I run it on the cluster, and you pull back the data afterwards | ||
requirement | |||
nothingmuch | sounds good | ||
... but you'll probably also release a perl library to futz the XML later, right? | |||
*that* part should have TTM built in ;-) | 08:45 | ||
Alias_ | So <xml> ... run this package, on this set of platforms, etc etc, heres a GUID, etc </xml> | ||
Well, PITA::XML already exists | |||
nothingmuch | GUID? | ||
Alias_ | The system gobally uniquely stamps everything | ||
globally | |||
Globally Unique Identifier | |||
So if you want to throw pugs at 50 platforms, you just give a request | 08:46 | ||
nothingmuch | yeah | ||
i was just unfamiliar with GUID | |||
i know UUID | |||
Alias_ | What you do with the resulting mountain of data is up to you (for now) | ||
nothingmuch | what's the diff between em? the TLA? | ||
Alias_ | Same thing I believe | 08:47 | |
Might be subtle differences if you ask an expert | |||
nothingmuch | ah | ||
anyway, i'm still lobying for PITA::XML to have Test::TAP::Model somewhere for ease of use | |||
so that you could take a PITA::XML and make a Test::TAP::HTMLMatrix in 2 lines of code | 08:48 | ||
08:48
wilx joined
|
|||
Alias_ | As I said, it has an <analysis> section | 08:48 | |
nothingmuch | err, no | 08:49 | |
Alias_ | So you can attach completely arbitrary analysis to the document | ||
nothingmuch | not XML data | ||
just perl side | |||
it's not a part of the document | |||
Alias_ | oh, there | ||
nothingmuch | it's a view on the core data of the document | ||
Alias_ | ok | ||
nothingmuch | it's just glue =) | ||
Alias_ | Well, it would bloat the deps | ||
nothingmuch | sub tap_as_model { | ||
Alias_ | deps, not core | ||
err code | |||
nothingmuch | eval { require Test::TAP::model } or die "Test::TAP::Model is required to invoke this method"; | ||
Alias_ | Better on the other side | 08:50 | |
nothingmuch | ...; | ||
} | |||
Alias_ | sub new_from_pita_xml { ... } | ||
nothingmuch | fair enough | ||
Alias_ | Since there's not question that you have the XML module on the from side | ||
no | |||
nothingmuch | patches welcome =) | ||
Alias_ | If I ever get that far | ||
Currently trying to finish the tests for the core test loop | |||
nothingmuch | for repo in nothingmuch.woobling.org/Test-TAP-{...MLMatrix}; do darcs get $repo; done | ||
Alias_ | Waiting on a 1-2 meg specialised linux image | ||
Apparently nobody can build one | 08:51 | ||
nothingmuch | why 1-2 meg? | ||
isn't ~40 meg more common? | |||
Alias_ | So it's safe to upload to CPAN without too much bloat | ||
nothingmuch | oh | ||
nothingmuch wouldn't want to go into *that* | |||
Alias_ | And yeah, 50 meg are more common | ||
But the whole "boot floppy" era did exist at one point | |||
nothingmuch | i'd post a bit torrent client that can auto install for you | ||
instead of a copy | |||
Alias_ | That's a pretty heavy Makefile.PL | 08:52 | |
nothingmuch | i.e., you run it, and it says "no virtual platforms are configured, would you like me to download them?" | ||
Alias_ | And there are no Perl bittorrent clients | ||
nothingmuch | "would you like me to run under $vm_engine? do you have it installed?" | ||
Alias_ | Also, it's like 1-2 meg | ||
nothingmuch | i thought there was | ||
it's theoretically 1-2 megs | 08:53 | ||
Alias_ | Google funded one, and paid up, but it failed | ||
nothingmuch | theoretically it's 40 megs | ||
and not just linux | |||
so theoretically it's 100-300 mb of small OSs ;-) | |||
Alias_ | Well, it's "an OS that can wget a fixed URI" | ||
That's it | |||
09:10
tifo_ joined
|
|||
tifo_ | \exit | 09:19 | |
\quit | 09:20 | ||
Alias_ | other slash | ||
:) | |||
09:22
hugues23 joined
09:33
marmic joined
09:46
bsb joined
09:47
tifo joined
09:49
ruz joined,
lypie left
|
|||
nothingmuch | looking at the coverity stuff in p5p | 10:00 | |
i think i'm getting ideas on how the pluggable "optimizer" API can be used for regular warnings, code critique like coverity, as well as optimizations | |||
nothingmuch tries to remember this for his talk | |||
pmurias_ | nivk pmurias | ||
nothingmuch | pmurias: don't you mean "m/gs NickServer IDENTIFY secret" ? | 10:02 | |
;-) | |||
gaal | nothingmuch: hey! how did you know my password! | ||
nothingmuch | hmm | 10:03 | |
i see no nick colliding ;-) | |||
all: gaal's passwd is not "secret" ;-) | 10:04 | ||
pmurias | have you checked? :) | ||
nothingmuch | yes | ||
pmurias | my freenode password i 100% secure even i don't know it | 10:06 | |
s/i/is/ | 10:07 | ||
nothingmuch: shouldn't the "optimizer" api get much lower level form then code critique needs? | 10:10 | ||
nothingmuch | pmurias: aha | 10:11 | |
exactly | |||
the idea is that an optimizer, a warner, an other thing, etc are all just functions | |||
AST -> AST | |||
e.g. String -> ParseTree is the parser | |||
and a lint function might be ParseTree -> ParseTree | 10:12 | ||
and an optimizer might be at ParseTree -> ParseTree *and* AST -> AST simultaneously | |||
if it's generalized it can just be the same API | |||
the top down-ish approach that the whole Perl 6 community is taking WRT perl 6 kind of ensures that this will happen | 10:13 | ||
azuroth | roar | 10:18 | |
pmurias | it would be nice to be able to specifiy what sort of things you want to have removed/simplified in the ast you get? | 10:19 | |
s/?/./ | |||
nothingmuch | pmurias: no, just think of it as pipeline plugins and meta plugins | 10:21 | |
for example, the peep hole optimizer is e.g. [PeepHoleSubOptimizer] -> AST -> AST | |||
and then it recurses the tree, tries to match the sub optimizers to tree nodes, and then return a transformed tree | 10:22 | ||
so the peephole optimizer is a meta plugin | |||
(meta = pluugin that has other plugins) | |||
if this whole pipeline is not hard coded | |||
and not glued together like in Perl 5 | |||
then we are in a good shape | |||
because unforseen extensions should be easier to write | 10:23 | ||
pmurias | you could add a new optimiser, instead of rewriting your code in a faster but uglier way? | 10:25 | |
nothingmuch | potentially yes | 10:26 | |
i hope that the next generation of languages will let the users start prefering beautiful code over fast code | 10:27 | ||
right now it's either or | |||
pmurias | neither | ||
nothingmuch | i believe that with good enough toolchains beautiful code can be faster than fast code ;-) | ||
because beautiful code carries over much semantic meaning | |||
"fast" code like one might write in C is not portably fast, usually | 10:28 | ||
if you really want to be fast you #ifdef on your processor type, etc etc | |||
and even so, some things simply cannot be expressed in their most simpler form | |||
otoh a language such as haskell is free to choose the implementation strategy of a function application | |||
in a few years I hope that systems like GHC and Perl 6 will choose the simplest runtime system that can work for a given chunk of code for a given processor and for a given data set | 10:29 | ||
so that computers will be better at optimizing than humans 99% of the time | |||
and people will have no more excuses to write "high performance" code | |||
and the people who will really need that speed will have to do the next big step: design custom hardware | 10:30 | ||
which is a much more valid option than writing unreadable code | |||
anyway, $musings.disable | |||
pmurias | perl6 machines :) | ||
10:31
kane__ joined
|
|||
nothingmuch | pmurias: i was thinking more like "crypto chips" or "compression chips" or "Graphics cards"= | 10:32 | |
oh wait ;-) | |||
gaal | are perl6 machines made of camel hair? | ||
azuroth | I want to wear moosehair underwear. | 10:33 | |
gaal | azuroth: forum2.org/moose/moose08.html | ||
nothingmuch | gaal: i linked to that a few days ago | 10:34 | |
azuroth | hahaha, what the hell | ||
nothingmuch | we were having a "my moose is bigger" discussion in #catalyst | ||
gaal | alternatively forum2.org/moose/moose16.html | ||
nothingmuch | i blame you =) | ||
gaal | by all means blame me | ||
nothingmuch | not many people have the privilige of being responsible for a mainstream obsession | ||
the pokemon guys | |||
the tamaguchi guys | 10:35 | ||
though that was short lived | |||
gaal | of course, you didn't feed it | ||
nothingmuch | and Gaal Yahas =) | ||
haha | |||
azuroth | papervision monocolour... :-) | ||
nothingmuch | azuroth: what's that? | ||
gaal | dolby antler in selected browsers! | ||
nothingmuch | oh | ||
azuroth | forum2.org/moose/moose01.html | ||
nothingmuch | papervision | 10:36 | |
yeah, that's because it's a real book in Gaal's apartment =) | |||
azuroth | haha :D | ||
pmurias | can one remove roles from an object? | ||
nothingmuch | pmurias: yes, we just don't have a syntax for that yet =) | 10:37 | |
gaal | pmurias: why would you want to do that? :) | ||
nothingmuch | it's like my $x = $y but Foo; | ||
i'm not sure if it's a coercion | |||
or a different "view" into the same object | |||
i think it's more like the second | |||
azuroth | hmm. interesting | ||
nothingmuch | it's probably something like 'my $z = $x but !Foo' | ||
or butn't | |||
;-) | 10:38 | ||
gaal | I don't get it, if we have structural typing then, uh, you can remove a role if you break one of the methods | ||
nothingmuch | the &prefix:<!> method in Class returns an overloaded object that *removes* that class when assigned to the metaclass's inheritence list ;-) | ||
gaal: think of the operation as: | |||
my $new_class = $x.meta.clone | 10:39 | ||
gaal | do you want something like mixing in everything but removing the trace of having mixed it in from a particular role? | ||
nothingmuch | $new_class.does( Foo ); # appends | ||
my $y = bless $x, $new_class; # it mgihtb e bless $x.clone, $new_class | |||
pmurias | gaal: if want to mix stuff out, $fido but !Bite | 10:40 | |
gaal | <pmurias nothingmuch>, you are insane | ||
nothingmuch | as for conflict resolution (or unresolution) in role (de)composition: | ||
theorbtwo | That, or create a new op with the same category as but, called "without". | ||
nothingmuch | you simply get a runtime conflict if something insane is happenning =) | ||
or a compile time one if that can be inferred | |||
azuroth | gaal++ | ||
10:40
stclare joined
10:41
KingDiamond joined
|
|||
nothingmuch | theorbtwo: but is more general than this | 10:41 | |
it's the "add a role at runtime or otherwise annotate" operator =) | |||
gaal | azuroth: what, I get karma for calling people insane? Surely I'll be a moose in my next life | ||
nothingmuch | so presumably it's a short cut to a better named "mix in a role" method | ||
which could be negated | |||
azuroth | you get karma for being right | ||
gaal | ah. 1+1 == 2! | 10:42 | |
nothingmuch | azuroth: uh, if you can add a role at runtime, why can't you take one away? | ||
let's say you were implementing a role playing game ;-) | |||
my $elf = Elf.new; # initial | |||
azuroth | sorry, I'm only half serious | ||
nothingmuch | # elf finds scroll | ||
$elf = $elf but Wizard; | |||
(sorry, i don't know RPGs well, so the actual fnords I'm using are probably lousy) | 10:43 | ||
the idea is that since an object can change it's member data during it's life | |||
gaal | nothingmuch: hw 3 | ||
nothingmuch | then most people either create a new object or change the member data in ugly ways | ||
in order to do a big change | |||
pmurias | you change it's role,right? | 10:44 | |
nothingmuch | if we allow objects to transcend between classes (properly! not just rebless but with well known hooks and stuff, much like coercion) and roles then we can clean this up | ||
pmurias: you *add* a role | |||
azuroth | I haven't really looked into roles much. but what if Elf and Wizard both implement two same methods? | ||
nothingmuch | azuroth: role composition says that it's a conflict | ||
== fatal runtime error | |||
azuroth | oh, excellent | ||
nothingmuch | *OR* fatal compile time error | ||
azuroth | I like it. | ||
nothingmuch | i'll give a practical example | ||
this one time i implemented a pop server in perl 5 | 10:45 | ||
i love perl 5 much more ever since | |||
i'll love perl 6 even more since it will let me do it better | |||
the pop3 protocol specs that most command have exactly the same syntax: | |||
my ( $cmd, @args ) = split; | |||
so you have a socket listener | 10:46 | ||
that reads lines | |||
and then does eval { $obj->$cmd( @args ) } | |||
azuroth | there's the trait handles... can you go "$x but $y handles<Foo>" ? | ||
nothingmuch | (with some more scrubbing to make sure that $cmd is just \w+, etc) | ||
then $obj reblesses itself into new protocol states | |||
you get the same benefits of implementing it as a state machine with e.g. Workflow | 10:47 | ||
but with FAR less code | |||
pmurias | how can one define self excluding roles, if i mix one in, the other gets mixed out? | ||
nothingmuch | that operates in a domain you're already familiar with (classes and methods, not XML files for states and transitions and crap like that) | ||
pmurias: good question | |||
p6l it? | |||
azuroth | interesting.. cool! | 10:48 | |
theorbtwo | It is a pretty nifty idea. | ||
nothingmuch | the reason I liked Perl is that it was lax enough to just let me do that reblessing stuff in place without anyone really caring =) | ||
It Just Workedā¢ | 10:49 | ||
in C++ i would have to make all of these things virtual, and do weird in place assignemnts, reallocate, etc etc | |||
that is, I could pull it off | |||
pmurias | nothingmuch: i'll subscribe to p6l and ask it | ||
nothingmuch | but the overhead towards pulling it off would outweigh the gained simplicity | ||
gaal | well, in p5 everything is virtual | 10:50 | |
nothingmuch | ofcourse =) | ||
even more than that | |||
delegated vtables | |||
that are really a deep structure | |||
with symbolic lookups =) | 10:51 | ||
azuroth | what, like go new OtherTypeOfPop, putting the value where 'this' currently is, or something magic? or a wrapper class I guess. | ||
gaal | so my question is, if you need this kind of polymorphism, why insist on using roles? | ||
nothingmuch | gaal: it's just another way to do it | ||
gaal | sure | ||
nothingmuch | gaal: and a pretty clean one | ||
gaal | but it stresses roles hella lot | ||
nothingmuch | i dunno: | ||
gaal | because their point is that things are mixed in | ||
nothingmuch | my $user = $user but Admin; | 10:52 | |
i like that | |||
gaal | plus, what do you do with things that ain't code? | ||
pmurias | gaal: what should be used instead classes? | ||
nothingmuch | it says "from here on, treat it as ...." | ||
member data and method names are treated the same in role composition: | |||
private names are "masked", i.e. they don't conflict | |||
gaal | pmurias: way I imagine it, what nothingmuch did in p5 should still be possible in p6, yes | ||
nothingmuch | and public ones explode | ||
loudly | |||
gaal: what I did in perl 5 was still quite "hacky" | 10:53 | ||
with runtime role composition it would have been cleaner | |||
10:53
kanru joined
|
|||
gaal | nothingmuch: it's decomposition that scares me :) | 10:53 | |
nothingmuch | symmetry =) | ||
gaal | oh, is there a summary of masking somewhere? | 10:54 | |
$:x_from_roleA | |||
$:x_from_roleB? | |||
it's all in the metamodel? | 10:55 | ||
$self.meta.roleA.x ? | 10:56 | ||
nothingmuch | gaal: err | 10:57 | |
the idea is that roleA and roleB are talking about different things | |||
which they both named 'x' | |||
but that aren't the same | |||
they are implementation details | |||
you can probably just say $self.RoleA::x or something | |||
gaal | indeed | 10:58 | |
the methods in the roles just say $:x, yes? | 10:59 | ||
nothingmuch | yes | ||
sorry, i need to fade out | |||
gaal wonders how $self.yaml (for example) should show this | |||
nothingmuch | someone else can play demagogue instead =) | ||
probably with fully qualified names | |||
azuroth | I'll dem your gog | ||
gaal | me too, c++ unfun wants me | ||
nothingmuch | oracle reverse engineering wants me =( | ||
they are insane | 11:00 | ||
string lengths are stored in duplicate for strings under 255 chars long | |||
one right beside the string | |||
the other several bytes before | |||
when it overflows 255 then one of these becomes the magic number 0xFE40 | |||
the other is '02 xx xx' | |||
where 02 is thw width of the int field | 11:01 | ||
etc etc etc | |||
numbers are always returned +1 | |||
i suspect that 0 means NULL in the result table | |||
but i've yet to verify that (been concentrating on queries, not results) | |||
*sigh* | |||
azuroth | for what purpose are you doing this? | ||
11:04
chris2 joined
|
|||
nothingmuch | azuroth: work | 11:05 | |
azuroth | sounds interesting work | ||
nothingmuch | yes | 11:06 | |
but frustrating too | |||
reverrse engineering is never more than 70% finished, i think | |||
for binary protocols anyway | |||
azuroth | hmm. that wouldn't surprise | 11:07 | |
gaal | hmm, won't DBD::Oracle be useful for this stuff? | ||
or that pure java driver, i forget what they call it | 11:08 | ||
(tight client?) | |||
nothingmuch | gaal: IIRC yes | 11:09 | |
but ENOTIME | |||
DBD::oracle links to OCI | 11:10 | ||
so the "good parts" are effectively closed source | |||
is the pure java client opensource? | |||
gaal | wow, that hash thing mentioned on perl-il really does look like a bug | ||
don't think so, oracle provide it IIRC but maybe the sources are there | 11:11 | ||
nothingmuch | hmm | ||
i will have a second look | |||
boss told me something about it | |||
gaal | jars often do | ||
nothingmuch | but I think he said it was closed | ||
gaal | decompile :) | 11:12 | |
i one word he told me secret of success in revengineering | 11:13 | ||
heh heh it isn't a DD bug, he used a dot instead of a comma | |||
nothingmuch | hahahahaaaaaaaaaaaaaa | 11:14 | |
gaal++ | |||
i thought it was something like that where the keys became scalars in the first example | |||
but '= >' didn't make sense like that | |||
gaal did reply with the answer, but it's in his hashcash queue | 11:16 | ||
11:16
tifo joined
11:19
hlen joined
|
|||
ingy | nothingmuch: pong | 11:20 | |
azuroth intercepts the ball | 11:21 | ||
ingy | :p | 11:25 | |
11:25
lichtkind joined
|
|||
lichtkind | Tim Toady hello i have maybe foun inconsistence in the ops may i ask something? | 11:28 | |
gaal | lichtkind: maybe just ask on perl6-language? | ||
(the mailing list) | 11:29 | ||
azuroth | or just hope he or audreyt will backlog it | ||
lichtkind | gaal like this one dev.perl.org/perl6/lists/ ? | ||
azuroth | yep | 11:31 | |
11:34
frederico joined
|
|||
gaal | are there substitution objects? my $s = s/<rule1>/replacement/ | 11:52 | |
or is a closure the way to capture that? | |||
12:01
nnunley joined
12:14
kolibrie joined
|
|||
bsb | gaal: does s/// still default to $_? | 12:33 | |
azuroth | surely | ||
gaal | yeah i hope so :) | 12:35 | |
bsb: also, moose | |||
bsb | s/gaal/what are substitution objects?/moose | 12:40 | |
12:45
fordinal joined
|
|||
nothingmuch | ingy: will you be at YAPC::NA? | 12:48 | |
12:48
SamB joined
|
|||
nothingmuch | gaal: ping too on that topic, actually | 12:48 | |
would you guys want to share a room? | |||
also, bsb: some guy on the Catalyst mailing list has been complaining for about a week now that CGI::Expand won't install on windows, and that you don't respond to mail | 12:49 | ||
bsb | nothingmuch: haven't seen any mail... got a url? | 12:51 | |
nothingmuch | yes, one sec | ||
bsb: lists.rawmode.org/pipermail/catalys...06303.html | |||
the thread winds down to "don't reinvent the wheel" | 12:52 | ||
and then subsequently he says "well, i'll keep my reinvented version because CGI::Expand doesn't install on Windows" | |||
gaal | nothingmuch: yes i would, I'd also like to know about hackathon der^Htails in advance so I can plan my trip | 12:56 | |
azuroth | night, all! | 12:57 | |
gaal | putter said something about hackage in boston but I haven't seen him around since $jabbot_knows_when | ||
night azuroth | 12:58 | ||
12:58
Qiang joined
13:04
PolettiX joined
13:07
mshiltonj joined
|
|||
bsb | nothingmuch: C::Expand 2.02 tries to avoid unixisms in the Makefile.PL output, but I windows testing will need to wait | 13:07 | |
nothingmuch | bsb++ | ||
nothingmuch goes home | 13:08 | ||
13:13
vel joined
13:14
jserv-- joined,
fglock joined
|
|||
svnbot6 | r9876 | fglock++ | PC-Tokenizer - added 'prefix'; TODO | 13:15 | |
pmurias | hi fglock | 13:18 | |
spinclad | bsb: the moose operator is $_$, not $_? | 13:19 | |
U | |||
pmurias | what does it do, enforce moose context? | 13:20 | |
spinclad | i'm not really sure... anything a moose can do, i expect, which is a Lot. | 13:21 | |
gaal | well, you can protect anything with moose quotes: (:{ anything }:) | ||
spinclad | #:( anything at all ):# | 13:22 | |
#:(new style comment):# | |||
gaal | spinclad: except "):#" :-) | ||
spinclad | true, true | 13:23 | |
#:{ even }:# | 13:24 | ||
13:24
mshiltonj left,
Limbic_Region joined
|
|||
spinclad | mugwump: 'perl 6 begat haskell, whence pugs came': wed not begat; of their begetting came pugs... (and the same again with lrep) | 13:24 | |
mugwump: 'Haskell bootstraps with perl5': huh. i wasn't aware of a haskell implementation in lrep... :) | 13:25 | ||
mugwump: nor a pugs one, for that matter, though at least interest and maybe work already on reimplementing the Parsec parts in Perl6 rules | |||
(and thus lrep / PGE) | 13:26 | ||
lumi | Haskell actually does afaik bootstrap with p5 | ||
gaal | @google evil mangler | ||
spinclad | ah, that's what i was missing there, thanks | 13:27 | |
lumi | I guess it can't be glorious when bootstrapping | ||
gaal | "It derives it evilness from its utterly ad hoc, machine, compiler, and whatnot dependent design and implementation" - note, not a word about perl | ||
fglock | pmurias: hi | 13:28 | |
lumi | They're not allowed to say bad things about Perl anymore :P | ||
gaal | nah, that doc has been around for a while | 13:29 | |
# www.cse.unsw.edu.au/~chak/haskell/g...ngler.html | |||
spinclad | lumi: which haskell? ghc, hugs, or something i should already know about just named 'Haskell'? | ||
lumi | ghc | ||
Mea maxima culpa | |||
spinclad | nulla culpa | 13:30 | |
Alias_ | lichtkind: ping? | ||
spinclad | (of course lots of things bootstrap with 'perl Configure.pl' these days...) | 13:31 | |
pmurias | whats the best way to search the p6l archive google,asking the list manager for old messages...? | 13:32 | |
fglock | is someone interested in starting a new p5-pugs module? - an operator-precedence parser that uses Pugs-Compiler-Tokenizer | 13:33 | |
pmurias | fglock: i could do it but i have to finish Embed::Parrot first | 13:37 | |
fglock | pmurias: cool - so I'll keep working on the tokenizer for a while | 13:41 | |
kolibrie | fglock: I have very few tuits, but it sounds interesting | ||
bsb | ingy: Is YAML::SortKeys gone? | 13:42 | |
13:44
Alias_ left
|
|||
fglock | the op-precedence parser can reuse the algorithm in PGE - as in misc/pX/tewk/Rules-P5 - but it needs to be adapted to accept AST as tokens | 13:45 | |
(or Match objects) | |||
13:55
justatheory joined
|
|||
Limbic_Region | fglock - were you able to get Parse::Yapp to work as your shift-reduce parser with the p6 tokens? | 13:58 | |
fglock | Limbic_Region: no, I need something that can accept objects as tokens - but the algorithm can be reused | 13:59 | |
Limbic_Region | fglock - is it as simple as subclassing so that a token is first checked if it is an object and if so a method is called to obtain the token or is it more complicated than that? | 14:15 | |
Limbic_Region is mildly interested in helping but only mildly | |||
fglock | it doesn't look so easy - Parse::Yapp is a compiler - it takes a text as input | 14:16 | |
I mean, it takes a text as the specification | 14:17 | ||
while the p6 specification is based on tables | 14:18 | ||
Limbic_Region | ok - well, if there is some non-thinking grunt work you could have me do - let me know (emphasis on the non-thinking part) | ||
fglock | I didn't find a clear explanation of the shift-reduce algorithm yet - that would help | 14:19 | |
Limbic_Region | ok - and I assume that inlcudes the one on wikipedia | 14:21 | |
so basically if I find something that I can understand then you can understand it too | |||
fglock | yep | ||
Limbic_Region | gotcha - will look around | ||
fglock | thanks! | ||
Limbic_Region | most of what I saw was focused on C | ||
I will look for a language independent clear explanation of the algorithm | 14:22 | ||
PerlJam | Isn't it just shifting tokens onto a stack and when they match a production, they're "reduced" to that production? | 14:23 | |
fglock | PerlJam> basically, yes - but you have to check for circumfix/postcircumfix, etc | 14:24 | |
gaal actually sees the Evil Mangler for the firt time and is amused to find it is written in Literate Perl | |||
(TeX-style) | 14:25 | ||
fglock | and it must be correct and well tested | ||
14:26
sockstat joined
|
|||
pmurias | fglock: there is a clear explanation of the shift reduce algorithm in the book "lex and yacc" by o'reilly | 14:32 | |
reread and explain it to you if you want | |||
i could | 14:33 | ||
svnbot6 | r9877 | fglock++ | PC-Tokenizer - add_rule() creates new tokens; recompile() refreshes the | ||
r9877 | fglock++ | internal tables | |||
Limbic_Region | fglock - I have found a combination of 3 links that I think do a fairly adequate job (when combined) of everything that you need to know | 14:35 | |
fglock | pmurias: I'll check if they have the book in the library | ||
pmurias | do you need to know how it works, or how to implement it? | 14:36 | |
fglock | pmurias: both, because I need to be able to modify it | ||
Limbic_Region: can you paste the links? | 14:37 | ||
Limbic_Region | err, I just /msg'd them to you | ||
www.cs.binghamton.edu/~zdu/parsdemo/srintro.html # introduction to shift-reduce parsing | |||
fglock | I see it now :) | ||
Limbic_Region | www.cs.rpi.edu/~gregod/Sugar/doc/design.html # Shift/Reduce Expression Parsing | 14:38 | |
www.cs.grinnell.edu/~rebelsky/Cours...ne.20.html # Compiler class outline for shift-reduce parsing | |||
The last one comes in 3 parts | 14:39 | ||
pmurias | fglock: you have o'reilly books in your library? | 14:40 | |
fglock | pmurias: I have some | 14:41 | |
Limbic_Region | woah - my library has Safari access from remote locations - just enter your library card number | 14:44 | |
Limbic_Region needs to get a library card | |||
even better - I can register for a card online | 14:45 | ||
pmurias | Limbic_Region: where do you live? | 14:48 | |
Limbic_Region | Odenton, MD | ||
Limbic_Region has to wait about a week for the card to show up | 14:49 | ||
pmurias | Limic | 14:51 | |
Limbic_Region | ? | ||
pmurias | typo | ||
you aren't talking about your town library for sure? | 14:52 | ||
Limbic_Region | yes | ||
why? | 14:55 | ||
pmurias | in mine it's only forth an fortran and they won't let you borrow a book, just wanted to now what is the state of library service elsewhere | 14:57 | |
s/an/and/ | |||
Limbic_Region | oh, well I have never used this library - we moved here less than a year ago and I am a big fan of owning books versus borrowing them | 14:58 | |
svnbot6 | r9878 | fglock++ | PC-Tokenizer - 'term' checks for modifications in the base categories | 15:02 | |
fglock | I often donate perl books at YAPC meetings (after reading them) - I usually don't read a book twice | 15:04 | |
but I have a few 'historical' ones - like a 1964 Fortran book | 15:05 | ||
15:08
hlen joined,
hexmode joined
|
|||
Limbic_Region | fglock - web.mit.edu/gnu/doc/html/bison_toc.html may be of some interest as well though it is specifically focused on bison | 15:09 | |
Limbic_Region mostly uses books as reference and started collecting them when he found that, after giving several away after reading them, they were out of print | 15:10 | ||
fglock | Limbic_Region: thanks | ||
lunch & | |||
15:26
hlen_ joined
15:35
autark joined
15:42
cdpruden joined
|
|||
kolibrie suddenly realizes Limbic_Region lives less than an hour away (given good traffic conditions) | 15:46 | ||
PerlJam | kolibrie: planning a hit or just stalking? :) | ||
kolibrie | PerlJam: my life is too boring for either | 15:47 | |
Limbic_Region | kolibrie in what direction? | ||
kolibrie | Fairfax | ||
15:47
FurnaceBoy joined
|
|||
Limbic_Region | oh, well you are being extremly optimistic about good traffic conditions then | 15:47 | |
last time I was in FairFax it was to meet jdporter (PerlMonks) for drinks, filipino food, and karaoke | 15:48 | ||
PerlJam | He may have also been factoring in his normal average speed. | ||
kolibrie | I only drive to MD before 7:00 Saturday mornings | ||
Limbic_Region | well - if you happen to be in the Baltimore area and want to meet, let me know | 15:49 | |
kolibrie | Limbic_Region: sure | ||
Limbic_Region | it is a bit more difficult these days with a new baby to just do things without planning but with a day or two notice most anything could be arranged | ||
ingy | bsb: shouldn't be | 15:50 | |
kolibrie | Limbic_Region: I usually make plans days or weeks in advance (we have three small kids) | 15:52 | |
bsb | ingy: you're right, I was misled by: | 15:58 | |
15:58
justatheory joined
|
|||
bsb | perl -w -MYAML -e '$YAML::SortKeys = 0' | 15:58 | |
Name "YAML::SortKeys" used only once: possible typo at -e line 1. | |||
but it still actually works | |||
ingy | yeah, so? | ||
doesn't Data::Dumper do the same thing? | 15:59 | ||
gaal | yes | ||
ingy | it's just a global var | ||
bsb | It was just a new warning | ||
gaal | eg if you want to fudge DD::Indent you need to no warnings 'once' it | ||
bsb | no big deal | ||
gaal | or += 0 it | ||
or $^W = 0 :) | 16:00 | ||
ayrnieu | YAML and DD::Indent could just export a subroutine to change this. | 16:01 | |
gaal | YAML.pm and YAML::Syck should both have class method variants for Dump and Load etc, so it becomes easy for client code to do $YAMLCLASS->Load(..) | 16:02 | |
also people should buy ingy a beer | |||
also my cat should not attempt to eat this fly | 16:03 | ||
bsb | I owe ingy soooo many beers | ||
gaal | I'm just sayin'. | ||
ingy | :D | 16:04 | |
I LIKE BEER | |||
and coffee too | 16:05 | ||
FurnaceBoy | mmmmmmm coffee | 16:06 | |
thanks for reminding me | |||
I knew there was something missing from my morning | |||
gaal | it's a tricky business, expecting us to remeber coffee in the morning before we've had our coffees | 16:08 | |
& | 16:09 | ||
bsb | ingy, if I make it to taipei from hong kong I'll repay me debts | ||
ingy | bsb: cool | 16:11 | |
how long are you there? | |||
bsb | 19/april - 3/may | 16:12 | |
this time | |||
16:13
xinming joined
16:19
pdcawley_ joined
16:32
ilogger2 joined
16:40
fglock joined
16:42
ghenry joined
16:48
chovy joined
|
|||
svnbot6 | r9879 | fglock++ | PC-Tokenizer - added 'infix' category | 16:48 | |
chovy | anybody know what app was used to create this chart? www.pugscode.org/images/container.png | ||
wolverian | visio, I believe | 16:49 | |
gaal | anyone around who groks higher-order types? | ||
in haskell | 16:50 | ||
wolverian | I might, if you tell me what they are | ||
:) | |||
gaal | :) | ||
FurnaceBoy | lol@gaal coffee | 16:53 | |
wolverian | hrm coffee might be a good idea | 16:54 | |
thanks! | |||
chovy | those icons look like KDE | 17:04 | |
wolverian | they do. | 17:05 | |
.o(Crystal?) | |||
17:07
_bernhard joined
17:31
david_ joined
17:42
justatheory joined
17:44
rindolf joined
|
|||
rindolf | Hi all! | 17:44 | |
TimToady: here? | |||
fglock | rindolf: hi | 17:46 | |
rindolf | fglock: hi! What's up? | ||
fglock | I'm working on p5-pugs - I could use some help :) | 17:47 | |
17:47
arcady joined
|
|||
fglock | rindolf: re pessach - look for 'matzo-man' in google | 17:53 | |
rindolf | fglock: OK. | 17:56 | |
fglock: is p5-pugs the pugs Perl 5 compiler backend? | 17:57 | ||
fglock | it's 'pugs', but written in p5 | ||
rindolf | fglock: so you're re-writing pugs in perl5? | 17:59 | |
18:01
larsen joined
|
|||
fglock | the very early initial plan for bootstrapping p6 was to write it in perl5 - it's much easier now that we have more detailed synopsis and Pugs and Parrot experience | 18:04 | |
rindolf | fglock: I see. | 18:05 | |
TimToady | rindolf: you rang? | 18:06 | |
rindolf | TimToady: yes. | ||
TimToady: we finished transcribing wiki.osdc.org.il/index.php/Larry_Wa...re_Perfect . You may wish to proof read the transcription. | 18:07 | ||
TimToady | okay, thanks. | ||
rindolf | TimToady: no problem. | 18:09 | |
TimToady | audreyt: just refactored long dot to take only <ws>, but of course that now includes #(comment) so you can still write foo.#<bar>.baz and mean foo.baz. #() is now officially whitespace rather than non. | 18:11 | |
wolverian | that's a bit weird when using <ws> outside perl6 source | 18:13 | |
TimToady | or whatever the <ws> rule is in Perl 6's grammar... | 18:14 | |
it can be <p6ws> to match #() etc. | |||
was just trying to abbreviate "whitespace", which I get tired of typing... | 18:15 | ||
wolverian | right. :) | ||
rules have namespaces (grammars), right? so it can be <Perl6.ws> or so? | |||
TimToady | right, in which case it's still <ws> :) | ||
wolverian | just not the generic <ws>, I hope :) | 18:16 | |
(if I use <ws> inside a class called Perl6, does it look up <Perl6.ws>?) | |||
TimToady | generic whitespace is \s* | ||
fglock | TimToady: I'm looking for existing p5 op-precedence parsers to reuse - do you have any recommendation? I'm currently thinking about using Parse-Yapp as a starting point | ||
wolverian | oh. I thought <ws> was generic. nevermind then | ||
TimToady | actually, <ws> is supposed to be the smart whitespace matcher that :w uses. | 18:17 | |
18:17
rindolf left
|
|||
TimToady | \s+ between idents, \s* otherwise. | 18:17 | |
but maybe that should be "between tokens that would otherwise be confused as single tokens" | 18:18 | ||
18:18
PerlJam joined
|
|||
TimToady | since that's precisely the situation with .. and .#(). now. | 18:18 | |
18:22
nothingmuch joined
|
|||
TimToady | so maybe it's really <tb> for "token boundary" or some such. On the other hand, if we do all our longest-token matching with <%hash>, maybe the situation never arises in a "real" grammar. | 18:22 | |
well, gotta transit, commute, and associate. not planning to distribute soon, however... & | 18:23 | ||
wolverian | cheers :) | 18:24 | |
18:27
KingDiamond joined
18:39
b_jonas joined
|
|||
svnbot6 | r9880 | fglock++ | Pugs-Compiler-Precedence - experimental precedence parser using Parse::Yapp | 18:48 | |
r9881 | fglock++ | PC-Precedence - Parse::Yapp can generate "ast" | 18:54 | ||
PerlJam just notices that fglock is taking PCP | 19:02 | ||
actually, I guess he's a manufacturer and distributor of PCP | |||
svnbot6 | r9882 | fglock++ | Pugs-Compiler-Precedence - Parse::Yapp takes ast as input | 19:04 | |
19:04
ifdev joined
|
|||
fglock monopolizes PCP production and terminals | 19:05 | ||
19:09
hlen joined
|
|||
fglock | Wow, that was easy | 19:12 | |
19:15
david__ joined
|
|||
kolibrie | fglock now has a precedence parser? | 19:22 | |
19:26
r0nny joined,
zgh joined
19:30
r0nny joined
|
|||
fglock | kolibrie: yes! I'm packaging it and adding API and tests stuff | 19:31 | |
19:31
chris2 joined
|
|||
svnbot6 | r9884 | fglock++ | PCR - moved Category stuff to the new PC-Precedence module | 19:31 | |
kolibrie | fglock: woot! | ||
PerlJam | fglock: now all you need to do is create a TGE in perl5 and you'll have recreated the entire toolchain that will be used to make a perl6 compiler. | 19:32 | |
fglock | so we mostly have the 3 layers of p6 parser figured out | ||
PerlJam: TGE is not necessary with the new 'return blocks' | 19:33 | ||
TGE is useful for optimizations, but you can make the compiler without it | |||
arcady | perl 6 is looking like a very good language for writing compilers in | 19:37 | |
presumably because that's the biggest use for it that has been found so far | |||
Limbic_Region | fglock - Parse::Yap takes ast as input? | 19:38 | |
s/p/pp/ | |||
19:39
Ann joined
|
|||
fglock | Limbic_Region: yes - I can feed the matches from Pugs-Compiler-Tokenizer into Parse::Yapp using a few transformations | 19:40 | |
Limbic_Region: and I can get ast back | 19:44 | ||
Limbic_Region | ok - still color me confused | 19:45 | |
ast is going into P::Y or is coming out | |||
PerlJam | both sounds like | ||
fglock | I'm using P::Y for ast->ast transformation (ast list to ast tree) | 19:46 | |
Limbic_Region | ah | ||
ok so the "few transmformations" is what is making the object as a token problem go away? | 19:47 | ||
fglock | this is surprisingly not documented | ||
yes | |||
Limbic_Region | cool beaners and moldy chicken | 19:48 | |
fglock | this is the prototype - misc/pX/Common/Pugs-Compiler-Precedence/precedence.pl | 19:49 | |
Limbic_Region | I currently can't get Pugs to build on my work machine so my local repo is out of date - I will svn up | 19:51 | |
Limbic_Region really needs to figure out why Pugs doesn't build here though | |||
fglock | you don't need pugs to run p5-pugs | 19:52 | |
19:52
FurnaceBoy joined
|
|||
Limbic_Region | I know | 19:52 | |
perhaps you missed the part where I said my local repo was out of date and that I will svn up | 19:53 | ||
and that the figuring out why pugs doesn't run here was a "though" | |||
fglock | ok | 19:54 | |
Limbic_Region | it has been a couple of weeks - this might take a while | ||
svnbot6 | r9885 | fglock++ | Pugs-Compiler-Precedence/precedence.pl - added more operators | 20:01 | |
Limbic_Region | wow - short and sweet | ||
fglock | Limbic_Region: I wrote quite a few parsers myself using a lot of different algorithms before finding this out | 20:05 | |
Limbic_Region just noticed the eval $p | 20:06 | ||
how is the performance? | |||
fglock | quite good - there is a report that says it's half the speed of the C version | 20:07 | |
I mean, half the speed of some better parser - I don't know if it was in C | 20:08 | ||
clkao | summon audreyt | ||
fglock | and magnitudes faster than Parse::RecDescent | 20:09 | |
the eval disappears if you are compiling code - it turns into plain source code | 20:10 | ||
Limbic_Region | hrmm | 20:11 | |
presumably all optimizations happen in Parse::Yapp land which is mature enough to have already gone through a few trips to the tinker shop | |||
fglock | PGE works this way too | ||
PCR also generates source code and than evals it | 20:13 | ||
Limbic_Region was misremembering something about Safe and eval | 20:16 | ||
or rather, I was misattributing a performance issue with Safe and eval to eval | |||
20:21
david_ joined
|
|||
Limbic_Region | fglock - the bigger difference with Parse::RecDescent that Larry was harping about was the ease of adding in precedence levels later | 20:25 | |
beyond just the speed that is | |||
fglock | that, and P::R needs some tricks to avoid infinite loops | 20:27 | |
Limbic_Region | ok - well my grats message apparently didn't come through - so grats | ||
Limbic_Region is headed homewards | 20:28 | ||
TimToady | fglock+=42 | 20:32 | |
fglock | thanks! | 20:33 | |
20:39
macli joined
20:41
tri joined
21:00
p5evalbot joined,
ifdev left
21:17
FurnaceBoy is now known as FB|afk
|
|||
lichtkind | ? eval 4 | 21:27 | |
?eval 4 | 21:28 | ||
evalbot_9885 | 4 | ||
21:28
b_jonas left
|
|||
lichtkind | ?eval @a<1 2>; | 21:29 | |
evalbot_9885 | Error: Undeclared variable: "@a" | ||
lichtkind | ?eval my @a = (1,2); @a<0 1>; | ||
evalbot_9885 | Error: Cannot cast into Hash: VRef <Array> | 21:30 | |
fglock | ?eval my @a = (1,2); @a[<0 1>]; | 21:32 | |
evalbot_9885 | [1, 2] | ||
lichtkind | no i wanted to know if i can use the <> syntax also to ask for subarrays | 21:33 | |
like with hashes | |||
fglock | it would be nice, but you can't - it's like saying @a{'0','1'} | 21:34 | |
lichtkind | i know | 21:44 | |
it would be a bit of dwimmery | 21:45 | ||
i just tried | |||
svnbot6 | r9886 | fglock++ | PCP - added Precedence.pm, TODO | 21:53 | |
21:57
KingDiamond joined
22:02
Limbic_Region joined
|
|||
cognominal | ?eval my @a = ('toto'); say @a<0> | 22:12 | |
evalbot_9886 | Error: Cannot cast into Hash: VRef <Array> | ||
cognominal | ?eval my @a = ('toto'); say @a['0'] | ||
evalbot_9886 | OUTPUT[toto ] bool::true | ||
cognominal | say 'toto' | 22:13 | |
?eval say 'toto' | |||
evalbot_9886 | OUTPUT[toto ] bool::true | 22:14 | |
22:21
tri left
22:25
justathe1ry joined
22:30
frederico joined
22:36
colares joined
22:42
vel joined
|
|||
wolverian | hm, what are the current thoughts on open()? is http.open, file.open etc still the way to go? | 22:42 | |
(mm, lowercase modules) | 22:43 | ||
Limbic_Region | wolverian - were you present for the stream of conciousness chat larry had on the topic here in #perl6? | ||
wolverian | yes, I was wondering if there were any developments on it afterwards | 22:44 | |
didn't see any in the logs, though. | |||
(egrep Tim.*open) | 22:45 | ||
Limbic_Region | wolverian - you have your own local copy of the logs? | 22:46 | |
why not just use colabti.de/irclogger/irclogger_log_search/perl6 | |||
? | |||
wolverian | yes, I have my own copy. | ||
I'm not sure what the www page has that the localy copy doesn't, besides downtime (which shouldn't be drastic) | 22:47 | ||
anyway, thanks, I guess that discussion was the latest on the topic :) | |||
Juerd | wolverian: I hope for a URI based open. | 23:02 | |
wolverian | Juerd, I think I still want open "foo.txt" to work, though. | 23:03 | |
23:04
macli left
|
|||
arcady | it could be something like ruby's uriopen module | 23:05 | |
open "foo.txt" works | |||
require 'uriopen'; open "www.ruby-lang.org/" also works | 23:06 | ||
wolverian | does anyone use that? | 23:07 | |
arcady | yes | ||
rubygems does, I'm fairly sure | |||
err... actually it's called open-uri | 23:11 | ||
and is a part of rubygems | |||
Juerd | wolverian: Local filesystem as fallback in case of absense of ^\w+\: makes sense, yes :) | 23:16 | |
wolverian: And an :adverb can decide if the string should be parsed as URI or local file, to override the heuristics | 23:17 | ||
wolverian | Juerd, then again I'm not sure if I want even that much magic in open() | ||
Juerd | wolverian: I do. | 23:18 | |
I want magic everywhere. | |||
arcady | putting the magic in a separate module would work, though | ||
23:18
rafl joined
|
|||
wolverian | Juerd, how about io() and open(), and put the magic in io()? | 23:19 | |
23:19
Quell joined
|
|||
Juerd | I also want magical @ARGS open to be smart enough to never parse things specially. | 23:19 | |
wolverian: io() is a silly name. Everything a program does to communicate is io. | |||
wolverian | I'd assume it would be magic enough to fit that bill... | ||
Juerd | Maybe File.open, and URI.open, where Magic.open is the default. | ||
wolverian | that's an interesting idea | 23:20 | |
I like Magic :) | |||
Juerd | use File <open>; to override lexically. | ||
wolverian | open file: ...; | ||
Juerd | open File: ...; | 23:21 | |
wolverian | I wonder how often I want to specify what I want to open | ||
Juerd | I would want to specify it only when I have arbitrary filenames. | ||
Calculating URIs is counterproductive, and hoping they won't trigger URI parsing heuristics is dangerous. | |||
arcady | opening a URI is much less common than opening a file, so specifiying that that's what you want is the better idea | 23:22 | |
Juerd | Consider @ARGV's huge gaping security breach waiting to happen in Perl 5. | ||
arcady: I would want URI opening to become a natural action, possible because Perl supports it naturally. | |||
Not because the programmer was clever enough to support it. | |||
There are many things I use in Perl programs that the authors never thought of, but are possible because Perl is so cleverly designed. | 23:23 | ||
(Or, not designed at all, and flexible enough to compensate for that, depending on your theory of evolution versus ID ;)) | |||
wolverian | I can certainly understand making open() understand URIs. it's just future proof. | ||
arcady | there are very evil uses for a OpenURI type functionality | 23:25 | |
Juerd | arcady: There are. | ||
arcady | such as installation scripts: | ||
eval(open("foo.com/install").read) | |||
Juerd | OTOH, I may not want URIs to be the default because they're entirely incompatible with many other file operations, like -d or unlink. | ||
arcady: I think that point is highly irrelevant. | 23:26 | ||
arcady | sure | ||
Juerd | Opening *arbitrary* files is dangerous by definition if there's any magic. See also Perl 5 and ARGV. | ||
Opening *literal* URIs will be done anyway, regardless of URI open being the default or not. | |||
arcady | right | 23:27 | |
wolverian | some programmers won't know that open() understands URIs, creating DoS scripts, perhaps. | ||
mugwump | can p6compiler.pl compile without running the program? | 23:28 | |
Juerd | wolverian: But if "some programmers" who "don't know" (or in fact "won't know") that arbitrary open is dangerous, and they ALSO don't/won't use taint mode, let them suffer. | 23:29 | |
Let them create dangerous programs and lose their jobs. Please. | |||
theorbtwo | ...or make a locally-accessable priv esc become global, when silly programmers assume that on-the-filesystem paths must be safe. | ||
Juerd | And in case you didn't know, Perl 5's <> is dangerous in almost the same way. | ||
theorbtwo | Of course, that's no worse then now, when silly admins assume on the local network is safe, and forget about their open 802.11 with convient DHCP. | 23:30 | |
Juerd | Perl 5 has URI open, except you have to use external commands to get it. | ||
theorbtwo | Perl has never been shy about letting you have enough rope. | ||
Juerd | perl -e'print while <>' "|curl juerd.nl/" | ||
wolverian | GET! (it's even perl) | ||
Juerd | Believe me, I've used (and abused) this more than once. | 23:31 | |
Ever used somescript.pl /path/to/* | |||
theorbtwo | A lexical no open 'URI' would be nice, of course. | 23:32 | |
Juerd | That's a little bit safer than ./somescript.pl * if somescript.pl happens to use ARGV (through readline ARGV, which is what <> is, for example) | ||
mugwump | fglock: you available to give a tour of lrep? | 23:33 | |
or does anyone know how to get lrep to build itself? | 23:34 | ||
I get an error trying to use it on, say, iterator_engine.p6 | 23:35 | ||
`perl p6compiler.pl p6prelude.p6' seems to hang | 23:36 | ||
Juerd | Your quotes are different. | ||
mugwump | they're called `TeX' quotes :) | 23:37 | |
23:37
zgh joined
|
|||
theorbtwo | They're called "stupid-looking non-matching quotes", too. | 23:37 | |
They are one of my major pet peeves. | |||
Juerd | I'd call them a silly attempt to refit ASCII into something that it is not and can never be. | 23:38 | |
23:38
FurnaceBoy_ joined
|
|||
Juerd | If you want to have bracketing quotes, use any of the many unicode alternatives, but not ASCII. | 23:38 | |
In Dutch it can be even funnier (sadder), as the traditional form of quotes is sometimes asciified as ,,foo'' | 23:39 | ||
I don't know which other languages use this kind of quoting. Fortunately, in the youngest decade, the use of these quotes has dramatically decreased :) | 23:40 | ||
TimToady | I'm partial to āfatā quotes myself... | ||
theorbtwo | Apparently, in some very old fonts, ` and ' did form a reasonable-looking pair. Those fonts are now properly considered wrong. | ||
Juerd: They're traditional German too, I think. | 23:41 | ||
wolverian | TimToady, it's so wrong to quite the 'fat' there. | ||
er, s,quite,quote, | |||
23:41
mako132_ joined
|
|||
theorbtwo | I didn't actually see them when I lived in Germany, though. | 23:41 | |
Juerd | theorbtwo: I thought German used >>these<<? | ||
theorbtwo | I suspect, like the Gothic font, they are considered old and stogy. | ||
Sometimes. Mostly they use "normal" double-quotes. | 23:42 | ||
>>foo<< seems to be the German equiv of scare quotes. | |||
wolverian | I wonder if I can make my locale insert the unicode curly quotes when I type ". | ||
mugwump | ok, I'll use āunicodeā quotes from now on :) | ||
wolverian | since that would be proper for fi_FI.utf8 | ||
(then again, I'm not typing finnish now, so it'd break. oh well.) | |||
TimToady | Actually, ASCII quoting still works fine as long as you don't assume ` is symmetrical with ' | 23:43 | |
(my current font has them symmetrical though, grr...) | |||
mugwump | well, moving right along... | 23:44 | |
Juerd | I always use "ASCII quotes" | ||
Sometimes 'these' | |||
mugwump | onto lrep: running p6compiler.pl on p6primitives.p6 seems to work on head | ||
Juerd | I don't care enough about the glyphs to use anything else. Straight, non-curly, quotes are good enough, as long as they're somewhat symmetrical and not abused. | ||
theorbtwo wonders if he should map compose-6-6 and compose-9-9 to ā...ā. | 23:45 | ||
Then gain, I don't care. | |||
s/gain/again/ | |||
mugwump | but, using p6compiler.pl on p6prelude.p6 hangs, and iterator_engine.p6 fails | 23:46 | |
wolverian never could figure out how to use compose | 23:47 | ||
Juerd | en.wikipedia.org/wiki/Quotation_mark#Table # What a mess! | ||
theorbtwo | xmodmap -e 'keycode 94 = Multi_key' | 23:48 | |
Now the key to the right of left shift is compose. Try compose, s, s. | |||
Juerd | I never knew that besides <<foo>> and >>foo<<, even >>foo>> existed, each with and without inner spacing. | ||
theorbtwo | (Assuming xorg on a normal european PC keyboard.) | 23:49 | |
wolverian | I don't have a key to the right of the left shit. | ||
Juerd | "Normal European" | ||
wolverian | er, shift. | ||
er | |||
sigh, I'm retarded. | |||
Juerd | Mind you that in .nl, American keyboards are used. On a QWERTY model, the key right of the left shift is Z. | ||
wolverian | theorbtwo, thanks, that worked | ||
now I can't type the arrow brackets anymore | 23:50 | ||
heh. | |||
23:50
Cyrup joined
|
|||
Juerd | I think it's more sane to map Alt Gr to compose. | 23:50 | |
mugwump | also try gnome-keyboard-properties | ||
Juerd | Or any of the windows keys | ||
wolverian | I need alt gr to type @ and such | ||
TimToady | theorbtwo: it would appear that your ā...ā quotes aren't matching quotes. your left one is DOUBLE HIGH-REVERSED-9 QUOTATION MARK, while your right one appears to be RIGHT DOUBLE QUOTATION MARK | 23:51 | |
Juerd | wolverian: You can still do so, iirc. It's the difference between using it as a key and as a meta key. | ||
wolverian | Juerd, ah. | ||
heh, how can I clear the keycode mapping? | 23:52 | ||
Juerd | By re-loading an entire keymap | 23:53 | |
xsetkbmap us # or s/us/whatever/ | |||
xmodmap -e 'keycode 117 = Multi_key' | |||
117 is the Windows menu key. | |||
arcady | back when I had a mac, I used the option key for that purpose | 23:54 | |
wolverian | I don't have a xsetkbmap. heh | ||
23:54
Cyrup left
|
|||
theorbtwo | I use an en_US keymap on european keyboards, so the key to the left of right shift is useless except for compose. I like having two alt keys, and the keyboard on my desktop doesn't have windows keys, so it works out well for me. | 23:54 | |
mugwump | mail.pm.org/pipermail/wellington-pm...00338.html # my thoughts on keymaps | 23:55 | |
theorbtwo | I use "normal european" to mean 102 key, plus possible windows keys. Most european keyboards seem to be like that, though what's printed on the keycaps varies. | ||
Juerd | wolverian: setxkbmap, sorry. | 23:56 | |
xsetkxmap is a contamination of xset and setxkbmap | |||
arcady | there's plenty of extra keys, if you really need one, though | 23:57 | |
I mean, does pause/break do anything on linux? | |||
or scroll lock? | |||
theorbtwo | Scroll lock is quite useful -- it will "pause" output on terminals, like ^Q/^S. Also, alt-scroll-lock can be used as a magic sysrq. | 23:58 | |
Juerd | Err, scroll lock is essential. Couldn't do without it :) | ||
theorbtwo | However, the second will happily ignore keyboard mappings, which is part of the point. | ||
wolverian | Juerd, thanks! | ||
Juerd | theorbtwo: sysrq can be on scroll lock or print scrn or break, depending on the keyboard (and/or mapping?) | ||
There's always a key that someone thinks is useless, until it's taken away | 23:59 | ||
Consider some of the new Logitech keyboards, without insert key. | |||
theorbtwo | EEEP! |