pugscode.org/ | nopaste: sial.org/pbot/perl6 | pugs: [~] <m oo se> (or rakudo:, kp6:, smop: etc.) || We do Haskell, too | > reverse . show $ foldl1 (*) [1..4] | irclog: irc.pugscode.org/
Set by TimToady on 25 January 2008.
TimToady cognominal__: I think that's from before we made Any the opposite of Junction 00:53
cognominal__ ok, thx
TimToady if you want to match both Any|Junction is now just Object
meppl good night 01:45
cognominal__ Thinking of it, Item makes to me more sense than Any that should match any type. And Any could become a shorter Object. But I suppose we can't change things everyday 01:59
cognominal__ on the other hand, Any is not Many 02:09
cognominal__ speaking of plurality, have you thought of are : sub swap (*@_ , *%_ are rw) 02:26
the trait would apply to the parameters, or declared variables in a list declaration, who comes before that don't have a trait that says otherwise 02:28
pugs_svnbot r19945 | lwall++ | [gimme5] now translates STD to 100% parsable p5 (doesn't run yet) 02:40
diff: dev.pugscode.org/changeset/19945
lambdabot Title: Changeset 19945 - Pugs - Trac
TimToady cognominal__: Any just reads better in signatures that do pattern matching, plus it's shorter :) 02:41
we've though a bit about is/are, but I worry a bit that it will be hard for people whose native language doesn't distinguish sing/plu 02:42
so for now * just distributes the "is rw" automatically
TimToady now I just need to translate Cursor.pm to Perl 5 02:46
hmm, gimme5 will already do most of it...hmm... 02:47
mncharity I forgot buses were on a holiday schedule today. So I am very cold, and very tired. 04:41
lambdabot mncharity: You have 1 new message. '/msg lambdabot @messages' to read it.
mncharity But it did provide an opportunity to reflect. So I will now warm my fingers with a bit of typing.
I considered starting a new project over the weekend. A numeracy+science educational program, the coming together of various ideas I've been puzzling over for years, which I think could perhaps have a profound impact on how math and science are taught and learned. 04:44
So I hit the usual implementation planning conundrum. What language and framework to use. For this exercise, the language candidate list was something like javascript, python, ruby, smalltalk, common lisp, lua. 04:45
I am so very very tired of the first implementation choice on any non-trivial project being deciding what flavor of crippled one wants to be. 04:46
You know the computer game concept of having some gold, and equipping your character to start out? 04:48
spinclad I will buy a +5 horn of expressiveness. 04:49
mncharity Here it's different. Welcome software engineer! Press "Begin project" when done.
spinclad I will wind it every morn as I set Forth.
Auzon Heh. I know that feeling. Except my shop rarely has many choices. 04:50
mncharity Press button. I'm sorry, you have far too few damage points. An unimpaired software engineer waring shoemaker's shoes requires perl 9 2012 to begin development. Please inflict damage on yourself before continuing.
mncharity Remove shoes. Remove feet. Cripple hands. Invoke curse of "must repeat everything thrice". Invoke curse of "you can't get there from here". Press button. 04:52
You want to be able to both see _and_ hear? Please inflict damage on yourself before continuing.
Auzon The developer perishes... 04:53
mncharity ... Welcome software engineer! You may now proceed with 2008 software project development.
spinclad I wish my language to understand both itself and others. -- Please inflict damage on self then.
mncharity Christmas 2008... I'm sorry. Can't we please do Xmas in July instead? 04:54
There is this illusion that calendar time is cheap. At least in open-source primary school software, you hit the following. 04:55
spinclad in May. in May. i wish to dance the way of the camel on beltane.
mncharity 130 Million kids are born each year. Almost all will at least start primary school. So say you project has some window. Some time when it will potentially impact them all. A 1 week delay means you've missed 2 M kids. 04:56
300k per day.
Christmass... :( 04:57
I suggest "Christmas in July" is now both perfectly feasible, given existing resources, and should be our collective objective.
At least, here's a strawman argument to that effect. 04:58
Ok, maybe the critical pass is this... 04:59
*path
(1) We have two efforts to do a full p6 parse, and make the result available. Using STD.pm. TimToady metholate-ng'ing STD.pm to p5. And me hand translating it to ruby. Complementary risk sets. TT can shape STD to make it work. At least one of these is going to win, with fairly low risk. 05:02
I suggest the next step is 05:03
(2) Simple transliteration-like compiler and backend, on p5 (and ruby). Basically writing p5 with a p6 syntax. Like kp6, but a slightly larger subset of p6. And fast. Both frontends seem likely to be fast (well, I know at least the ruby one can be). The emitted code is just normal perl/ruby. And the compilation shouldn't be too slow - pugs-like. Perhaps even a bit better. 05:05
mncharity Which means (3) we can finally start writing p6 code. Not real wizzy p6 code, with junctions and so much else. But... p5-flavored p6 code. Something one could picture writing a compiler and runtime in without too much dread or pain. 05:07
mncharity There may be some short cuts. I'm kind of wondering how difficult it would be to teach redsix to emit p5, so folks could start working on the backend without having to wait for STD to get debugged. 05:09
Or one could work in kp6 backend land, but with a slightly different vision of where you are aiming with the code.
"make the blackboard as blank as the vast and arid desert of you mind" 05:10
very blank mind. blackloggin... 05:11
Auzon Is gimme5 the same as metholate?
spinclad similar, i think
cheat, then metholate; cheat, then gimme 5... 05:12
mncharity TimToady: re rearranging parameters, very np. I'm already using a different ordering than STD.
re "wind it every morn as I set Forth", oy, *groan* <shaking head> lol sigh 05:13
spinclad sorry
couldn't help it; word was demanded, context demanded capital. 05:15
mncharity re "shop rarely has many choices", yeah, that does make things simpler. masks that the field itself is broken, rather than it just being a local phenomena. also provides a framework for "attempting software that does X is not plausible given available resources". The free-time FOSS gig makes resource limits show up as tool inadequacy. 05:16
pugs_svnbot r19946 | lwall++ | [Cursor5.pm] now compiles under p5
diff: dev.pugscode.org/changeset/19946
lambdabot Title: Changeset 19946 - Pugs - Trac
mncharity re "The developer perishes...", no, just their projects.
/me googles beltane. May. I'd labor with people towards May. It would make for a much nicer Spring. 05:18
re gimme5, looking... yes. well, not the same. copy, repurposed to do p5 on a... tagged DFA something or other. 05:20
re word... ok, I didn't expect to find myself laughing at the end of this missive. thank you :) 05:21
TimToady okay, I can now translate "perl STD_5.pm" without a compilation error. now I just need to make it work... 05:21
mncharity oh, wow. 05:22
a question,
spinclad (1) is in process as we speak.
mncharity there are basically two ways to approach getting an ast from the parse 05:23
redsix did a parse->match-tree(with Match's tagged with which rules generated them)->ast.
pugs, kp6, did parse->ast directly. 05:24
TimToady unlike pugs, perl5 will not autogenerate a ->new for me...
pugs_svnbot r19947 | lwall++ | [gimme5] uncomment "use Cursor5"
diff: dev.pugscode.org/changeset/19947
lambdabot Title: Changeset 19947 - Pugs - Trac
mncharity I was happy paying for the decoupling, and have been thinking of taking the redsix approach again. 05:25
spinclad nqp and rakudo too, i think, parse->ast
depending on what the actions make.
mncharity if red_STD becomes the parser for a... red_elf? 05:26
mncharity my experience is that parsing is hard, and getting ast's right is hard, and that trying to do both at once is a world of pain. having a layer in between 05:27
lets you contain the messiness. eg, if some non-local groveling, down or up, the tree needs to be done to pull together the information an ast node needs, that cruft neither clutters the parser itself, nor compromises the ast. 05:28
clean parser -> layer of cruft tightly tied to parser code -> clean ast
anyway, so I was wondering what thoughts there were on how a gimme5-based thing might be pursued. 05:29
TimToady heh, Undefined subroutine &Pugs::Internals::caller called at Cursor5.pm line 252.
mncharity green_elf? :)
lol 05:30
spinclad groveling: eg: types, sigs, captures, application, ...
TimToady well, certainly STD5 is only going to produce something like an AST, and I plan to just dump it out to yaml or some such for downstream use
spinclad multis
lexicality 05:32
mncharity another design choice/issue is what flavor(s) of ast 05:35
TimToady they come in flavors? neat!
mncharity for a hypothetical redelf, I was thinking of parse -> Match-tree -> krufty-ast -> whatever-ast(s). Basically, 05:36
spinclad a clean parser can do some of the work of building an ast, by make'ing in its actions, tagged Matches being just the default
spinclad but passing around type info is good to defer, eg 05:37
mncharity not going directly to the/a "real" ast means the focust on ... krast, can be to _just work_. No other compromising agenda. And given a working ast, it then becomes relatively trivial to spit out alternate asts. kp6, "spec", whatever. 05:38
mncharity re flavors, :) don't know if there are more of fewer than 31 or not. then there are all the mixins... 05:39
re make'ing actions, hmm... given that STD seems likely to mixin such actions keyed by the #= foo comments and {*}'s, vs Match's tagged with rules and then runtime tag-dispatching to similar actions... brain to fried to take the next step of figuring out what the core key issues are. 05:42
though I suppose STD could include such actions directly in some of its lots of code. which would mean... 05:43
brain toast
in several flavors
spinclad fingers warmer? 05:47
TimToady the Cursor variants just end up calling $¢._REDUCE($tag) where $tag is the rule name plus the comment
so that method can do whatever it likes
since the match data comes in via $¢ 05:48
mncharity if it looks like STD_p5 is converging nicely, that should be the focus. makes red_STD uninteresting. or rather, just a backup. then the ast -> translit-p5 can be written in p5. and we have a green_elf. from which a red_elf can be easily derived.
TimToady well, I really have no idea how close it is to running, or how fast it will be, but it's gotta be more stable than pugs 05:50
mncharity but ruby's main role is then to provide backup to the second p5 backend, the one attempting correctness rather than 'simplicity, usability, speed'. that second p5 effort will hit p5 core bug issues, so having an similar effort on ruby, with a hopefully complimentary set of challenges, will help avoid things getting bogged down/stuck.
fingers warmer. nose a bit nipped, but oh well. 05:51
re _REDUCE... sounds good. 05:52
TimToady well, what we really need is an engine that runs full p6 semantics fast and without flakiness, and it remains to be seen which VM will get there first
but if we can run some subset about the size of p5 as stable and fast as p5, we'll start getting a lot more traction 05:53
mncharity indeed. I think that's the key. 05:54
TimToady does ruby have a TRE module? 05:55
spinclad tagged regex?
TimToady *nod*
that's what I'll be using in STD5
I almost got it working under pugs, but the p5/p6 linkage was just to flakey to pass long strings back and forth 05:56
*too
but it was working in principle, and successfully finding the longest token, and determining the fate of subrules
mncharity "tagged regex"? meaning parts of one can be named and reused? 05:57
TimToady so none of this thrashing around with lots of subrules that can't match
yes, does () captures in a DFA
still can't backref match inside DFA though
but most lexers don't need that
if STD sees a backref it treats it as end of longest, so DFA never sees it 05:58
as I was mentioning earlier, the trickiest thing in autogenerating a lexer is not recursing 06:00
because it's really hard to feed an infinite set of alternatives to a DFA :) 06:01
jql yes, that seems tricky
TimToady on the other hand, you do want to explore the subrule space as much as possible within that constraint so that you don't get conflicts between matches caused by one of the tokens quitting too early 06:02
mncharity ahhhh, so "tagged regex" just means "does TRE optimization"?
TimToady the longest token stuff is really essential to grammar extensibility 06:03
mncharity I'm not sure if ruby's www.geocities.jp/kosako3/oniguruma/ does TRE or not. 06:03
lambdabot Title: Oniguruma
TimToady it uses re::engine::TRE to implement the DFA specced in S05
mncharity There are alternate engines like laurikari.net/tre/ which do, but I'm unsure they are ready for primetime. 06:04
lambdabot Title: 169 TRE home page
mncharity s/unsure/doubt/
Auzon Regarding "dollar cent", is there a way to write it like $\u{CENT}
?
TimToady you have to have the tags not so much for capturing the substrings but to determine which of the many, many branches of the tree you ended up on
Auzon: nope 06:05
P6 is written in Unicode.
but it's not a variable that users have to deal with much
Auzon I figured that :)
TimToady which is why it has an unusual name
MY::{"\$\c[CENT SIGN]"} might work some day 06:07
or even MY::«\$\xA2» ... oh wait... 06:08
mncharity re "longest token stuff is really essential to grammar extensibility", curious. I've had the same thought about using backtracking rather than longest token. :) but that's an issue for a different month. happy to see gimme5+::TRE pursuing the topic.
TimToady in general, backtracking is a bad plan in a parser. they've known that since the '60s... 06:09
much, much better to guess right the first time :) 06:10
the think about longest token is that it's immune to rule ordering issues 06:12
if the user adds infix:<====> it takes precedence over the builtin infix:<===> automatically 06:13
TimToady on the other hand, if they add infix:<!> then all the builtin infixes that start with ! take precedence 06:14
has to work both ways
neither the old rules nor the new have privilege over the other
Auzon smop: say("hi")
Auzon Eh. 06:14
pugs_svnbot r19948 | putter++ | misc/pX/Common/redsix/redsix: a bit of bug fixing (rather than porting to 1.9.0). Sub and method names no longer collide. A workaround for parsing "for @a {}". And a "this can't every have run" missing argument. That last I don't understand, which worries me. 06:16
diff: dev.pugscode.org/changeset/19948
lambdabot Title: Changeset 19948 - Pugs - Trac
TimToady and with a backtracking engine you can't *tell* whether you have the longest token without trying them all
mncharity sigh. started running make test-ruby this morning... but forgot to ulimit it, so got stuck. checked in anyway. 06:16
TimToady darn it, that's not fair--you're working while I'm talking :) 06:17
spinclad turnabout is prime fair 06:18
mncharity re backtracking, 60's, never mind. another time. my increasingly fuzzy impression is there are other, for critical-pathish fish to fry (than that conversation) 06:19
no work, just the check in. ;) well, and killing the hung test, so make test-ruby will plod on (hopefully). 06:20
/me tries to picture a prime fair. It would almost certainly be odd. 06:21
1+am here. there was something... 06:22
TimToady, any thoughts (/ something to think about) on what people might be able to do to help you with gimme5 et al? 06:24
mncharity todo item: see if redsix can run the kp6 p6 files. 06:26
spinclad :) 06:27
TimToady I dunno, STD5 is pretty much a black box till it starts spitting out ast 06:28
mncharity I believe it would not be hard to make redsix emit p5, and create a p5 version of the runtime bits which aren't already written in p6. a risk/question is whether/how-close redsix can handle a large enough set of p6 to be interesting as a way to write/compile p5-flavored-p6. 06:30
"p5-like-p6"?
assuming you could basically write p5 code in p6 syntax, would anyone here actually use it? that's a "not just this evening" question, which determines whether the exercise is worthwhile. 06:31
jql mooseiphiles would 06:32
mncharity would allow writing the STD_5.pm compiler and emitter in said p6-syntax-p5. 06:33
mncharity tries to parse mooseiphiles as greek name, philosopher. then as philosophic school. way past end of day 06:34
spinclad might allow writing cheat- and gimme5-like filters in more readable forms?
myophiles (except that's mousiphiles) 06:35
mncharity re more readable, hmm, i suspect not. they are the kind of "kludgy text massage with regex's" at which p5 excels.
err, wait 06:36
spinclad at least some of them might become 'kludgy tree massage' i fancy
TimToady well, I think a cheat/gimme5 based on STD5 rather than random s/foo/bar/ would be a step in the right direction
jql textual massage is the most ergodic
TimToady the current STD5 should prove whether it's possible to write a p6 compiler based on STD in p5 06:37
and doing it the right way to end up with the same basic executable would ensure some kind of convergence 06:38
at least on the standard grammar, and perhaps even on the extensible one
how "use FooLanguage" in user code turns into real activity is still largely unspecced 06:39
there's some handwaving comments at the start of STD about that though... 06:40
mncharity yeah. I was thinking we would like p6-syntax-p5 to write the compiler and emitter to place behind STD_5, but as STD_5 matures, at some point gimme5 et al will need to be replaced by something p6-ish. I'm just not sure that's something to working on quite yet.
TimToady we need to see what STD spits out first and whether that's usable at all
the fact that rakudo's compiler has been converging on it seems like a good sign though 06:41
mncharity setp 1 - p6-syntax-p5 which compiles and runs fast, and thus can be used to write stuff in p6. step 2 - write better p6 in p6.
TimToady well, I'll take any bootstrap I can get at this point :) 06:42
and better too many than too few
mncharity re "usable at all", one nice thing about red_STD is it has a complimentary risk set. it's less maintainable than green_STD. but since it's all hand written, as long as bugginess is contained, it _is_ going to converge and run. though not doing TRE may end up requiring liberties. 06:45
and I suppose I may have deeply misunderstood the backtracking/TRE needed, in which case... well, even there, it just manifests as increase mess. 06:46
so I'm at least fairly confident at least one of STD_5 or red_STD will work. 06:47
spinclad re cheat/gimme5 based on STD5: ones based on pge/nqp would be a step thither, and runnable now...
mncharity oky. end of day+2 hr. any last issues? 06:48
spinclad but maybe STD5 is about ready too 06:49
TimToady well, nothing says we can't do STD5/nqp hybrid or some such too
spinclad if they both accept the same source... 06:50
TimToady well, anything based on STD should accept the same source, more or less. it's the backends that will mangle the semantics mostly :) 06:52
mncharity re pge/nqp, if there is something parroty which could do a pugs-like -C yaml, on real code, that could be interesting. to compliment kp6+redsix+STD_5+red_STD.
if anyone knows ruby, one of the next tasks in red_STD is to write a ruby version QLang et al. and heredoc (simpler). on the QLang, it might be easier, and sufficient, to write it in normal ruby, rather than the "translate what's there" which is used in the rest of std.rb. I'd not object at all if someone(s) knocked these off before I have to get to it. ;) 06:57
"P6 by Beltane". for some value of p6. that would be very nice. 06:59
good night all. thanks for the enjoyable conversation. &
Auzon see you
TimToady night & 07:00
spinclad rakudo have --target=past, i think nqp does too 07:01
sleep well
*has
pugs_svnbot r19949 | lwall++ | [Cursor5] now correctly produces transitive lexer pattern 08:19
diff: dev.pugscode.org/changeset/19949
lambdabot Title: Changeset 19949 - Pugs - Trac
pdy greets bloonix and moritz_ 12:13
buu: do you plan to implement buubot in Perl6?
pugs_svnbot r19950 | putter++ | [misc/red_STD] renamed to misc/STD_red, to go with "STD_5". 13:21
diff: dev.pugscode.org/changeset/19950
lambdabot Title: Changeset 19950 - Pugs - Trac
pugs_svnbot r19951 | putter++ | misc/STD_red/std.rb: fixed typo - runs again. lack of unit testing --. 13:35
diff: dev.pugscode.org/changeset/19951
lambdabot Title: Changeset 19951 - Pugs - Trac
ruoso pugs: say Signature.^methods() 16:09
exp_evalbot OUTPUT[*** No such method in class Class: "&methods"␤ at /tmp/qj31BkoA61 line 1, column 5 - line 2, column 1␤]
ruoso TimToady, is there any idea on how the Signature API should look like? 16:10
TimToady I expect fglock has thought the most about that 16:11
or maybe the MO folks
but to the first approximation it's just an ordered container of containers 16:13
ruoso hmmm
TimToady and binding happens left to right across it, so that defaults can refer to previous bindings in the sig 16:14
ruoso trying to think how Capture ~~ Signature would be
TimToady the containers in a Signature are not necessarily bound to a lexical scope 16:15
TimToady they're bound into a lexical scope by "my" or "sub" or some declarator 16:15
but a bare signature still has containers that don't go anywhere
so I guess if you bind to an anonymous signature you get a bunch of anonymous variables 16:16
ruoso i wasn't talking about binding yet... but matching 16:18
TimToady match attempts binding, but it has no effect outside 16:18
that's what I'm saying
ruoso but binding may have side effects 16:19
i.e. autovivification
TimToady well, there's probably some sort of "could you bind this if I really wanted to?" query 16:22
maybe it even creates some kind of a list of action items that could be executed later without rebinding 16:23
that might be overdesign tho 16:24
ruoso remember that signature may have any repr... so the API must be spec 16:25
TimToady the vivification is an interesting question too
we don't allow subscripts in my or function sigs
but in a literal lvalue that refers to previous vars, we do 16:26
so maybe that's a different kind of animal
ruoso foo() := bar()
TimToady presuming foo is declared rw, it seems to follow 16:27
ruoso what I mean is that the return of foo may have any repr 16:28
TimToady an lvalue may just be a protoobject that knows what else it has to do if you vivify it
ruoso I know... I'm just saying that we need a std api to that... 16:29
it's not overdesign
TimToady I meant the $cap ~~ $sig might actually produce a list of potential side effects in the abstract; not your api 16:30
what you're doing is just design :)
but sometimes I overdesign things in my head... 16:31
ruoso ah ok
TimToady but if we put too much mechanism into signatures, they won't be fast
but then again, if we want to capture control between the can-you-bind and the actually-bind (maybe for mmd decisions?) then it might not be overdesign to have a .can equivalent 16:32
TimToady hmm, default setting couldn't be delayed though, since the binding of a subsequent parameter might depend on the run-time type of an earlier 16:34
and that might actually run code during binding 16:35
when \(1) ~~ :($a, $b = die "oops") {...} 16:36
that can determine that it can bind without actually running the default, but... 16:37
TimToady when \(1) ~~ :($a, $b = die "oops", :$c = $b + 1) or some such may have problems 16:39
not thinking quite clearly yet; doesn't help to have the flu...
spinclad i'm thinking you may not need to run any of the defaults at trial time, so no problem that $b is not really there yet at $c trial time 16:42
TimToady maybe :($a, ^SomeType $b = die "oops", SomeType $c) where SomeType must match the 'en passant' type of $b
spinclad yes, that i fancy needs trial-time binding 16:43
TimToady well, that's an illegal sig anyway, since you can't have mandatory after optional 16:43
but I'm sure there's some way to fake it into dying at ~~ time :)
spinclad easy to fix: :($a, ^SomeType $b = die "oops", SomeType $c = $b + 1)
but still no death 16:44
TimToady but maybe we can just say that defaults are evaluated lazily as needed, and if a signature forces evaluation somehow, that's the user's fault, not ours. :)
spinclad :($a, ^(SomeType = die "Any") $b = die "oops", SomeType $c = $b + 1) 16:45
oop
spinclad :($a, (^SomeType = die "Any") $b = die "oops", SomeType $c = $b + 1) maybe 16:45
but what would be an optional type? 16:46
TimToady :($a, ::($a.WHAT) $b), presuming we allow symbolic ref to a type 16:49
that could contain any amount of code in ::(...) 16:50
so i guess signatures are turing complete. :)
spinclad and if $a defaults, its default must run to get its type 16:51
TimToady correct
it's almost like a "make" in Unix terms
and when is it possible to run "make -n" without side effects? 16:52
makes you want some way to tell STM "don't allow any side effects in the following code"
spinclad STM? for parallelism? 16:53
TimToady well, to enforce the "I claim this is pure code" declaration when it isn't in fact pure
it should at least warn you about such situations 16:54
speaking in general here, not just for ~~ sig
[particle] use warnings 'impure';
spinclad ah, right. 'provably pure'. 16:55
TimToady but thinking of it in a dynamic scope like STM uses for contend {...}
spinclad 'trust but verify'.
TimToady contend :pure {...}
ruoso TimToady, isn't better to have a specific "match" code in the signature?
TimToady don't follow 16:55
ruoso all this controls about defaults and the side effects 16:56
TimToady certainly any object that supports ~~ is supposed to provide .ACCEPTS for that purpose
and that could inside enforce something like contendpure {...} 16:57
ruoso will look deeper later...
ruoso a little confused
TimToady I'm saying that STM already keeps track of interfering side effects, and that it would be natural to let that mechanism check for *any* side effects 16:58
though it might need to be taught which memory changes are benign and which ones aren't 16:59
since even "pure" code has to fiddle the stack and such to run
interestingly, we might have a version of atomic that allows other pure code to run, just nothing else impure 17:01
spinclad .oO { just nothing else interfering } 17:01
TimToady sort of like N read locks but 1 write lock
spinclad gotcha
TimToady I suspect this idea would be more useful in Haskell than in Perl though... 17:02
spinclad .oO { 'gotcha': who hit whom? i got you but your word got to me. } 17:03
TimToady ruoso: you might need to think about some of the implications of STM in your design before you get too much further, unless you have already 17:04
PerlJam TimToady: Tomorrow's perl may act more like Haskell than you intend today :)
PerlJam s/perl/Perl/ 17:04
[particle1 some argue perl itself is an impure thought
TimToady I intend that Perl be able to mutate in whatever direction the community desires 17:05
even if that is N different directions
spinclad .oO { think only pure thoughts. change nothing, make a new world. }
TimToady all I can tell you is that some subset of the community is *not* going to want to think about monads :) 17:06
spinclad monads will be undercover agents, preventing change from ever becoming real. like pixies. 17:07
PerlJam at least until monads lose the stigma or change their name or something 17:08
TimToady monads are too hard to lift
PerlJam so is recursion for some people 17:09
:-)
TimToady I got better...
spinclad so are continuations
TimToady I'm getting better
spinclad also well kept under cover 17:10
TimToady well, we don't even tell people they're using real closures till they need to know...
spinclad also TimToadies should stay warm and get well
PerlJam once Perl 6 brings these weighty concepts to the forefront of the programming mainstream (I can dream can't I? ;) everybody will be using continuations and monads and stuff. 17:11
spinclad what, lisp and haskell aren't already forefront? don't their jobs dominate the want ads? 17:12
TimToady we continually "use" the universe without understanding it
TimToady all I know is, I'm pretty smart, but I'm not smart enough to win an argument with ghc :( 17:12
well, maybe I know a few more things than that... 17:13
spinclad just let it tell you where it gets stuck, and apply mutation around that point until it sneaks through. 17:14
i find this method leaves for later the harder job of understanding how my code works 17:15
TimToady what do you do when none of the mutations you think of actually work?
everything's obvious after Sherlock Holmes explains it, but that doesn't mean we 17:16
are all SH
spinclad then you go extinct. that's the beauty of darwinian programming: if it's still here, it works.
the ugliness of it is having any idea what you're doing 17:17
TimToady yeah, well, darwinian evolution seems to have limited the human race to an average IQ of 100
[particle1 hey, i resemble that remark. 17:18
spinclad nonono, i meant me. anyother resemblance is purely imaginary. 17:19
TreyHarris chuckles at the syllogy implied at some level: "statistical laws imply statiscal distribution in a statistically large enough universe over a statiscally large time."
"syllogy"? that *should* be a word. But I guess I meant syllogism.
spinclad i like that word. let me check if the greeks had it. 17:20
TimToady tautalogies "я " us
TimToady tautologies even 17:21
TreyHarris TimToady: yes, good point. it's a tautology when it only has one prior, a syllogism when it has two or more. thank you. :) 17:21
PerlJam tauntology? :)
TreyHarris PerlJam: Tontonogy. It's what the equestrian arts are known as on Hoth. 17:22
TimToady "What mean we, white man?" -- Taunto
[particle1 "nyah nyah nyah nyah nyah nyah" -- Taunto 17:24
spinclad 'syllogy': apparently not greek. 'syllogé' (eta acute) was a gathering, a meeting, and 'syllogos' an assembly. 17:25
PerlJam You can only run with a riff for so long before it eventually peters out. I wonder how long Perl 6 will last?
(much much much longer than "taunto" I hope)
TimToady till Perl 7, probably...
spinclad the Dead riffed long and hard
PerlJam TimToady: that's the one your great-great-grandchildren will be designing? 17:26
TimToady the only question is whether the name of Perl 7 will be "Perl 7" :0
PerlJam (they have the proper provenance after all)
[particle] i doubt the great-great-grandchildren have been certified yet. i'm sure they'll be certifiable. 17:27
spinclad *(not greek: not classically attested) 17:28
TimToady can't find my Liddell and Scott, sigh... 17:29
TimToady later & 17:31
spinclad the town of Taunton is about 50, 60 miles south of here
TreyHarris i'm thinking of the disraeli quote "lies, damned lies, and statistics." I read once somewhere that a "damned lie" specifically referred to when you lie by claiming or implying that a truthteller is lying. I don't know if that's canonical though, or just something the writer made up.
pugs_svnbot r19952 | putter++ | [misc/STD_red] renamed <ws> from dot_ws to wsp. assorted cleanup. 17:34
diff: dev.pugscode.org/changeset/19952
lambdabot Title: Changeset 19952 - Pugs - Trac
mncharity (boo monads! yay arrows! peanuts fly) 17:43
pmurias mncharity: red_STD generates a true/no answer for most rules instead of a match, right? 18:40
ruoso TimToady, I'm not sure STM management can keep track of everything... Considering different representations for objects... that objects may be enterely out of the program's control 18:57
they might be using an external C library
is the VM supposed to make COW for the entire process while the transaction isn't committed? 18:58
and then merge back the memory>
because other way there's no way to make sure that there are no side effects... 18:59
pmurias & 19:00
ruoso or if some given repr doesn't support STM at all
like Glib
When I was thinking in STM was about a controlled set of data that you which to keep transactions for... 19:07
I wasn't thinking about the entire process being rolled back...
which would mean that... 19:08
in a content... all accessed variables are marked as temp, and their outer value would be set when the transaction was committed
ruoso but I wasn't expecting all memory access to be intermediated... 19:11
ruoso or specific data types that were STM-aware 19:16
that would be sane also
s/or/but/
nothingmuch ruoso: in haskell due to type safety STM can be constrained to a very select fewvariables 19:18
it has the luxury of pessimizing everything else
in perl 6 i think it'll probably have to auto-upgrade variables to STM variants in order to be practical 19:19
ruoso but how can it do it on unknown representations?
nothingmuch can't
they'll ahve to provide an api 19:20
i suppose
but it's difficult
i'd guess it's a runtime error ("unsupported data type in transactional operation" or sth)
in some cases it really doesn't make sense, too
ruoso and other question would be, how deep would that control go? 19:21
nothingmuch for example if the container is tied to a file on disk
hmm... good question
ruoso the container?
the value of the container? the conteiner inside the value inside the container?
nothingmuch s/the/a/;
any 19:22
ruoso brb
nothingmuch an example of things that might want to be transaction aware, even if in practice it's not really STM: berkeley db backed hashes, slots of an object that came from an ORM (the ORM's meta-something could implicitly clone the database handle and create a new transaction for each atomic { }), etc 19:23
nothingmuch is mostly throwing this in the air as food for thought
[particle] pigeons descend. 19:25
spinclad hawks too 19:27
mncharity pmurias: re "red_STD generates a true/no answer for most rules instead of a match, right?", yes and no. currently operators have matches, and a couple of other rules. plan is to finish transliterating, do a edit-for-correctness pass, and then start adding additional matches, but only as needed by the parser itself, or by a hypothetical ast generator. 19:29
vision is a match tree result which is "not complete, but good enough". 19:30
mncharity running ruby1.9 std.rb currently gives you an interactive repl, for trying code against rules. but only EXPR ("(2+3)*4") and a few other rules ("use x") have been exercised/debugged. 19:32
pasteling "mncharity" at 76.24.29.201 pasted "example of current STD_red use" (69 lines, 2.1K) at sial.org/pbot/30297 19:36
mncharity red_STD, STD_red, whatever 19:43
ruoso still have no clue on how that translates from abstract concepts to low-level implementation... how deep to go, when to care... 19:51
ruoso home &
pmurias mncharity: thanks 20:44
cj ingy! 23:06
I wonder what he was getting... 23:07
has mp6 magically gotten file IO or sprintf() yet?