»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg camelia perl6: ... | irclog: irc.perl6.org | UTF-8 is our friend!
Set by sorear on 25 June 2013.
lue Could it be that rakudo's just not reading in the stuff correctly? NQP at least goes off without a hitch. 00:02
timotimo hm, or maybe it's my in-line if? 00:05
ww
jnthn sleep; 'night o/ 00:12
FROGGS_ gnight jnthn 00:13
timotimo good night, jnthn :) 00:14
lue The parrot::cflags that the configuration steps reads in has the ffi include. This is weird. 00:21
[Coke] someone ping me when moar-support merges back to nom. 00:37
lue FROGGS_: I got it! Somehow, Moar's CFLAGS settings are overriding Parrot's, even though the Moar stuff comes after the Parrot stuff (in the Makefile, that is) 00:40
lue Don't know how to fix that though :( 00:41
dalek rl6-roast-data: 483a968 | coke++ | / (3 files):
today (automated commit)
00:43
[Coke] there we go. 00:51
BenGoldberg Pre-Anouncement: The next backend VM for Rakudo will be released on 4/1/14, and will target SNUSP.
timotimo i think i'll update my diff gist and go to sleep 00:51
maybe someone figures out why it fails the way it does 00:52
gist.github.com/timo/af7bc1b6725d1734a6eb
lue Disambiguating them to P_CFLAGS and M_CFLAGS seems to have helped. I may go and generate a PR later to do that for all such variables then. 01:13
lue anyone know why S28 puts "S26" in parens but not any other S** ? 02:18
rn: say $*VM.WHAT; 02:20
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«(Hash)␤»
..niecza v24-109-g48a8de3: OUTPUT«(timeout)[auto-compiling setting]␤»
lue Also, could you enlighten as to why we put a hash in a $ variable? :) 02:21
clsn__ I don't know if this is a bug... can't demonstrate on camelia, it only happens in the repl. Do "my $*a" and then "say $*a" on two separate lines. You get a different answer from "my $*a; say $*a" on one line. 02:23
lue clsn__: looks like a REPL error to me. 02:25
clsn__ OK.
lue (specifically, doesn't keep dynamic variable between REPL lines for some reason)
raiph p56: say 1 03:47
camelia p5-to-p6 : OUTPUT«say(1)␤»
lue p56: print "thing\n" 03:52
camelia p5-to-p6 : OUTPUT«print('thing' ~ chr(10))␤»
brrt happy new year #perl6 08:28
FROGGS_ happy new year brrt 08:42
TimToady: what do you think about that? gist.github.com/FROGGS/fbb4455f544...n-short-md
masak brrt: Year.new( :happy ) 09:37
brrt :-) 09:37
hoelzro morning #perl6! 09:46
timotimo morning!
hoelzro с новым годом!
and happy new year!
masak с новым годом, hoelzro! 09:49
masak r: for 1..10 { say "hop!"; NEXT { say $_ } } 10:02
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«hop!␤1␤hop!␤2␤hop!␤3␤hop!␤4␤hop!␤5␤hop!␤6␤hop!␤7␤hop!␤8␤hop!␤9␤hop!␤10␤» 10:03
masak very well. 10:03
r: for 1..10 { say "hop!"; ENTER { say $_ } }
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«1␤hop!␤2␤hop!␤3␤hop!␤4␤hop!␤5␤hop!␤6␤hop!␤7␤hop!␤8␤hop!␤9␤hop!␤10␤hop!␤»
FROGGS masak / lue: what do you think about that? gist.github.com/FROGGS/fbb4455f544...n-short-md 11:35
masak looks 11:38
masak FROGGS: hm -- I got to the 'action' keyword, and my forehead got furrows. 11:39
FROGGS: feels like too little bang for the buck. the 'method' keyword (in a separate class) already does that.
in order not to just say "no" to a proposal, here's a counterproposal, not necessarily perfect, which doesn't introduce the 'action' keyword: 11:40
keep 'slang COBOL', that's nice. but have a way to associate an action class to this slang. maybe through an adverb somewhere.
oh! oh!
you have $~COBOL.module-loader in the example. 11:41
do the same thing with $~COBOL.actions
FROGGS: minor nit: $~COBOL.module-loader( COBOL::ModuleLoader );
FROGGS: that's the Perl 5 way of doing setter accessors.
FROGGS $~COBOL.actions and .grammar would already be there 11:42
masak the Perl 6 way is $~COBOL.module-loader = COBOL::ModuleLoader;
FROGGS because you don't want to have a 6k lines file when you could have two 3k lines files
true
masak FROGGS: if that's so, then all the more reason to declare .grammar and .actions in separate blocks. 11:42
FROGGS I just think that it would be nice to have one thing for a CSV or YAML parser 11:43
masak FROGGS: come to think of it, you probably shouldn't flatten together 'slang' and 'grammar' either.
masak FROGGS: I'd much rather see a slang *having* a grammar and actions, and an optional module loader. 11:43
FROGGS that is the idea 11:44
masak right. nice.
then please don't declare tokens and actions directly in the slang ;)
you think it's cute today :)
but it's mixing levels.
FROGGS so, no first class "slang" keyword :/
yeah
masak I'm not against the 'slang' keyword.
FROGGS what should it do then?
masak I'm against it directly doing the work of grammars and action classes.
it should just pull the parts together, like the tip of a pyramid. 11:45
FROGGS but how?
masak maybe 'slang COBOL { has $.grammar = ...; has $.actions = ...; has $.module-loader = ...; }'
so basically a class with a funny metaclass.
FROGGS hmmm
masak very Perl 6 :)
FROGGS I could just make a role (Slangy) that stubs attributes... wait, we don't have that feature :o) 11:46
or do we?
p: my role Slangy { has $.grammar = ...; } 11:47
camelia ( no output )
FROGGS p: my role Slangy { has $.grammar = ...; }; class COBOL does Slangy { }
camelia ( no output )
FROGGS p: my role Slangy { has $.grammar = ...; }; class COBOL does Slangy { }; my $cobol = COBOL.new
camelia rakudo-parrot a77214: OUTPUT«Stub code executed␤current instr.: 'throw' pc 410302 (src/gen/p-CORE.setting.pir:171896) (gen/parrot/CORE.setting:10737)␤called from Sub 'sink' pc 446395 (src/gen/p-CORE.setting.pir:185119) (gen/parrot/CORE.setting:12127)␤called from Sub 'MAIN' pc …»
FROGGS cool
p: my role Slangy { has $.grammar = ...; }; class COBOL does Slangy { }; my $cobol = COBOL.new( :grammar )
camelia ( no output )
FROGGS very nice 11:47
okay, so the slang keyword just applies the Slangy role, and registers the slang's name as $~name and the grammar+actions in %*LANG 11:50
masak FROGGS: though it could be argued that the above should blow up at composition-time.
as in, at the final '}' after the 'does Slangy'.
FROGGS true, but it is good enough for me
masak p: role R { method foo { ... } }; class C does R {}; BEGIN { say "alive" } 11:51
camelia rakudo-parrot a77214: OUTPUT«===SORRY!===␤Method 'foo' must be implemented by C because it is required by a role␤»
hoelzro .oO( does Slanky? )
masak FROGGS: yes, I'm just thinking from the perspective of rakudobugs ;)
masak submits one
FROGGS masak++ :o)
masak: I updated it, thank you very much! 12:01
then there is just the question if the entry point for all slangs should be token statementlist or something else
masak hm. not TOP? 12:12
FROGGS lemme think about it... 12:17
but I think there is no reason to not use TOP
moritz was a bit surprised that www.perl.com/pub/2014/01/the-year-i...ctive.html didn't mention the p6 advent calendar, until he noticed that the author was chromatic. Go figure. 12:51
masak moritz: fortunately, there are many p5ers who are very inclusive of Perl 6. 12:56
moritz masak: aye 12:57
(and I could very well imagine that the p6advent blog had more visitors than any of the p5 advent calendars) 12:58
psch hi #perl6 (because i forgot it every time before) 13:05
moritz: i've looked more at #76368 and your blog posts wrt exceptions, and i fail to see how the bug fits in there 13:07
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...l?id=76368
psch from what i understand, the exceptional state happens in the optimizer, which dies right through to the backend, e.g. die_s_c in the jvm
i'd assume the backend doesn't have to know exceptions like "wrong argument type for signature" 13:09
my questions then are "how wrong am i in my understanding" and "is there already a plan how this should work" 13:12
masak hi psch 13:24
psch hi masak 13:28
.oO( so im not lagging out )
13:29
timotimo wow, timsort is a really complex beast; i don't think i want to implement that today 13:31
masak anyone from .dk who has time for a brief privmsg? 13:39
diakopter nononononono 13:40
masak hides from whatever reaction diakopter is expressing :)
diakopter :D <- a smile/smiley 13:41
masak :)
moritz psch: well, even the optimizer should throw typed errors 13:45
arnsholt masak: Almost said I was probably close enough, until I saw it was you who was asking =) 13:46
masak :) 13:51
masak .oO( close enough... linguistically ) 13:51
psch moritz: okay, so for this case that would mean building the correct exception in report_inevitable_dispatch_failure in the optimizer and adapt the loops over %worrying and %deadly to handle exceptions as well? 13:55
i.e. i was wrong with thinking it goes back into the backend
moritz psch: yes, building the correct exception in report_inevitable_dispatch_failure sounds right 14:29
brrt \o moritz 14:32
not that is of any interest whatever, but i have a teacher also called m.lenz 14:33
moritz at least in .de, my name strikes a good balance: it's common enough that people know the name (in principle), so they know how to spell it, but it's not a group identifier either 14:43
masak what's the URL to that site that tracks/compares the size of CPAN-alikes in various languages? 14:48
Ulti did you guys realise putting 'use v6;' in this funtime box works? perltuts.com/try vti++ 15:15
since June too 15:16
timotimo whoa, it totally does 15:17
but it runs on parrot 4.3 :) 15:18
rakudo 2012.04.1
masak wow, that's cool. vti++ 15:20
masak read "This code is editable" as "This code is edible"
timotimo mhhhhh 15:21
Ulti vti has a repo for the POD of each tutorial too so I guess there is no reason Perl6 tutorials couldn't be added... is that the rakudo that comes with Debian/Ubuntu? 15:22
timotimo that's cool :)
i wanted to do something similar to that
but i've been waiting for rakudo-js for more or less obvious reasons 15:23
[Coke] I can't get any code to work on perltuts.com/try - Evaluator system error
Ulti there was something similar to that I spent a couple of days trying to get try.perl6.org to work locally ;__;
jnthn Hmm...I didn't get "use v6;" to work either... 15:24
masak I got a "Timeout". 15:25
Ulti I think we just broke perltuts.com! 15:25
at least mine is
psch '1;' gives me an evaluator system error
so, yes, probably broken
[Coke] jnthn: I figured I'd give moarvm a few days to shake things out before I even thought about fudging/opening tickets. please let me know if there's anything I can do to help highlight issues other than make sure I post the daily run as soon as it's available.
(which, java folks, would be sooner if the eval server didn't crap out on the daily runs.) 15:26
timotimo .o( maybe even compile MoarVM with emscripten instead of waiting for rakudo-js )
jnthn I don't think "has $.a = ...;" not blowing up at compile time is a rakudo bug. It's not like you can actually do anything about it at compile time. There's no way to specify the default for another attribute after you compose it in. 15:34
jnthn [Coke]: Daily runs are helpful right now. We can also try doing the "categorize the most common failure modes" thing at some point, but that needs error reporting to be fixed first... 15:37
diakopter rj: class A { has $.b = BEGIN $.b } 15:38
camelia rakudo-jvm a77214: OUTPUT«===SORRY!=== Error while compiling /tmp/KQu2EDWefB␤Virtual call $.b may not be used on partially constructed objects␤at /tmp/KQu2EDWefB:1␤------> class A { has $.b = BEGIN $.b⏏ }␤ expecting any of:␤ …»
jnthn Nice try :P
diakopter rj: class A { has $.b = BEGIN A }
camelia ( no output )
timotimo oh my :) 15:39
diakopter rj: class A { has $.b = BEGIN A.new } 15:40
camelia rakudo-jvm a77214: OUTPUT«===SORRY!===␤No such method 'new' for invocant of type 'A'␤»
diakopter rj: class A { has $.b = BEGIN say A.^methods }
camelia rakudo-jvm a77214: OUTPUT«===SORRY!===␤No such method 'dispatch:<.^>' for invocant of type 'A'␤»
jnthn diakopter: Default parent doesn't get applied until composition time... 15:41
diakopter rj: class A { has $.b = BEGIN COMPOSE say A.^methods }
camelia ( no output )
diakopter o_O 15:42
jnthn what the heck is COMPOSE?
diakopter something that silently noops? :)
timotimo :D 15:43
diakopter get it? silently noops? :)
jnthn :P 15:45
diakopter jnthn: I was just hoping there was some phaser for compose-time, since you mentioned it as a thing :)
timotimo i don't get it :( 15:46
jnthn Apparently, there is... :)
diakopter timotimo: I was just giggling about the redundancy of saying something that is no-op is also silent :D
timotimo oh
heh :)
diakopter we've got all kinds of -times 15:48
timotimo may you live in exciting -times
diakopter now what I really want is a TYPING { }
timotimo hahaha 15:49
diakopter or DESIGN { }
timotimo for each stage of the waterfall model
diakopter SCRUM { }
SCRUM { sleep while 1 } 15:50
jnthn WEBSCALE { use Bailador; ... }
diakopter SCRUM { sleep 999**999**999 } # don't actually get around to sleeping 15:51
timotimo m)
dalek kudo-star-daily: c52aa23 | coke++ | log/ (5 files):
today (automated commit)
15:56
diakopter I guess 9e99**9e99 is shorter 15:57
[Coke] ^^ several modules need to track the eval -> EVAL change. 15:58
timotimo where do all those nil thingies in xmt-writer come from?
and in svg?
[Coke] I think they've been there for a while. 15:59
you can do a bisect to see when they showed up, which will give you two rakudo commits to figure out what changed.
(assuming the module is static)
hoelzro has @.cells = map({ !generate-cell }, 1..81) doesn't work, does it? 16:00
timotimo yeah, that's not curried properly
jnthn hoelzro: Did you want self!generate-cell ?
hoelzro yes. 16:01
thanks jnthn !
timotimo is self!generate-cell a reference to the sub rather than a call without arguments?
jnthn No, it's a call to a private method
timotimo ah, it doesn't want the $_
in that case, yeah
is &self!generate-cell a reference to the method? 16:02
jnthn No, just like &self.foo isn't.
timotimo OK, you still need .^can and friends for that
or make a whatever-curried block 16:03
hoelzro there's a way to take a list of kv pairs and make it into a hash, merging duplicates into an array value, right? 16:12
ex. magic-method([:foo(1), :bar(2), :foo(3)]) # { :foo([1, 3]), :bar(2) } 16:13
timotimo yeah, it's .push
().hash.push( [ ... ] )
(i think) 16:14
hoelzro does that return the resulting hash, then?
timotimo let's try
r: say ().hash.push( [ :foo(1), :bar(2), :foo(3) ] )
camelia rakudo-jvm a77214: OUTPUT«Trailing item in Hash.push␤().hash␤»
..rakudo-parrot a77214: OUTPUT«Trailing item in Hash.push in block at /tmp/ZYc1li3ZYA:1␤␤().hash␤»
timotimo whoops
r: say ().hash.push( :foo(1), :bar(2), :foo(3) )
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«().hash␤»
hoelzro hmm 16:15
timotimo r: say ().hash.push( "foo", 1, "bar", 2, "foo", 3 )
hoelzro maybe I'm looking for classify
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«("foo" => [1, 3], "bar" => 2).hash␤»
timotimo no, you're not.
well ... classify also works
hoelzro I'm not?
well
I have a list of Cell objects
and I want to organize them based on their blocks
timotimo i think classify will give you "foo" => ["foo" => 1, "foo" => 3] ... 16:16
hoelzro so I *was* going to do %remaining.push(map({ $_.block-no => $_ }, @.cells)) 16:16
timotimo suggests .push:
moritz p: say (1..8).classify(* % 2).perl 16:17
camelia rakudo-parrot a77214: OUTPUT«("1" => [1, 3, 5, 7], "0" => [2, 4, 6, 8]).hash␤»
masak <3 .classify 16:19
timotimo p: say (1..8).classify( * <3 ).perl 16:20
camelia rakudo-parrot a77214: OUTPUT«("True" => [1, 2], "False" => [3, 4, 5, 6, 7, 8]).hash␤»
masak ;) 16:32
[Coke] daily moar run starting... 16:48
[Coke] it's complaining about a missing file. I assume we need another merge from nom back to moar-support? 16:48
(missing roast file)
... that was yesterday, Coke. nevermind. 16:49
today already looking much cleaner.
do we want to track timings on these daily runs? or is perlbench better for that? 16:51
japhb I would like to see timing info, because it seems not terribly hard to add, but gives a data point from a different space than perl6-bench covers -- many short-running processes, summed up. 16:52
FROGGS hmmm, does it make sense to know how fast we abort tests?
japhb Mind you, it's going to be mostly noise for r-m at first, but for each semi-mature platform, it should become useful info. 16:53
FROGGS: I think it's valuable to just get the infrastructure in place and debugged for recording and tracking it, in preparation for when it's giving more stable data. 16:55
FROGGS it would be interesting indeed for test files that pass exactly like parrot/jvm, because then you would see how good moarvm is in the various regions... 16:56
japhb Right.
FROGGS like the mass regex tests
FROGGS and if we see that parrot is way faster in some categories, we can compare details (and borrow ideas) 16:57
japhb I'm expecting to find some good spots and the occasional bad spot that we should look at -- sorta like r-j's performance issues with certain string operations.
FROGGS exactly 16:58
jnthn curry, beer & 17:01
FROGGS ohh, nice
japhb Mmmm, curry.
[Coke] beats me, I'm at diet soda, cupofsoup 17:06
timotimo now that we have a bunch of "provides" sections in some of our modules, rakudo could try to ask panda for packages providing a given module if you try to use something that's not installed
FROGGS timotimo: my idea was to put implement that as a module loader with a very low priority 17:07
for that we need to (heavily) test the eleven branches 17:08
timotimo sounds excellent :)
timotimo point me at the place where it would have to be implemented and what the API is? :P 17:08
FROGGS timotimo: and btw, since we have :auth, we could install directly from github if auth matches /^github:\w+$/ 17:09
github.com/rakudo/rakudo/blob/elev...llation.pm 17:10
you would add a CompUnitRepo::Remote::Installer or so
timotimo that sounds nice :)
FROGGS and you would just need to implement the candidates method
by "directly installing from github" I mean that we still use panda, but it does not need to be listed in the ecosystem 17:11
timotimo does auth<github> allow you to provide a tag with gpg signature or a full sha1? 17:11
(or would i be in charge of implementing that?) 17:12
FROGGS timotimo: we can pass additional adverbs to use statements 17:13
timotimo cool
FROGGS you already get them passed to the candidates method I think 17:14
so, just name them :o)
timotimo tadzik: bailador should really do NFA construction for routes, don't you think? :3 17:14
FROGGS would be cool if the stuff from github get its version information from the tags if no other version literal is available 17:15
timotimo from the META.info? 17:16
FROGGS yes 17:17
timotimo hm. will our backends garbage-collect regexes and grammars?
like, if i eval a hundred different grammars?
and only use each grammar once or twice?
FROGGS no idea
timotimo tries 17:18
without wanting to give away too much, that question is interesting for my next project :P
my next big project, i should say. with a real possibility it'll never see the light of day :\
japhb preflex: tell jnthn I forgot to answer your question about my blockers. Right now, for p6-pb, I'm blocked on union(num,int) (I believe I have the remaining non-deprecated parts of binary Protocol Buffers implemented now). For concurrent Net-IRC, I'm semi-blocked on async sockets. There's some work I could do, but it's making design hard to have that unknown.
preflex Consider it noted.
FROGGS timotimo: these are the best projects :o) 17:20
timotimo heh
FROGGS I have one of these in my pocket and I am going to work on it again this year.... need to resurrect SDL or make the bindings to SDL2 for that 17:21
japhb (greek yogurt parfait)++
timotimo at least parrot doesn't seem to free the memory back up 17:27
FROGGS yeah, it does it as late as possible
timotimo meh. 17:28
it seems like the same thing happens on the jvm, though
FROGGS must be jnthn++'s fault then :o) 17:29
timotimo haha
FROGGS he is the designer, he is to blame :P
tadzik timotimo: hhehee. Sure :) Did you see the Grammar Dispatcher experiment? 17:31
timotimo no
tadzik let me find it
timotimo did you string-compose a grammar? 17:32
hm, actually, it should be possible to do it programmatically. even if it's not implemented yet
tadzik ttjjss.wordpress.com/2010/11/21/per...r-parsing/
timotimo oh god that code is unreadable :o 17:33
timotimo (due to the font) 17:33
(and color) 17:34
tadzik hm, is it? :) 17:34
timotimo it's too bright and the letters seem kind of butchered
(at least on my machine) 17:35
tadzik ttjjss.wordpress.com/2010/11/27/gra...p-further/ followup, but not so interesting
seems quite readable, on the n900 :) 17:36
timotimo there's a dead link to your http-server-simple fork in that last post
tadzik aw 17:37
FROGGS jnthn: if you want to play with slangs, here is a short example (including a problem): gist.github.com/FROGGS/fbb4455f544a35cf265d 17:38
timotimo i wonder what's keeping the grammars alive 17:43
timotimo hm, maybe the code loaded into the jvm? 17:44
moritz the namespace entry in GLOBAL:: ? 17:45
timotimo i created the grammar with eval 17:46
i'm convinced eval shouldn't write to GLOBAL::
i can build 1017 small grammars before java errors out with PermGen space running out 17:47
moritz I'm convinced it should
timotimo oh?
to the outer GLOBAL::, too?
moritz r: BEGIN eval 'grammar A { token TOP { \d+ } } '; say A.parse('42')
camelia rakudo-parrot a77214: OUTPUT«「42」␤␤Saw 1 call to deprecated code during execution.␤================================================================================␤Sub eval (from GLOBAL) called at:␤ /tmp/Bb7VfjBxda, line 1␤Please use 'EVAL' instead.␤--------------…»
..rakudo-jvm a77214: OUTPUT«「42」␤␤Saw 1 call to deprecated code during execution.␤================================================================================␤Any statement_prefix:sym<BEGIN> (from unknown) called at:␤ gen/jvm/stage2/QRegex.nqp, line 724␤Please use…»
timotimo r: EVAL q{ grammar Test { rule TOP { abcdefg } } }; say GLOBAL::.keys()
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«Test␤»
timotimo :o
r: EVAL q{ anon grammar { rule TOP { abcdefg } } }; say GLOBAL::.keys() 17:48
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«␤»
timotimo that's what my code does, fwiw
moritz if you don't want it to escape, use "my grammar ... "
hm.
timotimo even with my grammar it grows until it runs out 17:49
jnthn: a clue where i'd hvae to look to fix this? 17:50
timotimo i even made sure the for loop wouldn't collect the grammars 17:52
timotimo it's kind of sucky that parrot doesn't free memory earlier; running it on a shared host for example is not nice if you hog all the ram 17:57
moritz has high hopes for moar 17:57
timotimo does, too 17:58
it's not here, though :(
FROGGS masak: I got even rid of the previously needed EXPORT sub, so it is pretty sweet now: gist.github.com/FROGGS/fbb4455f544a35cf265d 18:27
now I could fiddle with the slang keyword, though that feels a bit premature
TimToady how does one derive a slang from the current %*MAIN language? 18:29
FROGGS difficult 18:30
since it is an nqp grammar
TimToady that's what augment vs supersede was trying to get at
FROGGS can't we just do: slang Perl7 is Perl6 { ... } or some such? 18:31
moritz "we" "simply" have to fix inheriting from NQP classes 18:33
arnsholt For some value of "we" equal to "jnthn", presumably =) 18:39
TimToady well, at some point, when Perl 6 is fast, we need to finish the final bootstrap stage of hiding nqp completely, but we're not there yet 18:39
moritz arnsholt: I have started a branch that does the simple parts already :-) 18:40
diakopter TimToady: also, hiding the VM backends completely. ;) 18:41
japhb Abstractions leak. Also, long game is long.
[Coke] coming later today:
6295:"total", 18027, 10456, 327, 843, 28951, 28494
TimToady I don't really believe in "write once, run anywhere"
diakopter japhb: I do not leak, you leak.
moritz wiki leaks 18:42
TimToady I think VMs should stay visible in a declarative way
japhb wonders what exactly he abstracts away
diakopter (quote from a Disney movie)
TimToady use Win32;
[Coke] r: say 18027-17219
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«808␤»
diakopter much karma to who can name the movie
japhb mightily resists googling it. 18:43
[Coke]: Yay!
[Coke] guesses BatB
japhb What's the proper divisor? 28951?
diakopter hint: the character's name was Max
moritz oh, Max & Moritz 18:44
TimToady not be confused with Maximillian
from the worst Disney movie evar
diakopter well yes, that was its nickname by the human.
japhb (The Black Hole)++
[Coke] wow, that's old school. I think I have it on dvd.
still plenty of 'eval's in roast. 18:45
diakopter anyway, the answer was Flight of the Navigator 18:47
rj: eval 1 18:48
camelia rakudo-jvm a77214: OUTPUT«===SORRY!===␤CHECK FAILED:␤Calling 'eval' will never work with argument types (int) (line 1)␤ Expected any of:␤ :(Str $code, :lang(:$lang) = { ... }, PseudoStash :context(:$context))␤»
diakopter you're a pseudostash
diakopter "none of these signatures match" 18:51
diakopter should be "none of these signatures matches" 18:51
moritz erm, nope
zero implies plural 18:52
erm, wait
diakopter no, "none" is short for "not one"
TimToady diakopter: you're confusing one with any
*none
kurahaupo_mobile depends on dialect, unfortunately
timotimo TimToady: are you sure our beloved perl6 will be fast enough for nqp to disappear? o_O
TimToady timotimo: I'd like to know what prevents it from being just as fast to run (given sufficient analysis at compile time) 18:53
timotimo that'd be a lot of analysis :P
moritz for one, it'll (nearly) always have another layer of containerization 18:54
japhb timotimo: I'd love to know that too. At least for the native types case.
Er, that was to TimToady's comment 18:55
diakopter ok, the internets tell me 'none' can mean 'not any' in addition to 'not one'. bleh. 18:56
FROGGS[mobile] TimToady: my proposal does not make augmenting $~MAIN impossible or obsolete btw 18:57
moritz second, we have yet to find a lazy list model that fits all of Perl 6's constraints and isn't dog slow 18:58
timotimo yes :\ 18:58
timotimo if we only have one take in each "iteration" of a gather, we can do a sick transformation into a simple MapIter ... 18:59
[Coke] feather.perl6.nl/~coke/moar.out updated with today's run (because it'll take forever for the rest of the runs to finish) 19:03
note that several tests now say "killed", which I didn't notice earlier. (I think killing them originally segfaulted)
diakopter heh, 137 segfaults 19:04
[Coke] heh, was just counting that. :)
several of those were posted as one liners to #moarvm yesterday
japhb raydiak: ObPRayReleaseCheck 19:07
[Coke] most failures in S05.
diakopter: 174 instances of CORE.setting.moarvm:print_exception
FROGGS[mobile] --ll-exception would show the real error 19:08
diakopter so 137/771 files segfaulted
FROGGS[mobile] I really like the result
diakopter the birthing pangs, they are coma-inducing 19:10
[Coke] r: say 137/771
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«0.177691␤»
[Coke] diakopter: double free in there, too. 19:12
diakopter overly liberal 19:13
lue hello world! o/ 19:50
raiph \o lue 19:53
lue FROGGS: I'm not sure I like thinking of my grammar and actions as mere attributes to a class, but that's something I can deal with :) 19:55
raiph "The Lost Art of C Structure Packing" news.ycombinator.com/item?id=6995568 19:56
FROGGS lue: I share that feeling, so please come up with something better :o)
(that is still sane)
lue About that "Perl 6 grammar in NQP" issue: I imagine at some point we'd have to rewrite the grammar as Perl 6 (or remind ourselves the NQP is a subset of P6 and could quite easily be dealt with as P6 because of it) 19:57
FROGGS problem is that you have different classes... it is a NQPCursor against a Cursor class for example
raiph I'm curious about the degree to which nqp, reprs, and zavolaj allow the sort of C Structure Packing art discussed in the above article and its HN post. 19:58
FROGGS raiph: I think we want something like shown in the very last comment here gist.github.com/FROGGS/6464777 20:01
arnsholt raiph: Zavolaj allows it, in the sense that it lays out structs as C would
It's pretty much orthogonal
arnsholt It might be interesting to get P6opaque to lay out its memory to minimise wastage though 20:03
lue FROGGS: well, I personally think "slang" (the general idea of it, anyway) is closer to "module" and "package" than it is "class".
Hang on, wouldn't a slang need a Foo::World too? Or am I just being silly there? :) 20:04
FROGGS lue: depends 20:05
but yeah, I think it would not be very unlikely to have a World too :o) 20:06
lue Yeah, I'm lead to think that any setup that forces a particular number of classes/other things would eventually hurt someone. Hrm.... 20:07
(which means no sort of slang Foo grammars G actions A module-loaders ML; ) 20:08
lue I keep on thinking there should be a "speak" keyword for slangs, à la "make" keyword, but I have no clue what that would actually *do* :D 20:20
TimToady you don't 'use English'? 20:21
huf there's English in perl6 too? 20:22
TimToady no, but there's English in English :)
huf oh good.
lue TimToady: no, I meant some sort of slang Foo { #`(stuff that makes up that slang) ; speak this-command-brings-it-all-together } 20:22
lue I keep on thinking that kind of "speak" command would be helpful, I just have no clue what it would do, exactly, or why it'd be necessary :) 20:24
TimToady in that case bikeshedding the word seems a bit...premature... 20:25
lue My best description for the idea is "kind of like 'make', except it assembles a slang instead of an AST" 20:27
mcglk Apparently, I can only type in 60 characters or so at a time. 20:28
Weird.
FROGGS mcglk: just increase your key repeat rate :o) 20:29
hoelzro how do you get Perl 6 to interpolate members of a range? 20:31
ex. I have 0,9..81
I want multiples of 9 20:32
TimToady add another .
hoelzro obviously map({ $_ * 9 }, 0 .. 8) would work
diakopter .
hoelzro ah, thanks TimToady, diakopter 20:33
TimToady p: say 0,9...81
diakopter pugs: say 0,9...81
TimToady hmm
diakopter camelia: alive?
camelia rakudo-parrot a77214: OUTPUT«0 9 18 27 36 45 54 63 72 81␤»
pugs: OUTPUT«*** ␤ Unexpected "81"␤ expecting operator, ":", "," or term postfix␤ at /tmp/ZPlzbVtHhx line 1, column 11␤»
diakopter p: say 0,9... 20:35
camelia rakudo-parrot a77214: OUTPUT«===SORRY!=== Error while compiling /tmp/g4wTf2LDHu␤Confused␤at /tmp/g4wTf2LDHu:1␤------> say 0,9...⏏<EOL>␤ expecting any of:␤ postfix␤ dotty method or postfix␤»
[Coke] anyone talks to au, we could use some pugs maintenance, btw.
diakopter au has another pit or few
hoelzro is there a way to specify the RNG used by Array.pick? 20:39
[Coke] guesses srand, if the backends implement that. 20:40
hoelzro I'm guessing I could tweek it with srand
but I was hoping there'd be a :rng option to pick/roll 20:41
TimToady what is the proper scope of a rng? 20:42
hoelzro now that I'm not sure about =)
lue r: srand(42); say "alive!" 20:43
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«alive!␤»
lue r: my sub srand($int) { say $int }; srand(42); say "alive!"
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«42␤alive!␤»
TimToady if one says "lexical", then one immediately has the problem that Array.pick is not compiled in your lexical scope :) 20:45
hoelzro I would assume I would create some Random-doing object $rng, and I could say @seq.pick(:$rng) 20:46
and $rng.next (or whatever) would be called
[Coke] has promised to give a 30m perl 6 presentation at the next (re-inaugural) albany.pm meeting!
lue TimToady: almost as if you need something that can be made in a lexical fashion, but functions quite exotically. Hmmmmmmm 20:46
[Coke] now to find some presentation I can borrow! :)
TimToady lue: well, you're talking about lift semantics, which are sufficiently problematic that we removed "lift" from the language 20:47
instead we'll figure out some macroish variant that can integrate the current lexical scope's definitions for various things
but it's hard to justify turning .pick into a macro
lue TimToady: I'd prefer to see a "replace RNG" solution more general than specific functions :) 20:48
hoelzro why can't rng just be passed in as an object?
TimToady much easier to justify thinking of .EVAL as a macro, since it depends on the current language, as influences the current language's semantics
s/as/and/
lue use RNG &myfunc; or something. 20:49
hoelzro hmm
TimToady lue: but what is the scope of that?
hoelzro is there a way to maintain a Set of objects? I tried using hash keys, but they get stringified
I guess I could do %h{$obj} = $obj 20:50
lue hoelzro: have you tried Set ? :P
skids notes case of concurrent use (and hence alteration) of RNG
hoelzro lue: no, I didn't see it on doc.perl6.org =/
TimToady p: say set([<a b c>], [<d e f>]).perl 20:51
camelia rakudo-parrot a77214: OUTPUT«set(["a", "b", "c"],["d", "e", "f"])␤»
lue TimToady: Somehow that RNG scope question makes me think of slang scoping.
TimToady p: say set([<a b c>], [<d e f>]).list[0].WHAT
camelia rakudo-parrot a77214: OUTPUT«(Array)␤»
TimToady looks like an object to mee 20:52
lue: yes, was thinking a similar thing, but languages must be used in lexical scopes; you aren't allowed to change someone else's language out from under them 20:53
lue Oh! FROGGS: 'slang' can't be just syntactic sugar for 'class ... does Slangy', because 'augment slang' and 'supersede slang' should still be usable.
TimToady the *use* of slangs must be lexical
lue TimToady: oh, that would mean that 'augment/supersede slang' is strictly disallowed.
TimToady that would be a lexical declaration 20:54
was intended as lexical
lue does not support the current redefinition of augment/supersede just for slangs
FROGGS what about `augment $~MAIN.grammar`?
or just `augment Perl6::Grammar` 20:55
(once we can do that)
lue slang Foo <inherits> MAIN { ... }; $~MAIN = $~Foo; would be better than how it's currently spec'd, which is augment slang MAIN { ... }
FROGGS errm, I am talking rubbish 20:56
it actually would be `augment grammar Perl6::Grammar`
lue FROGGS: I feel like we'd need a keyword that combines temp and augment. "derivative"? 20:57
TimToady it seems meaningless to untie it from the current language braid
perigrin that'll be easy to misread as "argument grammer Perl6::Grammer" which just means "you're reading backlog in #perl6 again"
lue TimToady: I'd much rather see new keywords usable by lots of things than a change in the meanings of 'augment' and 'supersede' for just slangs. 20:59
TimToady I'm fine with not using 'augment'
FROGGS well... if we want to say that we want to change the current language (lexically?), and the slang keyword is meant to "install" a language, then `augment slang Perl6::Grammar` makes sense again
lue (because I bet some class users would like a temp+augment keyword too.) 21:00
FROGGS would be still weird that slang would only mean a grammar here and a collection in my proposal
TimToady but we need two things: 1) a way to mixin to a current braid containing anonymous languages, and 2) a way to import that new language into the braid
COBOL only needs the second
but 'augment' semantics need both 21:01
lue I always thought that adding new braids would entail a $NEWBRAID.parse($<text>) in some action method of an existing braid. 21:03
lue maybe meant s:g/braid(s?)/item$0 in the braid/ 21:05
skids r: role R { has $!f = 41 }; role G does R { method g { $!f.say }}; class C does G { }; C.new.g; 21:19
camelia rakudo-jvm a77214: OUTPUT«===SORRY!=== Error while compiling /tmp/gWmwvS1Y7M␤Attribute $!f not declared in role G␤at /tmp/gWmwvS1Y7M:1␤------> }; role G does R { method g { $!f.say }}⏏; class C does G { }; C.new.g;␤ expecting any of:…»
..rakudo-parrot a77214: OUTPUT«===SORRY!=== Error while compiling /tmp/iYtTkwzuia␤Attribute $!f not declared in role G␤at /tmp/iYtTkwzuia:1␤------> }; role G does R { method g { $!f.say }}⏏; class C does G { }; C.new.g;␤ expecting any …»
masak FROGGS: sorry, haven't backlogged, and you seem to be having fun talking about slangs. 21:21
FROGGS: so maybe this has come up already.
FROGGS :o) 21:22
masak FROGGS: but it seems to me one of the importantest things about traits is that variables in the outer language are (as per the discretion of the slang author) accessible in the inner language.
i.e. the slang needs to be able to somehow "inherit" the pads of the outer language. 21:23
this follows easily if you consider qq strings a slang, for example.
FROGGS that is why v5 uses the same World#
masak ah, World. yes.
that's probably what I'm thinking of.
so slang should be grammar+actions+world.
and the world can Simply Be The Same as the outer's. 21:24
FROGGS it is only a porblem when the inner language has other sigils
masak then that's the inner's problem :P
FROGGS true :o)
like you can access much from v5's blocks but not everything..., well, maybe indirectly everything 21:25
masak it's hard but not impossible to find out whether you're a Real Perl 5, or just a Perl 5 in a vat.
a Perl 5 brain in a Perl 6 vat, that is. 21:26
lue
.oO(Geez, slangs making big changes to Perl 6 seem like they'd be a lot of work to write, what with where the discussion have been going. ☺)
21:29
rjbs Every time someone mentions slangs, I think of slrn. 21:30
dagurval r: say (gather { my %a = ^2; my %b = 'a', 'b'; take %a; take %b; take { a => 'b' } }).perl 21:32
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«("0" => 1, "a" => "b", {"a" => "b"}).list␤»
dagurval how can I get take %a and %b as hash, take flattens them ._. 21:33
n/m, I can wrap them in { } ofcourse
FROGGS r: say (gather { my %a = ^2; my %b = 'a', 'b'; take $%a; take $%b; take { a => 'b' } }).perl
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«({"0" => 1}, {"a" => "b"}, {"a" => "b"}).list␤»
dagurval even better :)
thanks
FROGGS yw 21:34
raydiak r: role R { trusts G; has $!f = 41 }; role G does R { method g { self!R::f().say }}; class C does G { }; C.new.g;
camelia rakudo-jvm a77214: OUTPUT«===SORRY!=== Error while compiling /tmp/NBLnBgxQSm␤Cannot call private method 'f' on package R because it does not trust G␤at /tmp/NBLnBgxQSm:1␤------> ; role G does R { method g { self!R::f()⏏.say }}; class C does G…»
..rakudo-parrot a77214: OUTPUT«===SORRY!=== Error while compiling /tmp/shxjehk1Yp␤Cannot call private method 'f' on package R because it does not trust G␤at /tmp/shxjehk1Yp:1␤------> ; role G does R { method g { self!R::f()⏏.say }}; class C doe…»
masak rjbs: why? I have no experience with that news client, so I fail to see the connection. :) 21:35
dagurval are there any #perl6 happenings at FOSDEM, beside lectures at the devroom?
hoelzro yes
oops, sorry
rjbs masak: slrn is the S-Lang newsreader, using S-Lang for internal scripting
dagurval rp: my @a := gather { take 1, take 2 }; say @a; 21:50
camelia rakudo-parrot a77214: OUTPUT«2 1 2␤»
dagurval how did that final 2 get into the output?
segomos_ you get a list like 2, (1, 2) 21:51
masak rjbs: oh! 21:55
segomos_ dagurval: i'd imagine you get take(1,take(2)) which results in 2, (1, 2) 22:03
since take seems to return the value taken
FROGGS rp: my @a := gather { take(1), take(2) }; say @a;
camelia rakudo-parrot a77214: OUTPUT«1 2␤»
FROGGS segomos_++ 22:04
segomos_ r: say gather { say take 2 };
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«2␤2␤»
segomos_ r: my @a := gather { take 1; take 2; }; say @a;
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«1 2␤»
masak TimToady: link.springer.com/chapter/10.1007%2...15975-4_33 sounds very much like STD's approach to Cursors.
segomos_ p6 has all kinds of cool shit 22:05
dagurval segomos_: because the inner take is called first. Nice, didn't think of that.
segomos_ stuff..has all kinds of cool stuff
FROGGS *g* 22:06
masak dagurval: that simply follows from the fact that routine invocation is strict, so the arguments have to be evaluated before the call to the outer &take. 22:07
but yes, it's a bit funky to wrap one's head around, as execution basically "pauses" between evaluating the inner &take and the outer &take :) 22:08
dagurval masak: it's simple when you get it :) 22:09
masak: are you going to FOSDEM this year? 22:11
rp: my @a := gather for ^3 { next; take $_; }; say @a 22:14
camelia rakudo-parrot a77214: OUTPUT«␤»
skids r: role A { method pub { self!priv }; method !priv () { "OHAI".say } }; class C does A { }; C.new.pub;
camelia rakudo-jvm a77214: OUTPUT«Nominal type check failed for parameter 'null'␤␤»
..rakudo-parrot a77214: OUTPUT«Nominal type check failed for parameter ''; expected $?CLASS but got C instead␤ in method priv at /tmp/eL6iqOxDYJ:1␤ in method pub at /tmp/eL6iqOxDYJ:1␤ in block at /tmp/eL6iqOxDYJ:1␤␤»
dagurval next not allowed in gather for?
skids r: role A { method pub { self!priv }; method !priv ($self:) { "OHAI".say } }; class C does A { }; C.new.pub;
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«OHAI␤»
masak dagurval: unfortunately not :/ 22:18
(re FOSDEM) 22:19
masak dagurval: 'next' is allowed, but you nexted through the whole loop :P 22:19
unconditional 'next' is pretty weird.
skids: that... looks like a bug to me. at first blush.
skids: looks like 'self' isn't parameterized correctly in private methods in roles. 22:20
dagurval yes I did ._.
masak r: class A { method pub { self!priv }; method priv { say "OH HAI" } }; A.new.pub
camelia rakudo-jvm a77214: OUTPUT«No such private method '!priv' for invocant of type 'A'␤␤»
..rakudo-parrot a77214: OUTPUT«No such private method '!priv' for invocant of type 'A'␤ in method pub at /tmp/KEMyxqdt4o:1␤ in block at /tmp/KEMyxqdt4o:1␤␤»
masak r: class A { method pub { self!priv }; method !priv { say "OH HAI" } }; A.new.pub
camelia rakudo-parrot a77214, rakudo-jvm a77214: OUTPUT«OH HAI␤»
lue masak: wait, how is that a bug? Seems reasonable to me. 22:21
masak skids: do you know if that's already submitted?
lue: note, it works in my last eval.
lue: but it doesn't work in skid's first.
lue: the only difference is that in skid's case, pub and !priv are in a role.
skids masak: I do not. I was removing old workarounds from a year + ago and found it. 22:22
masak submits rakudobug
skids++
skids: I've found some of my best rakudobugs by making refactors which "should just work" :P
lue masak: oh, I thought you were discussing skids' last eval. nevermind then :) [somehow I also missed the $self: in that eval] 22:23
masak the second has a $self: 22:24
the first doesn't.
masak the fact that those two differ in their result is also suspect. 22:24
skids At least the $self is a better workaround now than using a public method was.
masak aye. 22:25
(better workarounds)++
rt.perl.org/Ticket/Display.html?id=120919 22:28
skids
.oO(I don't have nearly the great debugging instincts as most here, but something about Perl6 brings them out. Jamming that $self in there just seemed like the right move.)
22:32
skids kudos to the vastly improved error messages to at least get me in the right ballpark. 22:33
masak :) 22:34
skids anyway, time to brave the cold and snow. 22:37
masak speaking only for myself, debugging instincts are acquired. every debugging session is a kind of repeated bisection.
learning to *do* the bisection is fairly simple. learning *where* to do the bisection is where experience comes in.
masak .oO( either your buggy component is indivisible, or you're not done yet ) 22:39
japhb
.oO( Hitting it with a hammer: $1. Knowing *where* to hit it: $9,999. )
22:41
kurahaupo ˙°O( Knowing *when* to hit it: another $9,999 ) 22:42
raydiak japhb: after you asked, I decided to try to kick it out the door today, so probably in the next 5 or 10 hours 22:46
perigrin w 22 22:55
:/
masak perigrin: come back! we're so much nicer than w 22! :P 23:02
perigrin I dunno ... 22 is #catalyst 23:03
they're pretty nice.
masak oh, indeed. 23:07
japhb raydiak: \o/ 23:11
masak 'night, #perl6 23:13
japhb 'night, masak