The Return of the Journal : pugs.blogs.com/ | pugscode.org | pugs.kwiki.org | paste: paste.lisp.org/new/perl6 or sial.org/pbot/perl6
Set by stevan on 23 December 2005.
Tman so does the SVN system allow changes directly to the trunk or do committers have to branch out and let an admin of some sort merge their changes? 01:00
avar directly to the trunk 01:01
Tman interesting
avar although that probably depends on how you set up the repository, but by default...
Tman well I mean for pugs
how much abusement do you see? 01:02
avar none?
Tman cool 01:03
I was just wondering, since I read about the project and its openness
or whatever you want to call it 01:04
audreyt "anarchy" is how I call it, but whatever :)
nothingmuch: pugs.blogs.com/audrey/2005/12/why_d...e_jou.html
# the reason(s) of the journal move
avar people probably commit bad stuff once in a while, but not on purp
audreyt yeah, and there's at least 3~4 people constantly watching every diff 01:05
since commits are announced on the channel here
avar audreyt: that bot should say which file was modified though..
like CIA
although it's easy to find out 01:06
audreyt avar: nod... there's a knob to turn on reporting of subdirs
Odin-LAP audreyt: Anarchist? 01:07
audreyt but it's noisy already, and "svk desc HEAD" works happily
Odin-LAP: yeah, publicly so, as listed on my wikipedia page
Odin-LAP audreyt: Hmmm.
Individualist anarchism. Always struck me as a solid line of reasoning that didn't really dare going all the way. *grin* 01:09
Tman was svnbot6 made specifically for this channel? 01:10
I want one for my project =) 01:11
avar Tman: on freenode?
Tman yup
Odin-LAP It was, wasn't it ... exercise for perl6 IRC module, or somesuch?
avar Tman: why not just use CIA? 01:12
Tman never heard of it :p
avar /join #commits
Tman thanks
avar you can get a bot like that for your channel and repository for free
cia.navi.cx/
Tman awesome :D 01:13
Odin-LAP audreyt: Anyway. In that case, there's a lingering question. What do you think of the distinction made, by some, between 'property' and 'possession'? 01:18
audreyt re 01:20
Odin-LAP: I don't see a difference, frankly. 01:21
otoh, as a non-native english speaker, I may have missed some nuances. 01:22
Alias_ I second that
;)
There's another hundred or so lines of M:I docs now... covers the all_from-related things, requires, build_requires, and no_index 01:23
audreyt Alias_: oooh oooh
Alias_ But that's it
Odin-LAP The distinction is arbitrary, really. In general usage, the two don't signify very different ideas.
Alias_ One or two more chunks of doc and I think I'll be ready to bleat to the world about Task::
audreyt Odin-LAP: I'm not familiar with the arbitrary distinction then
Odin-LAP The author who proposed the distinction made an analogy, though. "The lover is possessor, the husband proprietor." 01:24
Alias_ audreyt: Also, XML generation works now for PITA::Report all the way out to the top tag
audreyt Alias_: wow, you've been productive
Alias_ audreyt: Just working on the parser side and got sidetracked by bugs in IO-stringy, which I might need to take over :/
audreyt: No commercial work you see, a week off does wonders. 01:25
audreyt Odin-LAP: I grok the proprietor bit, but not the possessor bit ;)
Alias_ Did I mention there's a centralised API for sending SMS now too...
SMS::Send :)
audreyt now if it's "processor", that I understand...
nice :) 01:26
Alias_ Of course, my minion just dropped in to fix a server and brought Aeon Flux and Lord of Ward with him... so I'll be useless for a few hours
War
Odin-LAP audreyt: Possessor is someone who possesses something. :p 01:27
Alias_ also generally implying ownership
audreyt Odin-LAP: but in the case of love, it's more like "possessed" 01:28
Odin-LAP: now, if my obssession on pugs makes me the possessor of pugs, that's certainly something I can relate to
Odin-LAP The distinction is that a possessor is the 'owner' of something by virtue of using it. Proprietor is the 'owner' by virtue of being, for some reason or other, legally entitled to its control.
That was an analogy ... not the exact difference. :p 01:29
audreyt Odin-LAP: oh. then I'd argue "possessor" is a really weak work of it. "shares" or "is part of" or "user" or "developer" works better
s/work/word/
Alias_ benevolent dictator 01:30
Odin-LAP audreyt: In the context of intellectual property, yes. I didn't invent the words. :/
audreyt in any case... I'm all for things that grows more the more people use it. aka commons. :) 01:31
Odin-LAP The distinction comes from Pierre-Joseph Proudhon, and the translation from Benjamin Tucker, who both did their important works over a century ago. :( 01:32
Heh. :)
Alias_ audreyt: collective
"father of the collective" 01:33
audreyt nod, now I begin to remember my Proudhon. otoh, I don't think the idea of comparing intellectual works to private properties is hip during his era, so the context have changed somewhat
Odin-LAP screams "commies!"
audreyt screams "lptties!"
Alias_ er... "mother of the collective"
.patch 01:34
audreyt I thought you'd prefer "evil genius over the minions collective"
Alias_ minions aren't a collective... they may be drones but don't contribute intelligence
Odin-LAP audreyt: Yeah. "Intellectual property" is a bit of mess-up in this context. It depends on which simile you'll drive in which direction. Do you move "owner" to the arena of authorship, or "author" to the arena of ownership?
Alias_ In this case, you steer the ship less, so hive mind is more appropriate 01:35
audreyt ahh, I see you have been in touch with less advanced minion forms
Alias_ You prefer anarchy, I prefer things to work first time :)
audreyt my (unsuspecting) minions are all as intelligent as I am :)
Odin-LAP: I much prefer lwall's use of "author" 01:36
Odin-LAP audreyt: Hm. How does he use it? 01:37
audreyt granted there's more than a bit of christianity in his use of authorship, but somehow I think it's a much more fit metaphor
from perl5/README:
Just a personal note: I want you to know that I create nice things like this
because it pleases the Author of my story. If this bothers you, then your
notion of Authorship needs some revision. But you can use perl anyway. :-)
The author.
Odin-LAP Heh. 01:38
Odin-LAP has, perhaps unfortunately, come to the conclusion that he cannot believe the christian narrative. 01:40
avar refering to god?
Odin-LAP But I understand where he's coming from.
audreyt avar: yup 01:41
Odin-LAP: I think he had refactored his narrative into something I can empathize with
interviews.slashdot.org/interviews/...3222.shtml
A) God exists, and B) God is good to people who really look for him. 01:43
now, if you really look for something, it's highly likely that you'll perceive that something becomes good to you. 01:44
so I have no problem with that :)
Odin-LAP Hmm.
Yes. Maybe.
avar It doesn't make sense to me that an omniscient being would tell you to be "good", because by definition 1. it already knew what you were going to do 2. what do you is by extension completely under its power since it's omniscient it would have done something differently if it wanted different results, and it knew the results before hand because it's ... omniscient 01:46
does that make sense?;)
Odin-LAP Look, my mother is a born-again christian. She's been quite active at church since I can remember. Through much of my childhood, I went to 'sunday school'. It just ... didn't catch.
audreyt avar: I think omniscience is overrated... especially on the future part 01:47
avar I like some religions, like Buddhism, but I think Christianity mainly focuses on setting rules for you and keeping you in check
audreyt avar: I watch all commits to pugs, and I have _some_ control of what the next commit would be, but I have no idea what other people are going to do :)
avar like "god loves you", and "fuck with god and you go to hell" ;)
audreyt: well, you're not omniscient;) 01:48
audreyt avar: my point being an author's omniscience of her characters doesn't really mean she's omnipotent on how to move them... there are limits, and there are really bad novelauthors.
Odin-LAP Omniscience, omnipotence and a purely benovelent nature, to me, don't seem to match the world we live in.
Alias_ avar: Many religions feature heavily rules to make your life better the rulers couldn't consistently prove, "So trust us and do it anyway"
"Don't kill, don't lust after your neighbour's wife, no pig meat, etc" 01:49
audreyt at one time pig meat may really be harmful to health.
Alias_ it very much can be 01:50
avar audreyt: the premise is that if you're omniscient there's by definition nothing you can't anticipate, and know before hand
since every variable in the world and how it reacted to everything else would be known to you
It's kind of like if I were the best programmer in the world and were to write a program that segfaults, declare that the program should be sent to hell for its sins which were quite obviously my fault;) 01:51
Alias_ IF you operate within the framework of religion, you cannot drawn an accurate conclusion 01:52
audreyt avar: but once you've written a program that is computationally as unpredictable as you are -- or even better than you (seed AI)
avar Or kick it out of the garden of eden because I gave it certain input and it reactedin a certain way;)
*reacted
audreyt avar: then the omnisicnec of its source code doesn't give you much :)
avar audreyt: Okey let's presume that, but again the creator would be omniscient and would therefore know what input the AI would get before hand and by extension know how the AI reacted to it and what it would do... 01:54
That's my main problem with christianity, it sounds too much like a kid with a magnifying glass smiting ants 01:55
with the kid being god and the ants being the humans
Alias_ And read Genesis, it's bizarre
Odin-LAP Omniscience is, literally, knowing *everything*. You don't have omniscience "regarding" something, or "of" something. There is no other definition or understanding of the term.
The Bible's god has Dissociative Personality Disorder. 01:56
audreyt Odin-LAP: but there is something unknowable, and an omniscience being cannot know those. :)
Odin-LAP audreyt: Not at all. If there are things which are unknowable, there cannot be an omniscient being.
audreyt Odin-LAP: oh, just like the typical father figure as featured in in childhood psychology.
our definitions differ then :)
Odin-LAP omni = all, scient = knowing; if something cannot be known, then by extension nothing can be all-knowing. :p 01:58
audreyt if something can kill every being, can it kill pi?
Odin-LAP Is the irrational number a 'being'? 01:59
audreyt and is an omnievitor impossible because of pi? :)
Alias_ If Pi falls in a wood and nobody is alive to here it, is it still irrational?
audreyt Odin-LAP: aha, and I mean that there's some objects that does not have the .to_know method defined
i.e. they are not in the Knowable role
avar If Richard Stallman speaks and nobody hears him, does he make a sound?
audreyt and so omniscience doesn't apply to those things in my definition, and that's fine to me 02:00
avar audreyt: An omniscient being knows *everything*, if there's something it doesn't know it doesn't fall under the definition 02:01
audreyt avar: unless he is somehow deaf, somebody must have heard him
Odin-LAP audreyt: If they cannot be known, they cannot factor into anything else. They cannot influence knowable things, for that would make them knowable.
audreyt Odin-LAP: as a Wittgenstein admirer, I must respectfully disagree :)
(i.e. things can be shown but not known) 02:02
avar audreyt: If you think an omniscient being can't know some things then by extension doesn't it know nothing at all, since everything can affect everything else?
i.e. if they were to coexist in the same universe 02:03
audreyt avar: how things affect other things in general is, I think, one of things that cannot be known :)
Odin-LAP audreyt: Hmm. If an unknowable influences a knowable, you will know that the influence occurs. Therefore, even if you do not know exactly what it is, you will know that something is there. Since an omniscient being will have perfect knowledge, disregarding time, it will know of the influence - even before it occurs.
audreyt Odin-LAP: the "influence" part is one of the unknowables... that makes me a mystic, and I think this line of argument doesn't quite apply anymore :) 02:04
Odin-LAP Hrm. I see. 02:05
audreyt (I also perceive causal systems as illusory, fwiw.)
<- learned the "scientific" reasoning system and related vocabularies relatively late 02:06
Alias_ <- still hasn't
audreyt lol 02:07
Alias++
Alias_ I had to bootstrap my own belief system from first principles. Took me till 22
avar mm,
that's one of the problems with arguing with religion, it isn't falsifiable;)
Alias_ ah, but that's only if you accept the premise of it's existance 02:08
When analysed as a non-biological life form, it displays elegant similarity to other forms of life
audreyt and life forms in general doesn't do the Falsifiable role. 02:09
Alias_ It's not self-evident, it doesn't appear fully formed. It evolves...
Odin-LAP Meh. The *problem* with arguing with religion is that argument is based on rationality; religion isn't.
Of course, you may have an issue with rationality, I don't mind that.
audreyt Odin-LAP: I see you have a pass-by-value argument style :)
Odin-LAP But it certainly makes sustained arguments easier. ;)
avar yeah 02:10
Odin-LAP audreyt: Hm?
audreyt in pass-by-reference, where words are more like chess pieces, rationality is optional
avar "x is true just because" as opposed to "x is true because..."
Odin-LAP Hmmmm. Philosophy is very much playing with words.
audreyt eg. I think the game of Go's goal is to make pretty patterns.
Alias_ There is but one truth, math. It's the one thing that deals with truth provably 02:11
Odin-LAP Russell wanted to fix them, though. I'm not sure that was a good idea.
audreyt Derrida thinks the same for philosophy :)
Alias_ And Haskell is math in code form, thus is you can prove it in Haskell, it is truth
avar audreyt: thanks for that /. interview b.t..w
audreyt avar: np :)
Alias_ Now implementing relgion in Haskell, THAT's an interesting problem
Odin-LAP Alias_: Actually, mathematics is *not* verifiably concerned with truth. Mathematics is concerned with mathematics, and has its own definition of truth, which is quite distinct form epistemological truth. The fact that mathematics has a strong empirical relationship with what we call 'reality' is admittedly not entirely coincidental, but it's not an inherent feature... 02:13
Alias_ true 02:14
audreyt cf. this paper: 02:15
www.lecb.ncifcrf.gov/%7Etoms/Hammin...nable.html
which I like a lot
"The Unreasonable Effectiveness of Mathematics" 02:16
bbiab 02:19
Odin-LAP Religion, defined as the belief in some superior principle which has defined form outside of human mentality, is perhaps the most dangerous concept ever to appear in this world.
Alias_ Maybe, but then god lives in the unknown, and as the unknown recedes, so does god. 02:21
Otherwise we see reality disfunctions
Odin-LAP Alias_: If God really did exist, it would be necessary to abolish him. (Mikhail Bakunin)
Alias_ And then religion evolves to hande the change in the location of the unknown
Odin-LAP Though I'd consider myself an agnost. I believe that the question of god's presence or absence is undecideable, and irrelevant to us. 02:22
Alias_ indeed
Fundamentalist Agnostic
avar Odin-LAP: same here;) 02:23
Odin-LAP You might say that. I take a similar stance regarding free will, actually. We cannot know if free will is real, or mere illusion.
audreyt ...or even means anything operationally. 02:24
Alias_ But at some point, it becomes unproductive to continue pondering until further evidence appears
Odin-LAP audreyt: Hmm?
audreyt Odin-LAP: I've yet to come across with a verifiable operational definition of free will. 02:25
Odin-LAP Hmmm. 02:27
The ability to make decisions non-deterministically, I'd think. But how do you know if something is nondeterministic? 02:28
Alias_ Our form of decision making is just a compensation 02:29
Odin-LAP That's the problem. The question is undecidable.
Alias_: Hm?
Alias_ complex nondeterministic questions require a complexity-derived answer
Hence, our brains
ETOOMANYPHDS 02:30
audreyt resists the temptation to invoke wolfram 02:31
no disrespect meant, but to me his name does conjure a mental image of a wolf with lots of RAM. 02:33
audreyt goes back hacking Rules support. 02:34
Debolaz goes back to trying to make pugs work on FreeBSD with pkgsrc. 02:49
Which haskell doesn't seems to like.
audreyt fbsd does pkgsrc now? 02:50
I thought it's a nbsd thing.
Debolaz audreyt: pkgsrc works on many platforms. But for some reason I've not been able to figure out, it doesn't seem to be related to any environment variable or parameter, the test compilations done by Makefile.PL fails when run from pkgsrc, but succeeds when run manually. 02:57
I've been able to narrow it down to ghc not passing the proper arguments to ld in the former case, but I can't figure out why. 02:58
More specifically, -L/usr/pkg/lib/ghc-6.4.1 is passed on ld when not run through pkgsrc, which makes it work, but for some reason, something makes ghc substitute it for something else that doesn't seem tied to any environment variable or parameter when pkgsrc executes Makefile.PL 03:00
And right about now, I'm hating haskell. :P
audreyt heh. 03:02
which Cabal version does pkgsrc have?
Debolaz /usr/pkg/lib/ghc-6.4.1/package.conf: 03:03
Cabal-1.0
audreyt hm, ancient cabal shipped as default 03:04
also, did you run manually as yourself or as root?
also, upgrading Cabal may help. 03:05
haskell.org/cabal/download.html
Debolaz I guess it's worth mentioning that I had to port ghc to pkgsrc myself since the stock version in pkgsrc only works on NetBSD. At least there is an irony to all of this, I read in an interview with Autrijus that parrot was more problematic to compile on FreeBSD.. parrot works flawlessly. :)
I ran this as root.
audreyt heh, the irony :)
bug reports go here -- hackage.haskell.org/trac/hackage -- also #haskell may help, esp. if SyntaxNinja (the cabal guy) is around. 03:06
it worked flawlessly on freebsd... but I guess that's because one of GHC core team hackers hacks fbsd 03:07
stevan_: yo 03:08
Debolaz I'll try installing the new cabal first, then I go bother them. :)
audreyt cool :) 03:09
Debolaz It will probably end up being some minor detail I'm overlooking, it get the feeling it usually is. 03:10
audreyt ah, the quest for Just Works :) 03:11
Alias_ Gawd IO-stringy is a mess :( 03:18
avar interviews.slashdot.org/comments.pl...id=4207979 03:36
audreyt avar: that's a very good creation myth on par with FSM :) 03:43
avar It's the most internally consistant theory of creation I've read yet;) 03:47
_tcc I got banned from #perl lol. 05:03
Can someone help me with something?
I changed something and I screwed everything up.
Alias_ why 05:05
_tcc Because I am stupid.
svnbot6 r8494 | Darren_Duncan++ | r1670@Darren-Duncans-Computer: darrenduncan | 2005-12-27 23:14:05 -0800 07:17
r8494 | Darren_Duncan++ | /ext/Rosetta-Incubator : begun converting current generic string exceptions to specific LKT ones; added 10 messages to LKT/L/en.pm, upgraded Message class in LKT.pm, added 3 private methods
08:25 jiing_ is now known as jiing
clkao seen audreyt 10:02
jabbot clkao: audreyt was seen 6 hours 18 minutes 53 seconds ago
GeJ wow YAML::Syck 0.03 already in the ports... that's fast 10:08
Grrrr bows 10:12
clkao Grrrr++ 10:14
GeJ Ah, there's the guilty one... 10:17
Grrrr++
indeed
gaal say, remember the PLEAC stuff? where'd the p6 version go? 11:04
it seems to have been eaten completely :-( 11:28
svnbot6 r8495 | audreyt++ | * Text.Parser.Rule: All PGE nodes represented as Haskell structures. 11:33
r8495 | audreyt++ | Next step is to found PArrows equivalents...
gaal ah, just renamed (doh) svn.openfoundry.org/pugs/examples/cookbook/ 11:34
rafl Juerd: Boring, isn't it? 12:09
12:10 rafl_ is now known as rafl
rafl The following code croaks with this error. Why? "*** foo: openFile: resource busy (file is locked)" 12:14
{ my $fh = open($file, :r) or die; } { my $fh = open($file, :w); }
Shouldn't the file be closed as soon as I leave the scope of the first block? 12:15
audreyt because out of scope timely destruction can no longer be guaranteed.
otoh, it makes sense to declar IO types to be GC'ed away on end of scope.
write a test?
I'll add it to PIL^N runcore. the current runcore have to call an expensive performGC 12:16
which we tried, but crashes on OSX a lot
rafl Why can't that be guaranteed anymore? 12:17
OK. I'll write a test. t/pugsbug/?
Alias_ audreyt: aaaaalmost there... 12:19
r0nny yo 12:26
Alias_ audreyt: ftp://pause.perl.org/incoming/PITA-Report-0.02.tar.gz
audreyt: So now about those minions :)
r0nny audreyt: howz the object system now ?
audreyt rafl: because we are not refcounting 12:28
r0nny: Role support is in, I had not started container types
plan to do it tomorrow after $work
after container types (which should be straightforward) is ArgList and SigList 12:29
and then we can hook it to parser
r0nny hmm
so in about a week everything should be fine, to continue ?
audreyt that's the plan
but I'm sidetracked to this PGE clone thing
but I'm finishing it as we speak 12:30
shouldn't take too long
r0nny hf :)
and if it works again, im going to have fun :)
audreyt :D 12:31
svnbot6 r8496 | rafl++ | r24288@ata: rafl | 2005-12-28 13:29:30 +0100 12:40
r8496 | rafl++ | * Added a test for closing open files if the filehandle goes out of scope.
gaal audreyt: yo. didn't quite grok FFI and writing c in Haskell yet but am at $work soooo.. manana :) 12:55
Juerd rafl: Yea 12:56
gaal also: evalling yaml could use SyckNodes for intermediate structures and avoid coupling with pugs altogether. The other direction won't work, of course, since emitYaml needs to be Val -> IO String
and each node in the Val is another Val 12:57
audreyt gaal: yup. 13:01
although
you can first do a
Val -> Eval SyckNode
and go from there
rafl Juerd: The syntax made me kind of sick. 13:02
gaal audreyt: and place that where? in Pugs.Prim.Yaml or in Data.Syck?
audreyt P.P.Y 13:03
Juerd rafl: I didn't have many problems with the syntax, to be honest. I just hate #() and alike syntaxes. 13:04
gaal Do you have an example for a project that does more FFI work, btw? FastPackedString does, but the thing I was looking for was allocating memory inside a haskell function (to do keep the output buffer around via a "bonus" struct)
Juerd rafl: What made me sick is the waaaay to high level of programming, for the web.
audreyt gaal: you probably want "alloca" or even "malloc/free" 13:05
Juerd Ignoring HTTP is simply not an option, if you want to ever be able to debug problems that are caused by bad clients.
audreyt or even better, write some inline C
and the just import it in
gaal also: I will start with a haskell String, but it probably makes sense to use FPS for accummulating emitted yaml. The only thing is, does it make sense for one Data. to depend on another? 13:06
eeep, is alloca the alloca I think it is? I refuse to use that :-)
audreyt it's not that bad
it's scoped
freed on the next action
alloca :: Storable a => (Ptr a -> IO b) -> IO b
the Ptr a never escapes
gaal I refuse to use it in "real" c too 13:07
audreyt what's wrong with it?
gaal it has the right semantics, but the wrong portability etc.
audreyt oh. the FFI one should be happily portable and strongly typechecked 13:08
in any case, inline C is probably best bet.
just like XS.
gaal nods 13:09
Juerd "Just like XS" doesn't make people feel at ease, I guess ;)
rafl Juerd: Some of the squeak features were neat, though. 13:18
Juerd Certainly. 13:30
But my opinion is that if you don't want to program for the web, you should just not program for the web. Don't make the web into something that it is not, because that will hurt extraordinarily when you try to support multiple user agents. 13:31
svnbot6 r8497 | audreyt++ | * Text.Parser.OpTable: Allow partial matches as well as whole matches. 13:43
r8497 | audreyt++ | * Text.Parser.Rule: ~80% of PGE's rule syntax parsed!
audreyt bbiab... 13:46
gaal very minor probably, but what's this doing? 13:56
# type Name = FastString
(Text.Parser.Rule)
scook0 gaal: makes Name an alias for the type FastString 14:21
(was that your question?)
gaal scook0: it doesn't appear to be used anywhere :)_ 14:23
scook0 gaal: it was used in a previous revision (which I had open when I answered) 14:24
gaal audreyt: in YAML::Syck, does syck free bonus nodes automatically, or does Dump leak a struct emitter_xtra on every catch?
scook0: okay, I probably missed it (my vgrep is buggy) 14:25
s/catch/Dump()/
type :: Thought -> String -- also buggy 14:26
also: what magic do you use that lets you not have inc/Module/Install in your YAML-Syck svn repo? 14:28
svn ignore lists? :) 14:29
gaal figures out the magic 14:36
stevan_ audreyt: ping 14:56
hola nada mucho 14:59
15:00 stevan_ is now known as stevan
nothingmuch hola estevan 15:01
15:34 integral_ is now known as integral
gaal audreyt: ping 15:34
is anyone else getting compilation errors on Data.FastPackedString not finding fpstring.h ? 16:06
stevan gaal: I had that issue once before,.. I dont recall the fix though 16:07
actually I think it had to do with the makefile, and getting something into my PATH correctly
this was for "make pili" though
gaal yes, that time it was fixed
i remember
i think i know what's up now though.... let's see. 16:08
hmm no :(
urp, "make pili" doesn't respect config.yml's optimize setting. 16:09
stevan that is because PIL is a rough and tumble mini-language,.. it has no respect for piddly little "data serialization languages" like YAML,.. in fact,.. it spits on YAML ! *spit* 16:10
gaal probably not a problem though, it's so small
heh.
adding -Isrc/cbits manually fixed this, but I want to know if this is happenning only to me, and where's the right place to stick this in. 16:15
how do I avoid circular this dependency? Pugs.Prim.Yaml needs Data.Syck, but my Val -> Eval SyckNode which Data.Syck needs will live in P.P.Y. 16:19
s/(circular) (this)/$2 $1/ 16:20
svnbot6 r8498 | audreyt++ | * Text.Parser.Rule: Support for proper rule construct precedence: 17:02
r8498 | audreyt++ | (Alternation > Conjunction > Concat > Quantified > Term)
r8498 | audreyt++ | * Successful compilation for noncapturing parts of Rules.
r8498 | audreyt++ | Capturing and binding will have to wait until tomorrow...
r8498 | audreyt++ | * Text.Parser.OpTable: Support for Infix AssocList.
tewk cleq 17:11
u789ikl 17:35
u789ikl 17:36
17:50
gaal ?eval for 1 .. 4 -> {say} 19:22
19:22 evalbot_8476 is now known as evalbot_8498
evalbot_8498 OUTPUT[ ] undef 19:22
gaal ?eval my $x; for 1 .. 4 -> {$x ~= $_} $x
evalbot_8498 \"perl6perl6perl6perl6"
Juerd ?eval "perl6"x4 # ;)
evalbot_8498 Error: unexpected "4" or "x" expecting term postfix, operator, postfix conditional, postfix loop, postfix iteration, ";" or end of input 19:23
Juerd Awwh
gaal ?eval my $x; for 1 .. 4 -> $i {$x ~= $i} $x
evalbot_8498 \"1234"
gaal FWIW: on the command line, "for 1 .. 4 -> {say}" does something very wrong
s/command line/REPL/ 19:24
well. on the command line it doesn something else that's wrong.
Juerd Which command line? 19:25
gaal -e 19:26
./pugs -e 'for 1 .. 4 -> {say}' => <SubPrim(&Num::ceiling)> four times
in the REPL, in contrast, $_ is leaking.
Juerd 19:27
gaal ? 19:28
(was that a unicode zero-width-whitespace? :) 19:29
Juerd gaal: Zero bytes even! 19:44
gaal how do you send that in irc? 19:49
Juerd Not at all :) 19:50
I added a real ASCII space to overcome that limitation
But it is surrounded by several zero byte zero width spaces.
Count the bytes if you don't believe me :) 19:51
gaal welcome, anatolyv! 20:48
anatolyv thanks!
gaal so, the invitation is on its way to you. let's start with the parser, it's a very simple change there. 20:49
in Pugs.Parser, find the function tightOperators 20:51
anatolyv nods
gaal around line 1045
this feature needs no parser code, just letting the parser know this symbol is valid. 20:52
anatolyv more like like 1384 here I think
gaal so where you see preOps " = ! + - ** ~ ? +^ ~^ ?^ \\ " 20:53
stick a ^ as the last element of that list
anatolyv done
gaal I chose that line because that's where the operator comes in the precedence table in S02
right. now you have to write the code that's dispatched for this op. go to Pugs.Prim 20:54
anatolyv nods
gaal this is where we keep the haskell builtins
the structure of this file is pretty simple: there are a few functions, op0, op1, .. op4
each one has zillions of guards, in each case with the string representing the op. 20:55
anatolyv i guess op1 is what we need to modify?
gaal yes; and also the very bottom of the file where there is a biiiig list of builtins 20:56
anatolyv around like 217
anatolyv nods
gaal anatolyv: 217 is exactly right
now the lucky thing is that ..^ is already defined
so we don't have to write any list code ourselves, just curry off whatever that does. 20:57
anatolyv \\n List non ..^ safe (Scalar, Scalar)
gaal okay, yes, mimic that, but:
1. change "non" to "spre", meaning this is a prefix op and the parser did some of the work for us 20:58
2. change "(Scalar, Scalar)" to "(Scalar)"
note, btw, that when you do add ops with arity > 1, the space there is significant
... unless somebody fixed that, which is not a bad idea :-) 20:59
anatolyv right
gaal so find op2 "..^"
anatolyv op2 "..^" = op2RangeExclRight
gaal op1 "^" is equivalent to 0 ..^ <something> 21:00
anatolyv ndos
gaal so basically we just need to curry
anatolyv nods, even.
gaal op1 "^" = op2RangeExclRight 0 is *almost* correct
anatolyv that's what I was thinking about 21:01
op1 "..^", you mean.
gaal btw - we're again lucky that the arguments are in the right order, that is, the left operand is the one that's fixed at 0
no: we're defining op1 "^"
to be a curried version of op2RangeExclRight 21:02
anatolyv oh, right.
gaal "op2RangeExclRight 0" means sub { op2RangeExclRight(0, shift) }
(..whcih in perl 6 will be written simply "{ op2RangeExclRight(0, $^num) }" :-) 21:03
anatolyv OK :)
gaal so, try compiling that; it won't work but the error message is good to know 21:04
anatolyv going to try, yes. Just fixing a little mistake in the list down the bottom first, I messed that line up a bit.
src/Pugs/Prim.hs:217:28:No instance for (Num Val)arising from the literal `0' at src/Pugs/Prim.hs:217:2 21:06
gaal right. so, what the error message obscurely means is that there's a type error with op2RangeExclRight 21:08
if you peek at 1215 you'll see
op2RangeExclRight :: Val -> Val -> Eval Val
this means op2RangeExclRight takes two Vals and returns a Val action
anatolyv right
0 is not a Val? 21:09
gaal the important thing here is that Val is not a native haskell type, it's a pugs value
so we need to wrap up 0 to be a Val
in this case, it's very simple
replace "0" with "(VNum 0)"
while it compiles, I'll explain: 21:10
anatolyv oh, that simple?
I'm trying to find where VNum is defined.
gaal you know about data types, right?
anatolyv yes.
gaal Pugs.Types, line 137 has 21:11
type VNum = Double
which means VNum is "really" a haskell double
but something else is going on
Pugs.AST.Internals, line 623 21:12
the "Val" datatype encapsulates values.
VNum is a data constructor there
anatolyv I see (I think) 21:13
gaal so when you say VNum 0, you get a Val (of the VNum variant).
anatolyv nods
gaal the confusing bit is that the data constructors are almost all named for the type that they hold
anatolyv it did compile this time, and I tested it. Sort of. :)
gaal but these are different symbols 21:14
right, there's a bug in pugs in a nearby place:
don't do for ^4 { say }
do for ^4 -> $x { say }
errr
say $x
anatolyv actually for ^4 { say $_; } seems to work fine 21:15
or for ^4 { say } for that matter
gaal cool! 21:16
so now (or ideally, before we did this :-) we can write some tests
anatolyv :)
gaal uh, let's look in t/ ... 21:17
anatolyv t/operators I would guess?
gaal ah, yes
t/operators/range.t
anatolyv range.t, yes
did a grep on ..^ :)
gaal :)
\.\.\^, annoyingly :) 21:18
anatolyv exactly
gaal ?eval [~] ("\\" xx Inf) Y "..^".split("")
evalbot_8498 pugs: out of memory (requested 1048576 bytes) 21:19
gaal tsk, tsk, no laziness.
that will one day work though.
anymoose.
anatolyv heh
hmm. let me try to figure out the test part.
tell me how to run it to check though.
gaal ah that's the fun part 21:20
setenv PERL6LIB blib6/lib ; setenv HARNESS_PERL ./pugs
prove t/operators/range.t
well that isn't the fun part. the fun part is, you write the test before you get the feature to work, and mark the test :todo 21:21
anatolyv well. setenv only for those of us using disrep*cough* shells :)
gaal at first, it doesn't compile
yeah yeah
then it doesn't pass
then you see the sweet sweet words, "5 tests UNEXPECTEDLY SUCCEEDED"
anatolyv how do I mark the test :todo? can you point me towards an example? 21:22
gaal there are two ways. one is in a test call:
is "42", "43", "space shifted", :todo<feature> 21:23
the other way is to predeclare at the top of the test script all tests you want to "force_todo"
force_todo 5, 6; 21:24
anatolyv hmm, ok
gaal force_todo is mostly just useful when preparing for a release
anatolyv however, I'm getting: Internal error while running expression: *** unexpected "r"
before even changing anything in range.t 21:25
gaal hmm!
anatolyv at <interactive> line 1, column 19
gaal interactive? what's your command line? 21:26
anatolyv I just set variables, ran ./pugs, and types prove t/operators/range.t in it
prove t/operators/quoting.t 21:27
err
getting the same mistake on any prove, always in line 1, column 19. seems my pugs is broke in some way.
gaal ah, no
anatolyv ah
quotes! 21:28
gaal run prove from the command line
not via pugs
anatolyv oh
gaal prove is a p5 tool, but it can use other "perls" than its own
actually it can run anything that emits TAP, so if you want to do TDD in java...
anatolyv a, d'oh 21:29
I misread your line because I'm so unused to the setenv's
gaal :)
export ANATOLY=MOOSE
anatolyv t/operators/range....ok 20/20# Looks like you failed 1 tests of 20 t/operators/range....FAILED test 8
gaal prove -v it 21:30
that shows which tests failed
ah
it did say test 8
yes, that fails for me too.
anatolyv it fails on carried chars, yes
ok, so now I add one of my own?
gaal just put som "is" lines at the bottom 21:31
when you're done, update the plan
in our Test.pm, there's no such thing as no_plan 21:32
so you must say plan 22 or something like that.
anatolyv where?
gaal okay, I can confirm that this subtest has failed on an older pugs too, so it's not a bug we injected.
plan? near the top of the file 21:33
before the first test
i happened to have a pugs for doing that, but you can also go to smoke.pugscode.org/ to make sure
I showed you how those are linked to the tests themselves, right? 21:34
anatolyv ok, I don't understand. 22 will be the total number of tests after I add mine?
gaal assuming you add two, yes :-)
the purpose of "plan" is just to let the harness know if a test script had crashed before the last test ran 21:35
anatolyv nods
gaal otherwise it might think that since (say) 4 tests passed, the complete file passed.
add as many tests as you like 21:36
I suppose testing against a negative number (or zero) should be useful -- they should produce a null range 21:37
although from our implementation it should obviously work
anatolyv hmm, I can't really see the point of adding more than one here. unless... something like ^0 should produce a null range I guess.
heh
gaal but once the test is written, it can service different implementations: either 21:38
1. pugs, if somebody refactors
2. a different compiler altogether that wants to borrow our test suite
anatolyv right
gaal so of course nobody overdoes the tests, but sometimes one extra "has *got* to pass!" can turn useful. 21:39
anatolyv I've added 3 21:41
gaal out Test.pm is richer than p5 Test::Simple (or Test::More), though very much similar to them
anatolyv ^5 should be 0..4, ^1 should be (0) as the boundary condition, and ^0 should be ()
gaal if you know Test::Exception, we have lives_ok and dies_ok too 21:42
anatolyv hmm, I vaguely remember it. OK.
gaal we don't have Test::Deep, but we often use is $x.perl, $y.perl to approximate that
anatolyv ok 21 - unary ^num produces the range 0..^num
ok 22 - unary ^ on the boundary ^1 works
ok 23 - unary ^0 produces null range
these messages look ok to you?
gaal looking good! let's commit :) 21:43
anatolyv alright :)
gaal btw don't forget to validate your invitation
anatolyv doing that right now
done 21:45
gaal svnbot6: ?check
it's feeling kinda sleepy 21:46
did you commit?
anatolyv not yet 21:47
gaal ah :)
anatolyv you'll have to walk me through that, svn still feels new
gaal svn ci
anatolyv in the top level dir?
gaal yes
anatolyv then I write a commit message? before --This line, and those below, will be ignored-- 21:48
gaal yup, and :wq
something like
* added unary ^ (0..^num shortcut) operator
anatolyv how will it know who I am? don't I have to config svn first?
gaal nope, it's magic :) 21:49
it'll ask you on your first checkin.
anatolyv hmm, alright :)
gaal and store the auth data in the repo. no more CVS recheckouts just because you'd used anonymous :)
s/repo/working copy/ 21:50
anatolyv hmm
doesn't seem to be authenticating me
gaal what are you getting? 21:51
anatolyv well, it asked me the password for my local login first :) after that failed, it re-asked username, password, and failed the check, now it's tried again, thought a long time, and wrote:
svn: MKACTIVITY of '/pugs/!svn/act/0e9ab592-0209-0410-9497-ebf9d9afe9e1': authorization failed (svn.openfoundry.org)
gaal when it asked for a username, did you give it the pugs username? 21:52
anatolyv the one I registered on rt.openfoundry.org just a minute ago.
gaal hmm, that should have worked
anatolyv magic never works reliably :) 21:53
I'll try to re-login there to check my password
gaal try to ci again, maybe it's just some slowness in openfoundry. 21:54
anatolyv openfoundry does seem sluggish. it won't log me in: Unverified account. Please verify your account first. - though I verified it twice by now, successfully.
I hope it's not using memcached! 21:55
anatolyv shudders.
gaal lol
actually it's an excellent candidate for that!
it's (a) slow and (b) perl
anatolyv right
gaal all those SVN::Web views can certainly be cached 21:56
btw, I recently noticed that very new versions of GLib have a new slab allocator 21:57
anatolyv nope, still can't log in. I guess it's best to wait until morning, then mail the admin if it still doesn't work.
and svn ci still doesn't work.
gaal some of the admins are on this channel :) and luckily they're in GMT+7 and should be awake in a few hours 21:58
anatolyv I won't be :)
gaal too bad, because you won't be able to see this work: 21:59
?eval for ^4 -> $i { say $i }
evalbot_8498 Error: unexpected "f" expecting program not a class name or reserved word
gaal ?eval for 0..^4 -> $i { say $i }
evalbot_8498 OUTPUT[0 1 2 3 ] undef
gaal you know our evalbot?
anatolyv I guess I do now :) 22:00
gaal ?eval moose => 42
evalbot_8498 ("moose" => 42)
gaal well, I hope you had fun apart from this last hiccup. Welcome aboard! :) 22:02
anatolyv thank you :)
nnunley gaal: what does the ^ do in the range? 22:06
gaal nnunley: it defaults to starting from 0, and having the range not include the operand
a..^b === a..(b-1)
nnunley Cool.
[a..b)
gaal ^b == 0..^b
right.
but ranges are integral :) 22:07
nnunley True.
Would be messy if they were real.
anatolyv not necessarily
hmm
nnunley You'd have to give an epsilon.
gaal could be stipulated by lexical pragma. 22:08
anatolyv ah, right, ranges are integral but ~~ can match them as if they were real
gaal you mean 0..1 ~~ 0.5 => true? 22:10
anatolyv it seems it should be 22:11
according to S3
gaal right, cool. 22:12
anatolyv but actually I'm failing to grok it
1^..^2 is an empty range
quoting S3: "Ranges are not autoreversing: 2..1 is always a null range, as is 1^..^2." 22:13
"However, smart matching against a Range object smartmatches the endpoints in the domain of the object being matched,"
gaal right (some people think that's a mistake btw)
anatolyv "so 1.5 ~~ 1^..^2 is true."
so think about it for a second, what this implies
1^..^2 is a null range in integers, but not null in reals: in reals it's (1..2) 22:14
but until we do the matching, we just have a Range object
this implies that we can't store e.g. 3^..^8 as a Range 4..7
gaal point. 22:15
anatolyv not sure how pugs does it, but Range has to be smarter than that
and allow exclusion of an endpoint as a primitive notion inside it.
?eval 1.5 ~~ 1^..^2 22:16
evalbot_8498 bool::false
anatolyv :)
gaal I don't think it deals with it at all yet: Ranges are nowhere serialized, and smartmatchin against them probably dosen't work yet.
anatolyv ?eval 1.5 ~~ 1..2
evalbot_8498 bool::false
anatolyv ah, well, it doesn't match at all
right
gaal ?eval 3 ~~ 0 .. 10
evalbot_8498 bool::false
anatolyv what do you mean by nowhere serialized?
heh, it doesn't even match integers.
gaal there is no "Range" type at all in pugs.
anatolyv what's 1..4? 22:17
a list
I see :)
gaal not quite... 1 .. 4 evaluates to a list
anatolyv pugs> :d 1..4 App &infix:.. (: 1, 4)
ah, that's the syntax tree, sorry 22:18
VList [VInt 1,VInt 2,VInt 3,VInt 4]
gaal that's the evaluation, yes. 22:19
anatolyv are there built-in object types in pugs, in general, just not Range? Things like Int Str etc.? Or those are missing too?
gaal I think order in that department is for the next milestone 22:21
anatolyv ok
gaal AFAIK, it's still an open question what this means: my Int $x = "not an int" 22:22
(coersion or error)
anatolyv hmm
gaal likewise sub foo (Int $x) etc.
anatolyv ?eval (1..4).say 22:23
evalbot_8498 OUTPUT[1234 ] bool::true
gaal yes, that's a pretty major issue to still be open :)
anatolyv ?eval 1..4.say
evalbot_8498 OUTPUT[4 ] (1,)
gaal ?eval 1 .. (4.say) 22:24
evalbot_8498 OUTPUT[4 ] (1,)
anatolyv what happens when i run (1..5).say, how does (1..5), a VList, automagically turns into an object which has a method say?
gaal I'm not familiar enough with the details, but there's no special treatment for say here; the magic is in the dot. 22:26
avar gaal: you can have my Int $x = undef though
last I checked
gaal avar: that will almost certainly be allowed even if "my Int $x = 'eep'" is not 22:27
I do wonder how Perl is going to express not-nullable types though. 22:28
...did I see Int! somewhere?
avar hah 22:34
my !Int $x = "everything but Int";
gaal ?eval my !Int $x = "everything but Int"; 22:35
evalbot_8498 Error: unexpected "!" expecting qualified identifier, variable name or "("
gaal yeah, this isn't specced yet I think.
avar I know, but it would be pretty insane if it were;)
gaal just parsed that the way avar meant. ha!
yeah, it would most certainly be insane :-) 22:36
avar I wonder if it would be useful somehow...
like, if you promised to not make something an array or a hash if the compiler could make some worthy optimizations of that... 22:37
gaal doubtful. just limit it to one type
avar my !Array or !Hash $x = "foo";
yeah, I know, like I said, insane;)
gaal that's Any :)
you mean !Array and !Hash
avar ah, that;) 22:38
gaal okay, I think it's time for me to sleep too :)
see you later :)
avar cya
gaal good night &
tewk ll 23:56