»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend!
Set by sorear on 4 February 2011.
pmichaud jnthn: pong 00:00
(will catch jnthn++ tomorrow)
dalek ar: 6ed6e37 | pmichaud++ | skel/build/Makefile.in:
Add code to install 'panda' and 'ufobuilder' into $(BINDIR).
00:13
pmichaud draft version of new rakudo.org site at rakudoperl.org/ . Comments and suggestions welcomed. 00:46
lue pmichaud: looks much better, and doesn't deviate too much from rakudo.org 00:56
jdhore pmichaud, My only complaint would be that the current site looks like a Drupal site and the new one looks like a wordpress site...IMO, I think if possible, sites should avoid fitting the "default" look of the software they use if possible 02:48
sorear phenny: tell pmurias I don't like the way Proxy overloads new. IMHO $class.new.WHAT should always === $class 03:17
phenny sorear: I'll pass that on when pmurias is around.
pmichaud jdhore: it's certainly possible for us to switch rakudoperl.org to a different template... but someone else needs to find/create the template :) 03:23
I'm happy to switch to any wordpress template I can easily get my hands on :)
and the current rakudoperl.org WP theme is a customization of the default twentyten theme 03:24
jdhore ah
pmichaud (a very simple customization :-)
(mainly to avoid the silly 940x198 image that twentyten wants to default to 03:25
jdhore pmichaud, Well, don't take what I say with too much merit. I've got about the same aestetic skills as a giraffe.
*aesthetic
dalek ar: 0f607e2 | pmichaud++ | skel/README:
Update release number in README.
04:11
ar: 15a246c | pmichaud++ | skel/docs/announce/2011.04:
Fix January -> April in announcement text.
pmichaud phenny: tell alester Feel free to point rakudo.org to the rakudoperl.org server whenever you're ready 04:28
phenny pmichaud: I'll pass that on when alester is around.
frettled pmichaud: congrats on getting 2011.04 out the door! 06:57
moritz pmichaud++ # star release 07:14
tadzik yay, Star :) 07:14
pmichaud++
though I'm afraid ufobuilder made it into Star rather accidentally 07:17
jdhore pmichaud++ 07:18
moritz phenny: tell pmichaud that rakudoperl.org doesn't show the rakudo favicon - might be worth fixing 07:20
phenny moritz: I'll pass that on when pmichaud is around.
jdhore question: Why do you guys use phenny for memos and not just MemoServ? 07:30
moritz because phenny is cute and polite :-) 07:53
jdhore ah 07:57
mathw Morning 08:12
mathw moritz: In German, should I say "Ich bin nach <somewhere> gefahren"? I got thinking on the way to work about the ones that take sein instead of haben, and irregular past participle formation, and I realised I couldn't remember most of it :( 08:13
ingy tadzik: where's the SHELTER list? 08:27
ingy tadzik: I can try to fix things up. 08:28
Su-Shee mathw: "Ich bin nach Koeln gefahren" "Ich war in Koeln" 08:32
mathw: "I drove to...." "I was in ..." 08:33
mathw Su-Shee: thanks. I thought it was like that, but I wasn't sure 08:37
Su-Shee mathw: there is a simple past like "drove" in german as well but it's not really used in spoken language. "Ich fuhr nach Koeln" sounds weird. (Used in literature, though.) 08:39
mathw Su-Shee: yeah I remember being taught about that. I never got much practice at it, as most of our lessons were focussed on spoken, and we tended to write like that too. 08:42
Su-Shee mathw: the overly proper use of past tense usally indicates people from eastern europe; I don't know exactly why but they either learn german differently or feel comfortable with certain tenses. and they get it perfectly right, better than most germans :) 08:53
tadzik ingy: perl6/ecosystem
Patterner it's like english and americans, Su-Shee 09:00
nrr with respect to the prÀteritum in german: there are small exceptions. forms of "sein," "wissen," and so on are sometimes used. 09:08
"ich wusste das nicht." instead "ich habe das nicht gewusst," though that varies a bit. 09:09
Justin__ perl6: say "ciao"; 09:11
p6eval pugs, rakudo 8533c3, niecza v4-76-g7bf5ef9: OUTPUT«ciao␤» 09:12
Justin__ is it my network connection or it took 2 seconds to respond !
moritz wusste das nicht
Justin__: it executes three different, slow compilers (and doesn't parallelize) 09:13
Justin__: so 2s aren't too bad
Justin__ moritz: that was just a helo world.. now am scared to try it more :\
moritz Justin__: no need to be scared, you don't get the bill for the computing time 09:14
Justin__: but it's faster if you talk to just one compiler
rakudo: say 'OH HAI'
Justin__ haha! :D nice one
p6eval rakudo 8533c3: OUTPUT«OH HAI␤»
moritz jnthn: is nqp supposed to use the installed nqp-rx from parrot at all? 10:02
jnthn: it seems it does... nqp's 'make install' misses some pbcs, and after I run 'make install' the subsequent nqp build fails, complaining about the missing PBCs 10:04
wallberg hi all! is anyone planning to go to the Nordic Perl Workshop this year? conferences.yapceurope.org/npw2011/
moritz wallberg: I'm pretty sure masak and jnthn are going :-) 10:04
wallberg moritz: :-) 10:06
jnthn o/ 10:07
wallberg btw has there been any efforts to make p6 GUI bindings for libraries like Tk, GTK, Qt, Wx... or XUL so far? 10:08
jnthn moritz: No, it shouldn't depend on nqp-rx.
moritz: However, it does depend on some things from the Parrot repo. 10:09
moritz jnthn: ah, I found it
jnthn moritz: Such as PAST.pbc
tadzik wallberg: I think the callbacks are the biggest blocker
moritz jnthn: the .ops file compilation uses the nqp-rx shipped with parrot
wallberg tadzik: ok. what is the status on those?
tadzik wallberg: none I think :)
moritz jnthn: and since 'make install' currently overrides at least NQP.pbc, that's bad
moritz wallberg: Tene did bindings for some obscure-ish GUI framework 10:10
wallberg: don't know if they still work
jnthn moritz: Oh, yes
moritz: I suspect we may need to do some renaming.
moritz++ # looking into the install issues, which will soon be very relevant :) 10:11
jnthn moritz: Is it just NQP.pbc that overlaps? 10:11
moritz jnthn: not sure yet
dalek p/ctmo: b3299e5 | moritz++ | build/Makefile.in:
make nqp installable again

Sadly this overwrites some files from parrots nqp-rx, which means that it breaks recompilation, because .ops file translation uses nqp-rx internally
10:12
jnthn fears there will be more 10:13
tadzik also,pararell build is broken again 10:14
jnthn Oh.
moritz tadzik: yes
jnthn Wonder what regressed that...I'd tried to be careful. :/
moritz error:imcc:loadlib directive could not find library `nqp_ops' in file 'src/PAST/SixModelPASTExtensions.pir' line 16 included from 'src/PASTRegex.pir' line 1 10:15
should be an easy-ish fix
jnthn ah, yeah...that hadn't used to depend on the dynexts.
moritz tests a fix 10:17
dalek p/ctmo: 86fd707 | moritz++ | build/Makefile.in:
[build] unbreak parallel build
10:18
moritz unfortunately that takes away a lot of benefit from the parallel build 10:20
jnthn A bootstrapping compiler is hardly ideal for a parallel build really... 10:21
Every stage needs the last one.
And stages need stuff within that stage too. 10:22
HLL.pm does use P6Regex which in turn does use Regex which in turn needs the NQPCORE.setting.
moritz right 10:22
jnthn Which kinda forces an ordering.
We got away with far more before the compiler actually wanted to know something about the programs it was compiling. :) 10:23
moritz fail, nqp installs nqprx.pbc :-) 10:24
both install a P6Regex.pbc 10:25
a Regex.pbc
jnthn oh...we shouldn't be installing nqprx.pbc :)
eep
moritz but nqp-rx install an nqp-rx.pbc :-)
note the dash
jnthn and a HLL.pbc, I fear...
oh... 10:26
Where are we installing all of these to?
moritz yes, HLL.pbc too
jnthn Is there no "language directory"?
moritz the nqprx.pbc goes to languages/nqp
the regex.pbc stuff to library/
jnthn oh. 10:27
OK.
moritz and most of the other stuff to library/ too
bbkr_ i've released new version of my JSON::RPC github.com/bbkr/jsonrpc , what I have to do to place it in the ecosystem? and what is required for "Panda approval" ?
moritz bbkr_: add a link to your META.info in the 'META.list' file of the 'ecosystem' repo 10:28
no approval steps whatsoever
dalek p/ctmo: f73152c | moritz++ | build/Makefile.in:
[build] stop installing nqprx.pbc
10:29
bbkr_ moritz: thanks
moritz jnthn: turns out we installed the nqp.pbc twice :-) 10:29
jnthn wow :)
moritz my fault probably 10:30
jnthn moritz: I was kinda hoping that Parrot had a way to install libraires into a language's directory, e.g. that mapped to the .HLL
But looking through the library location code in library.c, it seems not.
moritz jnthn: maybe that exists, but we're not using it?
jnthn moritz: They do have a language directory thingy. But only for load_lang op, afaict. 10:31
moritz jnthn: things are not so bad after all, it's only three files that conflict 10:32
HLL.pbc, P6Regex.pbc, Regex.pbc
lunch &
jnthn moritz: OK, that's not so bad. Thanks for looking at it. 10:35
tadzik bbkr_: just _please_ make sure that your file is a legal JSON 10:40
so no missing commas or whatever
dalek osystem: 74793b8 | tadzik++ | META.list:
Fix links
10:43
bbkr_ tadzik: ofc, i've validated it with www.jsonlint.com/ 10:44
dalek osystem: c7157ab | tadzik++ | META.list:
More linkfixing
10:47
tadzik We need a validation tool for this 10:50
Juerd Malformed JSON is illegal now? 10:54
tadzik well, it breaks the modules api living on feather, and modules.perl6.org as a result
Juerd Ouch
That's quite bad 10:55
tadzik yeah
I wonder if I can set up some obligatory commit hook which will validate the list
tadzik OR I can add a few try {} is the list generatior :) 10:57
s/is/in/
tadzik hugme: add bbkr_ to ecosystem 11:00
hugme tadzik: sorry, I don't know anything about project 'ecosystem'
tadzik bbkr_: that's broken :) 11:01
bbkr_ ?
tadzik I commented on that 11:02
Juerd tadzik: Wouldn't it be better to just fix whatever breaks, rather than ensure its input is correct?
bbkr_ Sorry, didn't know about "raw" requirement. Fixing... 11:03
tadzik bbkr_: the link needs to point to the JSON file, not the github page 11:04
tadzik Juerd: that's partly doable, yes 11:05
bbkr_ tadzik: fixed, link to raw/ in pull request 11:10
tadzik ok, merging 11:21
dalek osystem: c6ebebc | (Pawel bbkr Pabian)++ | META.list:
Added JSON::RPC module
11:23
osystem: 9481db4 | (Pawel bbkr Pabian)++ | META.list:
Fixed META.info location of JSON::RPC to raw
osystem: 0f87c0b | tadzik++ | META.list:
Merge branch 'master' of github.com/bbkr/ecosystem into bbkr-master

Conflicts: META.list
tadzik yay, modules.perl6.org got updated 11:24
tadzik 34 modules have Panda badges 11:26
moritz tadzik: extra points for having an absent Panda badge point to an installation error log 11:30
tadzik: JSON doesn't have a badge, and I have no idea why 11:31
tadzik I'll take a look 11:37
moritz: the panda badge doesn't check the installation
bbkr_ Is anyone working on "Most wanted" Email::MIME ? I work in email marketing business on daily basis and I know RFC quite well, so I'm considering this as next goal.
moritz tadzik: what does it check? 11:37
PerlJam bbkr_: go for it. :) 11:38
tadzik moritz: the presence of source-url 11:40
PerlJam ah, the dreaded switch from repo-url to source-url ;) 11:42
moritz and I'm to blame :/
PerlJam tadzik++
tadzik :)
PerlJam I'm sitting in an airport terminal waiting for a flight back to Texas. There's a couple sitting across from me both with laptops open and doing stuff. The woman is typing *really fast* with only one finger. (faster than some people who use all of their fingers) 11:45
I wonder what her error rate is though.
moritz just look at how often she hits backspace
moritz installs three panda badges 11:46
PerlJam I can't quite see what keys she's hitting because of the angle between us.
dalek psi: 79609ac | moritz++ | META.info:
fix META.info
11:52
moritz finds the panda badges maximally cute
tadzik the bigger image is even cuter :) 11:53
takadonet morning all 12:09
Util Morning, takadonet 12:15
pmichaud good morning #perl6 12:16
phenny pmichaud: 07:20Z <moritz> tell pmichaud that rakudoperl.org doesn't show the rakudo favicon - might be worth fixing
pmichaud ...is there a rakudo favicon?
moritz pmichaud: rakudo.org used a scaled down version of the logo 12:18
pmichaud I don't see one there now
moritz hm, maybe my mind is playing tricks on me :/
pmichaud anyway, if someone wants to create a favicon, I can certainly install it :) 12:19
jnthn o/ pmichaud 12:19
pmichaud o/ jnthn 12:20
moritz pmichaud: try moritz.faui2k3.org/tmp/favicon.ico
nothing fancy
pmichaud got the icon; have to take kid to school will install when I get back (in 15) 12:22
moritz no hurry 12:23
Util updates Perl6-Math-Quaternion, trying for Panda badge. 12:30
moritz jnthn: I've tried to rename some .pbc files, but ran into some troubles; it tried to fetch some thing from non-existant serialization context :( 12:31
jnthn: I guess I'm not proficient in the art of renaming files in a bootstrapped compiler
pmichaud favicon installed 12:33
moritz ... and it shows up in my browser. Yay. 12:35
jnthn moritz: Ah, yes, one has to be careful :) 12:43
moritz straw poll: should I put the new error spec into a new S\d\d? if yes, which? if not, into which should it go?
jnthn pmichaud: Any suggestions on the installation issues? We have some PBCs to install that conflict with existing ones (HLL, Regex, P6Regex).
pmichaud jnthn: I'm still waking up here, so might have an answer a bit later :) 12:44
jnthn pmichaud: OK. I'll save my question on the regex prefix handling for a little later too then ;)
Well, I guess I could push it onto your mental stack. :) The immediate issue is that we're now constructing meta-objects as we compile, so all the gradual typing stuff is done. PAST::Compiler however emits an extra method to obtain the prefixes. Thing is, that's kinda "too late" - we'd already have composed the class by then. 12:46
s/is done/is possible/
pmichaud is there a hook to be able to generate the extra methods when the class is composed? 12:52
jnthn pmichaud: That's certainly be possible. 12:55
pmichaud seems like we'll need something like that anyway, for other automatically-generated methods
jnthn pmichaud: compose is just a method call on the meta-object. It can do whatever it likes.
Attribute accessors get added because composing the class visits each of its attributes and gives it a chance to do some composition-time work, for example.
pmichaud but it can also be done at the time of the regex
so yes, it can be moved out of PAST::Compiler 12:56
probably should be
jnthn Are the prefixes primarily data?
pmichaud currently yes, eventually no
jnthn Or is there logic involved that has to be delayed?
Ah, OK
pmichaud I need to look at sorear++'s implementation of LTM 12:56
jnthn Do duplicate or empty prefixes have any semantics, ooc? 12:56
pmichaud and that will determine what we need 12:57
shouldn't be any duplicate prefixes
pmichaud (there might be though) 12:57
jnthn I looked through the output for NQP's grammar and duplicate empty prefixes show up quite a few times.
pmichaud hmmm
jnthn Does an empty prefix mean anything?
pmichaud yes 12:57
jnthn OK 12:57
pmichaud it means that the rule can match an empty string, so the ltm-cheater takes that into account 12:58
jnthn ah, I see 12:58
jnthn OK, makes sense. 12:58
pmichaud the existence of duplicates doesn't really affect performance, iirc, because it's ultimately all hashed anyway 12:59
jnthn Ah, OK. Then they concern me a bit less. 12:59
pmichaud anyway, there will have to be a way for a regex to be able to return its prefixes, yes.
jnthn And I guess in the future, non-literal prefixes. 13:00
pmichaud ideally it should probably be a method on the regex method itself, rather than a separately-named method
pmichaud I didn't have that option with Parrot's default method model 13:00
but since we should be able to have a 'Regex' base class somewhere, it becomes much more plausible 13:01
jnthn Yes 13:02
pmichaud i.e., ultimately I'd like to be able to do &regexxyz.prefixes() instead of !prefix_regexxyz()
jnthn Many things get more plausible :)
pmichaud but it does ultimately become dynamic because the longest-token prefixes are determined by the grammar you happen to be in at runtime 13:03
tadzik 43 panda-badged modules out of 92 existing in the database
pmichaud i.e.,: regex abc { 'foo' <xyz> } can have different prefixes depending on inheritance 13:04
flussence almost half \o/ 13:04
tadzik yes :)
pmichaud moritz: I'd suggest that exceptions should become S18, and that we switch around the synopses after that 13:05
pmichaud or perhaps exceptions makes more sense as S17 13:06
OR, if you want to use S07 or S08 for exceptions, I suspect I can fit iterators/captures/parcels into a single synopsis 13:07
it's not clear why those should be split in two
(at least not to me)
pmichaud so, my tentative suggestion: S07 - Exceptions, S08 - Lists, Iterators, Captures, Parcels 13:07
or vice-versa 13:08
moritz currently 15, 18, 23, 25, 27 and 30 are free
pmichaud yes, but exceptions seems like one of those "lower-level" items 13:09
on the other hand, if it's heavily object/class-based, then perhaps it belongs after 14
moritz in the Camel that would be Unicode, Compiling, Secuirty, Portable, Culture and Standard Library 13:09
pmichaud the general principal is to "reduce forward references"
*principle
moritz pmichaud: yes, it is heavily based on OO and roles
S18 seems sensible 13:10
pmichaud so, if what you're writing is based heavily on knowing bits about the OO and role parts of Perl 6, then after S14 makes sense
flussence
.oO( maybe the synopses should be autonumbered from a directed graph of links :)
pmichaud will IO need a good understanding of exceptions to be able to use it?
moritz ... and recalculates file names after each commit? 13:11
pmichaud: don't think so
pmichaud then yes, S18 seems like a good fit
moritz it might generate forward references though
pmichaud if what you're writing reads more like a library than anything else, then it could be a subsection of S32 13:12
there's already a S32-Exception
moritz hm, point taken
pmichaud all of synopses 28 through 32 look like they might want a re-think 13:13
(in terms of numbering and content)
moritz much of it will look a lot like an API spec more than the narrative in S02-S06
pmichaud yeah, api spec tends to be S32-ish, I think
moritz s/more/not/
pmichaud much like the other builtin functions/methods
moritz aye 13:14
bbkr_ rakudo: say so "" ~~ m/<[a..z]-[x]>/ # known bug? seems that exclude "-[x]" in char class fails when regexp containing such class is matched on empty string 13:34
p6eval rakudo 8533c3: OUTPUT«Cannot take substr outside string␤ in <anon> at line 22:/tmp/zpqtyrD_Aw␤ in 'Cool::match' at line 2661:CORE.setting␤ in main program body at line 22:/tmp/zpqtyrD_Aw␤»
ella rakudo: x 13:35
p6eval rakudo 8533c3: OUTPUT«Could not find sub &x␤ in main program body at line 22:/tmp/2DJLehGo29␤»
ella rakudo say x
moritz bbkr_: similar cases are known and have been fixed - I don't think this one
bbkr_ reports just in case
moritz bbkr_++ 13:36
bbkr_ rakudo: say so "a" ~~ /<[\x00..\xFF]>/ # what is the proper way to give hex ranges in regexp? this doesn't seem to work 13:41
p6eval rakudo 8533c3: OUTPUT«Bool::False␤»
moritz bbkr_: rakudo doesn't understand any backslash sequences in char classes :( 13:42
ella rakudo: say 1 13:42
p6eval rakudo 8533c3: OUTPUT«1␤» 13:43
ella rakudo: say 17
p6eval rakudo 8533c3: OUTPUT«17␤»
jnthn rakudo: say 17 + 25
p6eval rakudo 8533c3: OUTPUT«42␤»
jnthn \o/
undee69 rakudo: say 9+1 13:44
p6eval rakudo 8533c3: OUTPUT«10␤»
moritz rakudo: say (42/14).perl 13:45
p6eval rakudo 8533c3: OUTPUT«3/1␤»
bbkr_ moritz: time for workarounds then. luckily this works perfectly: m/^<[!..~]-[:]>+$/ (RFC2822 header name regexp for incoming Email::MIME) 13:47
tadzik seen PerlPilot 13:48
aloha PerlPilot was last seen in #perl6 68 days 20 hours ago saying "masak: We are the music makers and we are the dreamer of dreams. :)".
tadzik phenny: tell PerlPilot I've sent you a pull request for Benchmark.pm 13:49
phenny tadzik: I'll pass that on when PerlPilot is around.
moritz thought 'perlpilot' on github was PerlJam on #perl6 13:50
seen PerlJam
aloha PerlJam was last seen in #perl6 2 hours 3 mins ago saying "I can't quite see what keys she's hitting because of the angle between us.".
tadzik I never know :)
meswami hi every one.what is 'highlight' that u get with output in p6eval 14:25
?
moritz meswami: it used to give you an URL to a highlighted html file 14:27
meswami: seems it's broken now
TimToady moritz: that doesn't make sense to me; I thought meswami was asking about error message colors 14:53
std: 1 2
p6eval std 3468e14: OUTPUT«===SORRY!===␤Two terms in a row at /tmp/OVTxzpdR2L line 1:␤------> 1 ⏏2␤ expecting any of:␤ bracketed infix␤ infix or meta-infix␤ statement modifier loop␤Parse failed␤FAILED 00:01 119m␤»
moritz TimToady: p6eval also has a 'hilight' target 14:54
moritz hilight: my $x 14:54
TimToady ah, ok
moritz highlight: my $x
p6eval Please use /msg p6eval my $x
bbkr_ is there any smart (and implemented) way to check if characters in string are within US-ASCII range 1-127 ?
moritz TimToady: your interpretation makes some sense too... not sure what meswami meant 14:55
jnthn 1 <= @all($str.comb>>.ord) <= 127
jnthn or !$str.comb.first(1 <= *.ord <= 127) maybe 14:57
bbkr_ jnthn: thanks. I wanted to avoid split/comb, but since \xHH is not yet implemented in regexp classes looks like I have no choice :)
jnthn Yeah, that would be ideal way 14:58
TimToady eventually, <:ascii> should work 14:59
jnthn rakudo: say "öl" ~~ /<ascii>+/ 15:02
p6eval rakudo 8533c3: OUTPUT«Method 'ascii' not found for invocant of class 'Cursor'␤ in <anon> at line 22:/tmp/VRVGFJwyVi␤ in 'Cool::match' at line 2661:CORE.setting␤ in 'Regex::ACCEPTS' at line 6354:CORE.setting␤ in main program body at line 22:/tmp/VRVGFJwyVi␤» 15:03
jnthn Aw.
TimToady we're trying to move most of the Unicode-ish properties to use pair notation to cut down the possibilities of collision with user-defined grammar rules 15:04
jnthn oh.
TimToady and also because pair notation allows an argument
moritz rakudo: say "öl" ~~ /<isAscii>+/
jnthn What does that really mean?
p6eval rakudo 8533c3: OUTPUT«Method 'isAscii' not found for invocant of class 'Cursor'␤ in <anon> at line 22:/tmp/4pUb_ViZ3t␤ in 'Cool::match' at line 2661:CORE.setting␤ in 'Regex::ACCEPTS' at line 6354:CORE.setting␤ in main program body at line 22:/tmp/4pUb_ViZ3t␤»
jnthn As in, what does <:foo> mean over <foo>?
In terms of runtime semantics? 15:05
jnthn That is, is it still some kinda method call? 15:05
TimToady likely, but it's not clear whether the method name is the key of the pair 15:07
bbkr_ rakudo: any("\x01" .. "\x7F") # timeouts for me
TimToady and we may want to nail the namespace of character props down at compile time
p6eval rakudo 8533c3: OUTPUT«(timeout)»
TimToady (for efficiency) 15:08
moritz (1..127)>>.chr
jnthn Ah, that's a good point.
TimToady but the namespace of properties (and associated values) from Unicode is quite extensive, and we mainly want to avoid collisions, in addition to allowing specified values 15:10
perldoc.perl.org/perlunicode.html#U...Properties lists *some* of these properties
though Perl 5's syntax is special rather than overloading pair notation
TimToady so where P5 uses \p{Bidi_Class:R} we'd use <:Bidi_Class<R>> 15:13
or <:Bidi_Class('R')> if you don't like nested angles 15:14
pmichaud I thought <ascii> was implemented.
TimToady using pair notation also gives us <:!Letter> 15:15
moritz alpha: say "abc" ~~ /<ascii>+/ 15:15
p6eval alpha : OUTPUT«(timeout) find regex 'ascii'␤in regex »
TimToady S05:1587 for the P6 spec on this
moritz pmichaud: the nqp char class implementation is... very incomplete 15:16
pmichaud ah, S05 doesn't define <ascii>
that's why nqp/rakudo doesn't have it. :-)
moritz pmichaud: it does spec backslash sequences in char classes though :-) 15:17
pmichaud moritz: it does? ;-)
pmichaud moritz: I see no backslash sequence in char class spec in S05. :-P 15:18
pmichaud (not saying it's not valid... just that it's not specced) 15:18
moritz S32 uses it :-)
moritz and the test suite 15:18
pmichaud S32 was speculative at the time that was written
TimToady it's specced in the spot that says "Just like P5 if we don't mention it" :P 15:19
moritz but yes, it's underspecced
TimToady agreed
pmichaud and at the time I wrote NQP, even STD.pm didn't have a good way to parse that
much less implement it
moritz but my ack agrees with you that it's not mentioned in S05 15:20
(unless in a char class that spans multiple lines in the source)
TimToady it's specced in STD then :)
moritz ETOOMANYDIFFERENTSPECS 15:21
pmichaud TimToady: I see that STD.pm goes into the <Q> parser for enumerated character classes.... what does the :cc tweak do? 15:22
pmichaud oh, wait 15:23
hmmm
pmichaud okay, my question still stands... what does the :cc tweak do? 15:24
does it then make use of "role cc" ? 15:25
moritz it mixes the role cc in
pmichaud and that's what enables it to recognize the cc backslashes
okay, we can perhaps do something similar 15:26
at least that helps on the parsing side 15:27
figuring out <+alnum-[\D]> is going to be fun, though. :-)
jnthn -Ofun ;) 15:28
moritz which part? the subtraction? 15:28
pmichaud the subtraction of the negation, yes.
moritz or getting a list of matched characters/ranges from alnum?
sounds like not too hard with inversion lists
pmichaud I can do it with inversion lists.... but we really need some opcodes to do the actual match efficiently
and to have a good way of encoding the inversion list in the generated code 15:29
I've already solved this problem on paper
I couldn't really implement it in nqp-rx because of the need/want for specialized opcodes to do the matching efficiently
moritz how? by generating a bit field in the end?
pmichaud that's not an issue in 'nqp'
moritz right 15:30
pmichaud oh, I can match against an inversion list no problem
but we really don't want it to be a bunch of PMCs
pmichaud easier is to simply have a string of on/off codepoints 15:30
moritz matching against an inversion list should be O(log($list-length)) 15:30
pmichaud right 15:31
it is
moritz subtraction is O($len1 + $len2)
pmichaud but I didn't necessarily want to code that in PIR
moritz inverting is O(1)
understandable :-)
pmichaud as I said, I solved all of this on paper already, including union and renormalizing the lists 15:32
moritz ok ok :-)
jnthn pmichaud: Please no more PIR.
pmichaud: :)
pmichaud we also have to have a table to maintain the inversion lists for \d, \s, \h, \v, etc. 15:33
moritz aye
jnthn pmichaud: The cost of developing in PIR in new-NQP is far higher.
pmichaud jnthn: np
jnthn pmichaud: And the fact that Regex.pbc isn't in PIR has been a source of regular pain and bugs during implementing separate compilation. :)
er, *is* in PIR
Or isn't in some HLL :)
pmichaud jnthn: as I said, I didn't necessarily want to code this in PIR. 15:34
moritz looked through PIR chunks in the nqp source, looking for ones that I could replace with nqp
and some of the regex bits looked pretty hairy
pmichaud jnthn: which is why it hasn't been done yet
moritz like... the OPP in pir *shudder* 15:34
jnthn pmichaud: Yes, makes sense.
jnthn pmichaud: Between some improvements to PAST and PAST::Compiler and writing a relaitvely straightforward optimizer, we can eliminate much of the overhead we get by writing stuff in NQP today compared to PIR also. :) 15:36
pmichaud good. 15:36
jnthn pmichaud: We could do with things like, parameters that don't assume they need to go into a lexical. 15:37
If we have a block that declares no contextuals and has no nested blocks within it, we can optimize the lexicals out completely.
I already wrote a first cut of that for nqpclr.
Of course, non-PMC lexicals would also be good...I can deal with those at some point. 15:38
I did a profile of NQP recently using the VS profiler. find_lex is actually a hot path. 15:39
pmichaud if we assume that lexical names never get rebound we can eliminate the find_lex also. 15:40
or, at least, have only one per block
(one per lexical per block) 15:41
jnthn Well, we can statically know if they're rebound if they're non-contextual, I guess?
Just analyze the block for :+
er, :=
And then flag the lexical somehow as non-rebound.
pmichaud even if they're contextual we can assume they're not rebound, at least in p6
jnthn Oh? 15:41
$*foo := 42; 15:42
Could rebind something way down the call chain?
pmichaud that actually doesn't change the binding of the '$*foo' symbol -- it still points to the same pointer PMC
pmichaud at least, that's how it is in our current model 15:42
jnthn Yeah, but our current model seems...broken. :(
(In Rakudo, not in NQP).
pmichaud no, I mean the current p6 model
jnthn Oh.
:= replaces the container though? 15:43
Not just the value in it.
pmichaud no
jnthn Unless we have two levels of containers
pmichaud it doesn't replace the container, it simply makes one container refer to another
same as binding in function calls
jnthn Ah 15:44
pmichaud we have to keep them separate because the two containers might have different constraints
jnthn Yes, that's true.
pmichaud my $x = 5;
my int $y := $x;
*Int
that's the same as
my $x = 5; sub foo(Int $y) { ... }; foo($x) 15:45
$y and $x are different containers
so the symbol $y never gets rebound to a new PMC -- it always has the PMC that has the attached "Int" constraint
moritz rakudo: my $x = 5; sub f(Int $y) { $x = 'foo' }; f($x); say $x
p6eval rakudo 8533c3: OUTPUT«foo␤»
moritz rakudo: my $x = 5; sub f(Int $y) { $x := 'foo'; say $y }; f($x); say $x
p6eval rakudo 8533c3: OUTPUT«foo␤foo␤» 15:46
moritz niecza: my $x = 5; sub f(Int $y) { $x := 'foo'; say $y }; f($x); say $x
p6eval niecza v4-76-g7bf5ef9: OUTPUT«===SORRY!===␤␤Any()In parameter declaration, typename 'Int' must be predeclared (or marked as declarative with :: prefix) at /tmp/KFCnvbalDA line 1:␤------> my $x = 5; sub f(Int⏏ $y) { $x := 'foo'; say $y }; f($x); say␤␤Parse
..failed␤␤»
moritz niecza: my $x = 5; sub f(Num $y) { $x := 'foo'; say $y }; f($x); say $x 15:46
p6eval niecza v4-76-g7bf5ef9: OUTPUT«5␤foo␤»
moritz which one is correct? or are both wrong?
(think s/Num/Int/ in niecza) 15:47
jnthn moritz++ # great example 15:48
pmichaud I asked TimToady this question at NPW'09
I don't think I got a clear answer. :-)
jnthn nqp: my $x = 5; sub f(Int $y) { $x := 'foo'; say $y }; f($x); say $x
p6eval nqp: OUTPUT«Assignment ("=") not supported in NQP, use ":=" instead at line 1, near " 5; sub f("␤current instr.: 'nqp;HLL;Grammar;panic' pc 17577 (gen/hllgrammar-grammar.pir:5028)␤»
jnthn nqp: my $x := 5; sub f(Int $y) { $x := 'foo'; say $y }; f($x); say $x 15:49
p6eval nqp: OUTPUT«Unable to parse blockoid, couldn't find final '}' at line 1␤current instr.: 'nqp;Regex;Cursor;FAILGOAL' pc 3435 (src/Regex/Cursor.pir:233)␤»
moritz say()
jnthn nqp: my $x := 5; sub f(Int $y) { $x := 'foo'; say($y) }; f($x); say($x)
p6eval nqp: OUTPUT«5␤foo␤»
jnthn Heh, thought that'd happen :)
moritz finds rakudo's answer a bit confusing
how can $y be 'foo' if it's typed as Int?
jnthn Niecza's view of binding is more like NQPs.
pmichaud I'm inclined to say that Rakudo is wrong there on the rebind
well, maybe not
jnthn afaik, anyway 15:50
pmichaud NQP's view doesn't have any notion of containers, though.
jnthn No, that's true.
pmichaud anyway, my point is that in Rakudo we can actually assume that the lexical symbol $x remains bound to the same PMC throughout its lifetime 15:52
pmichaud if we want to implement p6 binding and constraint semantics, that's just the way it works out 15:53
jnthn pmichaud: OK. Sounds like we can be more efficient then :) 15:54
pmichaud it means PAST needs a way of being able to say "assume lexicals are never rebound and optimize for that" 15:55
while it's true for Rakudo, it might not be true for other languages
jnthn wonders if that should be Var level or Block level
pmichaud both
that's why PAST has a 'default' set of attributes for vars :-)
jnthn :) 15:56
pmichaud so you can say "in this block, if a Var doesn't declare otherwise, assume it's scope/binding/whatever is ..."
if require every Var to explicitly declare, that can get expensive
jnthn Yes, it would.
TimToady I suspect := and ::= are quite different 15:59
TimToady the first is (I hope) a simple pointer substitution, while the second is able to add constraints 16:00
moritz TimToady: do you have an opinion on how my example should behave?
TimToady parameter binding is the second
moritz rakudo: my $x = 5; sub f(Int $y) { $x := 'foo'; say $y }; f($x); say $x 16:01
p6eval rakudo 8533c3: OUTPUT«foo␤foo␤»
TimToady I think rebinding $x makes $x and $y point to different things 16:02
pmichaud I can agree with that
pmichaud Rakudo needs to move to a two-layer system 16:03
moritz so output should be 5\nfoo\n, right?
TimToady I believe so
pmichaud $x -> container -> 5
moritz submits rakudobug
jnthn pmichaud: Unless the lexpad's slot *is* the outer container.
pmichaud jnthn: two containers 16:03
TimToady a "bvalue" to := should just be a pointer to a pointer 16:04
jnthn pmichaud: Right, there's still two. :)
pmichaud the lexpad slot is the variable container
TimToady a "bvalue" to ::= is more complicated
pmichaud my $x results in the $x slot going to a PMC that points to a PMC that points to 5
TimToady I'd like your first PMC to be a native type in most implementations 16:05
moritz that feels... expensive
jnthn If 5 was some boxed object, it'd be a PMC pointing to a PMC that points to the object?
pmichaud jnthn: yes
jnthn That sounds costly
TimToady that is, := is modifying an unboxed native ref
msot if the time
pmichaud TimToady: we have to have somewhere to hang constraints and properties of the variable itself
TimToady that's the business of ::=, not := 16:06
::= can add to a linked list, but := shouldn't
ashleydev make it like an inside-out class and add the attributes somewhere else "if needed"
TimToady assuming there's a root pointer, := replaces the root pointer, and ::= inserts after it 16:07
pmichaud so: my $x = 5; my Int $y := $x; $y = 'hello'; # valid?
TimToady probably valid but "erroneous" 16:08
jnthn What does that mean? 16:09
pmichaud in other words, binding a variable with := causes it to adopt whatever (non-) constraints exist on whatever it's being bound to?
TimToady I'm sure that making := fast and ::= smart will result in some "don't do thats"
pmichaud s/variable/symbol
TimToady pmichaud: yes, though perhaps we can catch some of those at compile time
I'd like := to be very primitive, even if it defeats the type systems 16:10
pmichaud okay, I'm fine with that.
jnthn: ignore what I said above about being able to optimize our lexical fetches. :-)
jnthn TimToady: That makes me nervous. 16:10
TimToady: Given I've plans to rely on things typed as Int actually *being* that. 16:11
pmichaud in rakudo's case, we may end up making binding fast only to make variable fetches slow.
jnthn TimToady: If we defeat that then I'm going to start dispatching to surprise methods. ;)
TimToady or maybe we just need to make sure our native type system supports native refs adequately 16:12
pmichaud rethinking a bit
16:05 <jnthn> That sounds costly
Which is more costly? 16:13
jnthn pmichaud: If lexical accesses were *cheap* we could worry far less.
pmichaud (more)
1. Lexical fetch for $x -> container -> value
2. Known $x -> container -> container -> value
jnthn We know at compile time for most lookups enough to map them to N pointer chases down the otuer chain, then a slot index.
At the moment they're really costly because for every frame in the outer chain that we walk it doing a hash lookup. 16:14
pmichaud jnthn: sure, but if the lexical is known to be in a particular register already, we can avoid even the N pointer chases
once we've looked it up once, we can keep it in that register for the rest of the block
TimToady what operation do you need a boxed pointer chase for that an unboxed pointer chase in the first step would be "too simple"
?
jnthn Sure, but a container pointing to a container is a pointer chase too I guess. But it's at least 1 and not N. I grant that. 16:15
pmichaud it's also not a slot lookup
i.e., we're not indexing into an array
jnthn To the degree that Parrot register accesses aren't slot lookups, yes. ;)
pmichaud good point :-)
jnthn TimToady: Part of what I'm wondering is "where do the constraints live" 16:16
In the model pmichaud is suggesting, afaict they'd be hung off the outer container.
pmichaud TimToady: if $x := means that we modify an unboxed pointer, then every access to $x has to do a lexpad lookup to find out what its current unboxed pointer value is
and lexpad lookups are currently very expensive in Parrot
jnthn They are, but they don't have to be if it matters a lot to us that they're faster. 16:17
pmichaud because the only way we have to maintain a reference to a pointer is to box it
TimToady well, that's a problem, ain't it?
pmichaud if you're suggesting that parrot needs a native reference type, perhaps. 16:18
I'm not the architect there.
pmichaud all we have are native int, native str, native num, and PMC ref 16:19
TimToady I'm saying I think we need to get to a primitive model a bit closer to C or Lisp here, seems like
pmichaud we don't have a native type that can reference a PMC ref 16:19
TimToady or at least not prevent such an implementation on VMs that can support native pointer to pointer 16:20
(internally, not necessaryily user-visible)
this feels a bit like the boundary between "managed" and "unmanaged" code 16:21
pmichaud jnthn: we can speed up lexpad lookups a lot, but I don't think we can speed it up so much that it's less expensive than simply avoiding the lookups altogether :-)
TimToady I'd at least like to have a variant of P6 that can rival the speed of C/C++ eventually
pmichaud and we still need to know how my $x = 5; my Int $y := $x; $y = 'hello'; affects things 16:22
pmichaud if we declare that "erroneous" but not enforced/enforceable, I'm fine with that. 16:23
TimToady perhaps := should be disallowed between locations that are known to be different types at compile time 16:23
or require something to say "I mean it" 16:24
TimToady "with UNCHECKED_TYPE_CONVERSION" in Ada, for instance 16:24
pmichaud I don't follow that.
pmichaud (not sure I need to :-) 16:25
jnthn TimToady: Allowing people to do stuff easily that isn't type safe seems like the path to a lot of pain.
TimToady my point is basically that we can't do any native types without the compiler knowing the type of the variable
jnthn Agree on that point.
TimToady jnthn: that's why it's in all caps
much like MONKEY_TYPING 16:26
jnthn TimToady: OK. So long as you don't care that we'll go and find whatever method is in slot 42 of Int's vtable when the actual value is a Monkey. :)
pmichaud so, in this case the := would be disallowed because the Int constraint on $y doesn't match the Mu constraint of $x ?
TimToady phone 16:27
jnthn pmichaud: At the moment I'm pondering that maybe our container is at the 6model level a parametric role. (more)
role ScalarContainer[T] is repr('SomeCheapContainerThing') { has T $!data; } 16:28
It'll then handle native type storage automagically.
And we'd not need to worry about storing native types in the lexpad. 16:29
pmichaud I totally don't follow that last point 16:29
jnthn backs up a little
my int $x = 42; 16:30
pmichaud nested blocks still need to access the native typed lexical, yes?
jnthn Somewhere we need to store that 42. We shouldn't box it.
jnthn If I understand the model you're proposing correctly, then the lexpad only ever points to a container which in turn has a value 16:30
That container would be a reference type, e.g. a PMC. 16:31
jnthn So our actual native storage would not be in the lexpad itself, but in the container which the lexpad references. 16:31
Am I missing something? :) 16:32
pmichaud Okay.
that makes more sense
so our lexpad still only holds PMCs, but some of those PMCs are containers for native types
jnthn Yes
pmichaud actually, all of them are, if we consider a PMC ref to be a native type
jnthn Well, it kinda is :) 16:33
pmichaud right
jnthn It's just a PMC* pointer. :)
But that's how P6opaque already works today
pmichaud that feels very clean-ish
but in the case of non-native types, we'd still end up with
my $x = 5;
5 is a boxed constant
then we need a PMC for the variable 16:34
then a PMC for $x
jferrero rakudo.org/status is blank? 16:34
jnthn pmichaud: thinking... :)
pmichaud note that I don't have a problem with this at all
jnthn pmichaud: Note that we won't use Integer PMC any more. Int and Num will directly have the native value stored within them.
pmichaud yes 16:35
moritz jferrero: we're in the process of migrating to a more reliable hosting solutioin
pmichaud but it's still 3 pmcs
jnthn Ouch.
pmichaud Int
variable
$x
but we no longer need lookups for $x
jferrero rakudo.de/ is freeze?
OK, moritz
jnthn pmichaud: How far can we share the $x? 16:36
pmichaud: Need we only clone it on a newclosure?
moritz jferrero: rakudo.de is my fault... I should take down that spectests graph 16:36
pmichaud jnthn: thinking
moritz it doesn't mean anything, yet people try to ask deep questions about it
jnthn If so then I'm less scared.
tadzik whose child is rakudo.de? 16:37
jferrero OK, moritz
moritz tadzik: mine 16:38
pmichaud well, even now we don't really "clone" the containers
tadzik moritz: still tracking proto projects?
moritz tadzik: I don't know what it tracks right now, if anything 16:39
jnthn pmichaud: We create them every time we enter a block at the moment. 16:40
pmichaud I think we still have to do that.
jnthn pmichaud: I'm thinking we could create the outermost ones once, and attach any type constraint info to them.
pmichaud (recursion)
jnthn Oh, that doesn't cause a newclosure, does it...hm. 16:41
Yeah, I'm thinking of the operation on the wrong block here.
jnthn I guess I'm just a little worried about my Foo $x .= new(); immediately creating you three GCable object allocations, which in truns is six heap allocations. 16:43
*in turn
pmichaud we can "cheat" a bit 16:44
we could just have container + value, and then go to the multi-level container only if bound to 16:45
being careful not to rebind the lexical 16:46
for example, in $y ::= $x
if $x isn't pointing to a container, we create an anonymous container *then*, then bind both $x and $y to that
(bind in the := sense, not in the lexpad slot sense) 16:47
i.e., only go multi-level when we know we need to
so, for
my $x = 5; # container for $x, Int 5 16:48
my $y; # container for $y
$y ::= $x; # create an anonymous container, point it to $x's current value, cause $x and $y to reference the anonymous container
jnthn Sounds feasible 16:49
pmichaud and, of course, once a variable is referencing a container, we don't need to repeat that step later
so, it's lazy 3-level
or lazy 2-level (or whatever we call it) 16:50
jnthn And avoids the copy op which seems to be source of various of our bind bugs today. 16:50
pmichaud are we still using copy?
jnthn Only for := 16:51
How will this play out with arrays? (more)
my int @x; # a package array of ints
my Int @x; # array of Int objects, or array of containers pointing to Int objects? 16:52
s/package/packed/
pmichaud the second one is an array of containers
(that's how it's implemented now)
jnthn OK.
pmichaud the first one is likely ArrayContainer[int] in the model you proposed above
jnthn OK 16:53
pmichaud which has some nice potential for making things efficient there :-)
(as in packed arrays)
jnthn Yes.
pmichaud actually, the second one might also be ArrayContainer[Int] and it could largely "just work", perhaps. 16:54
pmichaud but Rakudo today assumes that Array is really Array of Scalar, and actually has each element as the equivalent of its own scalar container 16:54
jnthn If it knew it needed the container, yes.
Yeah, that's the disconnect I'm worried about 16:55
Where will that complexity bite us...
pmichaud actually, thus far it seems to be fairly straightforward
or by disconnect are you concerined with ArrayContainer[Int] versus ArrayContainer[int] ?
*concerned 16:56
jnthn Yeah
pmichaud maybe
ArrayContainer[ScalarContainer[Int]]
jnthn *nod*
pmichaud at least conceptually
jnthn Then we can wrap up the complexiyt
jnthn *complexity 16:56
Inside of Array
moritz ok, rakudo.de/ is now "updated"
jnthn Or some such :)
moritz as in, stripped out everything that's not updated regularly anymore
pmichaud anyway, since you've been dealing with lexicals and the like lately, I'm thinking I'll leave it to you to decide the model based on today's discussions 16:57
moritz if somebody wants to reconstruct historic module numbers, I might add statistics for the current numbers based on META.list in the ecosystem
pmichaud but I do think that avoiding the repeated lexical fetches is plausible now, where it wasn't in many earlier versions of Rakudo 16:57
pmichaud (because Perl 6 basically requires that we have some sort of container PMC, to which a lexical slot can be "permanently" bound) 16:58
jnthn Yeah, I can see the value of avoiding the repeated fetches. 16:58
We do spend quite a lot on that.
(repeatedly fetching, that is) 16:59
pmichaud so I think I'm saying I'll let you decide the repeated fetch versus indirections trade-off
we know we'll have *some* indirections somewhere, especially on ::= binding
jnthn *nod*
pmichaud but we can make them really inexpensive
jnthn My other concern is that what we hand back from .VAR is actually a proper object. 17:00
pmichaud note also that the lazy 2-level I described above also avoid the chain of references
i.e., my $x; my $y ::= $x; my $z ::= $y;
jnthn But I think that can be done very cheaply.
pmichaud we don't end up with $z -> $y -> $x as we have now
jnthn Yes, that should not be a chain.
jnthn Right. 17:00
pmichaud instead we end up with $x, $y, and $z all pointing to a common anonymous container, while each retains its own constraints 17:01
pmichaud (we can decide if constraints need chaining... but that's workable in this model also) 17:01
jnthn On the one hand, I'm uncomfortable with the number of allocations. On the other, I know that find_lex is pricey.
pmichaud right, I agree. 17:02
I figure you have a better sense of where the balance might lie.
jnthn And I suspect a mildly aggressive optimizer can eliminate quite a few of them too.
pmichaud but as far as the number of allocations goes... I think in some sense the language requires them 17:02
so I'm not sure we can completely avoid them
jnthn Looking forward six months, I expect to be inlining tiny-bodied multis too. 17:03
pmichaud +1
jnthn When we have the type information to do so.
jnthn Which we're building towards. 17:03
jnthn So $a + $b where we know $a and $b are int (or Int) won't even be a call, meaning there won't even be containers to build for the parameters. 17:03
Or PCC, or a callcontext... ;-) 17:04
pmichaud alester: Feel free to point rakudo.org to rakudoperl.org whenever you're ready.
alester: I think the new site is as ready as it needs to be for the domain repointing.
jnthn: that sort of inlining will be awesome 17:06
jnthn pmichaud: Yes. There's some work to do to get there, but I feel I've got a reasonable sense of the path to it. 17:07
jnthn The other thing we'll win a decent bit on is that typechecks should be a bunch cheaper. :) 17:08
jnthn nqp: class Foo is Bar { } 17:09
p6eval nqp: OUTPUT«Can only use get_how on a RakudoObject␤current instr.: 'nqp;NQPClassHOW;compute_c3_mro' pc 1498 (gen/nqp-how.pir:430)␤»
jnthn Anybody know how to get that to update?
That gives a nice compile-time warning now that actually makes sense :)
moritz takes a look
jnthn Since, like, days ago. ;)
jnthn moritz++ # thanks! 17:09
pmichaud afk, lunch 17:11
JimmyZ_ E:\Open Source\nqp>nqp 17:12
Null PMC access in instantiate()
ctmo branch
moritz nqp might not be fine with spaces in path names 17:13
jnthn JimmyZ_: Looks familiar. You probably have an old libparrot.dll lying around. 17:13
I'm pretty sure I got that error from that.
dalek p/ctmo: 4042390 | moritz++ | build/gen_parrot.pl:
[Configure] git fetch in the right place
jnthn Try copy parrot_install/bin/libparrot.dll . 17:14
er, backslashes!
:)
moritz: You maybe wanted taht fix in master? :)
JimmyZ_ it works... 17:15
jnthn :) 17:16
JimmyZ_ make clean doesn't clean libparrot.dll :(
good night 17:17
moritz jnthn: sooner or later, yes 17:18
jnthn ;) 17:21
ctmo has a few bustages at the moment :)
masak greetings, zerbas. 17:25
TimToady
.oO(zerba the greek)
17:26
jnthn masak! \o/
tadzik hello masak
jnthn nom shop & 17:26
masak what's ufobuilder? 17:27
tadzik an accident :>
that's basically 'ufo && make && make test && make install' as a backend for Pies
masak heh :) 17:28
ufo wasn't convenient enough, huh? :P
tadzik no, that was just in-field testing of Pies 17:29
tadzik a proof-of-concept :) 17:31
masak PerlJam: in the Infocom game "The Lurking Horror", there's a wonderful scene description of a seasoned computer hacker who types with one hand 'faster than some people who use all of their fingers'. 17:33
masak moritz: thank you for panding Yapsi ;) 17:34
masak .oO( 'pandizing'? ) 17:34
moritz masak: thank you for your email forward :-)
masak moritz: got another one some hours later, saying the book has dispatched. 17:38
moritz \o/
then it might actually arrive before the official publishing date
masak moritz: I haven't written an OPP in PIR, but I'm pretty sure I understand the one in PGE, after having built a Perl 6 version off of it. it's actually not that tricky -- just a lot of cases to consider, and a lot of goto instructions to muddle things up. 17:39
pmichaud: do I understand you correctly that binding makes one container refer to another container? I always thought it made a container refer to the *value* in another container... 17:41
ah, I see now what TimToady said about := and ::= 17:43
masak <TimToady> assuming there's a root pointer, := replaces the root pointer, and ::= inserts after it 17:44
I guess the "links" in the linked list are something like containers...
jnthn masak: (refer to the value in another container) wouldn't that be assignment? :) 17:47
masak hm. :) 17:48
ok, but it still doesn't match my picture of it. 17:49
masak in my mental model, I have two *variables* (lexpad entries, whatever) refer to the same container after a binding. 17:49
nowhere is one containing referring to another container.
jnthn masak: If you think of the lexpad as a kinda container... :) 17:51
masak sure, it's a hash-like container.
but that's not what we usually mean by "container" when we talk about binding. 17:52
pmichaud masak: the thing is, that we tie constraints to lexpad entries, not to "containers" 18:48
unless each lexpad entry is its own container
when we say my Int $y; $y ::= ... 18:49
we can't simply (re-)bind $y to the value on the right; we also have to keep track of the fact that $y has a constraint 18:50
pmichaud and in the case of 18:50
pmichaud my $x = 5; my $y ::= $x; $y = 4; 18:50
we're changing the value of $x's container, not the value of the immutable 5
masak pmichaud: oh, I agree with all of that. 18:57
masak pmichaud: but what I see there is not one container pointing to another, but the variables $x and $y pointing to the same container. 18:57
pmichaud what about 18:59
my $x = 5; my Int $y ::= $x;
what holds the constraint for $y ?
it can't be the container that $x is pointing to
masak nod. 19:00
it's the lexpad entry for $y, no doubt.
pmichaud so, it's a "container" 19:01
masak is it the same kind of container as the thing that directly contains the 5?
pmichaud not necessarily, no
but it's more than a simple native pointer, certainly 19:02
masak oh, agreed. 19:03
pmichaud this is where Rakudo has "ObjectRef" and "Perl6Scalar" to identify the different types of references
although I think we got rid of Perl6Scalar
anyway, the fundamental behavior of both $x and $y's "containers" are the same -- they point to something else
pmichaud but they're not the same container, because one or the other or both have specialized behaviors under binding and assignment 19:04
masak nod 19:05
pmichaud (namely, how operations get forwarded to the thing they point to)
pmichaud is sad that rakudo.org is displaying "webpage not available" again. :-( 19:06
masak :-(
Util_ What program generates the file at modules.perl6.org/proto.json ? 19:39
tadzik build_projects_list.pl 19:39
(I think)
moritz hopes "yes" 19:39
Util_ In which repo? 19:40
tadzik modules.perl6.org 19:41
Util_ Ah! modules.perl6.org isn't just a web site, it is a GitHub repo! Doh! 19:43
moritz it even says "This page is generated from the files in the modules.perl6.org repository." 19:44
where the last two words are links
Util_ must remember to read *all* the way to the end :( 19:45
Thanks!
moritz well, especially the start and the end 19:47
the rest of the page is pretty uniform :-)
masak RT 4.0.0 released! \o/ 20:13
so, when will rt.perl.org get the new version? :) 20:14
tadzik (: 20:14
pmichaud Sometime soon I'd like to have a conversation here about Perl 6 and disruptive technologies 20:21
I've been re-reading "The Innovator's Dilemma" and I think it has some bearing on what we should be doing with Rakudo/Perl 6
masak +1
jnthn Sounds interesting 20:22
masak Perl 6 is still, eleven years later, dynamite. let's implement it :) 20:22
frettled pmichaud: that's a very good idea 20:23
pmichaud anyway, I particularly would like TimToady++ to be around for the discussion, since he's talked about "disruptive" a bit in the past 20:24
Util +1 to I.D. conversation 20:37
frettled pmichaud: also, he tends to have some good feedback :) 20:38
pmichaud maybe early next week
this weekend is pretty full for me
colomon pmichaud++ 20:39
or +1, whatever. ;)
frettled +2! 20:40
Which, incidentally, is 2.
masak rakudo: say +2
p6eval rakudo 8533c3: OUTPUT«2␤»
masak rakudo: sub postfix:<!>($n) { [*] 1..$n }; say +2! 20:41
p6eval rakudo 8533c3: OUTPUT«2␤»
tadzik rakudo: sub postfix:<!> { [*] 1..$^n }; say +2! 20:42
p6eval rakudo 8533c3: OUTPUT«2␤»
masak rakudo: say +$_(2) given { [*] 1..$^n }
p6eval rakudo 8533c3: OUTPUT«2␤»
pmichaud rakudo: sub postfix:<!?>($n) { ([*] 1..$n) ~ '?' }; say +2!? 20:43
p6eval rakudo 8533c3: OUTPUT«2␤»
pmichaud hmmmmmm 20:43
Util rakudo: say ++2;
p6eval rakudo 8533c3: OUTPUT«Cannot modify readonly value␤ in '&infix:<=>' at line 1␤ in main program body at line 22:/tmp/NBHdpByRJI␤»
masak wait wait
frettled is waiting.
Util Well, that is reassuring :)
masak wasn't pmichaud's eval a bug!?
pmichaud whistles
masak submits rakudobug!? 20:44
pmichaud it did seem buggish
oh, not a bug!
jnthn Where was the bug?
masak oh!?
pmichaud I bet prefix:<+> is lower precedence
jnthn Yes
masak oh yes
pmichaud rakudo: sub postfix:<!?>($n) { ([*]?' }; say (+2)!?
ingy o/
p6eval rakudo 8533c3: OUTPUT«===SORRY!===␤Unable to parse blockoid, couldn't find final '}' at line 22␤»
masak because newly defined ops always get tightest prec 20:45
pmichaud rakudo: sub postfix:<!?>($n) { ([*] 1..$n) ~ '?' }; say (+2)!?
p6eval rakudo 8533c3: OUTPUT«2?␤»
frettled ingy o/
pmichaud might still be a bug, but if so, it's a default precedence bug 20:45
ingy: o/
tadzik ingy: \o
pmichaud well, I guess it's a bug either way, since +'2?' should throw an exception or warning
masak yes, but that one's submitted long ago :P 20:46
tadzik what a relief! I was worried about "masak submits rakudobug" again :)
frettled tadzik: don't worry, still more than one hour until midnight local time.
pmichaud and now we know the real reason why masak++ wants RT 4.0 on rt.perl.org :-P
masak mwhahaha 20:47
frettled pmichaud: because the current tracker doesn't scale with his bugrep rate?
pmichaud frettled: yes, something like that 20:49
moritz is glad to see pmichaud++ active again 20:50
pmichaud well, I'm on the channel... not much in the way of commits yet :-| 20:51
masak like being a newbie again! :P
frettled pmichaud: good to see you around, still, don't fret about the commits.
pmichaud but yesterday was productive. Star release and new rakudoperl.org site up 20:51
frettled mm, nice! 20:52
jnthn assures pmichaud that new nqp doesn't bite :)
jasonmay \o/ thanks to that META.info my module doesn't look like amateur hour on modules.p6 20:56
tadzik mission complete! 20:57
frettled jasonmay++ 21:00
tylercurtis tadzik: ooc, is Panda Rakudo-specific? 21:02
masak I think in practice, it is.
masak because no other implementation has the things Panda needs. 21:03
yet.
tylercurtis should have just looked at the code. 21:04
tylercurtis Panda::Builder does "perl6 --target=pir". 21:04
pmichaud someday I hope that'll be Panda::Builder::Rakudo 21:05
masak +1
pmichaud and --target=<code> instead of --target=pir 21:05
pmichaud maybe --target=p6c or some generic name that means "the compiled form of the module" 21:06
jnthn or -c 21:07
(compile
)
:)
pmichaud -c already means something, I think
-c check syntax only (runs BEGIN and CHECK blocks)
jnthn ah, yes 21:08
pmichaud still, that's a great idea :)
moritz --compile would be perfectly fine
tadzik tylercurtis: yes, sadly yes
jnthn moritz: yes, something like that
jnthn Or that :) 21:08
pmichaud --compile is too unambiguous :)
and it's at least 6 extra keystrokes. TOO LONG! TOO LONG! 21:09
tadzik tylercurtis: sorear asked me once about what neutro needs from niecza, I think the biggest blocker was the file IO support
masak --cpm :P
pmichaud cycles per minute?
control program for microcomputers?
tadzik compile me
tylercurtis Compile Perl Module? 21:10
tadzik cute panda miniatures
pmichaud certified property manager ?
critical path method?
moritz let's just chose some random TLA, and come up with a meaning later
jnthn code please, mister
moritz cpm is a fine one :-) 21:11
pmichaud cost performance measure?
masak it sure got the bikeshed juice flowing :P
masak remember, Perl 6 has to grab as many TLAs as possible before they run out. they're a really scare resource. 21:12
jnthn yim! ifa!
pmichaud yeah, we don't want to be ooa
tadzik btw, if there is no "one, main implementation", why is Rakudo `perl6`, not `rakudo`?
pmichaud tadzik: historical, mainly
I'm not opposed to switching the executable to be 'rakudo'... just need to figure out when to do it 21:13
I suspect as part of the next major distribution release series
jnthn suspects people will want to write /usr/bin/perl6...but that could be an alias rather than the cannonical name.
er, #!/...
masak it's fhr... :)
those raisins sure like to panic...
pmichaud rakudo comes from a time when it was legitimate to say "Perl 6 doesn't exist", so it was called "perl6" to say "OH YES IT DOES!" 21:14
masak now the only people saying Perl 6 doesn't doesn't exist are Python people with their heads up their language. 21:15
:P
tadzik or the angry Perl 5 people
pmichaud I sometimes like to kid: "How's that Python 3000 thingy working out for ya?" :-P
masak tadzik: to Perl 5 people, Perl 6 exists but is an irrelevant trek or academic exercise. 21:16
BinGOs it is cruel to mock the afflicted
masak just letting off occasional steam... :>
tylercurtis shouldn't have fun project ideas while doing homework. 21:17
pmichaud shouldn't have homework interrupting fun project ideas :-)
masak och aye! 21:19
masak 'night, #perl6 21:40
PerlJam tadzik: while on the plane earlier today, I was bored, so I wrote a little program that scrapes the github URLS from modules.perl.org and checks them for META.info and whether it has source-url. I don't know if you have something like that already or would like something like that or what. 22:13
tadzik: just shout if you want it though (or the results of running it :-)
PerlJam tadzik: actually ... gist.github.com/947465 (it's perl 5 though) 22:18
jnthn nqp: class Foo is Bar { } 22:33
p6eval nqp: OUTPUT«sh: ./nqp: not found␤»
jnthn aww