»ö« 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.
00:11 benabik left 00:18 pmurias left 00:29 census joined 00:32 benabik joined 00:50 pupoque__ left, pupoque_ left 01:12 btyler left, fgomez joined 01:13 btyler joined 01:15 fgomez left, fgomez joined 02:01 orafu left 02:02 orafu joined 02:09 census left 02:41 kshannon left 02:44 kshannon joined 02:49 kshannon left, kshannon joined 02:54 kshannon left 02:56 kshannon joined 03:01 orafu left 03:02 OuLouFu joined, OuLouFu is now known as orafu 03:20 colomon left
diakopter .. I don't understand why there aren't 3d printers using liquid metal 03:21
(or are there?)
geekosaur clogs are *really hard* to clear
(ask anyone who's worked with old wax printers) 03:22
diakopter or even large robots that auto-forge metal strips then bend into place
JimmyZ gOOd nOOn :) 03:27
03:29 preflex_ joined, ChanServ sets mode: +v preflex_ 03:30 preflex left, preflex_ is now known as preflex
benabik diakopter: Metal tends to be done via laser sintering. 03:32
BenGoldberg I don't understand why 3d printing with metal clay isn't more common... 03:34
03:34 silug left 03:35 adu joined, adu left
BenGoldberg After all, a clay printer requires much less energy (and is much less dangerous) than a laser sinterer 03:36
03:36 adu joined
benabik Then you end up with a metallic ceramic instead of pure metal? 03:36
adu hey
how is everyone?
benabik Also laser sintering has very high precision. Much easier to precisely point a laser than precisely move a print head. 03:37
BenGoldberg Actually, when you bake it in a kiln, it somehow becomes solid metal, not a ceramic. 03:38
You've got a good point on the precision.
benabik Generally if you want metal you want high precision metal. :-)
I have yet to see a ABS system that gives actual smooth edges. (Although I've only seen kit ones instead of a pro.) 03:39
BenGoldberg I wanna see someone invent a 3d production system which can quickly alternate between additive and subtractive processes... first print part of a model, then automatically remove the excess, with a router or grinding point (or whatever), then print more of the model, and so on and so forth. 03:43
03:43 adu left, adu joined, adu left
benabik I think most models can be done as add then subtract. 03:44
03:44 adu joined, adu left, adu joined
benabik Really why add something you're only going to remove? Only reason I can think of is to support something in deposition systems. 03:44
diakopter geekosaur: but why wouldn't the whole length be heated 03:45
geekosaur you don't keep it heated when it's not in use (it uses a lot of power). if the head isn't completely emptied before the power is shut off, you have a problem. 03:46
diakopter well I'm saying why not have the whole length able to be heated enough to melt the contents 03:47
geekosaur like I said, this is stuff that's been seen with wax printers; as long as everything works perfectly you're fine, but unexpected loss of power or other failures lead to rather expensive repairs
BenGoldberg If your subtractive system has higher resolution than your additive system, then you print a coarser version than you really want (because your equipment isn't capable of doing it right the first time) then grind away the excess.
diakopter benabik: then have a robot arm with a sander... :D 03:48
BenGoldberg For example, try printing an engine block, with smooth polished cylinders ;)
geekosaur and heating the whole thing to a sufficient level takes even more power, plus complicates e.g. supporting all that hot stuff
adu <3 Perl6 03:49
I totally evangilized Perl6 to a Google employee yesterday
diakopter hrm
BenGoldberg :)
geekosaur and since one of the main thrusts of 3d printing is reduced cost, and you aren't reducing costs much if you need to do that kind of thing...
BenGoldberg adu, isn't Google's favorite fancy new language "Go" ? 03:50
adu BenGoldberg: no, it's totally Python
diakopter heh
adu they use Go and Dart for marketing purposes
but internally, it's all Python 03:51
diakopter all the Google folks I know use C++
and Java
BenGoldberg Isn't go a really annoying name, since it's a p.i.t.a. to search for?
adu I can see that
BenGoldberg: everyone I know uses "golang" as a search term
diakopter they coined "golang"
BenGoldberg Hmm... how hard would it be to add .pyc as another target for rakudo? :) 03:54
diakopter a lot harder than Rust VM or Dar VM 03:55
Dart
(which I'm considering doing next..)
adu Rust doesn't use a VM, it compiles to native
diakopter (after golang)
adu: right; this would incorporate that compiler in the runtime 03:56
(or not)
(doesn't need it)
adu well, Rust does use LLVM, which has a runtime component, but is mostly native
diakopter well MoarVM is written in C, but it doesn't need a C compiler at runtime...
yes, Rust has a VM runtime 03:57
ish
03:57 silug joined
adu also, Go and Dart are Google-sponsored, Rust is Mozilla-sponsored 03:57
diakopter that much I knew :P
adu Perl6 is Larry Wall-sponsored 03:58
diakopter anyway, my point was it would be easier to create the VM/runtime from scratch (like MoarVM) in Rust than to port to pythonc 03:59
BenGoldberg Oh ok.
diakopter at least with Dart you have the native types
so you could still use its GC 04:00
well, if it's still able to optimize them well enough to natives.
adu I can help with Rust, I've been learning it and blogging about it
straymindcough.blogspot.com/2013/06...-echo.html 04:01
BenGoldberg You wanna port perl6 to Rust?
diakopter well, after golang 04:02
JimmyZ zero.rs - a stub that lets Rust programs run almost freestanding. github.com/pcwalton/zero.rs
adu BenGoldberg: it would make more sense to port it to LLVM than Rust
diakopter I don't know about that
adu if we can get an NQP => LLVM compiler, we're mostly done right? 04:03
diakopter no
rakudo uses nqp:: opcodes that nqp doesn't use
adu hrm
diakopter nqp:: is kindof a misnomer 04:04
in some cases
JimmyZ vm:: ?
diakopter dunno 04:05
adu btw, I'm on #rust @irc.mozilla.org right now, I can discuss this with them
BenGoldberg p6vm:: ?
diakopter adu: discuss what?
adu someone needs to decide which core instructions are requires and give them some name, whether it's nqp or parrot or whatever 04:06
diakopter that's usually premature imho, considering it's years away; I forgot to mention I wanted to do mono/.net first
[assuming no one else helps, I mean]
adu what? isn't that what niecza is?
diakopter also haskell :P
no, niecza is not a rakudo backend 04:07
adu oh
BenGoldberg niecza is an implementation of perl6, but was written independently of rakudo
adu you're saying that rakudo could target Haskell instead of Haskell's VM and Rust instead of LLVM?
adu is confused
geekosaur I thought adu was respomnding to "I forgot to mention I wanted to do mono/.net first"
adu geekosaur: i was 04:08
diakopter (I thought that too..)
geekosaur otoh it is also true that niecza is not based on rakudo
(that is, it's not just rakudo-on-.net)
also haskell does not have a vm
diakopter sigh.
adu iirc Haskell's vm is called STM 04:09
geekosaur no?
JimmyZ stm?
geekosaur you may be thinking of stg
BenGoldberg Pugs (Yet Another implementation of perl6) is written in Haskell (I think)
JimmyZ stm is another thing
geekosaur but nobody actually targets stg as such
adu STG, right
geekosaur it's conceptually a vm, but not practically
diakopter adu: no, I was saying target the Haskell VM 04:10
and LLVM isn't a VM for the billionth time
adu diakopter: oh ok
diakopter I was saying "write a rakudo/nqp backend/VM in Rust"
adu diakopter: it has an instruction set, and at least 2 instructions that handle GC, so why wouldn't it be a VM?
diakopter they don't *do* GC 04:11
JimmyZ these should be happened after jited moarvm ;)
diakopter (the instructions)
adu diakopter: also that's the first time you've said that to me, so it's the first time, not billionth time
diakopter: right, but LLVM has mark and sweep instructions, so that helps with writing VMs 04:12
i mean GCs
JimmyZ Yeah, talking is cheap
diakopter it doesn't "help with writing GCs"
JimmyZ said linus 04:13
diakopter it helps with teaching the llvm compiler that you are calling into your GC
benabik LLVM is less "VM" and more "abstract assembly"
JimmyZ like dynasm?
diakopter lists.cs.uiuc.edu/pipermail/llvm-co...01702.html 04:14
benabik JimmyZ: It looks like dynasm is tied to x86 assembly specifically. LLVM abstracts away actual registers and details of instruction types, etc etc. 04:15
benabik was less than impressed with VMKit. 04:16
diakopter benabik: dynasm can write arm, mips, ppc, x86, x86-64 04:17
04:17 raiph left
JimmyZ benabik: you meant luajit 1.x, luajit 2.x is not 04:17
benabik diakopter: Okay, but you have to write arm, mips, etc assembly instead of one kind of assembly that works everywhere.
diakopter eh?
benabik diakopter: Or at least that's how their examples are. 04:18
benabik doubts `mov wax, foo+17` would work on ARM.
*eax
diakopter benabik: what page are you looking at 04:19
benabik diakopter: luajit.org/dynasm_examples.html
diakopter I'm looking at luajit.org/dynasm_examples.html
JimmyZ benabik: you don't have to do that much if you see arm, mips code in luajit soucre dir 04:21
*source
benabik diakopter: All those examples reference x86 specific things like eax, ecx. So unless they map registers on other platforms to the funny Intel names.
JimmyZ benabik: the dynasm alread does it much
diakopter the point of dynasm is that you are writing assembly templates 04:22
that get preprocessed into calls that emit that code with the templates filled in 04:23
benabik But you write one template per arch. Whereas LLVM abstracts away the architectures. One IR, many architectures.
04:23 aindilis joined
diakopter right 04:23
JimmyZ LLVM is too big 04:24
benabik "Tied to x86" was more "directly exposes the architecture" instead of "abstracts the architecture.
JimmyZ if we can't moarvm to be another JVM
s/can't/want/
i.e: slow startup 04:25
benabik LLVM has the nice advantage of coming with large piles of complex optimizations. It's a production compiler toolkit, so it isn't going to be small.
JimmyZ so we just need JVM
benabik OTOH, their actual JIT support is... somewhat lacking.
04:27 adu left 04:34 aindilis left
diakopter what? 04:34
this conversation has been very difficult to keep sane 04:35
er, non-delusional
er, non-confused
(my confusion)_
JimmyZ :P
diakopter this is just silly. the JVM doesn't have slow startup. it starts up in 60ms on my machine. 04:37
JimmyZ luajit.org/dynasm_examples.html it too old, I can't find it luajit 2.x
diakopter it had slow startup a decade ago
JimmyZ maybe the code is from luajit 1.x
diakopter what do you mean you can't find it?
that URL doesnt work for you? 04:38
JimmyZ the code in #Advanced Features
diakopter there's no getLCL ?
JimmyZ no in luajit 2.x 04:39
diakopter why do you say the JVM has slow startup 04:40
JimmyZ so that's why is a x86 example
diakopter JimmyZ: why do you say the JVM has slow startup? 04:41
JimmyZ it's slow than perl in my machine :P
diakopter okay. I've seen time say perl took 0ms to -e ''
er
-e ';'
JimmyZ lunches 04:42
diakopter I don't see your point. what's wrong with 60ms startup
(okay, limit of 15 invocations/second)
anyway, I don't understand what everyone's talking about w.r.t. LLVM. who cares that the rust compiler uses LLVM? how could that possibly affect a Perl 6 backend written in Rust? 04:45
same for clang... who cares that clang uses LLVM - how could that affect moarvm, which is written in C
LLVM is certainly not part of the Rust runtime... surely not...? 04:46
benabik: 100% agree about VMKit
vehicle for thesis. 04:47
benabik diakopter: My advisor thought it was a rather poor thesis at that. Mostly connecting existing bits together instead of doing something novel.
04:53 raiph joined
TimToady is home to own bed o/ 04:54
05:00 crab2313 joined
TimToady if it'd been spelled WOT instead of WAT, it could've been backronymed to "Who Ordered That?" 05:16
WAT: Walk Away Time :) 05:17
05:22 fridim_ joined 05:24 crab2313 left
TimToady Whimper At Terminal 05:49
WAT AKA TLA 05:54
araujo TimToady, o/ 05:56
TimToady Wherefore Art Thou? 05:57
I think that's my favorite backronym for WAT so far... 05:59
araujo wonders if WAT will be some new perl6 constant name 06:00
TimToady we could rename Nil to WAT
araujo :D
06:02 crab2313 joined
flussence r: class WAT is Whatever; say WAT.perl # use lolcode; 06:03
camelia rakudo 296da0: OUTPUT«WAT␤»
araujo checks and he still has some candy left 06:04
JimmyZ r: constant WAT is default(Nil); say WAT
camelia rakudo 296da0: OUTPUT«===SORRY!===␤Missing initializer on constant declaration␤at /tmp/Xcjq1kizBO:1␤------> constant WAT is default(Nil)⏏; say WAT␤ expecting any of:␤ postfix␤ statement end␤ statement modifier␤ statemen…
masak mornin', #perl6 06:10
araujo masak, o/ 06:11
diakopter, what is the plan?... to write a perl6 impl in rust? 06:13
:P
06:14 kaare_ joined, fridim_ left
TimToady nr: constant WAT = Nil; say WAT 06:17
camelia rakudo 296da0, niecza v24-88-g1f87209: OUTPUT«Nil␤»
masak nr: constant WAT = Nil but role { method gist { "WAT" } }; say WAT 06:18
camelia niecza v24-88-g1f87209: OUTPUT«Unhandled exception: No value for parameter '$obj' in 'infix:<but>'␤ at <unknown> line 0 (ExitRunloop @ 0) ␤ at /tmp/3nFgToWtDY line 1 (WAT init @ 2) ␤ at <unknown> line 0 (ExitRunloop @ 0) ␤ at /home/p6eval/niecza/src/NieczaBackendDotnet.pm6 line 75 (…
..rakudo 296da0: OUTPUT«WAT␤»
masak rakudo++
06:23 crab2313 left
masak I was inspired by straymindcough.blogspot.se/2013/06/...-echo.html , so I ported echo to Perl 6: 06:26
gist.github.com/masak/6097636
I might be missing something, but my Perl 6 implementation makes the Rust implementation seem overly wordy ;) 06:27
"Perl 6: ruthlessly practical"
06:31 kingbeast joined
JimmyZ :P 06:34
06:37 kingbeast left
masak haha -- CoffeeScript doesn't add syntactic sugar, it "removes syntactic vinegar"! :) raganwald.com/2013/07/27/Ive-always...n-mad.html 06:38
that article seem to tl;dr down to "implicit globals suck, but implicit locals suck almost as much -- design your PL with variable declarations already". 06:50
JimmyZ wonders how macro goes about :P 06:53
06:53 kingbeast joined 06:56 SamuraiJack__ joined 06:58 BenGoldberg left 07:09 FROGGS joined
diakopter araujo: no :P just kidding around, a bit teasing rGeoffrey for what he said at the SotO at Oscon - that we're busy trying to target every VM under the sun. ;) 07:15
07:21 vaelxon joined 07:25 FROGGS left 07:30 rindolf joined 07:40 Su-Shee joined
Su-Shee good morning everyone. 07:40
07:43 btyler left
masak Su-Shee! \o/ 07:44
Su-Shee nice grant proposal of diakopter :) 07:45
masak yeah!
diakopter trying to temper my 2nd reply to the troll 07:47
(raiph is, that is) ;)
Su-Shee: thanks :) 07:48
Su-Shee "are we there yet?" ;)
diakopter seventy Christmases ago!
Su-Shee I meant your proposal ;) 07:49
07:54 kingbeast left
masak I haven't written my support yet in a comment, but I will. my biggest blocker is that I need to phrase sufficiently well how much I like MoarVM and how important diakopter++'s work would be for it. 07:57
today's autopun: "98% of the time I am right. Why worry about the other 3%." 07:58
JimmyZ masak: I wonders what's plan about perl 6 macro :P 07:59
masak JimmyZ: a fair question. I hope to get back to that work, hopefully shortly after YAPC::EU. 08:01
JimmyZ: current status: just about to start in on the third milestone -- i.e. just after the half-point. need to trawl through lots of macro tickets in RT and see what I can do about them. need to sit down and do some design, too. 08:02
JimmyZ masak: nice, I'm asking because I'm using Clojure macro and thinking it's really useful 08:03
08:03 spider-mario joined
JimmyZ masak: and I think back Perl6 macro 08:03
:P
masak JimmyZ: 我明白。 08:11
JimmyZ: the latest thought that I had is that in the long run, I really want Perl 6 macros to be able to do a CPS transform on my code. 08:12
if it can do that, then I'll consider the macros implementation a success.
08:12 xinming left
masak (but that is a more stringent criterion than those in the grant application.) 08:12
JimmyZ masak: 是的 08:13
masak why? because under the "generate, analyze and typecheck" definition of scalamacros.org/ , we have only really touched upon "generate" so far. 08:14
but a macro *reading* code (needed for the "analyze and typecheck" parts) is a lot more interesting than a macro just *writing* code.
the problem with reading code is that we immediately hit upon the question "so, what's the (implementation-independent) API for getting information out of an AST?" 08:15
this is the question Lisp doesn't have to face, because homoiconicity. the source code is (isomorphic to) the AST. 08:16
08:16 xinming joined
JimmyZ masak: 很不错的想法 08:27
masak we shall see. 08:30
the measure of a 不错的想法 has to be if it can be realized or not ;)
JimmyZ O(∩_∩)O哈哈~ 08:31
(*^__^*) 嘻嘻…… 08:32
masak anyway, I'm still dedicated to the macros grant. it's taking more time than I thought, but I don't see any direct blockers, unless you count "$dayjob is a linear combination of extremely rewarding and draining of residual hobby energy" as a blocker. 08:33
08:36 wk joined, wk is now known as Guest79805
raiph r: sub infix:«==>» (\out, @in) { say 1 }; my (@a, @b); @a ==> @b 08:45
camelia rakudo 296da0: ( no output )
masak raiph: good morning. 08:47
raiph: I think any infix ==> operator will be shadowed by the statement separator ==>
raiph hi, that was ww
masak (and should)
raiph i noticed that ==> was in the grammar as infix: 08:48
masak checks 08:49
yes. you're right. 08:50
and it seems that I'm misinformed there. I thought it was a terminator.
raiph well i thought that too. it's what the spec suggests. 08:51
moritz it used to be one
masak instead, it seems to sort under its own precedence level, "sequencer", just tighter than "terminator".
raiph r: sub infix:«~~» (\l, \r) { say 1 }; my (@a, @b); @a ~~ @b 08:52
camelia rakudo 296da0: ( no output )
masak yup. "sequencer" was split off from "terminator" in S03 in commit 1506579c on 2009-01-16. 08:53
raiph looks like there's four groups of "specials" that aren't overridable using the sub infix: thing 08:54
masak apparently as part of TimToady++'s collusions with mtnviewmark++ (the periodic table guy).
raiph feeds, assigns, smartmatches, flipflops
masak all of which are sufficiently, hm -- I don't want to use the word "magical" here -- "invasive". 08:55
moritz macro-ish 08:56
masak in the sense that they cannot be reduced to just "the sum of their AST children", but contain something more.
masak bonks moritz with the "useless use of the word 'macro'" bat
(don't worry, the bat is made of foam.) 08:57
moritz masak: well, what term would you use to describe "the compiler has to do more than emit code for a simple infix here"?
masak "invasive". 08:58
08:58 Guest79805 left 08:59 pmurias joined
masak moritz: my first conclusion after surveying all the available content on macros before the grant was this: people like wishful thinking, and when pressed to provide examples, they will dream something up that looks like it will fly but will instead crash in the nearest ditch. 08:59
including, surprisingly, TheDamian.
since then I've been very wary of saying "macros can/will do this" of *anything* we don't already have an implementation for.
pmurias diakopter: re Perl6 backend written in Rust, you want to compile code to Rust or write the interpreter in Rust? 09:00
masak further strengthened by musings together with pmichaud when I was trying to actually "macro-ize" infix:<&&>.
moritz: basically, I'm saying "here be dragons". macros are awesome, but they won't do all people say they will. specifically, I don't think the four groups of invasive ops raiph++ mentioned are necessarily macro-ish. 09:01
in some other cases, "macro-ish" is used to simply mean "thunk-y". 09:02
raiph .oO ( I get karma for talking about invasive ops? we will fight them on the beaches, we will ... ) 09:03
masak it's more clear to me that macros will be able to give you thunky behavior (and in some sense, that's what the LOG example does) -- but I think it's a waste of the term "macro-ish" to describe something as narrow as "thunk", especially since we have the more precise term "thunk" already.
it's as if you observe the design of a light switch for the first time, and exclaim "it's quantum-mechanical!". well, yes, it is, but you can also use the much simpler laws of electromagnetism from the 19th century to describe the light switch. 09:05
not doing so commits some kind of scientific error of, um, egress.
"using a bigger tool to solve the problem than required." 09:06
moritz which is a bit (but not quite) like Occam's razor 09:08
masak aye.
whether a proof, a subroutine, or a choice of words, you always want to provide the smallest amount of material to get the job done. 09:10
that's where Strunk and White's "omit needless words" comes from.
and mathematicians' frowing upon using a proof by contradiction where no contradiction needed to be shown. 09:11
09:11 pupoque joined 09:13 fgomez left
pmurias masak: one thing that might be worth thinging about is how much of the proposed macro usage could be replace by a 'is thunky' parameter trait 09:23
masak aye.
09:23 dmol joined
pmurias sub infix:<||>($a,$b is thunky) { if $a { $a } else { $b() } } 09:24
09:25 crab2313 joined
masak aye. 09:27
r: sub trait_mod:<is>(Parameter $param, :$thunky!) { say "OH HAI" }; sub foo($x is thunky) {} 09:28
camelia rakudo 296da0: OUTPUT«OH HAI␤»
masak thinks about what the next step is
09:32 ppq_ joined 09:33 ppq_ is now known as pupoque_
lizmat goood *, #perl6! 09:33
.oO( a lot to backlog )
masak sorry... :P 09:34
something feels wrong there -- we put the trait on the *parameter*, but what we really want to affect is the *evaluation* of the arguments on the caller side. 09:36
arnsholt That won't work, will it? The second argument is going to be evaluated on invocation of the sub, no matter what you do 09:38
masak I notice that I am confused.
dalek ecs: 2acbd58 | (Elizabeth Mattijsen)++ | S32-setting-library/Containers.pod:
Elaborate on Hash.classify and Hash.categorize, suggested by masak++
09:41
masak where, in practice, is an argument evaluated? 09:42
we'd need to reach into that code path in the runtime and say "hold it! don't evaluate these arguments, just keep them at the AST level"
hm, not runtime. that's probably not feasible (although I can't put my finger on why.) 09:43
lizmat wrt to "will start", discussed this yesterday with TimToady, it was not in the spec anymore: instead "once" should be used
also: "will start" afaik was a nolop before these changes
noop
09:44 crab2313 left
masak probably need to reach into the caller at *compile time*, and re-write the way argument evaluation is done. 09:44
which immediately raises two issues:
(a) since subroutines can be post-declared, sometimes this needs to be done to calls that have already been parsed.
moritz no 09:45
we simply declare that thunking routines must be pre-declared
masak (b) if you're doing any kind of dynamic subroutine lookup, you're out of luck. the dynamic lookup happens at runtime, but the argument evaluation inhibition needs to be prepared at compile time.
moritz correct
masak moritz: I'll give you (a), though I do think we have an option there.
moritz: we do other kinds of similar post-fixups. 09:46
but your suggestion is the conservative option, so I'm fine with it.
we can always do better later.
09:48 pupoque_ left
raiph masak++ # p6 echo to adu's rust 09:49
09:49 pupoque left
hanekomu (p6 newbie here) I'm just watching Patrick's talk on Lists from YAPC::NA 2012 and tried a line from that talk: my @a = 1, 1, *+* ... *; with the latest rakudo, built from source, and it hangs. How has the syntax changed? 09:49
moritz r: my @a = 1, 1, *+* ... *; say "alive" 09:50
camelia rakudo 296da0: OUTPUT«alive␤»
moritz hanekomu: works here
masak r: my @a = 1, 1, *+* ... *;
camelia rakudo 296da0: ( no output )
moritz hanekomu: you just have to be careful not to it in the interactive environment, because it'll try to print the return value (ie the array) 09:51
hanekomu ah
moritz and printing an infinite array takes a long, long time
hanekomu yes, that's from the prompt
moritz you can do my @a = 1, 1, *+* ... *; 1; on one line of the prompt
hanekomu It's just that Patrick's example also showed the prompt
moritz: ah
works, thanks 09:52
10:01 raiph left
pmurias masak: re implementing is thunky, the way I could imagine it being implemented is that it turns the'sub with 'is thunky' arguments into a macro 10:02
10:03 pupoque_ joined
pmurias masak: we could achive it by hooking into the sub keyword 10:04
10:04 pupoque__ joined
masak pmurias: certainly a possibility, but feels heavy-handed and a bit circular. 10:04
wasn't the objective to replace some macro use cases with 'is thunky'?
10:05 pjcj left
pmurias yes, but 'is thunky' just introduces a macro only in a more limited manner 10:06
diakopter masak: why, just the other day I proved that proofs by contradiction weren't valid... by contradiction. 10:08
10:09 pmurias left
masak diakopter: I tend to think of such reasoning as "setting your boat on fire" or "pulling the carpet out from under yourself". :) 10:09
s/on fire/on fire while using it to cross a river/ 10:10
diakopter oh, I thought it was giving a virus to the first turtle below you
10:10 pupoque_ left
masak diakopter: have you seen qntm.org/responsibility ? 10:10
diakopter probably in some universe 10:11
masak :P
diakopter (yes, you need to qualify every utterance with "in this universe") 10:12
lizmat would that imply that a thunky sub doesn't have a scope of its own?
diakopter "appallingly intelligent mathematical statisticians" 10:13
masak: I hope I didn't feed the troll too much 10:14
masak looks 10:15
lizmat: no, I don't think so. what makes you think so?
lizmat: it's more like, the thunk makes sure to evaluate in its original environment. 10:16
lizmat because of thunks like in ?? !!
masak diakopter++ # factual, corteous, non-aggressive 10:18
lizmat: or && or || or ^^ for that matter.
lizmat: or ff and friends.
diakopter raiph++ rescuing it
masak lizmat: see my answer above about 'evaluate in its original environment'. 10:19
lizmat: this, I believe, is necessary for a thunk.
lizmat is just trying to picture a thunky sub
masak lizmat: consider, for example '$x && $y' in a world where infix:<&&> were successfully implemented in the setting. 10:20
lizmat: $y binds to a thunky parameter, so its evaluation is inhibited.
it will only ever actually be evaluated if $x is truthy -- right?
lizmat yes 10:21
masak now, at that point we're *in the setting*, in the infix:<&&> sub.
different environment. $y is far away in the user's program.
in a "lower scope", if you will. not visible in infix:<&&>
so, the thunk needs to "remember its environment", just like a closure does.
diakopter it makes all lexicals states? 10:22
masak effectively it needs to run "as if it never moved" from the spot where it was written.
dalek rlito: 7012a50 | (Flavio S. Glock)++ | / (2 files):
Perlito5 - compiler-in-browser - add missing Runtime module
masak diakopter: I cannot map that to a set of facts. could you rephrase?
diakopter you're a thunk? 10:23
masak ups the plonk prior on diakopter 10:24
diakopter it makes all "my" into "state" ?
masak ah.
no, I don't think that's it.
(also, the terminology that confused me was calling "state variables" "states". never seen that before.)
diakopter karma $i 10:25
.karma $i
...
masak diakopter: I don't think that's it, because the '$x && $y' could be in a for loop with 100 iterations, and each $y could be different (say, lexically defined in the loop body).
diakopter !karma $i
karma masak 10:26
hrm
Denny's seasoned fries aren't amazing
masak diakopter: so it's still very much a 'my' variable -- it's just that the thunk knows it is *in* the loop body (and has its lexical environment), even when it's activated from somewhere else, like the infix:<&&> sub.
diakopter what's the effect? 10:27
masak could you be more specific? 10:28
the effect is that running the thunk later sees the same lexicals as if it weren't a thunk.
diakopter how is that different from a state 10:29
masak r: for 1..10 { state $y = 0; $y++; say $y }
camelia rakudo 296da0: OUTPUT«1␤2␤3␤4␤5␤6␤7␤8␤9␤10␤»
masak r: for 1..10 { my $y = 0; $y++; say $y }
camelia rakudo 296da0: OUTPUT«1␤1␤1␤1␤1␤1␤1␤1␤1␤1␤»
masak that. 10:30
I'm saying thunks *retain* (and respect) the latter behavior of lexical variables.
diakopter right, what do you mean by "sees the same lexicals as if it weren't a thunk."
masak no turning into state variables involved.
r: 5 && my $y = 7; say $y 10:31
camelia rakudo 296da0: OUTPUT«7␤»
masak diakopter: the above wouldn't work if (say) the thunk had its own nested lexical scope.
10:31 cognominal joined
masak diakopter: the reason it works is that the thunk *shares* a lexical environment with its surrounding scope. 10:31
diakopter: in that sense, thunks are "unhygienic closures". 10:32
diakopter where's the thunk above
masak 'my $y = 7'
because
r: 0 && my $y = 7; say $y
camelia rakudo 296da0: OUTPUT«(Any)␤»
masak now it never ran.
so its being triggered is conditioned on runtime events. 10:33
diakopter I don't get how that makes it a "thunk"
masak that's what a thunk is.
when the arguments/operands aren't evaluated before their function/operator is.
diakopter how is that different from the area of a series of statements jumped over by a goto
masak if it weren't a thunk 'my $y = 7' would happen before '&&'. now it happens after (or not at all). 10:34
diakopter: I find it difficult to compare thunks and gotos. sorry.
diakopter I'm just trying to get at the definition of a thunk
so I'm asking whether the goto skipped area is one 10:35
masak diakopter: in my mind, a thunk is this and this alone: take a closure, but lose its own scope, instead piggy-backing on (what would normally be) the OUTER scope.
I don't know if that answers your question.
diakopter okay, but I don't see how that's different from a section of code skipped by a conditional goto 10:36
(how is there a closure in 5 && my $y = 7; ? 10:37
)
masak let me try to answer your question, but bear in mind that I can't properly model what you're asking here, so my answer may be off.
"a section of code skipped by a conditional goto" is functionally equivalent to an `if` statement.
if you're asking whether such an `if` statement is involved, the answer is, it is. it's in the infix:<&&> implementation.
(and that, in passing, was the philosophical difficulties pmichaud and I ran into. are `if` statements defined in terms of infix:<&&>, or vice versa?) 10:38
diakopter right, so I didn't say "if statement" so as not to be confused with the lexical scope its block creates
rn: my $y = 7 if $y; say $y
camelia rakudo 296da0, niecza v24-88-g1f87209: OUTPUT«(Any)␤»
masak right, in the above case '$y = 7' is also a thunk. 10:39
diakopter who uses "thunk" like this?
masak and similarly for statement_mod:<for>
diakopter: TimToady, for sure.
diakopter: 13 commits to the spec repo contain the word "thunk". 10:40
diakopter I always thought it was where a closure was implied but without curlies
masak 7 of them by TimToady.
10:41 pupoque_ joined
masak diakopter: yes, if by "without curlies" you also mean "without its own scope/environment". 10:41
diakopter masak: oh, I see our confusion. :D
masak thunks and closures are very similar. the only difference I know of is the "own scope" thing.
diakopter I meant "state variable" in the *outer* scope
you thought I meant in the inner scope 10:42
masak I don't see how that helps at all. 10:43
could you back this up with some code?
moritz thunks are defined by the grammatical context, closures are explicit
masak moritz: yes.
diakopter masak: I didn't think I was saying anything that could be "backed up" 10:44
masak moritz: and "grammatical context" could (hopefully) be reduced to "grammar rule or routine being used".
diakopter I was asking a question, not making a claim
masak diakopter: then my answer is still "no, I don't think so" :)
at least I don't see it.
diakopter it wasn't a rhetorical question
masak I was just wondering whether you saw something I don't, and could show me code to convince me. 10:45
apparently not :)
diakopter no, I was just trying to understand what you were saying
masak my understanding of thunks is totally not based on state variables. 10:46
and trying to put them on that foundation only serves to confuse me.
diakopter okay, but I still don't see how there's any distinction in the behavior
masak which is a weaker statement than saying you're completely wrong.
diakopter you haven't shown a distinction in the behavior
masak diakopter: oh! the assignment in a 'state' declaration is also a thunk. so there is a connection. 10:47
diakopter eh?
masak diakopter: but I don't know if thunks could be completely defined in terms of state variables. that feels backward to me.
diakopter: when you say 'state $s = 42', the '$s = 42' part is a thunk.
that's why it doesn't run every time that statement is hit. 10:48
diakopter goes to look up how the rest of the world uses the word
masak correct me if I'm wrong, but apart from that thunkishness, a 'state' variable is just a 'my' variable.
diakopter er
no 10:49
JimmyZ it like my int $s = once { 42 }
moritz masak: no, a 'state' variable also preserves state between subsequent calls to the same block
diakopter yeah, that's not how the rest of the world uses the word at all
moritz (well, it has to, in order to decide whether to evaluate the thunk) 10:50
but IMHO that's the bigger difference between 'my' and 'state' than whether the initialization thunks
masak moritz: oh, true.
diakopter a state variable is equivalent to this:
moritz because you have 'state $s;' without any initialization too 10:51
diakopter { state $a; $a = 6; } is the same as { my $a; { $a = 6; } }()
masak diakopter: as long as you hide the scope where the 'my' is declared, yes.
moritz diakopter: isn't there a way that recursion distinguishes the two?
masak oh! yes.
diakopter what? why hide what scope? 10:52
masak r: sub rec($n) { return unless $n; state $m = 0; $m++; say $m }; rec 5
camelia rakudo 296da0: OUTPUT«1␤»
masak r: sub rec($n) { return unless $n; state $m = 0; $m++; say $m; rec $n - 1 }; rec 5
camelia rakudo 296da0: OUTPUT«1␤2␤3␤4␤5␤»
masak diakopter's model doesn't explain this evaluation.
10:52 pupoque__ left
diakopter yes it does. 10:52
10:53 pupoque_ left
diakopter write it like I wrote mine 10:53
moritz r: my $m = 0; sub rec($n) { return unless $n; state $m = 0; $m++; say $m; rec $n - 1 }; rec 5
camelia rakudo 296da0: OUTPUT«1␤2␤3␤4␤5␤»
diakopter eh
no
masak but there we didn't hide $m.
so it's visible outside of &rev.
diakopter you delcared an inner $m
masak &rec*
10:53 pupoque__ joined
diakopter you forgot to remove the declaratio of hte inner $m 10:54
10:54 pupoque_ joined
moritz r: my $m = 0; sub rec($n) { return unless $n; $m++; say $m; rec $n - 1 }; rec 5 10:54
camelia rakudo 296da0: OUTPUT«1␤2␤3␤4␤5␤»
diakopter r: my &rec = { sub ($n) { return unless $n; state $m = 0; $m++; say $m; rec $n - 1 } }(); rec 5
camelia rakudo 296da0: OUTPUT«1␤2␤3␤4␤5␤» 10:55
masak ok, diakopter++
diakopter r: my &rec = { my $m = 0; sub ($n) { return unless $n; $m++; say $m; rec $n - 1 } }(); rec 5
camelia rakudo 296da0: OUTPUT«1␤2␤3␤4␤5␤»
masak that seems to correctly describe 'state' variables.
diakopter that's what I meant
(that last one)
masak but I still don't see what this has to do (at all) with thunks.
moritz S04 says
There is a new C<state> declarator that introduces a lexically scoped
variable like C<my> does, but with a lifetime that persists for the
life of the closure, so that it keeps its value from the end of one
call to the beginning of the next. Separate clones of the closure
get separate state variables. However, recursive calls to the same
clone use the same state variable.
diakopter oh. 10:56
that's what's so gosh-darn confusing.
moritz so, the "Separate clones of the closure get separate state variables" needs to be modeled with the outer-lexical trick
masak moritz: supposedly, 'clone' here means what I mean by 'incarnation'.
diakopter TimToady uses "closure" and "clone of closure" to mean the same thing
10:56 wk joined
masak basically, in order to get a runtime environment out of a compile-time environment, you need to incarnate it. 10:57
10:57 wk is now known as Guest31880
diakopter masak: okay, so we're both wrong 10:57
moritz are there still any open questions regarding thunks?
diakopter moritz: no...
I mean
no to "so, the " 10:58
the outer-lexical trick I showed is where they don't get copies
er, don't get separate state variables
er. 10:59
oh wait, I see how it can be true.
so anyway, yes, that shows that my model is right 11:00
moritz no
masak :)
diakopter by "clone of closure" he means "time the code that creates the closure is run"
(my assignment to &rec) 11:01
moritz diakopter: when emulating state variables with outer lexicals, you can either set them up so that every closure clone gets a separate state variable, but then recursion does too, or you never get separate state variables
11:01 rindolf left
diakopter how does my example not do the former? 11:01
(recursion there *doesn't* get a separate one) 11:02
moritz diakopter: which example, exactly?
diakopter the last one
the one I said demonstrated what I was saying
moritz diakopter: I'm trying to construct an example, hold on 11:03
diakopter k
(I still say the language there in the synopsis is absurdly esoteric, so much as to be absurdly confusing) 11:04
because it uses "clone" to describe an implementation detail of the compiler that's not necessary 11:05
moritz diakopter: no, you are right, it does work as specced
r: gist.github.com/moritz/6098219
11:05 Su-Shee_ joined
camelia rakudo 296da0: OUTPUT«1-1␤1-2␤1-3␤1-4␤1-5␤2-1␤2-2␤2-3␤2-4␤2-5␤» 11:05
moritz each iteration of the outer loop creates a new closure, which gets a separate emulated state var. Everything fine. 11:06
diakopter it's a trick everyone uses in JS all the time
11:06 crab2313 joined
diakopter moritz: heh, what if it was a state var? o_O 11:07
moritz but come to think of it, I don't understand why it works
why do the recursive calls share the same $m? 11:08
diakopter because there's only one $m per &rec
moritz oh, I see
because &rec actually is the inner closure 11:09
11:09 Su-Shee left
diakopter rnp: gist.github.com/moritz/6098219 11:10
11:10 pjcj joined
camelia rakudo 296da0, niecza v24-88-g1f87209: OUTPUT«1-1␤1-2␤1-3␤1-4␤1-5␤2-1␤2-2␤2-3␤2-4␤2-5␤» 11:10
..pugs: OUTPUT«*** Can't modify constant item: VStr "MkCode {isMulti = True, subName = \"&\", subType = SubPrim, subOuterPads = [], subInnerPad = MkPad (padToList []), subPackage = , subAssoc = AIrrelevantToParsing, subParams = [], subBindings = [], subSlurpLimit = [], subReturns = (mkTyp…
diakopter eh
why doesn't pugs like it? 11:11
11:13 Su-Shee_ is now known as Su-Shee
diakopter I use that exact trick in JS often to "capture" the value of a for loop variable inside a for loop when generating closures in a for loop 11:13
moritz diakopter: for pugs you need to bind to &rec 11:14
diakopter (and I've seen other people's code use it too)
moritz r: for 1, 2 -> $x { my &rec := { my $m = 0; sub ($n) { return unless $n; $m++; say "$x-$m"; rec $n - 1 } }(); rec 5 }
camelia rakudo 296da0: OUTPUT«1-1␤1-2␤1-3␤1-4␤1-5␤2-1␤2-2␤2-3␤2-4␤2-5␤»
11:15 pupoque__ left
diakopter I've also used that trick in C# to capture the same things for value to delegates generated in a loop 11:15
C# is worse there because it *does* copy values of value types, but not reference. 11:16
well, "worse" from a certain point of view 11:17
moritz p: for 1, 2 -> $x { my &rec := { my $m = 0; sub ($n) { return unless $n; $m++; say "$x-$m"; rec $n - 1 } }(); rec 5 } 11:19
camelia pugs: OUTPUT«1-1␤1-2␤1-3␤1-4␤1-5␤2-1␤2-2␤2-3␤2-4␤2-5␤»
moritz it's fascinating how some concepts have converged to one clearly best model in several programming languages 11:20
like the lexicals and closures work 11:21
and the C3 MRO for languages with MI
dalek ast: b595fce | (Elizabeth Mattijsen)++ | S04-declarations/state.t:
Variable "will start {}" trait is no longer specced
moritz it makes me want to search for more such patterns, and compile a list those successful elements of language design 11:22
diakopter me2
moritz our python and coffeescript folks will disagree, but I count "explicit declaration of symbols" among them 11:23
diakopter sigils only made it to powershell.. javascript has just the 1 sigil, except it can be repeated.
var $$$a = 33; console.log($$$a); /* prints 33 */ 11:24
right association for certain things 11:25
lizmat on a slightly more mundane level: 11:26
I'm trying to make the error on: 11:27
r: my $a is foo
camelia rakudo 296da0: OUTPUT«===SORRY!===␤You cannot say 'is foo' in a variable declaration.␤at /tmp/b87MlFntkE:1␤------> ␤ expecting any of:␤ TypeObject␤ default␤ dynamic␤»
lizmat also point to the location in the string where this occurs (like so many other errors)
masak moritz: fully agree on "one clearly best model". and yes, a list would be kind of awesome.
lizmat is this possible to do within the confines of the trait mod declaration, or do I need to get into the Actions to be able to do that? 11:28
masak diakopter: '$' is not a sigil in JavaScript. it's just a valid character in identifiers.
11:28 stevan_ left
masak diakopter: soo 'foo$' is as valid as '$foo' or 'fo$o'. 11:28
so* 11:29
diakopter yeah
lizmat in other words: can I get at the $/ of the outer scope, and if so, how? 11:30
11:31 rindolf joined
moritz well, $OUTER::('/') might work, but if you want to cross the nqp <-> rakudo boundary, probably not 11:32
lizmat trying...
11:33 pupoque__ joined
moritz (but it sounds like intervention in the Actions is what you really want/should do) 11:39
11:44 colomon joined 11:47 ilogger2 joined, ChanServ sets mode: +v ilogger2 12:04 pupoque__ joined 12:09 pupoque_ joined 12:35 birdwindupbird joined 12:37 pupoque_ left 12:49 pupoque_ joined 12:52 mtk joined 13:08 crab2313 joined
dalek kudo/nom: 0543620 | (Elizabeth Mattijsen)++ | src/core/Variable.pm:
We don't know the column, so don't pretend we do
13:13
kudo/nom: 5e6c759 | (Elizabeth Mattijsen)++ | src/ (2 files):
Expose NQP's $*W and $/ as attributes in Variable
kudo/nom: cb7c22b | (Elizabeth Mattijsen)++ | src/Perl6/World.nqp:
Allow our own expectations to be passed to .throw
kudo/nom: 3328a1c | (Elizabeth Mattijsen)++ | src/core/Variable.pm:
Make exceptions for errors in variable traits show line and position
13:13 pupoque_ left 13:14 pupoque__ left
lizmat I could keep changes to Actions to a mimimum 13:15
13:16 pupoque__ joined 13:23 Vlavv_ joined
JimmyZ :-) 13:23
13:25 colomon joined 13:26 celesta joined
celesta hello. finally found irc ^^ 13:27
dalek kudo/nom: 0818c24 | (Elizabeth Mattijsen)++ | src/core/Variable.pm:
Remove variable traits "is readonly" and "is rw": they are not specced

Although there are spectests for "is readonly", I fail to see the use of the attribute on a *variable* declaration.
lizmat hello celesta!
celesta rakudo: say "hugs to every body" 13:34
camelia rakudo 296da0: OUTPUT«hugs to every body␤»
lizmat hugme hug celesta
hugme hugs celesta
dalek ast: 253242f | (Elizabeth Mattijsen)++ | S06-traits/is-readonly.t:
Remove now obsolete tests on variable trait "is readonly"
13:35
rindolf celesta: hi. 13:38
celesta rindolf: hello 13:39
tadzik hugs celesta himself
rindolf celesta: welcome to IRC. 13:40
dalek ast: ae81f8c | (Elizabeth Mattijsen)++ | S12-attributes/class.t:
Remove unspecced 'is rw' atribute on variables
13:45
ast: 2213769 | (Elizabeth Mattijsen)++ | S12-attributes/recursive.t:
Remove unspecced 'is rw' atribute on variables
13:46
masak celesta: welcome, and hugs to you too! :) 13:47
celesta: I was gonna ask if your nick was a MLP reference -- but I see now that's "Celestia". my bad. :)
13:48 ppq_ joined
lizmat r: my $x is default(42); say $x # works fine 13:48
camelia rakudo 296da0: OUTPUT«42␤»
lizmat r: my $x is default (42); say $x # does something entirely different 13:49
camelia rakudo 296da0: OUTPUT«True␤»
lizmat
.oO(what a difference a space makes)
masak lizmat: that could well be the slogan of Perl 6 syntax. :)
lizmat feels to me the latter should bomb somehow
masak r: my $x (42); say "alive" 13:50
camelia rakudo 296da0: OUTPUT«alive␤»
masak I have no idea what's going on there.
std: my $x (42); 13:51
camelia std c2215f0: OUTPUT«ok 00:00 43m␤»
lizmat rakudobug ? stdbug ? 13:57
masak lizmat: I... I don't know. 13:59
what does it mean? I don't even
r: my $ (42); say "alive" 14:00
camelia rakudo 296da0: OUTPUT«alive␤»
masak that's the most meaningless line of code I've written all week.
lizmat and yet it executes :-)
r: my $x is default({ say "foo" }); say $x 14:02
camelia rakudo 296da0: OUTPUT«Block.new()␤»
14:02 crab2313 left
lizmat or should it maybe execute the block ? 14:02
could be argued either way, I guess 14:03
masak executing the block would prevent setting &-sigil variables to blocks, perhaps.
lizmat yes
otoh, it would be a nice feature to have it call a block on (re-)initialization 14:04
masak r: sub foo(:$) {}; say &foo.signature.perl
camelia rakudo 296da0: OUTPUT«:()␤»
masak lizmat: at that point, why not simply assign to it directly? 'my $x = "foo"' 14:05
lizmat the point is that whenever the value is reinitialized (e.g. by assigning Nil to it) it would get the same value again 14:06
r: my Int $x is default(42); $x = 1; say $x; $x=Nil; say $x
camelia rakudo 296da0: OUTPUT«1␤42␤»
cognominal r: my @a = < 1 2 3 >; for @a -> $_ is ref { $_++ };
camelia rakudo 296da0: OUTPUT«===SORRY!===␤Cannot call 'trait_mod:<is>'; none of these signatures match:␤:(Mu:U $child, Mu:U $parent)␤:(Mu:U $type, :rw(:$rw)!)␤:(Mu:U $type, :nativesize(:$nativesize)!)␤:(Mu:U $type, :unsigned(:$unsigned)!)␤:(Mu:U $type, :hidden(:$hidden)!)␤:(M…
cognominal is there a way to iterate an array and modify in place? 14:08
masak r: my @a = <1 2 3>; for @a <-> $_{ $_++ }; say @a
camelia rakudo 296da0: OUTPUT«2 3 4␤»
masak r: my @a = <1 2 3>; for @a { $_++ }; say @a
camelia rakudo 296da0: OUTPUT«2 3 4␤»
masak '<-> $_' is the default for for loops.
r: my @a = <1 2 3>; for @a -> $_ is rw { $_++ }; say @a 14:09
camelia rakudo 296da0: OUTPUT«2 3 4␤»
masak and '<-> $_' is sugar for '-> $_ is rw'
lizmat r: my @a = < 1 2 3 >; for @a -> $_ is rw { $_++ }; say @a # if you want to be explicit,
cognominal ho, that's right. I forgot
camelia rakudo 296da0: OUTPUT«2 3 4␤»
masak is faster than lizmat :)
lizmat :-) 14:10
cognominal thx, masak, lizmat. Wish I could that in javascript/coffeescript but everything is passed by value. So doing it gets ugly very fast. 14:12
masak cognominal: just wrap things in an object. the object references are also passed by value, but the extra layer of indirection can be used to simulate the "container" effect you want. 14:13
i.e. `function foo(w) { w.x++ }; var my_w = { x: 0 }; foo(my_w); foo(my_w); console.log(my_w.x); # w` 14:14
er, s/w`/2`/
lizmat wonders if S06:1922 is a remnant from days passed by 14:18
synopsebot Link: perlcabal.org/syn/S06.html#line_1922
14:18 benabik joined
cognominal I pass the structure and the key/index instead so that will buy me the potential of extra behavior that maybe someday offset the cost. 14:18
that was a answer to masak suggestion. 14:19
masak++, lizmat++
14:20 ppq_ left
masak synopsebot! \o/ 14:22
lizmat: no. there used to be another 'is ref', which got unspec'd, and some time later this one got spec'd again.
lizmat but as yet unimplemented 14:23
as the tests for it are marked "skip"
masak lizmat: the newer one got spec'd sometime after I had spent quite some energy complaining loudly about the semantics of arrays being passed to .new methods.
lizmat: it must've been, um, 2009.
I remember sitting in the back seat talking with mberends and jnthn about it.
lizmat :-)
masak or was that 2010? I forget. 14:24
I could dig up the backlog if you're interested.
14:24 census joined
lizmat nono, I was just looking for dead weed to be removed 14:24
like "is start" I recently buried 14:25
tadzik hmm, I didn't know that synopsebot uses /me
masak yeah, March 2010.
tadzik ah, it just repeated after lizmat :
:)
lizmat
.oO( wonders what it will do with a synopsis ref in a /nick)
14:26
14:27 rindolf joined
tadzik it reacts on said() from Bot::BasicBot, so it may not do anything :) 14:27
lizmat *phew* :-) 14:28
masak lizmat: ah, here: irclog.perlgeek.de/perl6/2010-03-07#i_2073494
lizmat masak: thanks!
14:35 ppq_ joined
perigrin lizmat: 10:36 [freenode] S06:1922 Erroneous Nickname 14:36
synopsebot Link: perlcabal.org/syn/S06.html#line_1922
perigrin So you're partially safe :)
lizmat :-)
timotimo ohai #perl6 14:38
lizmat timotimo o/ 14:39
masak timotimo! \o/
timotimo out of nowhere, i'm now wondering if the automatically 'generated' BUILD methods are actually generated once per class or if there's a generic BUILD method that iterates through all things it needs to do to do them 14:40
i wonder if that would give a speed boost to class instantiation if one would build a BUILD builder.
perigrin timotimo: you'd have to name it Bob. 14:41
masak timotimo: they have to be per-class, since they are submethods (which don't inherit).
benabik Bob Bob the Build Builder.
Maybe Bo Bob?
perigrin benabik: either way, as long as he can fix it ... we're good. 14:42
14:42 Psyche^ joined
timotimo BUILDALL isn't where i should be looking at, right? that just goes through all the necessary BUILD methods or something? 14:42
i hear thunder! it will get cool today! \o/
masak timotimo: mayhaps this will help? perlgeek.de/blog-en/perl-6/object-c...ation.html 14:44
timotimo: it seems to me from that diagram that whereas BUILD is a submethod, BUILDALL is not -- it's on Mu and inherits, and it's overridable. 14:45
timotimo right. it seems like there's a thing called BUILDPLAN that's basically a "pregenerated to-do list" that describes how BUILD should behave on any given class 14:47
so there's not much thoroughly obvious optimisation to be had there
that article is more enlightening now than it was the last time i read it; i wonder if that's a flaw in me or in the article? 14:48
masak sounds like a feature, not a flaw ;) 14:51
timotimo rain \o/
14:53 ppq_ left, pupoque__ left
Su-Shee timotimo: where? 14:54
14:56 pupoque__ joined
dalek ecs: b7db6eb | (Timo Paulssen)++ | S26-documentation.pod:
fix heading for :allow
14:58
ecs: 57f92fe | (Timo Paulssen)++ | S99-glossary.pod:
S99: add "mumble"
ecs: a5f83cf | (Timo Paulssen)++ | S99-glossary.pod:
S99: add "6model"
timotimo Karlsruhe
14:59 benabik left 15:01 ppq_ joined
dalek kudo/nom: b9ac7a4 | (Elizabeth Mattijsen)++ | / (5 files):
Make CORE.setting's files' names a bit more descriptive at either end
15:04
15:05 isBEKaml joined
dalek kudo/nom: 96776bb | (Elizabeth Mattijsen)++ | src/core/must_be_first.pm:
Well, we need this at the beginning, of course, oops
15:06
lizmat cycling & dinner& 15:08
timotimo .o(essen auf rädern?) 15:09
lizmat no, just cycling to a restaurant (~25 km) and then have dinner there :-) 15:10
and then cycle back :-) 15:11
masak sounds wonderful. 15:12
15:12 benabik joined
timotimo hmm. given how much more work needs to be done, i suppose this timing isn't terribly bad: creating 10000 simple objects (just has 4 attributes) takes 6.57 seconds (including parse&compile time) and 10000 parcels (as .item) with the same contents takes 2.62 seconds 15:15
(--target=optimize takes 0.83 seconds) 15:16
hm, so that takes it up to a difference between roughly 1.7 seconds and 5.6 seconds 15:17
i know that the pypy people can make object creation about as fast as just creating a tuple ... i wonder how hard it will be for rakudo to do the same thing 15:18
should probably be even easier, since objects i rakudo don't just "grow new attributes" all the time
15:19 BenGoldberg joined
JimmyZ --target=optimize? 15:20
timotimo basically "just compile and optimize, do not run" 15:21
masak .oO( I maded you an optimized program but I ate it ) 15:29
15:29 dmol joined
timotimo hmm. if the optimizer knows for a fact that an object is "super simple" (no custom new, no custom BUILD, and derived from a "super simple" class), i wonder if it could use some super crazy fast nqp::createobject op instead of going through the BUILDPLAN and all that 15:31
flussence it's worth trying even for a tiny speedup; everything's an object... 15:34
timotimo yeah, but how many objects are "super sipmle"?
what's with me and typos today? 15:35
15:36 ppq_ left
BenGoldberg Are Int and Real "super simple" by that reasoning? 15:36
flussence yeah, looking at it at least a few of the numeric classes fit those criteria
Str isn't though, has a BUILD...
BenGoldberg Even if it only sped up the numerics, it would likely be worth it. 15:37
timotimo unless of course the optimizer learns to turn all numeric calculations into native calculations on its own ;) 15:38
out of all these things 'on the table' right now, i wonder which would be low hanging enough for me to pick ... 15:39
flussence Cursor also doesn't do any fance stuff... now that's one that might be worth optimising.
timotimo oh, cursor!
but that's already in nqp
i don't think nqp has an optimizer
i would very, very much like a faster parse stage during setting compilation, honestly 15:40
flussence +1
15:41 census left
BenGoldberg preflex: ordinal 3 15:41
preflex 3th
flussence wat. 15:42
masak .oO( are you 3thsty? have a glass of ordinal water. )
timotimo i wonder if rakudo will ever reach the state where my hypothetical immutable Point class with arithmetic operators defined on it will have code like "$new = $new + $another * 5" 'inlined' to not create intermediate objects, or perhaps even re-use the memory locations inside the old $new ...
BenGoldberg Are Real objects immutable? 15:43
flussence in a perfect world, that'd be condensed down to a single FMA CPU instruction :)
timotimo i guess the compiler would have enough info on its hands, but probably not enough cleverness yet - by far
15:43 SamuraiJack__ joined
timotimo BenGoldberg: Real is just a role 15:44
you want to ask about Num or Rat
er, Rat doesn't do real 15:45
BenGoldberg Oh
r: (3 + 2i).say
camelia rakudo 96776b: OUTPUT«3+2i␤»
BenGoldberg r: (3 + 2i).perl.say
camelia rakudo 96776b: OUTPUT«Complex.new(3, 2)␤»
timotimo Num already doesn't do complex BUILD or New stuff, it just boxes a numeric object "in itself"
BenGoldberg Complex. That's what I meant to say
timotimo so that should be pretty fast
complex does a little bit of complex setup in its construction 15:46
colomon rn: say (2/3) ~~ Rat
camelia rakudo 96776b, niecza v24-88-g1f87209: OUTPUT«True␤»
colomon rn: say (2/3) ~~ Real
camelia rakudo 96776b, niecza v24-88-g1f87209: OUTPUT«True␤»
timotimo rn: say <2/3> ~~ Real 15:47
camelia rakudo 96776b: OUTPUT«False␤»
..niecza v24-88-g1f87209: OUTPUT«True␤»
timotimo hehe.
colomon rakudobug
15:47 ppq_ joined
timotimo i don't think rakudo (or perl6 in general) has a very clear definition of "immutable" yet 15:47
colomon rn: say <2/3> ~~ Str
camelia niecza v24-88-g1f87209: OUTPUT«False␤»
..rakudo 96776b: OUTPUT«True␤»
timotimo Complex has $.im and $.re defined as "ro" (by default), but that doesn't mean that the class can't $!re = 10 somewhere out of the blue
colomon rn: say <2/3>.WHAT
camelia niecza v24-88-g1f87209: OUTPUT«(Rat)␤»
..rakudo 96776b: OUTPUT«(Str)␤»
timotimo and you can probably still nqp::bindattr(...) or something?
15:48 isBEKaml left
colomon nieczabug too, joy 15:48
timotimo well, isn't it NYI on rakudo?
colomon you say tomato, I say tomato
timotimo :)
colomon anyway, my real point back there was that Rat does Real; if that's not obvious in Rakudo, it may be that it's doing Rational which itself does Real 15:50
pmichaud instead of "must_be_first.pm" and "must_be_last.pm" I propose "prologue.pm" and "epilogue.pm". (in case nobody thought of those yet.) 15:52
or core_prologue and core_epilogue
afk again 15:53
15:53 btyler joined
BenGoldberg I wonder if at some point in the future, I could ask rakudo to always auto-unbox objects of a particular class into one or more variables, and to always inline methods of that class where possible (and re-box those variables into an object, if inlining is impossible). Basically, each Rat, Complex, and Point would always get turned into a pair of Nums. Kinda like structs in C 15:53
timotimo sounds more like something a jit would do, i thik 15:54
masak r: grammar G { rule TOP { ^ <foo> }; rule foo { foo } }; say ?G.parse(" foo") 15:57
camelia rakudo 96776b: OUTPUT«False␤»
masak I was under the impression that the space between '^' and '<foo>' would eat the space at the beginning of " foo". 15:58
what am I missing?
JimmyZ token vs rule? 15:59
moritz masak: I think there's a special case that leading whitespaces in rules aren't counted as <.ws>
masak JimmyZ: well, 'rule' is the one that gives me whitespace significance.
moritz: right, but this one isn't leading, it's after the '^'.
r: grammar G { rule TOP { ^ <?> <foo> }; rule foo { foo } }; say ?G.parse(" foo") 16:00
camelia rakudo 96776b: OUTPUT«False␤»
masak and putting more stuff in between doesn't help either...
r: grammar G { rule TOP { ^ :: <foo> }; rule foo { foo } }; say ?G.parse(" foo")
camelia rakudo 96776b: OUTPUT«===SORRY!===␤:: not yet implemented␤at /tmp/QVYdpUIFHv:1␤------> grammar G { rule TOP { ^ ::⏏ <foo> }; rule foo { foo } }; say ?G.par␤»
JimmyZ oh, yes
moritz r: grammar G { rule TOP { ^ <?> <foo> }; rule foo { foo } }; say ?G.parse(" foo") 16:01
camelia rakudo 96776b: OUTPUT«False␤»
masak if no-one has an explanation I'm going to file a rakudobug.
masak makes a wide-eyed, maniac-looking face 16:02
S03:330 has this to say: 16:03
synopsebot Link: perlcabal.org/syn/S03.html#line_330
masak "Only whitespace sequences immediately following a
matching construct (atom, quantified atom, or assertion) are eligible."
but at least <?> is an assertion, no?
moritz it is
in the very least it's an atom :-) 16:04
masak heh.
masak submits rakudobug
16:04 fridim_ joined
BenGoldberg r: my $x (Int); $x = 'alive'; say $x 16:06
camelia rakudo 96776b: OUTPUT«alive␤»
BenGoldberg r: my $x (Int 2); say $x
camelia rakudo 96776b: OUTPUT«===SORRY!===␤A parameter may only have one prefix type constraint␤at /tmp/sfM2O9lE5_:1␤------> my $x (Int 2⏏); say $x␤ expecting any of:␤ scoped declarator␤ constraint␤»
BenGoldberg r: my $x (Int(2)); say $x
camelia rakudo 96776b: OUTPUT«===SORRY!===␤coercive type declarations not yet implemented. Sorry. ␤at /tmp/LrvZ9daRiz:1␤------> my $x (Int(2)⏏); say $x␤»
masak r: grammar G { token TOP { ^ :s <foo> }; rule foo { foo } }; say ?G.parse(" foo") 16:07
camelia rakudo 96776b: OUTPUT«True␤»
masak oh, so *that* works?
r: grammar G { token TOP { :s ^ <foo> }; rule foo { foo } }; say ?G.parse(" foo")
camelia rakudo 96776b: OUTPUT«False␤»
16:12 dmol left 16:16 dmol joined, pjcj joined, colomon left
pmichaud note that rakudo still has the leading whitespace bug, iirc 16:22
16:22 Vlavv_ left
pmichaud (at least we still have the note about it in the star release notes) 16:23
afk again
16:28 ppq_ left, pupoque__ left
dalek kudo/nom: aca15ca | (Elizabeth Mattijsen)++ | / (6 files):
Make proper core_(pro|epi)logue, as suggested by pmichaud++
16:30
16:32 ppq_ joined 16:34 Vlavv_ joined 16:35 dmol left 16:36 dmol joined 16:38 colomon joined
lizmat hmmm… it seems dalek is not picking up commits 16:41
*sigh* it is :-)
.o( scrolling down helps )
timotimo can someone fix my entry in the CREDITS where it sys my github user name is "timotimo", but it really should be just "timo"? 16:42
i guess when i put it in i though of irc nickname 16:43
moritz lizmat: re commit 5e6c75902c, I'm not sure it's a good idea to let $*W into rakudo userspace
it's very much compiler internal, and should stay there if at all possible
dalek kudo/nom: c9c4387 | (Elizabeth Mattijsen)++ | CREDITS:
Fix timo's U
16:44
lizmat well, I only use it to call a compiler internal method on it :-)
World.throw basically has all the things we need to throw a correct compile error 16:45
I would be all for exposing this to Perl6 in another way
moritz I currently don't have the mental capacity to think of a better way 16:46
but if I do, I'll fix it for sure :-)
lizmat :-)
until then, it is only exposed in an internal Perl6 module anyway
if anything, I would be more worried about GC issues actually
moritz that's part of my worries too 16:47
$/ and $*W contain references to llots of things
timotimo can't we just set a &*GRAMMAR_THROW (non-sic)? 16:48
masak r: grammar G { token TOP { ^<foo>$ }; rule foo { foo } }; say ?G.parse(" foo") 16:50
camelia rakudo 96776b: OUTPUT«True␤»
masak r: grammar G { token TOP { ^<foo>$ }; rule foo {foo } }; say ?G.parse(" foo")
camelia rakudo 96776b: OUTPUT«False␤»
masak I thought rules ignored initial whitespace... 16:51
I notice that I am confused.
dalek kudo/nom: bcfe199 | (Elizabeth Mattijsen)++ | src/core/Variable.pm:
Make list of "will" suggestions take up less screen space
16:52
moritz masak: it's fascinating how rakudo still parses so well, being built on Perl 6 rules... :-) 16:53
masak heh. 16:57
can I just file this one as a separate ticket?
it's related to whitespace and rules just like the ticket I already filed, but this issue is sort of the opposite of that one... 16:58
so they may not be related.
masak does a search through RT first
here is some discussion in a rejected ticket: rt.perl.org/rt3/Ticket/Display.html?id=75668 17:01
ah -- here: rt.perl.org/rt3/Ticket/Display.html?id=109874 17:03
let's just add today's discussion to that one.
17:20 birdwindupbird left
Ulti parallelism in Perl6 is going to be so utterly great! I've been waiting for 8 hours for some bootstraps in R which could have been done in an hour on this desktop with trivial parallelism 17:23
every language should really be getting keywords to prefix loops with if they can be parallel unrolled 17:25
spider-mario OpenMP style
Ulti yeah basically 17:26
though I still think some pragma to alter the parallelism to be across many desktops would be good 17:28
use hosts <pc1.domain.com pc2.domain.com pc3.domain.com>;
though I guess looking at file handles and making sure they are copied over and stuff become incredibly hard to implement 17:29
just doesn't feel impossible to make the magic though, something that is like GNU parallel but with most common use cases implemented for you 17:30
17:44 grondilu joined 17:58 SamuraiJack__ left 18:02 rindolf left 18:09 mathw joined
diakopter ruoso: howdy :) 18:11
18:12 colomon left 18:25 dmol left 18:27 dmol joined, colomon joined 18:28 Vlavv_ left 18:30 kurahaupo joined 18:39 kurahaupo_ joined 18:40 kurahaupo left 18:41 Vlavv_ joined
dalek kudo-star-daily: 0617542 | coke++ | log/ (4 files):
today (automated commit)
18:54
19:04 kurahaupo_ left 19:06 Nom- joined 19:08 jtpalmer joined
grondilu r: say .WHAT given my Array of Int @ = (^100).roll(10); 19:08
camelia rakudo bcfe19: OUTPUT«(Array+{TypedArray})␤»
grondilu so this is implemented now. Cool. 19:09
19:10 abnorman joined 19:27 rindolf joined
lizmat yes, that should work now 19:28
19:29 xinming joined
lizmat r: say .WHAT given my Int Array @ = (^100).roll(10); # didn't this work for a long time already as well ? 19:30
camelia rakudo bcfe19: OUTPUT«===SORRY!===␤Multiple prefix constraints not yet implemented. Sorry. ␤at /tmp/EXaamKCUMA:1␤------> say .WHAT given my Int Array ⏏@ = (^100).roll(10); # didn't this work␤ expecting any of:␤ scoped declarator␤»…
lizmat I guess it didn't :-) 19:31
masak I don't know what you think that means. 19:33
a Positional of Int Array hybrids?
r: class IntArrayHybrid is Int is Array {}; my $iah = IntArrayHybrid.new; say $iah 19:35
camelia rakudo bcfe19: OUTPUT«0␤»
masak r: class IntArrayHybrid is Int is Array {}; my $iah = IntArrayHybrid.new; $iah.push(5, 2, 7); say $iah.elems
camelia rakudo bcfe19: OUTPUT«3␤»
masak that's... sick. and awesome. :P
r: class IntArrayHybrid is Int is Array {}; my $iah = IntArrayHybrid.new; say $iah.^methods 19:36
camelia rakudo bcfe19: OUTPUT«Int Num Rat FatRat abs Bridge chr sqrt base expmod is-prime floor ceiling round lsb msb sign conj rand sin asin cos acos tan atan atan2 sec asec cosec acosec cotan acotan sinh asinh cosh acosh tanh atanh sech asech cosech acosech cotanh acotanh unpolar cis Complex …
masak r: class IntArrayHybrid is Int is Array {}; my $iah = IntArrayHybrid.new; say +$iah.^methods, " ({+Int.^methods} + {+Array.^methods})" 19:37
camelia rakudo bcfe19: OUTPUT«136 (64 + 72)␤»
masak r: class IntArrayHybrid is Int is Array {}; my $iah = IntArrayHybrid.new; say +$iah.^methods, " ({+Int.^methods} + {+Array.^methods} - {$iah.^methods - Int.^methods - Array.^methods})" 19:38
camelia rakudo bcfe19: OUTPUT«136 (64 + 72 - 0)␤»
19:39 kurahaupo joined
lizmat fwiw, I wasn't going for any hybrids… I just misread the Array bit :-) 19:40
19:43 logie joined
masak well, doing something like 'my Array[Int] @a' is one of the most common beginner blunders people make with Perl 6. 19:49
I guess I'm just attuned to picking it out and pointing it out to people. :)
lizmat hehe 19:50
Q: how many CATCH blocks to a try {} ?
masak slogan: "the sigil is a *type declaration*"
19:50 logie left
lizmat I think the spec says: 1 19:50
how can we reconcile this with the "is catch {…}" variable trait? 19:51
celesta goodbye. thank you masak 19:53
19:53 celesta left
lizmat *will catch 19:55
will only 1 variable in a block be allowed to have the "will catch {…}" trait?
and will this prohibit a "real" CATCH block ?
same seems to apply to CONTROL blocks 19:56
lizmat is marking "will catch" and "will control" as NYI until further notice 19:57
dalek kudo/nom: 8a8048a | (Elizabeth Mattijsen)++ | src/core/Variable.pm:
General "will foo { ... }" cleanup

Marked as NYI: final init end catch control compose Now also work: begin check Todo: make $_ refer to the variable being defined
20:00
masak celesta++ # one new RT ticket and one old 20:01
on the first day!
20:06 crab2313 joined, colomon left
lizmat hmmm…. have I broken rakudo's build with that last commit ? 20:07
spider-mario I am a little confused by commit 0818c24cab5ccab3aba4858b6f5d09df12760738 20:09
dalek kudo/nom: 85b9234 | (Elizabeth Mattijsen)++ | src/core/Variable.pm:
Oops, long live vim!
spider-mario github.com/rakudo/rakudo/commit/08...df12760738
“Although there are spectests for "is readonly", I fail to see the use of the attribute on a *variable* declaration.” 20:10
wouldn’t it… make the variable read only?
what am I missing?
geekosaur discussion yesterday
lizmat please note, this is about *variables*, not about parameters or atrtibutes
attributes
spider-mario yes 20:11
lizmat my $a is readonly=4
spider-mario I thought of something like the effect of the Readonly module in Perl 5
lizmat my $a := 4;
this is not what "is readonly" is
ReadOnly in p5 makes things readonly after the fact 20:12
hmmm…. I guess, not, my recollection seems to be wrong 20:13
guess I'm confusing it with Internals::READONLY or so
spider-mario I was thinking about: 20:14
Readonly my $a = 4;
lizmat r: my constant a = 4; say a
camelia rakudo bcfe19: OUTPUT«4␤»
spider-mario oh
so, is that different from constant without my? 20:15
I thought constant $a implied compile-time evaluation
lizmat indeed it does 20:16
hmmm....
20:20 pmurias joined
lizmat r: my $a=BEGIN 5; my constant b = $a; say $a; say b # rakudobug? 20:21
camelia rakudo bcfe19: OUTPUT«5␤(Any)␤»
pmurias Ulti: re paralleism across multiple desktops isn't the sort of paralleism we would want to do across different machines different to the ones we want to do in different threads 20:23
?
lizmat spider-mario: so maybe we need to spec "is readonly" for variables after all 20:25
tricky bit is to actually allow one assignment
spider-mario should we maybe make it mandatory that it takes place immediately after declaration? 20:26
lizmat maybe would should have a phaser that fires at compile time whenever a block is completely compiled ?
Ulti pmurias: nope not in bioinformatics, I usually want to go wide to around 100 cpus just to get everything done
when the time taken for IO is way less than CPU you dont mind shuffling things over the network 20:27
spider-mario rust doesn’t have that restriction but I’m not sure how they do it exactly
lizmat Ulti: before long, you will have 100 CPU's on your desktop
Ulti but what does take time is writing all that stuff yourself and doing it properly
lizmat spider-mario: yes, but that doesn't make it easier at the implementation level
20:27 bluescreen10 joined
Ulti lizmat: yeah and at that point I will just do more and more ambitious analysis :) biotech is ahead of computational ability its growing faster than CPU power 20:27
lizmat Need. More. Metal :-) 20:28
Ulti or clouds
fluffy clouds made of carbon nano tubes and pulses of laser light or something 20:29
lizmat
.oO( I sing the cloud electric )
20:30
masak .oO( do cloud solutions dream of electric mapreduces? ) 20:32
lizmat
.oO( or do they just fear the blade runner? )
20:38
20:40 crab2313 left 20:43 colomon joined
masak .oO( in their defense, that blade runner is kind of a Dick ) 20:44
lizmat
.oO( privately, he seemed ok )
20:45
mst roses are red, violets are glorious, don't surprise, oscar pistorious
lizmat :-) 20:46
diakopter :D
geekosaur (Jaco Pastorius?) 20:47
lizmat that dude played bass
20:51 bluescreen100 joined
masak .oO( that dude played /Morone saxatilis/ ) 20:51
punning in Latin. that's the international sign that masak is too tired to be awake! 20:52
'night, #perl6 20:53
20:54 bluescreen10 left
lizmat gnight masak! 20:55
20:59 kurahaupo left
timotimo 22:52 < masak> punning in Latin. that's the international sign that masak is too tired to be awake! 20:59
22:53 < masak> 'night, #perl6
er, apologies
21:00 kurahaupo joined
diakopter .seen sorear 21:08
yoleaux I saw sorear 21 Jul 2013 06:33Z in #perl6: <sorear> admittedly it's largely out of necessity
preflex yoleaux: you have 1 new message. '/msg preflex messages' to read it.
diakopter hee 21:09
21:15 araujo joined 21:16 rindolf left
dalek kudo/nom: 3257b05 | (Elizabeth Mattijsen)++ | src/Perl6/ (3 files):
Repurpose START phaser code to make once {} blocks work
21:18
lizmat now on to update some now failing tests
21:29 bluescreen10 joined
dalek ast: 84f18c8 | (Elizabeth Mattijsen)++ | S04-phasers/ (2 files):
Remove tests for now defunct START phaser
21:33
21:34 dmol left 21:35 dmol joined 21:40 ecocode joined
dalek ast: a3782f8 | (Elizabeth Mattijsen)++ | S04- (2 files):
Repurpose START phaser tests for once blocks
21:40
kudo/nom: 5a49bbf | (Elizabeth Mattijsen)++ | t/spectest.data:
START phaser tests are now once statement block tests
21:41
21:47 dmol left 21:48 xenoterracide joined, dmol joined 21:53 dmol left 21:55 dmol joined
pmurias BenGoldberg: re difficulty compiling to .pyc, that depends how much performance we are willing to sacrifice 22:01
22:05 dmol left, dmol joined 22:13 colomon left 22:19 grondilu left 22:21 colomon joined
dalek ast: 03f1fee | (Elizabeth Mattijsen)++ | S04-statements/once.t:
Transmogrified the START phaser tests to once block tests

Unfortunately, the block does not return its final value yet, so those two tests are now marked todo. Will need some help with building the ops in:
   method statement_prefix:sym<once>($/)
in src/Perl6/Actions.nqp
22:23
22:43 dmol left 22:44 dmol joined 22:50 fgomez joined 22:51 fgomez left
lizmat .tell moritz: wrt to $*W and $/ in Perl6 world: maybe we should add $*W and $/ to the trait mod signature? 22:51
yoleaux lizmat: What kind of a name is "moritz:"?!
22:52 fgomez joined
lizmat .tell moritz wrt to $*W and $/ in Perl6 world: maybe we should add $*W and $/ to the trait mod signature? 22:52
yoleaux lizmat: I'll pass your message to moritz.
22:54 dmol left 23:01 colomon left 23:03 pupoque_ joined
dalek kudo/nom: d5523ba | (Elizabeth Mattijsen)++ | src/core/ (3 files):
Add more sensible error messages for unknown attribute/parameter/routine traits

Need access to $*W and $/ to make the messages really come out right.
23:09
lizmat aka: $ perl6 -e 'class A { method a is foo {} }'
===SORRY!===
You cannot say 'is foo' in a method declaration.
at -e:1
------>
expecting any of:
rw parcel hidden_from_backtrace
pure default DEPRECATE inlinable
prec equiv tighter looser assoc
and on that note, I bid you all a good night! 23:10
timotimo :) 23:12
23:13 colomon joined 23:23 pmurias left 23:26 kurahaupo left 23:42 ecocode left 23:43 ecocode joined 23:47 ecocode left 23:51 kurahaupo joined