»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, std:, or /msg camelia p6: ... | irclog: irc.perl6.org | UTF-8 is our friend!
Set by moritz on 25 December 2014.
timotimo i once started a bit of work that'd cut down the size of the call graph, but it gave wrong results and that kind of makes the profile itself totally useless 00:00
i have a patch that turns off the code graph completely, which makes it much faster and the result file much much smaller, but it's not as interesting as all the timing info also disappears
so it only gives you allocation info
raydiak yeah I remember you mentioning that around the time you suggested I look into it too 00:01
timotimo oh
raydiak stuff just slipping and falling off my plate all over the place :)
timotimo: have you done anything shiny lately? work on sdl, games, whatnot? 00:03
timotimo no 00:04
i've had very, very little perl6 time for about a month 00:05
raydiak yeah it's been that time of year...I don't personally know anyone who has accomplished much of anything in the past month that I'm aware of 00:06
timotimo glad to hear it :P 00:07
raydiak glad to hear I'm a friendless recluse? ;) j/k 00:08
timotimo oh
well, that's another possible interpretation of that sentence
raydiak heh nah, I'm just bein silly in this case 00:09
adu hi all 00:13
raydiak heya adu 00:14
adu hey :)
raydiak how goes it?
adu so I think I fixed the typedefs once and for all, and I added a bit to the readme that typedefs are important 00:15
raydiak oh, I see...that makes it nice and clear 00:16
adu raydiak: are you a contributor to Inline::C? 00:22
raydiak nice, cut my failures in that zmq test from 146 to 85 00:23
adu: I don't think I've done anything to it yet, no 00:24
timotimo "that zmq test"? 00:25
adu raydiak: are you not diakopter? 00:26
raydiak adu: nope
timotimo: gist.github.com/raydiak/e268376b2cb6280ad7d3
adu ah n/m then
timotimo oh, i see 00:27
raydiak timotimo: it's just a specially-processed version of zmq.h that I used to find C::Parser failures
raydiak but it hints at what I would like to use C::Parser for: auto-genning bindings 00:27
timotimo sounds good
raydiak it always kinda blew me away that using pretty much any FFI I've tried so far requires you to get intimate with the C bits...I want to just include the darn thing and use it, like I can from C 00:29
japhb adu: diakopter is off doing a startup. I expect he probably won't be around for quite some time. 00:30
adu "doing a startup" sounds vauge and secretive
japhb adu: I know a (very) few things, but I have no idea how much I'm allowed to say, so I'm keeping it to that. :-) 00:31
adu raydiak: ah, so from AST => Str?
japhb: my philosophy is that you need money to give away free software 00:32
raydiak adu: yeah, I think that describes what I'm talking about...your module will give me the ast, and I'll use it to write out a .pm6 binding for the given header
adu raydiak: or Str => CAST which can be analysed to QAST? 00:33
raydiak: well, I've been mulling over CAST for a while now, and I can't decide to have 1 or 2 00:34
raydiak nah not trying to build it out of qast, writing strings out to a module file will be fine for my purposes
adu: how so?
adu if there are 2 ASTs, then one will correspond to syntax, and one to semantics, if there is 1 AST, then it would be somewhere in between the two, or there would have to be a lot of processing to convert it to the semantics AST 00:35
raydiak: well, for example Arrays, in C, their types are represented as a sequence of DeclarationSpecifier's (which includes type) and a ArrayDeclarator (which includes name and size), but what most people want is just the name by itself, or the combination of (type and size) 00:36
for the syntactic AST, we would have the above, but for the semantic AST we would have (name, complete type), where the complete type for an array would have both the DeclarationSpecifiers and the array size in it 00:37
raydiak ah, I'm getting it... 00:38
adu so any help with the AST would be most appreciated
raydiak why wouldn't you want to provide all information in each node of just one ast? is the tree structure itself different between the two? 00:39
s/ast/cast/
adu so have a coarser granularity with one object that has name, types, size?
raydiak yeah, if I'm thinking about an array, whether I want its name or its type, either way I'm not thinking about whether that's a semantic or syntactic issue, and would generally expect there to just be a method/attribute for what I'm looking for 00:42
why does that enforce coarser granularity? I'm still not sure why its an either/or choice 00:43
adu becuase it requires that all types are complete 00:44
japhb adu: I'm not sure what your point was about 'japhb: my philosophy is that you need money to give away free software'. Can you explain what relation that had to the startup conversation?
adu japhb: hmm, I might have missed a few steps in my logic, or I might be biased, I'm not sure
raydiak adu: even if the type is incomplete, couldn't you just not populate those properties of the cast, or clear a .type.is-complete flag, or something like that? 00:47
adu japhb: people do startups for many reasons, one of which is to make money. Money takes care of some of the "Maslow's hierarchy of needs" that is required by anyone who works on free software. 00:48
raydiak adu: you probably have far more thought into this than I, so bear with me if I'm catching on slowly :) 00:48
japhb adu: OIC. I don't think that's why diakopter is working on this particular one. Though I'm sure he wants/expects it to make money. :-) 00:49
adu raydiak: there are only 2 parts to a type: left and right, the left type is composed of things like static const char, and the right type is composed of things like [3] or (double, double)
japhb wonders how many #perl6'ers would work on Perl 6 implementation if they could get a well-compensated job doing that, and how many prefer it to be a hobby 00:50
work on it full-time, I mean
raydiak semi-related to the other convo thread, has anyone here had much experience getting work on any of those freelancing sites? if so, did it work out well for you? any tips? I need to make money too :P
japhb As a freelancer years ago, I found myself to be singularly awful at drumming up business, so no, unfortunately .... 00:51
raydiak me too...should see if I can find a freelancing salesperson or something heh 00:52
adu raydiak: I was thinking of representing the "right types" as functions from Type -> Type, and to make them complete you just call it with the "left type" as an argument 00:53
raydiak adu: any sane person will tell you not to take my architecture advice, but if I follow correctly, I guess I'd make Type its own little class with suitable properties and methods for handling all this variety 00:58
then use that in your casts where you need to talk about a type 00:59
adu CASTs? 01:00
raydiak thought that was what you're calling the result of your action methods
adu es
yes
raydiak oh, right, cast as in...type...no, CAST is what I meant :) 01:01
adu its just that "casts" means something else in C
:)
raydiak is extra-lazy w/the shift key some days
adu my CAST classes are extra lazy 01:04
they're composed entirely of "has"s
raydiak I like those classes...they feel so beautiful and declarative before you muck it up with all that procedural junk :) 01:06
adu lol
adu raydiak: but how do you return a Type and a Name at the same time? 01:07
adu raydiak: oooo and I added a method to cdump 01:10
raydiak adu: I'm thinking you return a single instance of something along the lines of class CAST::Type { has $.name; has @.decls; has ... }; 01:15
adu ok, that's wierd, but doable 01:16
because $type.name should be the name of the typedef, not the variable
raydiak right
that whole class was just for the cast's .type property 01:17
adu raydiak: but the information becomes available as the name of the variable first, how do I return that from the same action method that the variables "right" type comes from?
actually, there should be a Var class 01:18
raydiak adu: build up the types as you parse, and modify them as you go maybe? e.g. keep an internal %!types as each parse progresses 01:23
adu ok, so how do I parse this: "const char *(*stringer)[2](const char *)[256];" 01:24
raydiak hard to say, the C part of my brain doesn't even know how to parse that :) 01:25
adu according to cdecl.org, it means "declare stringer as pointer to array 2 of function (pointer to const char) returning array 256 of pointer to const char"
raydiak oh that's a neat tool, especially for people like me who are just faking it 01:27
adu lol
yeah, I must admit I've used it
raydiak hm lemme see if I can break that down into a tree
adu but almost all C code uses either function or arrays, but the C spec allows both in the same declaration 01:28
raydiak tricky 01:29
adu yeah
hence my deliberations...
adu what's the difference between str and Str? 01:43
raydiak still looking, but vague thoughts: var, pointer, array, and function here are nouns...I am thinking of types more like adjectives
str is native, probably like a char * or something underneath 01:44
adu adjectives? I know the English meaning, but not the Perl6 meaning of that
raydiak just using it in the english sense
that's why I say "vague thoughts", cuz they aren't tied back to the concreteness of your example yet 01:45
adu well, in my mind there are 6 kinds of types in C: direct, array, function, pointer, struct/union, enum 01:46
direct types are completely specified by a list of DeclarationSpecifiers
things like "unsigned int" 01:47
adu raydiak: well, to translate cdecl.org's response back into Perl6, it would be: PointerType[ArrayType[2, FunctionType[PointerType[Direct[Const, Char]] --> Array[256, PointerType[Direct[Const, Char]]]]]] 01:50
raydiak looks like pretty much what I got out of it...I'm just shuffling it around different ways as a tree, coming up with several half-answers I don't like 01:53
adu comming up with any 90% answers? 01:59
raydiak hm, ya know, most of those 6 types you mentioned are just arrangements of direct types 02:00
adu arrangements? 02:00
raydiak with some extra properties, like names or array lengths
raydiak eh, I just mean structs and enums and stuff feel more like "compound" entities, built out of direct types 02:01
adu yes
adu I could see struct and enum being like, a CAST::TypeOp or something 02:03
raydiak so I would start by defining a class for direct types, then the other ones making use of the direct one, then I would stop and look at what I made and see if it gave me ideas or at least better perspective, tbh :) 02:05
adu ok
what should I call it? OpType or TypeOp?
or GType?
or Generic? 02:06
or GenType? 02:08
raydiak I don't think we have any real solid Perl conventions to follow here other than CamelCase, so your C knowledge probably answers this question better than I
raydiak runs outside for a few minutes to hide from scary naming questions :)
adu well, I think QAST is a good inspiration for the goal I should strive for 02:09
most other AST frameworks would have one class for every kind of expression, but QAST only has one class: QAST::Op
raydiak back 02:19
adu also, there are 2 different kinds of blocks 02:20
raydiak hm 02:21
adu one is the standard C block {a; b; c;}, (which evaluate to void), and then the other is GNU expression blocks: ({a; b; c;}), (which evaluate to c)
should both of these be represented with CAST::Stmts? or should they be different classes?
also, what's the difference between QAST::Stmts and QAST::Block? 02:23
raydiak I don't really have any experience with QAST, but I would guess that Block has its own lexpad or something like that 02:24
or, well, lexical scope...I don't really know what 'lexpad' means specifically, just something I've seen referred to here
raydiak honestly QAST (or AST in any language) isn't smoething I have firsthand experince with 02:25
adu neither do I
what does "pad" stand for?
raydiak well, so answering these things has to do with how you intend to use them...what will make it easier to use them that way? 02:26
adu I'm guessing "lex" stands for lexical
raydiak yeah I assumed it was an analogy to a notepad or something
adu well, Scheme has something called "Environments" 02:27
which are a linked list of hash tables
when you enter into a lexical scope, you push a new hash-table onto the list, and when you leave a lexical scope, you pop a hash-table off the list 02:28
I would imagine it's something like that
raydiak it might help make some of the QAST choices easier to understand if you read about some of the behaviors of the various code-like objects as seen from p6-land 02:29
the stuff in the type graph here: doc.perl6.org/type/Callable.html
adu WhateverCode?
raydiak comes from using a * 02:30
m: say (* + 1).WHAT
camelia rakudo-moar c5dcdf: OUTPUT«(WhateverCode)␤»
adu interesting
raydiak lets you skip {} for simple cases, among other things 02:31
m: (^10).grep(* %% 2).say
camelia rakudo-moar c5dcdf: OUTPUT«0 2 4 6 8␤»
raydiak m: (^10).grep({ $_ %% 2 }).say # as opposed to
camelia rakudo-moar c5dcdf: OUTPUT«0 2 4 6 8␤»
adu my brain just exploded 02:32
raydiak m: (* + *)(1,2).say # also can be used for multiple args
camelia rakudo-moar c5dcdf: OUTPUT«3␤»
raydiak and yes, '* * *' is valid code :) 02:33
adu does that work with map too?
raydiak yeah anything that takes a block
adu m: say (map (* + 1), @(2, 3, 4)).perl
camelia rakudo-moar c5dcdf: OUTPUT«(3, 4, 5).list␤»
raydiak an expression with a * basically becomes a closure automagically
adu well, I think I have enough inspiration to totally rewrite CAST 02:38
raydiak nice...do drop by during the busier times if you want some way, WAY more educated opinions :) a large portion of the most knowledgable and active 6ers are in europe 02:40
adu that means the "busy times" are 4am 02:42
raydiak seems populated from about midnight to noon 02:44
my time, PST, that is
adu I'm in EST, so maybe 4am to 4pm for me 02:50
old_camels_frien what is p6 analog for perl -ne 'print if 5..10' file.txt ? 02:58
colomon m: lines()[5..10] 03:01
camelia ( no output )
colomon m: say lines()[5..10]
camelia rakudo-moar c5dcdf: OUTPUT«Ag taisteal dom amach trí chnoic Ghleann Domhain ’s an Mucais ar mo chúl Ní miste dom ’ rá le brón ’s le crá gur frasach a shíl mise siúl; Go Meiriceá siar a bhí mo thriall i bhfad thar an fharraige mhór; D’fhág mé slán ar feadh seal …»
Mouq old_camels_frien: github.com/sillymoose/Perl6-One-Li...e-printing
colomon Mouq: nice, but slightly off 03:05
perl6 -e '.say for lines[4..9]' example.txt
would do the trick 03:06
well, I mean the perl6 -ne '.print if (1..3).any == ++$' example.txt there would work, but seems unnecessarily baroque 03:07
Mouq++ # great resource there, at any rate
adu oh, I wrote a Haskell tool to do that, hackage.haskell.org/package/only
I would imagine it would also be a one-liner if I wrote it in Perl6 03:08
raydiak misses p5's -i...in fact perl -pi -e is about the only thing I use it for any more 03:14
ingy is hungry for some -pi -e 03:16
adu raydiak: I don't miss anything about Perl5, since I've never used it 03:20
raydiak adu: I started with BASIC, started learning C, then picked up perl and pretty much stopped looking at other languages for the next decade 03:24
ingy perl5.18.1 -MIO::All -E 'say for @{io shift}[0..9]' example.txt
adu my programming language learning was different, although, I also started with basic 03:25
ingy I started with basic, then fortran on punchcards 03:26
raydiak adu: but "perl -pi -e s/foo/bar/ *.txt" used to be (still is?) a well-known one-liner among unix geeks of all sorts for changing the contents of a file
the mnemonic was "perl pie"
have to admit I've been cheating on perl a bit in the last few years :) 03:27
adu in the order that I learned them, I think it was GWBASIC, QBASIC, VisualBasic (at which point I switched from Win to Mac), FutureBasic, C, (at which point I switched to Linux), then Scheme, Bash, Python, Haskell, Forth, and Prolog
ingy perl -pi -e 's/\r//' file # dos2unix
adu raydiak: I use sed -i -e for that
ingy sed6 03:28
adu is there a sed6?
raydiak kinda a shame I never learned sed/awk, just for history's sake, but cool that I never felt a need I guess 03:29
adu the ONLY thing I ever do in awk is '{print $2}'
ingy I use sed in my bash programming
which is substantial 03:30
raydiak ugh the syntax in bash scripting is just terrible to my brain
ingy ported test::more to bash and wrote json-bash and have some serious git commands in all modern bash
adu ingy: wow, json-bash, that is serious 03:31
raydiak wow, that's impressive
heh
ingy I did it for this: github.com/ingydotnet/git-hub 03:32
adu I think the most serious thing I ever wrote in bash was a getopt wrapper for something that only accepted files as inputs
but I've written about 5000 oneliners in bash
ingy git hub repos perl6 -r | git hub clone - # clone all perl6 repos in one command :)
adu mostly of the form: "java -jar $SOMETHING" 03:33
ingy the main code is here. it's not perl6 but not as terrible as you might think
adu and it really pisses me off that no bash programmers seem to understand "$@" 03:34
ingy the repo commands are in the repos plugin and they are minimal and poweful code: github.com/ingydotnet/git-hub/blob...t-hub-repo 03:34
but once you do serious bash programming you become really awesome in the shell 03:36
raydiak ingy++ # some of the cleanest shell scripting I've ever seen
I mean...I can read that...it can't be a shell script :)
ingy it has to be the most productive things i've done in 5 years. (learning the shell inside out)
ingy heh, I just wrote it all as if I were writing perl or ruby, and I googled every line :D 03:37
like: "perl array append in bash"
like: "perl array append in bash" 03:38
raydiak hah cool
ingy sorry
raydiak well I'd say *not* starting with existing shell scripts and learning from those, has served you quite well 03:39
ingy I'm working on this one tonight: github.com/ingydotnet/git-subrepo
If I can get this git command working perfectly, I think it will be a game changer
it's been close and usable for about a year, but get's ugly with complicated merges 03:40
but I think I can fix it
adu raydiak: My recent language learning has involved Go, Rust, and Perl6
ingy adu: have you seen github.com/ingydotnet/pig-latin-acme yet? 03:41
github.com/ingydotnet/pig-latin-ac...ted-so-far 03:42
needs rust
:)
raydiak adu: the last new thing I learned was Lua, which was good for me, insofar as it's the opposite of Perl in terms of footprint, performance, and syntactic philosophy
ingy needs lua too :) 03:43
raydiak though I have to say sometihng a little less conventional is next...maybe haskell as I don't have a functional language under my belt yet, and lisp calls to me for reasons unknown 03:44
adu raydiak: Lua is pretty amazing, when I got my first Android phone, I had Lua compiled and running on it within a day!
ingy raydiak: have you learned or implemented your own forth yet?
adu raydiak: I was never able to get Ruby of Python compiled on Android, too many dependancies...
s/of/or/
raydiak methinks the lisp interest is mainly because of how so many older programmers talk about it like the long-lost tool of the gods or something :) 03:45
cognominal for people interested in languages, elm is a must see. Haskell like using a reactive model, with a time travelling debugger, targeting js elm-lang.org/ debug.elm-lang.org/
raydiak ingy: I haven't
ingy lisp is just a mindset
cognominal in many ways a polar opposite to Perl 6
ingy a way to think of programming
raydiak adu: hah cool...I saw they have a ps4 port even 03:46
adu raydiak: S-expressions are amazing, Common Lisp has every function ever invented, you just have to spend 20 years figuring out what it's called, and Scheme lets you write try/catch/return/break/continue/yield using only "continuations" which no one understands
ingy TimToady told me that Perl owes tons to Lisp
cognominal I always thought that Perl was lisp that eventually cared about syntax. 03:47
raydiak yeah I guess part of it is I keep having these circles where I think "X is just a funny-looking Y, and Y is just a special case of Z", and people tell me I'm heading towards lisp
cognominal so I am expecting a lot from masak macros. 03:47
adu raydiak: my point is that "Lisp" isn't all it's cracked up to be, S-expressions are what everyone is really talking about
ingy TimToady gave a speech early on in Perl days where he said that Lisp has the visual appeal of oatmeal with fingernail clippings 03:48
cognominal bon appétit 03:48
ingy and John McCarthy was in the audience, but TimToady didn't know it
cognominal G a # G grand A petit => J'ai grand appétit :) 03:49
ingy John was displeased
adu This is a relatively recent addition to Lisp syntax: srfi.schemers.org/srfi-110/srfi-110.html
ingy indent,FTW!
adu it looks like it dates back to 2013, but it's one of the first attempts (aside from age-old M-expressions) that are generic and beautiful at the same time
ingy Sweet-expressions == plain oatmeal 03:50
raydiak adu: ah, thanks for the perspective...helps me think about where to start if I sit down to learn it
ingy not Perl's David Wheeler 03:51
adu I'd like to see if it's possible to come up with an S-expression syntax for Perl6
raydiak that's something else about Lua...you can literally learn most of it in like a day...the tradeoff being that it usually requires more hand-holding (and lines of code) than perl asks of you 03:53
adu raydiak: but Scheme has the advantage that it's minimal, you can literally write anything in Scheme 03:54
raydiak: and JavaScript was actually written as a Scheme, with a different syntax patched on as an afterthought
raydiak why does javascript having "patched on as an afterthought" in its origin story not surprise me? :) 03:55
adu www.crockford.com/javascript/little.html 03:56
raydiak reading stuff like that is neat 03:58
adu "As I’ve often said, and as others at Netscape can confirm, I was recruited to Netscape with the promise of “doing Scheme” in the browser." -- Brendan Eich 04:00
brendaneich.com/2008/04/popularity/
raydiak lemme get this straight...we coulda had lisp in the browser, but ended up with javascript instead? maybe that's where things went wrong... 04:02
raydiak looks at history as an explanation for why things are so screwed up in the present
adu it would have gone wrong at some point anyways, simply because of the law of large numbers
raydiak there is certainly more than no truth to that 04:03
xiaomiao raydiak: we could have had python, but then someone thought java was cooler 04:05
adu raydiak: paulgraham.com/95.html 04:06
raydiak having far less experience with java than javascript, I hate it far less :) 04:07
adu at least JS has closures
Java doesn't have closures or functions or methods, it only has classes 04:08
raydiak granted I didn't really know what I was doing, but I coulda swore I defined some stuff that looked a lot like methods in java before 04:09
adu raydiak: what I mean is that methods are not first-class objects, you can't assign them to a variable, and you can't pass them as arguments 04:17
\o o/ 04:18
Guest40626 04:19
☺/
cognominal nice link, adu 04:39
TimToady rosettacode.org/wiki/Circle_sort#Perl_6 08:21
lizmat TimToady++ for circling :-) 09:04
yoleaux 7 Jan 2015 22:40Z <raydiak> lizmat: the cached precomp bug is #122896, the only difference between october and now being that it segfaults instead of giving the reported error message
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=122896
dalek ast: a7bc14d | lizmat++ | S10-packages/precompilation.t:
Make sure tests fail for the right reason
09:08
nwc10 rosettacode.org/wiki/Rosetta_Code/R...ity#Perl_6 09:11
and today, Perl 6 is 6th
5 behind Ruby, 9 behind J
El_Che 77 rue du Ruisseau
75018 PARIS
nwc10 Tcl is still top. So obviously Tcl is best.
El_Che crap
sorry
nwc10 apparently that's the "ibis Styles Paris" 09:12
El_Che hehee :) 09:13
dalek kudo/newio: 0154f13 | lizmat++ | src/core/CompUnit.pm:
Allow scalar values to be specified with :INC
09:28
kudo/newio: 4c6cfab | TimToady++ | src/Perl6/Actions.nqp:
make << a b c 'x' >>[0] return 'a' not 'a b c'

Fix wrong merge
lizmat sorry dalek 09:28
masak good antenoon, #perl6 10:10
timotimo i hope you're having a pleasant day, masak :) 10:11
timotimo is off
masak starts making a pun about "a ♟ day", but realizes halfway that the piece is called "pawn", not "peasant" 10:13
cognominal Masak, tu est ♗? ♗ in French is "fou and means "mad person", not bishop 10:28
cognominal I don't know why, maybe it is "fou du roi" : jester. 10:29
en.wikipedia.org/wiki/Bishop_(chess) A nice explanation en.wikipedia.org/wiki/Bishop_(chess) 10:32
masak cognominal++ # etymology of fools 10:33
ok, on with the hard questions. 10:34
how do we focus on and achieve stability?
let's say the abstract measure of stability is identified as having the biggest impact on the success of Perl 6 in 2015.
what can we do to increase this measure?
is there any literature on this? do we have any stability experts among us? do we know where they graze? 10:35
lizmat masak: get jnthn more Perl 6 time :-) 10:36
masak I'm of two minds about that answer. 10:37
on the one hand, you're absolutely right.
lizmat it did have a :-)
masak yeah.
lizmat it's not the only thing
I know
masak on the other hand, burning out jnthn is a real risk. putting everything on him is one way to achieve that.
I'd rather we somehow empower more people to reach jnthnhood :) 10:38
brrt hmmm
lizmat that works too
brrt yeah
lizmat so maybe jnthn needs to give a MoarVM internals workshop
brrt we could do that 10:39
i could help :-)
masak I was just gonna say.
lizmat and funding for that, we'll get together
masak maybe there's a course could be held to make more people able to help more.
lizmat++
I feel better already :D
lizmat I proposed this to jnthn many months ago 10:40
cognominal to be ♘ed Jonathan, that would be an honour.
lizmat but he had too much $work
even when I tried to make a MoarVM workshop into $work, there was no room for that :-( 10:41
need to be afk again, back in ~ half an hour&
masak I imagine 2015 will be more amenable to such a workshop. 10:42
brrt let us hope so 10:43
masak lizmat: actually, my mind didn't first reach for "MoarVM workshop", but for "tracking down and solving hard software problems workshop"
maybe those are two wholly distinct things. or maybe those can be combined somehow.
like, my idea was "you're facing a difficult software problem. normally you'd give up. but now you go, 'WWJD'? (What Would Jnthn Do)" 10:44
masak basically en.wikipedia.org/wiki/Modelling_(psychology) -- we take jnthn's methods (design, implementation, and debugging) and distil them into a course. 10:45
donaldh In addition to WWJD, I would also like to learn more about What Has Jnthn Done So Far 10:59
donaldh A blocker for me working on JVM backend performance is the task to remove priorInvocation and I just don't grok it yet. 11:01
moritz priori incantatem! 11:03
masak: 'WWJD'? go for a long walk, and ponder the problem! 11:04
JimmyZ would do more in MoarVM ... 11:17
masak .oO( WW JimmyZ D ) 11:21
FROGGS WWPmD would also be most inspiring 11:33
masak oh, I'd pay to go to that.
masak last night before heading to bed, I ran into some design problems with 007. someone here on channel might be interested and/or have an idea: github.com/masak/007/issues/7 11:48
vendethiel masak: that's an issue we have in coffee/xxx as well. we insert IIFEs all over the place to circumvent it 11:51
masak :(
sergot tony-o: I will take a look at this :)
tony-o++
hi #perl6 o/
vendethiel masak: sadly, it breaks down really fast. With generators, with return, with...
masak sergocie! \o 11:51
vendethiel: I feel I'm missing a solid approach here.
vendethiel and sometimes, something that *should* put an expression (that's actually a statement) as a statement doesn't work.(example: return inside comprehensions won't work, even though it could, because we could unwrap it enough in most cases to have the return at the right place) 11:52
(and return really can't be used as an expression) 11:53
so, yeah, you might need to create a new context/lexical scope "in an expression" to carry around what the macro has 11:54
masak I just added a comment to that effect.
it seems a viable way forward -- my only fear is that it makes the AST "non-portable" in some way. 11:55
vendethiel resumes reading
masak but that fear may be unfounded.
sergot masaku! \o 11:58
karma c
vendethiel you don't have anonymous subs in 007?
masak we don't. 12:00
for two reasons, kind of.
(a) more work, more special cases. 12:01
(b) currently, sub declarations are statements, not expressions.
psch .tell japhb 02-lock.t passes on jvm when $l is locked before the final condsignalone and unlocked afterwards (as per stackoverflow.com/questions/15769220) 12:19
yoleaux psch: I'll pass your message to japhb.
psch .tell japhb i don't know if that's how we want condvars to work on nqp though or if that should be abstracted away 12:20
yoleaux psch: I'll pass your message to japhb.
psch also hi #perl6
lizmat psch o/ 12:22
psch lizmat \o
xfix Subroutines are expressions. 12:30
Yes, even named.
r: my &a = sub b { say "Subroutine!" }; a; b
camelia rakudo-{parrot,moar} c5dcdf: OUTPUT«Subroutine!␤Subroutine!␤»
xfix (although this is pointless, so it should be disallowed without `do` in my opinion) 12:31
std: my &a = sub b { say "Subroutine!" }; a; b 12:32
camelia std f9b7f55: OUTPUT«ok 00:01 142m␤»
psch xfix: what makes this pointless? the sub not being anon?
xfix Well, it's more likely that code like this is a bug. 12:33
But I guess it makes sense with `my` behaviour.
while my $a = b() { } is completely fine.
masak xfix: with all due respect, you don't seem to know what you are saying right now. 12:34
xfix Now that I think about it (must have been using too much Python)
xfix masak, yeah, I probably don't. 12:34
I agree.
masak xfix++ # taking criticism well :)
xfix I just realized the mistake while I was talking about it. 12:35
masak xfix: anyway, in 007 subroutine declarations are statements currently, not expressions. 12:35
xfix In Perl 5, my $a = sub b {} is disallowed, but I can see why code like that is allowed in Perl 6. 12:36
Anyway, JavaScript has both function statement and expression.
masak with somewhat differing semantics.
xfix Even if those semantics are different, I somewhat like the behaviour of (function b() {}), which declares anonymous function that can refer to itself. 12:37
masak yes, definitely.
the meme "all anon functions should be given a name" reached me (and I adopted it) sometime last year. 12:38
(in JS)
timotimo that's mui importante
xfix I actually do that so too, because debuggers cannot recognize code like `Something.prototype.doSomething = function () {}` properly.
Which is somewhat annoying. 12:39
(perhaps something has changed lately)
lizmat .tell jnthn in #122896 it becomes evident that wrapping the sub in a traitmod on a Routine, segfaults on trying to run that routine in a precomped version 12:40
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=122896
yoleaux lizmat: I'll pass your message to jnthn.
lizmat .tell jnthn this effectively bars things like "is cached" in the ecosystem
yoleaux lizmat: I'll pass your message to jnthn.
xfix I also think that JavaScript should allow function () {}() as statement without having to use parentheses, instead of shouting SYNTAX ERROR, WRITE BETTER CODE. 12:41
xfix Oh well, for a language designed in a week, JavaScript is not that bad. 12:41
(although I understand why JavaScript doesn't do that... it would confuse two different meanings of function keyword when named function syntax is involved) 12:42
Could be fixed by determining if the function statement is token by itself, or if there are extra stuff, but it introduces another issue caused by function statements not having semicolons, and function expressions having them. 12:44
`function a() {}(1)` is valid JavaScript syntax, after all. 12:45
Compatibility is hard. Once the language is stable, you cannot really change anything.
But I guess that `let` keyword will fix the situation a bit once web browsers implement it, and there won't be that (function () {})() idiom anymore. 12:46
masak xfix: you might want to try `(function () { console.log("OH HAI") }())` in your Chrome console. 12:48
xfix Which is also somewhat ugly, because now there are two syntaxes to declare variables, `var` and `let`. `var` having function scope, and `let` having block scope. Compatibility is hard.
masak, it prints OH HAI, doesn't it?
(I don't have Chrome installed)
masak yes.
xfix: it's not that putting `()` directly after a function declaration is disallowed, as such. it's just that it only works for the expression form.
xfix I know. 12:49
masak then why do you expect it to work for the statement form?
that makes no sense.
xfix Because it's also an expression, but I guess you are right.
masak no, it is not an expression.
xfix Well, function () {} is an expression or statement depending on whether it's first token in a statement. 12:50
masak for all I care, with hindsight, JavaScript might have been better off wihtout the statement form of function declaration.
xfix: right. and if it's a statement, then it's not an expression. and then you can't add `()` after it.
(because the statement already finished, and statements also can't have an `()` after them like that) 12:51
sjn Huh, seems TimToady's talk at FOSDEM has been moved to the main track.. cool!
oh, and hi, #perl6 :)
xfix Language design is interesting.
tadzik oh hai sjn
xfix Perl 6 has many syntax rules, but there are also simpler languages like Lisp.
lizmat re TimToady at FOSDEM: capacity of room is 1400 :-) 12:53
itz given the average FOSDEM talk has people queueing down the hallway to get it that's probably just as well 12:55
lizmat .tell jnthn re #122896 it feels like the original sub is not being serialized
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=122896
yoleaux lizmat: I'll pass your message to jnthn.
pmurias masak: why such a strong expression/statement seperation in 007 13:50
in my experience when generating code the expression/statement seperation is just an annoyance 13:51
lizmat is there a reason why we're not allowed to .print .say or .spurt to an IO::Socket ? 14:08
tadzik perhaps to encourage thinking about bytes rather than strings 14:08
lizmat and is there a reason why we cannot .slurp-rest from a socket ?
I think they're all hysterical raisens
lizmat is trying to merge the PIO role also into IO::Socket 14:09
most of the internals already use the same nqp:: functions (except maybe on Parrot)
so from that point of view, I don't see a reason not to merge 14:10
donaldh lizmat: when I was implementing some of the socket stuff on the JVM backend, the differences looked hysterical. 14:25
lizmat donaldh: such as? 14:37
lizmat donaldh: you mean at the nqp level? 14:38
donaldh The differences you have mentioned. Lack of .print, .say or .spurt for example. As long as you can set an encoding and a linesep then I think it makes sense for IO::Socket and PIO to converge on the full set of methods 14:39
donaldh Does it still make sense to call the implementation IO::Socket? Or should there be a common role, or base class? 14:40
it's been a while since I looked at it at al.
lizmat in the newio spec branch, I'm trying to do just that: 14:41
all things related to paths are in a IO::Pathy role
all things that work on handles, are in a PIO role
see github.com/perl6/specs/blob/newio/S16-io.pod 14:42
donaldh Ah right, so some of the IO::Socket impl would be replaced by the PIO role?
lizmat just about everything, really 14:44
dalek ecs/newio: fbdc909 | lizmat++ | S16-io.pod:
Tweaks
14:47
donaldh lizmat++ 14:48
pmurias masak: or is 007 supposed to compile to javascript? that would be the most valid reason for not having do 14:49
moritz pmurias: iirc masak++ wanted to make problems obvious that Perl 6 often glosses over; the distinction between statements and expressions is just an instance of the more general problem 14:50
pmurias: ... which is that you can't stick every AST everywhere
lizmat pixelscommander.com/en/javascript/n...rformance/ # applies to just about any language I guess 14:52
Ulti m: say .2.nude.join: '/' 15:07
camelia rakudo-moar c5dcdf: OUTPUT«1/5␤»
Ulti just had fun playing with Rat and didn't realise how much stuff was in there CurtisOvidPoe++ 15:08
lizmat #jesuischarlie& 15:09
donaldh r: 'string' ~> 2 15:25
camelia rakudo-moar c5dcdf: OUTPUT«infix:«~>» not yet implemented. Sorry. ␤ in sub infix:<~>> at src/gen/m-CORE.setting:7510␤ in sub infix:<~>> at src/gen/m-CORE.setting:7510␤ in block <unit> at /tmp/tmpfile:1␤␤»
..rakudo-parrot c5dcdf: OUTPUT«infix:«~>» not yet implemented. Sorry. ␤ in sub infix:<~>> at gen/parrot/CORE.setting:7518␤ in sub infix:<~>> at gen/parrot/CORE.setting:7518␤ in block <unit> at /tmp/tmpfile:1␤␤»
donaldh Golfing the cause of NQPMatch serialization on JVM backend gist.github.com/donaldh/91a212b38725642131be 15:56
arnsholt donaldh: That's an odd one. From the looks of it looks like it has to be a bug in the colonpair action or its call graph, no? 15:58
Er, no 15:59
The fatarrow action, of course
donaldh Yes, but not everywhere. 16:00
donaldh It has to be a toplevel sub or multi sub, not a class method, for example. 16:00
arnsholt Used in a toplevel sub, you mean? 16:01
donaldh The behaviour occurs for 5 uses of X::NYI.new(...).throw in the setting. 16:02
yes, used in a toplevel sub.
arnsholt Very odd 16:03
donaldh I can 'fix' the core setting by using colonpair syntax instead, for these 5 cases. 16:04
arnsholt Yeah, but this is one of those bugs that smell like something that really should be fixed
donaldh indeed.
arnsholt I guess it has to be something funny going on with the "$<key>.Str" call in Actions.fatarrow? 16:05
donaldh Well, it happens in Actions.add_inlining_info_if_possible when it hits a QAST::Want+{QAST::SpecialArg} 16:07
Actions.add_inlining_info_if_possible tries really hard to clear out any unwanted stuff like the $qast.node but in this situation the NQPMatch is leaking through. 16:09
I can't figure out why, for the life of me.
arnsholt Odd
But only for some cases of Want+SpecialArg, presumably
donaldh it seems like all of them. 16:10
PerlJam Is there something wrong with rakudobrew build-panda or is it just me? It gets to '==> Reinstalling' and just sits there 16:11
moritz PerlJam: which backend? 16:12
PerlJam moar
arnsholt donaldh: Oh, if it's all of them I might actually know. I bet you "nqp::istype($node, QAST::Want)" (Actions.nqp:2742) is false, when it has the SpecialArg mixin 16:13
donaldh Yeah, 5 cases of fatarrow results in 10 Want+SpecialArg with NQPMatch serialization. Eliminate those 5 fatarrow and then no Want+SpecialArg. 16:14
arnsholt: nope that's not it. Checked that.
skids notes PANDA_SUBMIT_TESTREPORTS is only docced in blogs. Maybe a howto tab on the reports site and a README.md on the cpandatesters github. 16:15
donaldh I am checking nqp::istype($replacement, QAST::SpecialArg) inside the QAST::Want check and then dumping the $replacement, to get hints of where to find the offending fatarrow. 16:16
pyrimidine PerlJam: I had a very similar problem, same backend. Only happened on my laptop (running Mac OS X, Mavericks)
pyrimidine PerlJam: Ran it off my imac (also Mavericks) and it worked fine. 16:17
PerlJam I'm running ubuntu 14.04 on a desktop fwiw 16:18
pyrimidine huh
I managed to trace it to IO::Socket::INET, but that's as far as I got. 16:19
pyrimidine If I changed to the old URL (feather) it worked fine, but I think that's hard-coded. 16:19
brrt fwiw, i mentally think of sockets as byte streams rather than string streams 16:24
wait a minute 16:25
io is reaaaaally complicated 16:27
brrt i'll just go back to bitmangling 16:28
donaldh :D 16:29
brrt i don't envy lizmat++ for taking up the task 16:35
consider that a UDP socket is really a Supply of packets (or a Sink, if we have such a concept?) 16:36
and that a TCP socket isn't really a stream but rather a Session
masak pmurias: what moritz++ said. 16:38
pmurias: (personally, I hope 007 never compiles to anything. that'd mean people have started taking it seriously in a way it was never meant to.) 16:39
pmurias: the distinction between statements and expressions seemed to me at the time to make things easier. (notably, if there's no distinction, then everything can interact with everything in some sense. O(n**2) interactions.) 16:40
masak pmurias: it *still* seems easier in that way, even as I am re-evaluating that balance à la github.com/masak/007/issues/7 16:40
masak pmurias: Lisp seems to me to pull off (very well) the trick of making everything an evaluable expression. but Perl 6 isn't and won't be a language where that's true -- therefore, exploring the distinction is a worthwhile goal of 007. 16:41
tony-o what is 007 16:42
masak fwiw, I liked the idea of "stuttering" as a mechanism, and I hope it survives the realizations about scoping.
tony-o: masak.github.io/007/
moritz my impression is that every statement in Perl 6 can be used as an expression, and the distinction is purely syntactic 16:43
masak yes, I think so.
tony-o interesting
masak moritz: but the fact that that is "easier said than done" is evicenced by the fact that RT contains at least half a dozen tickets on the theme "we evaluated this thing, but it contained a next/leave/BEGIN/(other exotic control flow) and caused a Big VM fail" 16:45
grocery store &
TimToady statements are just a monadic relationship of expressions; trying to carry the notion of statements any further into the semantic system is just adding complication, not removing it 17:35
I don't know what "part of an expression" means in the chart 17:36
dalek p: f05a5d7 | (Geoffrey Broadwell)++ | t/concurrency/02-lock.t:
Fix 02-lock.t braino that results in a LTA Java error under nqp-j; thanks psch++ for spotting this.
p: f8ba48f | (Geoffrey Broadwell)++ | t/concurrency/01-thread.t:
Reduce chance of interleaved TAP output in 01-thread.t
TimToady I think both macros and quasioids should be associated with a syntax category, and those categories should be treated more like types than we do currently 17:37
TimToady then your "stuttering" is simply a type conversion 17:37
and if there's no conversion provided, then an error is the natural outcome 17:38
japhb TimToady: I interpreted "part of an expression" as being in a subexpression of a larger expression, as opposed to being at the highest level of expression inside a statement. (Being the 'foo' in 'my x = foo' instead of the 'bar' in 'my y = 2 * bar') 17:39
yoleaux 12:19Z <psch> japhb: 02-lock.t passes on jvm when $l is locked before the final condsignalone and unlocked afterwards (as per stackoverflow.com/questions/15769220)
12:20Z <psch> japhb: i don't know if that's how we want condvars to work on nqp though or if that should be abstracted away
TimToady on the P6 syntax level, 'do' is just an example of such a category converter; it really does nothing else
japhb: those are all just expressions
japhb TimToady: not in a language that does not treat assignment as an expression. 17:40
TimToady that sounds more like 'part of a statement' than 'part of an expression' 17:41
japhb psch: As mentioned in the commit description, thanks for the 02-lock.t catch. My feeling is that not having the lock when you signal the condvar indicates a bug in the user code with high probability, so we shouldn't paper over it. However, the Java error is way LTA, so that should be caught and turned into a proper NQP/Perl 6 error. 17:42
japhb TimToady: my point was that in 'my x = foo', 'foo' is a complete expression that is part of a statement, whereas in 'my y = 2 * bar', 'bar' is part of an expression that is itself part of a statement. (In, as I said, a language that treats assignment as a statement and not an expression.) 17:43
At least, that's how I interpreted masak's writing.
TimToady that still sounds like sloppy thinking to me; both of those are still going to be parsed by something like EXPR, it's just that * will do so recursively somehow 17:46
both of them *expect* an expressoin at that point
maybe I just need more coffee
TimToady Enlish is also a language that makes a syntactic distinction between statements and expressions, and then let's you mush them all back together on the samentic level, as long as the listener can "cast" the return value into an appropriate context 17:58
examples abound, but my favorite:
"I don't like your I-can-use-anything-as-an-adjective attitude."
japhb :-) 17:59
TimToady *semantic
japhb
.oO( semitic )
TimToady how the heck did I get samentic?
japhb It's the same antics you always get into. 18:00
TimToady should become more antic-warian... 18:01
dalek p: 6dfafac | peschwa++ | src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java:
Un-LTA condsignalone on an unlocked condvar.

According to the Javadoc for ReentrantLock signalling only ever throws IllegalMonitorStateException when the Lock is not held.
18:04
psch japhb: the discrepancy between mvm and jvm still puzzles me though 18:05
TimToady lately I've been thinking of ; as just a syntactic operator that makes lists of expressions; it's the block context that turns those into the equivalent of a C comma operator; [] and () instead turn ; into a lol
japhb psch++ # Fast fix -- does condsignalall need the same treatment?
psch: Agreed re: discrepency. Maybe libuv just doesn't try to detect this case? 18:06
psch japhb: uh, yes, it does :)
need the fix that is
japhb nodnod
TimToady: I like that way of thinking. 18:07
dalek p: 0713ffd | peschwa++ | src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java:
Un-LTA candsignalall on an unlocked condvar.
18:07
japhb psch++ again. :-) 18:08
TimToady of course, block syntax is also the scaffolding for lexical scoping, and I can argue that this is perfectly natural, since lists of side effects need things to affect
masak TimToady: "part of an expression" means `1 + foo()` where `foo` is the macro.
TimToady still thinks it's meaningless 18:09
TimToady anywhere the parser expects an expression is functionally the same as any other place, to my mind 18:10
TimToady the important thing, I think, is to start regarding slot mismatches as type mismatches 18:11
psch japhb: logs.nodejs.org/libuv/2013-08-12#17:52:22.912 18:12
psch so jvm was right in throwing, and libuv is just lenient 18:13
psch s/right/simply more strict/ 18:15
japhb nodnod 18:16
japhb The thing is, it makes sense from the outside in a few cases to signal without being locked, but in terms of the low-level implementation, possibly less so. 18:18
TimToady grammar rules already encode their slot and expected ast type as part of their name; this is why 'macro' as a keyword is kinda wimpy compared to the 'slang token' proposal 18:27
just as a well-typed grammar rule is the interface to the outer text, so too we need well-typed quasis to interface to the inner text
and that probably needs to be declarative, since it will influence what is parsed inside the quasi 18:28
once you have that, poking a typed quasi into a typed slot is a simple matter of type recognition/conversion 18:29
the thing about these typed grammatical slots is that they not only say where the parse will start, but in what state the parse will be stopped 18:30
psch bringing jvm in line with mvm on the condsignal means implementing our own ReentrantLock and Condition... i have no clue if that'd be worth it, i can't judge how common the cases for signalling from the outside are for our async primitives
dalek kudo-star-daily: 0db39de | coke++ | log/ (10 files):
today (automated commit)
18:31
rl6-roast-data: ca0e711 | coke++ | / (5 files):
today (automated commit)
TimToady I view the current macro thinking as kind of a groping forward in the struggle against accidental genericity without compromising intentional genericity 18:32
TimToady which maps rather nicely onto type systems that provide a generic/specific continuum 18:34
masak I wish I could be a part of this backlog, but I'm preparing a somewhat late dinner.
masak best I can do is read and reply later :) 18:34
TimToady so anyway, I'm thinking we need some classes that reflect infix, prefix, statement, comment, etc. and not just operational how-to-parse info 18:39
masak yes. me too. 18:48
pyrimidine moritz, PerlJam: panda issue seems related to nqp::readlinefh and appear moarvm-specific. Testing JVM now. 19:00
Just tried installing Parrot for the first time in a while, and it craps out on icu
FROGGS_ yes, we complain now if icu is not there 19:01
pyrimidine FROGGS_: makes sense. Problem is, OS X 10.9 and up have a system libicu installed which the installer doesn't find (no headers, icu-config). May have to fiddle with a local icu install 19:04
FROGGS_ hmmm :/ 19:05
doing it right for osx is hard these days
pyrimidine FROGGS_: yep. I also thought about using homebrew, but 'brew install icu4c' indicates possible issues if installing a separate icu. fun :) 19:06
japhb OS X drives me nuts as a developer, because it doesn't even have the excuse of being not-unix. 19:13
japhb TimToady: Interestingly, that type system macro thinking puts some more meat on my nebulous macro idea in which I used grammar rule names in a type-ish fashion. 19:15
b2gills m: say {(^6).roll} ...^ 0
camelia rakudo-moar c5dcdf: OUTPUT«2 1 4 3 4 1 2 4␤»
b2gills m: say join '', ({ ('A'..'Z','a'..'z',0..9,Mu).roll } ...^ !*.defined); # password generator 19:19
camelia rakudo-moar c5dcdf: OUTPUT«fYpGTdo9W7dJvNWas6ALbF9l9nZMH70w4y67SGnfQ0QdXodhRS8pqwjgeEqdtQXopf6DT1M97iCUZK␤»
bartolin hi, #perl6! 19:24
japhb o/ 19:26
bartolin it looks that with commit 79e62b4 there came a 'NO-BREAK SPACE' character in a comment to src/vm/jvm/runtime/org/perl6/rakudo/RakudoJavaInterop.java. since then it's sitting there in line 354 and busted my daily jvm builds :/
before that commit I was able to build jvm with LANG='' 19:29
psch bartolin: whoops. my advent post made me get used to that, sorry 19:31
i can PR that, but i'd say that's a bit silly for replacing a space
bartolin psch: I thought the same :-) maybe someone else can fix it
otherwise psch++ for those commit 19:32
bartolin hmm, looking a second time that commit is a bit older. my builds started to fail three days ago only. but make dies with "src/vm/jvm/runtime/org/perl6/rakudo/RakudoJavaInterop.java:354: error: unmappable character for encoding ASCII 19:35
FROGGS_ hmmm, I dont spot it
psch bartolin: the commits have only been merged a few days ago
FROGGS_ 354 is: // Perl 6' .new creating a new CallFrame or something..? 19:36
bartolin FROGGS_: yes, between 'Perl' and '6' there is a non breaking whitespace
psch: ok, that explains it
FROGGS_ ahh, I see it :o)
bartolin sees it very clearly
dalek kudo/nom: ac9c85e | FROGGS++ | src/vm/jvm/runtime/org/perl6/rakudo/RakudoJavaInterop.java:
replace non breakable space with whitespace

  bartolin++
19:38
bartolin thanks a lot, FROGGS++
jnthn evening, #perl6 19:43
yoleaux 12:40Z <lizmat> jnthn: in #122896 it becomes evident that wrapping the sub in a traitmod on a Routine, segfaults on trying to run that routine in a precomped version
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=122896
yoleaux 12:40Z <lizmat> jnthn: this effectively bars things like "is cached" in the ecosystem
12:55Z <lizmat> jnthn: re #122896 it feels like the original sub is not being serialized
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=122896
bartolin FROGGS_: on another note: did you see that you got some wrongish test reports at testers.perl6.org from my daily smokes on freebsd? ugexe++ found them and helped me to narrow down the problem. i filed a rakudobug (RT #123563). 19:45
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=123563
jnthn lizmat: I'm not immediately sure what's going on, but will but it on my todo list for once I'm back :)
bartolin FROGGS_: I stopped to submit reports for now, but I wonder if you want to remove the unreliable reports ... 19:46
jnthn From the backlog, and on stability: while it is obviously an important goal, and also nice that we've improved performance sufficiently that it's no longer a top priority for so many folks, I don't think we've become *less* stable over the last year at the things we've long been able to do well. 19:47
Most of the instability is in concurency stuff - and thus in things that we simply didn't even have a year ago.
vendethiel agrees 19:48
fwiw, when I show benchmarks numbers now, people still say "slow", but it's "slow like ruby", not "slow like a snail"
jnthn Most other stuff we have wasn't immediately trustworthy either, it's just that it's had chance to mature, and time spent on it. Concurrency has had a lot less time invested in it than it really needs. Once it gets that attention, things will be better. 19:49
jnthn is a bit frustrated that various things kept him from having a good amount of time on that in the latter part of 2014, but happy to report that his 2015 is looking rather better. :) 19:50
jnthn And yes, I agree with the sentiment in the backlog that we could do with finding ways I can do more knowledge-sharing to help spread the load. 19:51
[Coke] fixes the rakudo-star-daily cronjob and kicks it off again. 20:02
.ask moritz any luck with parrot hang on R*?
yoleaux [Coke]: I'll pass your message to moritz.
FROGGS_ bartolin: I have to find out in what way they are wrong first.... there was something about that in the clogs, right? 20:04
bartolin FROGGS_: the bug report has a link to a closed panda issues which has some more informations. apart from that there is a something in the irclogs (skid++ brought the problem up, actually): irclog.perlgeek.de/perl6/2015-01-07#i_9898147 20:06
FROGGS_: in short, the summary (whether for build or tests was not reliable). e.g. some failing builds and tests where marked 'PASS' 20:08
japhb jnthn: I meant stability in two senses (this got lost a bit in later discussions): Stability as in "doesn't crash, hang, eat all RAM, gate in Cthulhu, incorrectly execute the code as written, etc." and stability as in "fundamentals of language, such as lists and IO ops, aren't still changing". 20:13
jnthn: Lack of the latter is annoying, because it means building correct idiom habits becomes a bit of a footgun. 20:14
jnthn Yes, agree. 20:15
japhb jnthn: Lack of the former is expected while major implementation bits are changing, but not having that form of stability at any point between major upheavals makes it very difficult to use the compiler in production, because you can't pick a "golden revision" that you lock production compiles to, until the next rock-solid revision comes about. 20:16
So that's part of how it became more important than performance. 20:17
japhb (for me) 20:17
japhb The other part is that the major features that I would use to work around straight-line slowness (all the various concurrency related features) are the ones that are least stable in that former sense, so I can't just go "Yeah, 1 thread runs at 10% the speed I need, but I can run a threadpool of 24 threads and be well into safety margin" 20:19
Note: None of this is intended to blame anyone for the situation. I'm just explaining why my priorities got inverted -- not because performance got fast enough for my use cases, but because it didn't improve *enough* for me to just rely on single-threaded performance by itself. 20:21
jnthn Sure; good to understand why you're being pushed to the less stable things, though. 20:26
moritz [Coke]: no progress :( 20:34
yoleaux 20:02Z <[Coke]> moritz: any luck with parrot hang on R*?
muraiki if instability means gating in cthulhu, I'm all for unstable 20:56
tony-o is there a 'prompt' that hides the input?
FROGGS_ tony-o: "Update io_operators.pm" is not ideal as a commit message 21:03
tony-o sorry, i got clicky 21:04
fixed
FROGGS_ tony-o: is then :hidden param specced? or is something else in that regard specced? 21:05
tony-o i couldn't find it anywhere
colomon was looking at a repo the other day that had no commit message more useful than "Update io_operators.pm" 21:10
tony-o i updated the message but closed it 21:11
timotimo good * #perl6 o/ 21:19
colomon \o
psch o/ timotimo 21:20
psch sleep & 22:07
b2gills tony-o: I assume the point of :hidden was to stop the characters from being printed to the console as you type them 22:16
... which is not what that commit does
dalek kudo-star-daily: 19cb037 | coke++ | log/ (10 files):
today (automated commit)
22:18
[Coke] is about to go on business travel somewhere where there is no PM. :( 22:29
masak TimToady: backlogging now. 22:52
TimToady: in the `1 + foo()` example, the main point was that things wouldn't go well (in 007) if `foo()` inserted an `if` statement.
(say)
TimToady: whereas with `foo()` at the top level of the expression statement, you'd get away with it, with some Q-node stuttering. 22:53
and in fact, you'd *have* to get away with it, because expressions are the only things that can call macros. so if that didn't work, there'd be no way to insert `if` statements.
TimToady: but now that I read your comments about type mismatches, it sounds like you're in support of some things not being insertable in some slots. 22:54
I like the idea about handling that through type matching. will need to think about that a bit further.
masak TimToady: a very concrete example of how parser state and Q node shape interact is in the expression parser. I've written down 007's world view here: github.com/masak/007/blob/master/operators.md 23:01
it's kind of like a reduced version of Perl 6's.
ok, midnight. time for sleep. 23:03
'night, #perl6
adu hi masak 23:04
gnight
I have a ? 23:05
what are the advantages of using EXPR in HLL::Grammar? 23:06
Mouq adu: Compared to? 23:12
adu Mouq: implementing it yourself? 23:19
adu why is it that $.HOW.HOW and $x.WHAT.WHAT don't work? 23:26
Mouq adu: It may or may not be faster, and is, I assume, pretty robust. cons: pretty much undocumented api, possibly hard to understand 23:32
m: say 1.HOW.HOW 23:33
camelia rakudo-moar c5dcdf: OUTPUT«No such method 'gist' for invocant of type 'NQPClassHOW'␤ in sub say at src/gen/m-CORE.setting:16653␤ in block <unit> at /tmp/aC29oAV2U_:1␤␤»
Mouq m: say 1.HOW.HOW.name
camelia rakudo-moar c5dcdf: OUTPUT«Too few positionals passed; expected 2 arguments but got 1␤ in any name at gen/moar/stage2/nqpmo.nqp:1201␤ in block <unit> at /tmp/ZXhseU7Ora:1␤␤»
Mouq m: say 1.HOW.HOW.^name
camelia rakudo-moar c5dcdf: OUTPUT«NQPClassHOW␤»
adu what does ".^" do?
japhb adu: You can roughly think of a.^b as syntactic sugar for a.HOW.b(a) 23:35
adu ok
so it's kind of like a metaclass method invokation 23:36
japhb And the reason 1.HOW.HOW fails is that you cross the border between Perl 6 and NQP implementation, and a lot of the convenience methods one comes to expect in Perl 6 objects don't exist in NQP land. You can usually get what you want with more effort though, as Mouq++ showed.
japhb adu: Yeah, basically. 23:37
*'say 1.HOW.HOW' fails
adu I need to understand Rubyish 23:41