»ö« 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 declarationat /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«12345678910» | ||
masak | r: for 1..10 { my $y = 0; $y++; say $y } | ||
camelia | rakudo 296da0: OUTPUT«1111111111» | ||
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«12345» | ||
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«12345» | ||
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«12345» | ||
diakopter | r: my &rec = { sub ($n) { return unless $n; state $m = 0; $m++; say $m; rec $n - 1 } }(); rec 5 | ||
camelia | rakudo 296da0: OUTPUT«12345» | 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«12345» | ||
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-11-21-31-41-52-12-22-32-42-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-11-21-31-41-52-12-22-32-42-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-11-21-31-41-52-12-22-32-42-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-11-21-31-41-52-12-22-32-42-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«142» | ||
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 implementedat /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 constraintat /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
|