pugscode.org/ | nopaste: sial.org/pbot/perl6 | pugs: [~] <m oo se> (or rakudo:, kp6:, elf: etc.) (or perl6: for all) | irclog: irc.pugscode.org/
Set by Tene on 29 July 2008.
00:03 ryanc left 00:09 [particle]2 joined 00:11 bacek joined 00:13 dolmen left, [particle] left
TimToady japhb: no, it hasn't changed, as far as I know. I would not mind switching the next version of p5 over to Artistic 2, but that would require community buy-in that would perhaps be difficult to achieve 00:14
or we could go further with the junctional licensing: "may be copied under the terms of either the Artistic 2 or (the Artistic 1 or the GPL)" 00:16
00:16 Juerd_test joined
Juerd_test (Testing some webchat thingy at mibbit.com) 00:16
(Looks nice)
TimToady the main point is that Artistic 2 doesn't need the dual licensing with GPL in order to be GPL compatible 00:17
00:17 Juerd_test left
TimToady that might possibly upset some folks who are violently anti-GPL, I suppose 00:18
anyway, I'm not too worried about it one way or the other, given that A1 has held up in court now 00:19
always assuming the SC doesn't overturn that decision...
I'm just very glad I used the terms "conditions" and "provided that" 00:20
00:25 [particle]1 left, Limbic_Region left 00:26 Limbic_Region joined 00:41 [particle] joined 00:42 Limbic_Region left 00:48 sri_work_ left, sri_work joined 00:56 [particle]2 left 01:02 scrottie joined 01:19 iblechbot left 01:25 [particle]1 joined 01:36 xinming left 01:37 xinming joined
meppl good night 01:41
01:44 [particle] left 01:53 justatheory left 01:54 meppl left 02:15 alester joined 02:22 wknight8111 left 02:23 fridim_ left 02:28 [particle]1 left, [particle] joined 02:29 elmex left 02:46 Schwern left 02:52 Schwern joined 02:53 Schwern left
japhb TimToady: ah, thank you for the license info. And belated congratulations on the A1 court win! (I'd seen that earlier this week, but forgot to pop in and say something.) 03:15
03:28 sitaram joined 03:32 lambdabot left 03:44 lambdabot joined 03:58 agentzh left 04:00 hercynium joined 04:11 _00z joined 04:23 ggoebel left 04:25 alester left 04:32 alester joined 04:42 Bzek joined 04:44 overdrive3000 joined 04:46 hercynium left 04:55 Bzek left 04:56 agentzh joined 05:15 kanru left 05:37 Psyche^ joined 05:45 alester left, Schwern joined, Schwern left 05:46 kanru joined 05:48 Schwern joined 05:49 Patterner left, Psyche^ is now known as Patterner 05:54 masak joined 05:55 overdrive3000 left 06:13 ashizawa joined 06:15 _00z left 06:19 drbean left 06:52 penk joined 07:01 apeiron left 07:02 BinGOs joined, viklund joined 07:11 apeiron joined 07:13 kane_ left
masak one of the most common mistakes I make when programming Perl 6 is forgetting to put "self." in front of calls to methods on the invocant 07:14
and to some extent, the "self." doesn't _feel_ necessary, so instead of feeling regret, I feel irritation each time I forget it 07:15
is there a nifty shorthand I'm unaware of?
moritz_ use $s as self ,) 07:16
then it's only $s.stuff
but I don't think you can really avoid it
because methods *are* different than subs
masak true
it's just... as a Java programmer, I think I expect to be able to leave off the "self." 07:17
07:17 sri_work left
masak I guess I could shroud all my methods in given self { ... } 07:17
:)
and then use .method
moritz_ well, why not ;)
masak or maybe just call the invocant $_ 07:18
moritz_ note that $_ scopes differntly than "ordinary" variables
masak noted. 07:19
...which doesn't work to my advantage here, I guess :/
moritz_ does it even matter for you?
masak couldn't $_ be changed in one of the method calls in my method? 07:20
and then it wouldn't contain my invocant any more 07:21
moritz_ my $_ is ro = self; or soemthing perhaps? 07:22
masak 'ro' affects the container, right? not the value inside? 07:24
moritz_ right
masak a few months back, I had an email discussion with someone on perl6-lang about 'is ro' and optimizations 07:25
if the 'ro' trait sticks to the container, not much can be said about the mutability of the value inside 07:26
and hence, not many optimizations can safely be made 07:27
moritz_ except for immutable types
like Str and most numeric types
07:34 drbean joined
masak can the same container be flagged as 'is ro' in one block and 'is rw' in another? 07:40
moritz_ no 07:49
masak why not?
moritz_ but a container of the same name can be declared in a nested scope
masak but then it's another container
moritz_ wouldn't make much sense, would it? 07:50
TimToady you can call a method with $.stuff even if there's no such attribute 07:52
or @.stuff, %.stuff, whatever is good documentation 07:53
masak TimToady: that's good news
TimToady well, on the other hand, I think when you're not using it as a variable, self.stuff reads better 07:54
and you can simply declare the invocant as $_, as in method foo ($_: $a,$b,$c)
(but be prepared for inner constructs to hide it) 07:55
((which is why it's not the default))
masak I think my expectations are skewed from Java
TimToady and "self" itself is just a token rule, which you can override if you like
I prefer to know whether I'm invoking the single dispatcer or the multiple dispatcher 07:56
so I think it's important to maintain the visual distinction
since the dispatchers have *very* different philosophies 07:57
of a "who's to be master, that's all" variety
as for transitive ro-ness, it seems easier to add it where we need it than to remove it where we don't 07:59
masak yes
all I'm curious about is, could an ro container ever be mutated, theoretically?
TimToady and the one-level approach we currently have prevents needless autoviv, which is the main point 08:00
everything the mathematicians haven't nailed down precisely can be mutated theoretically :) 08:01
masak :)
08:02 pjenvey_ joined
TimToady and, since the default parameter trait could be determined lexically, a pragma could set all default sigs to "is frozen" or some such without getting into C++-ish const-ipation 08:03
I think half the weight of a typical C++ program must be in "const" declarations 08:05
moritz_: btw, there is no exists or delete at the moment, but I'm thinking about whether to re-introduce them 08:06
moritz_ TimToady: S29 lists them as "is export"
TimToady it's currently supposed to be %hash.:exists<foo> 08:07
moritz_ TimToady: doesn't that make them available as a sub?
TimToady well, S29 might be wrong there, but in any case, export would turn them into exists(%hash, 'foo')
it wouldn't support the p5 usage
moritz_ right 08:08
to support the perl 5 useage, do they have to be macros? 08:09
TimToady kinda
given the current way EXPR has to look at the precedence of prefix and postfix ops to see if it needs to interleave them 08:10
it wouldn't be too difficult to interpose an operation just before the final subscript
so exists %foo<bar> turns into something like %foo.exists.<bar> 08:11
except that it can then just change the meaning of the final subscript
moritz_ sounds scary, in the general case 08:12
TimToady but after staring at various forms of my usage in STD, I think the P5 form is actually important to maintain
moritz_ yes 08:13
TimToady because of the way people chunk it
currently it would have to be written self.<_>[self.pos].:exists<ws>
(since I've been using gimme5, I just cheat and use the p5 form there)
moritz_ can't %hash<nonexistantkey> just return something that 'exists' recognizes as non-existant? 08:14
TimToady but it really wants to be either "exists self.<_>[self.pos]<ws>"
or "self.<_>[self.pos]<ws> :exists"
moritz_ some kind of "special undef", like we do it all the time?
TimToady yes, that works for exists, but not so well for delete 08:15
moritz_ uhm, right
TimToady you'd have to mark every value with a backref to its container
moritz_ which is (at least) equally scary 08:16
TimToady the main problem with the interleaving macro approach is, what if the user defines their own delete multi
moritz_ multi macro? 08:17
TimToady thinking normal function
but it might not have the right scoping with respect to the builtin macro 08:18
well, maybe it would
moritz_ maybe we can have some kind of non-evaluation context
so that sub foo :noneval (...) { .. } receives and AST of its argument capture
s/and/an/ 08:19
TimToady might be more useful to be able to pop off the last operation and have the rest automatically compiled
at least, that would be more useful for exists/delete
but any macro can theoritically get the AST and play with it 08:20
moritz_ the Perl6is approach is to offer both ;)
but a macro can't participate in multi dispatch, right?
TimToady correct
moritz_ well, I guess it's hard to do multi dispatches on ASTs too
TimToady well, it can do multi dispatch, but only at compile time, not run time 08:21
moritz_ the TCL approach is to move the parsing to run time ;) 08:23
TimToady fine, if you have the One True Syntax
moritz_ (I don't think it's practical for Perl 6 in any way ;) 08:24
TimToady so anyway, that's the problem with macros, and why we ended up with the .:exists<foo> form
08:24 pjenvey_ left
TimToady since we already had methods like $filehandle.:r 08:25
08:26 iblechbot joined
TimToady but the point of monkeying with EXPR is that we could rewrite exists %foo<bar> into exists(%foo,<bar>) as a real function call that could be multied in with other multies 08:29
sort of a self-modifying macro, as it were 08:30
but still thinking about it. meanwhile, I don't think exists exists 08:31
araujo There is no spoon 08:32
08:35 Myoma left
moritz_ should I remove them from STD? 08:35
TimToady already gone in my copy, but thinking how to fix my own calls :) 08:36
the .:exists<foo> form is actually kinda hard for gimme5 to translate generally
('course, that's the other nice thing about that form is that you can use the implicit $_ form while preserving the appearance of a subscript 08:38
so maybe we'll stick with the adverb-as-method syntax, and install something in the undefined warner to tell you what to use instead of exists and delete 08:39
well, can't really think straight at 1:40 in the morning... 08:41
(not that I can think straight at any time of day...)
so, night night.
moritz_ fractal thinking is preferred over straight thinking anyway ;)
good night ;)
TimToady zzz & 08:42
08:43 jferrero joined 08:50 zamolxes left 09:04 bacek left 09:08 meppl joined
pugs_svn r22005 | lwall++ | [STD] remove p5ish usages of exists/delete 09:08
r22005 | lwall++ | [gimme5] translate .:exists and .:delete forms to p5
r22005 | lwall++ | [S29] remove "is export" from exists/delete methods
TimToady is too old to do sleep-hacking # zzz really 09:10
pugs_svn r22006 | lwall++ | [STD] somehow missed adding min and max infixes 09:16
TimToady zzz really really... 09:17
09:27 larsen_ joined
scrottie that should fix that one. 09:32
moritz_ now somebody brave should fix the test suite ...
scrottie erm, pardon. lost control of x2x. 09:33
or MENU
scrottie kills x2x... dammit
09:39 pmurias joined, pmurias left 09:51 zamolxes joined 09:52 zamolxes left 09:53 zamolxes joined 10:25 cotto_w0rk joined 10:29 kane_ joined 10:42 cotto_work left 10:50 pmurias joined 10:51 sitaram left 11:11 wknight8111 joined 11:16 elmex joined 11:20 zamolxes left
pmurias is there any use of being able to use an embedded smop from haskell? (i want to play with the haskell FFI, and i'll do it if it's not pure yak shaving) 11:22
11:23 zamolxes joined 11:41 penk left 11:43 BinGOs left
audreyt pmurias: sure, it'll provide an alternate eval() path for pugs without going through GCC at runtime... 12:07
pmurias audreyt: going through GCC is hack until smop can load bytecode 12:09
* a hack
moritz_ I thought SMOP was designed to be a run time library, not a VM? (that's what ruoso keeps telling me...) 12:10
audreyt also it will make it easier to expose callback primitives
so you can get e.g. STM stuff as additional objects
to the smop runtime 12:11
12:11 ashizawa left
audreyt moritz_: there is very little difference... if perl5's ByteLoader isn't broken then it's arguably a VM (though a particularly platform-dependent one) as well :) 12:12
pmurias: embedded smop would be there's no need to write extensive "foreign export" wrapper stuff to expose haskell-land objects (or perl5-land objects) into smop
moritz_ audreyt: I guess that's exactly what the difference is: byte code loading 12:13
audreyt pmurias: so if you got smop embedding going in ffi, then we can have 12:14
smop_s1p_root_namespace_insert :: Interpreter -> Name -> Object -> IO ()
pmurias i started working on a m0ld Pugs backend so the smop haskell, but can switch to the smop embedding if you think it's more important
audreyt I think both are pretty important but FFI sounds like fun 12:16
sorry, bbiab, my <1mo old macbook disk is rapidly failing :/
pmurias s/so the smop haskell/ 12:18
\/
audreyt having smop_s1p_root_namespace_insert in hsland means randomly inserting new classes available thru the runtime, for example a parser class or even a &*::eval 12:19
er I mean &*eval.
12:20 clintongormley joined
pmurias PIL1 seems to reinvent [] is some places 12:23
s/is/in/ 12:24
audreyt goes finding replacement to completely failing HD. :(
bbl
12:33 IRSeekBot left
pmurias audreyt: what's the prefered way to reading AST for a given bit of code, -Cpil1 doesn't add enough whitespace 12:37
12:37 ruoso joined
ruoso Hello! 12:38
audreyt pmurias: then it could be fixed -- for human inspection I usually use pugs -CParse-Pretty
12:39 diakopter joined
ruoso moritz_, about to be or not to be a vm... the VM concept barriers are pretty much debatable.... I now tend to say... If you think p5 as a VM, then smop is a VM... 12:40
pmurias ruoso: hi 12:41
ruoso what I do think is that there's a big difference in the fact that SMOP doesn't need a Native Call Interface, because it doesn't abstract to that level...
pmurias, hi 12:42
diakopter pmurias: hi
ruoso TimToady, one thing I'm not really sure is about exposing methods as subs (unless when explicit "is export")... I don't really see the use for that... 12:43
pmurias diakopter: hi
ruoso: OTOH smop would benefit from a NCI 12:44
ruoso It can have several NCI implementations... they will be tools to integrate things...
but they are far from being *the* NCI that allows getting out of the "vm"
because there isn't such a sandbox in smop 12:45
even when smop has a bytecode, in the end that bytecode could be represented as a set of C calls
and the bytecode usage is limited to the scope of that specific code 12:46
it's not really like an assembler...
we just use that to make it easier to write stackless code 12:47
we could, in theory, survive writing only C code...
but we're too lazy to do that 12:48
pmurias ruoso: the discussion is a bit pointless, but we do not differ from parrot much in that regard 12:49
ruoso TimToady, is there a specific use case you have in mind for having all methods visible as subs in the Package?
moritz_ is that even the case?
12:49 Alias_ joined
moritz_ if so, where is that specced? 12:49
ruoso pmurias, indeed... it's bit pointless...
moritz_, TimToady told me at some point in the irc 12:50
moritz_ it seems very weird. Method dispatch is handled by the object, and sub calls by something completely differnt 12:53
might have been a misunderstanding of some kind 12:54
ruoso it's not the dispatch that is the same... but the methods that are *also* exposed as subs in the package...
like aliases 12:55
so you can refer to the method object going through the package
but I think the sane way to do that would be through the meta
so I don't see the use case for having the aliases for the methods in the package 12:56
12:56 BinGOs joined
moritz_ but it would also imply weird stuff: class { has $.time; # here time() refers to self.time } 12:56
12:57 BinGOs left, BinGOs joined
pmurias ruoso: re qualified attendees, what's the biggest barrier to hacking on smop now? 12:57
ruoso pmurias, the exotic nature of SMOP?
12:58 simcop2387 left 12:59 simcop2387 joined
ruoso I think that barrier should lower once that s1p is in place... 13:00
but at this point, a lot of faith in the future is needed to hack on smop ;)
audreyt, pmurias, btw... embedding smop in pugs should be a very interesting way to implement s1p... it should even allow us to have a evalbot ;) since pugs could be creating mold frames at runtime and executing them... 13:02
instead of having to go through gcc to compile the code... 13:03
and I even think smop already has enough features to support some oneliners 13:04
pmurias food&
13:08 jferrero left 13:12 alester joined 13:18 jan__ left 13:22 alester left
ruoso leaving to an interview about free software in a local radio... 13:27
ruoso later &
13:27 ruoso left 13:33 rdice joined 13:46 IRSeekBot joined 13:49 ggoebel joined 13:53 Bzek joined
clintongormley rakudo: @a=<1 2 3>; say @a; 13:59
p6eval rakudo 29834: OUTPUT[Scope not found for PAST::Var '@a'ā¤current instr.: 'parrot;PCT::HLLCompiler;panic' pc 156 (src/PCT/HLLCompiler.pir:103)ā¤]
clintongormley rakudo: my @a=<1 2 3>; say @a;
p6eval rakudo 29834: OUTPUT[123ā¤]
clintongormley rakudo: @a=<1 2 3>; say "@a";
p6eval rakudo 29834: OUTPUT[Scope not found for PAST::Var '@a'ā¤current instr.: 'parrot;PCT::HLLCompiler;panic' pc 156 (src/PCT/HLLCompiler.pir:103)ā¤] 14:00
clintongormley rakudo: my @a=<1 2 3>; say @a;
p6eval rakudo 29834: OUTPUT[123ā¤]
clintongormley blast
moritz_ rakudo: my @a=<1 2 3>; say @a.perl;
clintongormley rakudo: my @a=<1 2 3>; say "@a";
that got it foxed :)
p6eval rakudo 29834: RESULT[["1", "2", "3"]ā¤1]
rakudo 29834: OUTPUT[@aā¤]
clintongormley rakudo: my @a=<1 2 3>; say "@a[]"; 14:01
p6eval rakudo 29834: OUTPUT[@a[]ā¤]
clintongormley huh?
moritz - reading your blog
about interpolation
masak indeed, huh?
moritz_ that's weird
clintongormley glad it's not just me :)
masak clintongormley: perhaps not implemented yet
moritz_ I knew it worked some time ago
masak clintongormley: care to submit a bug to rakudobug? :)
moritz_ (or I think I knew)
clintongormley pugs: my @a=<1 2 3>; say "@a"; 14:02
p6eval pugs: OUTPUT[@aā¤]
clintongormley pugs: my @a=<1 2 3>; say "@a[]";
p6eval pugs: OUTPUT[1 2 3ā¤]
clintongormley ok masak
hmm - url?
moritz_ [email@hidden.address]
clintongormley ah - just an email 14:03
ok
any particular format for subject, body etc?
moritz_ nothing really
clintongormley can i get a rakudo version number from the bot?
moritz_ 16:00 < p6eval> rakudo 29834: OUTPUT[@a#] 14:04
the 29834 is the revision number
clintongormley ah right - thanks
moritz++ for the blog
keep it up
moritz_ clintongormley: I wrote about 5 more posts already... 14:05
clintongormley out of interest, why would "@a" not work?
moritz_ clintongormley: but since I know that I'll slow down, I publish them only one per day
clintongormley :D
moritz_ I think it's because of email addresses
but I'm not sure
clintongormley ah ok
moritz_ it seems array interpolation is undertested 14:07
r15926 | pmichaud | ... * Understands basic interpolation schemes, including interpolation of arrays and other constructs into "..." and <<...>> .
so it's clearly a regression, not a TODO thing 14:08
14:12 Exodist joined
masak moritz_: yes, it's because of email addresses 14:13
clintongormley moritz: "Finally you should know that both [..] and {...} are just method calls with a special syntax, not something tied to arrays and hashes. That means that they are also not tied to a particular sigil. " 14:14
??
you give as your example:
my $a = [1, 2, 3]; say $a[2]; # 3
so does that actually mean $a contains an array ref?
14:16 pmurias left
moritz_ clintongormley: yes 14:16
clintongormley: or "an Array object", since everything is a reference, so otalking about references is mostly meaningless 14:17
clintongormley but if you were to say, eg my %a={ 'a'=> 1, 'b' => 2}; print %a[1]
pugs_svn r22007 | moritz++ | [t] some fixes for try as a function
clintongormley what would that do?
fail? :) 14:18
moritz_ no, you can use { ... } to construct hashes, IIRC
pugs_svn r22008 | moritz++ | [t] move interpolation tests to spec/, add a few. clintongormley++.
moritz_ rakudo: my %a={ 'a'=> 1, 'b' => 2};; say %a.perl; say %a<b>
p6eval rakudo 29834: OUTPUT[Odd number of elements found where hash expectedā¤current instr.: 'parrot;List;hash' pc 2739 (src/gen_builtins.pir:1883)ā¤]
moritz_ ... or perhaps not. /me is unsure ;) 14:19
pugs: my %a={ 'a'=> 1, 'b' => 2};; say %a.perl; say %a<b>
p6eval pugs: OUTPUT[\(\("a", 1), \("b", 2))ā¤2ā¤]
clintongormley sorry, my question was about how [] and {} are methods, not specifically tied to arrays/hashes 14:20
masak IIUC, things like my @a = [1,2,3]; create am array with one element, namely the Array object with the three elements 1, 2 and 3.
that still surprises me sometimes.
moritz_ clintongormley: just a sec, I'll write something for you.. 14:21
clintongormley but if you were to try to use [] on a hash... presumably that would be 'unknown method' or something similar
[particle] pugs: my %h = { 'a' => 1 }; %h['a'];
p6eval pugs: RESULT[\\("a", 1)]
[particle] urk 14:22
rakudo: my %h = { 'a' => 1 }; %h['a'];
p6eval rakudo 29834: OUTPUT[Odd number of elements found where hash expectedā¤current instr.: 'parrot;List;hash' pc 2739 (src/gen_builtins.pir:1883)ā¤]
pasteling "moritz_" at 89.13.255.83 pasted ".[] as a method, for clinton" (6 lines, 138B) at sial.org/pbot/31970
[particle] rakudo: my %h = ( 'a' => 1 ); %h['a'];
p6eval rakudo 29834: RESULT[undef]
[particle] rakudo: my %h = ( 'a' => 1 ); %h{'a'};
p6eval rakudo 29834: RESULT[1]
moritz_ clintongormley: does the example in the paste make it more clear? 14:23
[particle] looks like t/spec/ needs some tests wrt %h[...] and @a{...}
clintongormley yeah - i get that you can define those symbols as a method
moritz_ [particle]: I just moved some array interpolation tests there, and currenly fudging them 14:24
clintongormley the way you wrote it in that tutorial, my first thought was that sigils are syntactic sugar, and not really necessary to determine array/hash etc
as opposed to "actually these are just implemented as methods of array and hash objects respectively" 14:25
masak moritz_: nitpick: you defined postcircumfix:<{ }> but used []
moritz_ masak: uhm, yes. /me dumb ;)
masak not at all, it's just Friday :)
pugs_svn r22009 | moritz++ | [spec] fudged array-interpolation.t for rakudo. 14:29
r22009 | moritz++ | Sadly I also had to join some lines, because fudge doesn't work with multi
r22009 | moritz++ | line test statements
masak it doesn't? :/
[particle] hrmm, that can be fixed
masak fudge is less magical than I supposed...
moritz_ [particle]: go right ahead
[particle] yeah, not today, unfortunately 14:30
14:30 Alias_ left
[particle] work for 3.5hrs, then dentist, then weekend with in-laws 14:30
moritz_ sounds like no fun :( 14:31
pugs_svn r22010 | moritz++ | [t] moved hash interpolation test to spec/ 14:32
r22011 | moritz++ | [spec] fudged hash-interpolation.t for rakudo 14:35
masak at least he doesn't have to work _at_ the dentist's office, while his in-laws watch
[particle] :) 14:36
masak things can always be less fun than they actually are.
[particle] -O"less fun than it actually is"
masak haha
[particle] i'd like to say that parrot has impressed me. 14:40
seems it doesn't matter what platform regression spectests are added on, they work on all platforms
portability++ parrot++ 14:41
moritz_ except for a few small GC issues, or libicu unavailability
masak I'm impressed too. but I do get segfaults on every other runtime error, due to some unresolved GC issue. 14:42
[particle] gc is *hard*
but we're addressing that now. 14:43
14:43 pmurias joined
[particle] first mmd, then io, with ongoing gc. 14:43
masak [particle]++
pmurias audreyt: why doesn't PIL1 derive Data? 14:45
audreyt pmurias: GADTs can't currently derive data automagically 14:46
pmurias: though we can arrange for it to happen
using the derive package
14:47 scrottie left
pmurias audreyt: are there any GADTs in PIL1? 14:50
pugs_svn r22012 | moritz++ | [t/spec] add RT number to todo message
audreyt oh right 14:51
there is none atm :) it was factored out
14:51 rakudo_svn joined
rakudo_svn r30447 | moritz++ | [rakudo] added array interpolation tests to spectest_regression 14:52
r30449 | moritz++ | [rakudo] add hash interpolation tests to spectest_regression
audreyt you'd need to derive Data for everything else it uses, though
[particle] hrmm, rakudo_svn bot used to be faster than #parrot's dalek at reporting svn ci 14:53
audreyt including Val, which has the VRef case
which which uses IVar
which is GADT
audreyt finally recalled the chain
pmurias: but you can experiment with standalone deriving 14:54
14:57 turrepurre joined 15:04 cathyal joined 15:05 alester joined 15:08 viklund left 15:11 justatheory joined 15:14 hercynium joined 15:16 meppl left 15:17 meppl joined 15:22 bennymack-work joined 15:23 mofino joined
bennymack-work is there something to read about the rakudo REPL? I get these PAST/Var errors when attempting to acces "my" variables 15:24
15:24 zamolxes left
moritz_ bennymack-work: can you paste an example script? 15:26
list assignment is not implemented, so ($a, $b) = ... won't work 15:27
15:28 rindolf joined, Exodist left 15:30 meppl left
clintongormley moritz_ please add p6 regexes to your tutorial list 15:31
or are they Rules?
15:31 jhorwitz joined
moritz_ clintongormley: they are Rules 15:31
clintongormley ah ok
15:31 meppl joined
pasteling "bennymack" at 24.75.15.14 pasted "REPL issues." (6 lines, 93B) at sial.org/pbot/31972 15:32
clintongormley and what's that .perl method i see you use?
a deparser?
moritz_ clintongormley: it's the built in Data::Dumper equivalent
clintongormley ok
ta
moritz_ bennymack-work: the rakudo REPL puts a block around each line :(
clintongormley laters all
bennymack-work hrm 15:33
moritz_ bennymack-work: so to use variables in the repl, you have to define them on the same line
bennymack-work ok
moritz_ rakudo: my $x = 1; say $x.WHAT
p6eval rakudo 29834: OUTPUT[Intā¤]
moritz_ I love my evalbot ;)
[particle] too 15:34
bennymack-work would using an our variable fix that somehow?
15:34 meteorjay left
moritz_ no 15:35
masak bennymack-work: I never use the Rakudo REPL. it sucks. 15:38
I write command-line one-liners instead :)
moritz_ that's a bit ugly when you want to test quoting 15:39
because one kind of quote is always used up as the delimiter of the program
masak yes. 15:40
in those cases, I cat to a file and run the file
15:42 justatheory left 15:45 Exodist joined 15:50 ruoso_ joined
[particle] masak: file a bug, if you think it sucks 15:51
15:51 justatheory joined
masak [particle]: good idea. 15:52
15:54 fronty joined, pmurias left
jhorwitz masak: ping 16:00
masak jhorwitz: pong 16:01
jhorwitz working on getting november running under mod_perl6 16:02
masak cool!
how's it going?
jhorwitz lots of registry support missing for cgi-emulation, but that shouldn't be too hard to fix
[particle] jhorwitz++ masak++
jhorwitz but initial tests show a 10x speedup once the script is loaded the first time 16:03
masak jhorwitz: compared to running from source?
because nowadays we run from PIR, with a 17-fold speedup :)
jhorwitz compared to running from pure cgi
ah nice!
we can run that too. :)
masak ah, nice 16:04
17 x 10 = 170 :)
jhorwitz mod_perl6 is using the pure-perl6 source
[particle] ummm, wow.
moritz_ but it compiles only for the first request (or the startup), right? 16:05
so I guess you can't get both speedups
jhorwitz correct (for each apache process), then it uses the cached version
right
16:05 exodist_ joined
jhorwitz so we're probably seeing the same speedup 16:05
16:06 Exodist left
jhorwitz but it's helping me move ModPerl6::Registry along, so that's good too. :) 16:06
16:09 zamolxes joined
masak indeed. 16:09
16:10 kanru left
masak what _would_ help performance for november, however, is caching of pages for logged-out users 16:12
that 17-fold speedup does make november usable, but caching on top of that is just good sense
but I know nothing about such things, so I don't know how difficult it is to set up 16:13
jhorwitz you can do that with mod_perl6 by keeping a global (per-process) cache 16:14
masak sounds good 16:15
how do I flag pages likely to change as such?
or rather, will that caching mechanism be able to discriminate between logged-in and not-logged-in users> 16:16
s/>/?/
16:16 Jedai joined
jhorwitz just declare a hash: "our %CACHED_PAGES" in wiki and keep the parsed pages and metadata in there. it's up to you to determine when to use it. 16:16
TimToady p6 is supposed to have a PROCESS namespace outside of GLOBAL for such things 16:17
presuming mod_perl6 uses separate interpreters
jhorwitz it does, for each apache worker/process 16:18
TimToady then it should probably be %PROCESS::CACHED_PAGES eventually
masak jhorwitz: looking forward to future collaboration
jhorwitz threaded environments have pools of interpreters per-process
masak gotta go eat sushi in the rain now.
jhorwitz mmmm
masak yes :)
jhorwitz enjoy. :) 16:19
masak I will, thanks :)
16:19 masak left
jhorwitz particle: can i get $r.method() to work w/o rakudo parsing "method" as a keyword? 16:19
TimToady rakudo: class Hi { method method { say 'hi' }}; Hi.method() 16:21
p6eval rakudo 29834: OUTPUT[hiā¤]
TimToady looks like it works to me
jhorwitz hm
TimToady rakudo: class Hi { method method { say 'hi' }}; my $x = Hi; $x.method() 16:22
p6eval rakudo 29834: OUTPUT[hiā¤]
jhorwitz then there's probably some error in my "method" method, cuz i get this: invoke() not implemented in class 'Undef' 16:23
jhorwitz investigates
16:24 rindolf left
bennymack-work is map implemented yet? I can't seem to get it to work. 16:26
rakudo: < foostraōæ½xDFe barstraōæ½xDFe fakestraōæ½xDFe >.map:{ ucfirst $^straōæ½xDFenname } 16:27
p6eval rakudo 29834: OUTPUT[Statement not terminated properly at line 1, near ":{ ucfirst"ā¤current instr.: 'parrot;PGE::Util;die' pc 120 (runtime/parrot/library/PGE/Util.pir:82)ā¤]
Auzon rakudo: my @a = <1 2 3 4 5>; @a.map({$_ + 1}).say
p6eval rakudo 29834: OUTPUT[23456ā¤]
bennymack-work rakudo: < foostraōæ½xDFe barstraōæ½xDFe fakestraōæ½xDFe >.map({ ucfirst $^straōæ½xDFenname }).say
p6eval rakudo 29834: OUTPUT[Statement not terminated properly at line 1, near "\ufffdenname })"ā¤current instr.: 'parrot;PGE::Util;die' pc 120 (runtime/parrot/library/PGE/Util.pir:82)ā¤]
Auzon Unicode support on the bot isn't terrific
TimToady fffd is the "unicode replacement character" iirc 16:28
bennymack-work rakudo: < foo bar fake >.map({ ucfirst $^baz }).say
p6eval rakudo 29834: OUTPUT[FooBarFakeā¤]
[particle] it's probably the colon sytax that's not working
TimToady rakudo: < foostraƟe barstraƟe fakestraƟe >.map: { ucfirst $^straƟenname } 16:29
p6eval rakudo 29834: OUTPUT[error:imcc:syntax error, unexpected USTRINGC, expecting STRINGC ('unicode:"$^stra\x{df}enname"')ā¤ in file 'EVAL_14' line 27ā¤Lexical '$^straƟenname' not foundā¤current instr.: '_block19' pc 93 (EVAL_14:34)ā¤]
TimToady rakudo: < foostraƟe barstraƟe fakestraƟe >.map :{ ucfirst $^straƟenname } 16:30
p6eval rakudo 29834: OUTPUT[Statement not terminated properly at line 1, near ":{ ucfirst"ā¤current instr.: 'parrot;PGE::Util;die' pc 120 (runtime/parrot/library/PGE/Util.pir:82)ā¤]
16:30 meteorjay joined
moritz_ the bot does a double decode or encode somewhere 16:31
TimToady rakudo: < foostrasse barstrasse fakestrasse >.map :{ ucfirst $^strassenname }
p6eval rakudo 29834: OUTPUT[Statement not terminated properly at line 1, near ":{ ucfirst"ā¤current instr.: 'parrot;PGE::Util;die' pc 120 (runtime/parrot/library/PGE/Util.pir:82)ā¤]
TimToady rakudo: < foostrasse barstrasse fakestrasse >.map: { ucfirst $^strassenname }
p6eval rakudo 29834: RESULT[["Foostrasse", "Barstrasse", "Fakestrasse"]]
moritz_ rakudo: say 'ƶ'
p6eval rakudo 29834: OUTPUT[ƶā¤]
moritz_ rakudo: say 'ƶ'.bytes
p6eval rakudo 29834: OUTPUT[Method 'bytes' not found for invocant of class 'Perl6Str'ā¤current instr.: '_block11' pc 21 (EVAL_13:13)ā¤]
TimToady well, you have to know the encoding before you can know the bytes 16:32
16:32 larsen_ left
TimToady rakudo: say 'ƶ'.chars 16:32
p6eval rakudo 29834: OUTPUT[1ā¤]
TimToady rakudo: say 'ƶ'.codes 16:33
p6eval rakudo 29834: OUTPUT[Method 'codes' not found for invocant of class 'Perl6Str'ā¤current instr.: '_block11' pc 21 (EVAL_13:13)ā¤]
TimToady rakudo: say 'ƶ'.codepoints
p6eval rakudo 29834: OUTPUT[Method 'codepoints' not found for invocant of class 'Perl6Str'ā¤current instr.: '_block11' pc 21 (EVAL_13:13)ā¤]
[particle] you're not going to get much support from rakudo for those layers yet
moritz_ TimToady: isn't that 'codes'? 16:34
ah, right
well, current .chars is actually .codes
I tested that a while ago
jhorwitz TimToady: "method" problem solved. it helps to install mod_parrot after recompiling. ;-) 16:35
16:37 pjenvey_ joined, scrottie joined 16:38 jferrero joined
[particle] silly programmer 16:38
jhorwitz definitely a PEBKAC moment
16:43 kanru joined
rakudo_svn r30455 | moritz++ | [rakudo] various small updates to tools/*.pl 16:46
r30455 | moritz++ | * progress-graph.pl: configurable output size, less x ticks
r30455 | moritz++ | * test_summary.pl: we don't have #pure markers any more
r30455 | moritz++ | * autounfudge: usage() used to throw a bogus warning. Fixed
16:49 cotto_w0rk is now known as cotto_work 16:53 rhr left 17:07 fronty left 17:22 pmurias joined
pmurias ruoso_: do we have a TODO? 17:22
ruoso_ pmurias: yes... we need to make a draft output of what s1p would generate 17:27
basically, initializing a p6opaque object, putting it into the global namespace and adding methods to it... 17:28
and we also need the default metaclass instance.. 17:29
17:30 fronty joined, fronty is now known as Front_slash 17:32 Myoma joined
ruoso_ I think maybe the first step would be to implement a pure prototype metaclass instance 17:33
then the default Perl 6 metaclass could be implemented in s1p using the pure prototype metaclass
17:42 armagad joined, armagad left 17:49 clintongormley left
pmurias i think a metaclass which would take the dispatch method as a closure, and did nothing else should be enough to bootstrap the metamodel 17:54
ruoso_: i thought more of a TODO file
18:01 rindolf joined, hercynium left
ruoso_ pmurias: that should be the ROADMAP in the wiki 18:07
which should be updated... 18:09
pugs_svn r22013 | lwall++ | [Cursor] more speed tweaks 18:15
r22014 | lwall++ | [Cursor] another speed tweak. Now compiles STD.pm in <30sec if cache is precomputed 18:19
ruoso_ pmurias: I tried to update the ROADMAP in the wiki... it now looks like what I think that should happen in the near future... 18:21
18:31 Front_slash left 18:36 larsen_ joined 18:40 rhr joined, luqui joined 18:48 scrottie left 19:02 Auzon left, Auzon joined
TimToady ruoso_: methods that are part of a public interface need to have names that are not operationally defined, so that the user can name the appropriate documentation without running the program, among other things. 19:13
so all declarations default to "our"; you can always say "my method" if you don't want to advertise the name 19:14
19:16 ruoso_ left, ruoso_ joined 19:18 pjenvey_ left
ruoso_ TimToady: so method time would need to be declared as my? 19:18
because time is a global routine...
but my method makes it really private
in the OO sense... not just in the lexical scope sense... doesn't it?
so... how do I have a public method time that doesn't clash with the global time sub? 19:19
and, most importantly... which use cases is this provisioning? 19:20
TimToady there's no conflict, because the sub dispatcher will never call any method
ruoso_ but if the method is exposed as a sub in that package? 19:21
TimToady time() always means the sub, not the method
it's still just a method
and the dispatcher knows that
the only way to call method time as a sub is to say &time() 19:22
ruoso_ hm... so it basically is aliased in the package for the dispatcher to ignore it?
hmm..
TimToady which is what the method dispatcher does to call methods without calling the dispatcher recursively
ruoso_ hmmm 19:23
alright... I think that's the point...
the method dispatcher doesn't need to look into the Package to find the methods
the methods are stored in the prototype...
19:24 sri_work joined
TimToady the package names are just convenient aliases for talking about the methods globally 19:24
ruoso_ hm... 19:25
I was really thinking on Packages and Classes as completely different things
a Class happens to be declared in a Package
TimToady but $routine() doesn't care whether the code ref was generated via &name or $obj->getmethod
ruoso_ but it might even have parts declared in different packages
yes... but why do you need to find a method as a sub? 19:26
considering the method won't ever be used as a sub 19:27
and that the sub dispatcher will have to ignore it
and also considering the HOW is supposed to get you that same routine object
TimToady the sub dispatcher knows the scope of its names at compile time, and a scope that contains method foo cannot contain sub foo 19:28
the dispatcher uses the method as a sub
ruoso_ "a scope that contains method foo cannot contain sub foo"... any particular reason? considering sub and method dispatch are very much unrelated? 19:29
TimToady the method dispatcher use the method as a sub
*uses
ruoso_ isn't the HOW supposed to decide that?
TimToady yes, to avoid confusion, and to unify the Code namespace for documentation purposes
ruoso_ I mean.. it doesn't need to look for the method as a sub in the package 19:30
it can use the HOW to look in the class
and then call .() later
TimToady I just said that .() doesn't care whether you look the method up in the package or not
a code ref is a code ref 19:31
ruoso_ sure sure... I'm not arguing on that point
my point is about having the method aliased in the Package
TimToady and that point is?
ruoso_ the method can be stored in the prototype or metaclass instance.. (depending if it is prototype or class based) 19:32
TimToady certainly
ruoso_ adding an alias in the Package only to make the sub dispatcher to ignore it seems strange 19:34
that was my first question, actually
what is the use case for that alias?
considering you can search it using the HOW
considering that's actually the expected way for you to find it
TimToady ruoso_: methods that are part of a public interface need to have names that are not operationally defined, so that the user can name the appropriate documentation without running the program, among other things.
so all declarations default to "our"; you can always say "my method" if you don't want to advertise the name 19:35
ruoso_ alright... but that's another issue..
TimToady "another issue" is the reason for the alias 19:36
and I already explained that the sub dispatcher can ignore it at compile time
it's never in the list of candidates
ruoso_ I don't get it... 19:37
TimToady something has to generate the list of multi candidates; that something knows at compile time which scopes might produce candidates and which can't 19:38
ruoso_ I don't get it...
I mean... we can have the checking to avoid "operationally defined" names in methods without aliases in the packages
19:41 sri_work left, sri_work joined
ruoso_ alright... I still don't get why it need to be aliased in the Package... but if 'method time' doesn't generate clashing, it means that it should be ok to ignore it for now... 19:41
TimToady lunch & 19:43
gaal audreyt: so, what's needed to finally switch over to newVal? 20:02
TimToady: do gimme5 and friends need to use /usr/local/bin/perl instead of /usr/bin/perl? 20:05
20:05 jhorwitz left
moritz_ gaal: many people don't have a perl 5.10 in /usr/bin/perl 20:05
gaal: I just created a symlink to the normal perl
ruoso_ pmurias: m0ld is not accepting "^!methods" as an identifier... 20:06
ruoso_ trying to see if he can fix it... but with no much hope...
ruoso_ should have more hope in the future.. considering he was able to actually fix it ;) 20:13
gaal parsec is fun
pugs_svn r22015 | ruoso++ | [smop] SMOP__S1P__PurePrototypeHow implements a dispatch that .^!methods.{name}.($actualcapture) 20:14
gaal moritz_: d'oh
ruoso_ interesting that as we get at a higher level in smop (using more and more m0ld code), it's starting to be very easy to implement things... and almost no segfaults are produced... 20:16
20:18 larsen_ left
gaal what are valid twigils in mold? 20:19
ruoso_ gaal: I don't think you have many... if any... 20:20
even $*OUT is being fetched manually in some tests...
pmurias gaal: there is no point in having twigil in mold
* twigils
as there are no variables only registers 20:21
gaal you just added ^ because it was one, no?
pmurias ruoso_: why did you need ^ as part of identifiers?
ruoso_ .^!methods
gaal: it's not a twigil... it's part of the identifiers...
pmurias it's ."^!method" 20:22
the identifier rule is only used for registers and labels
ruoso_ yes yes... that's how it is in the code
gaal are identifiers really required to be longer than one character? 20:23
ruoso_ but it was failing before I modify the rule
gaal pmurias: can you remind me how to run the unittest please? 20:24
ruoso_ pmurias: I think a m0ld "return" operator would be usefull... there's a small chunck of m0ld code that is starting to appear everywhere... 20:25
pmurias: take a look at the last lines of the m0ld block in smop_s1p_pureprototypehow.sm0p
pmurias gaal: make test, but it requires having ruby1.9 20:26
ruoso_ the good news is that the next point in the ROADMAP is actually producing the draft s1p output...
pmurias: actually, both a return and a leave operator, since mold doesn't automatically falls back to the "back" 20:28
pmurias ruoso_: we could have an $interpreter return method 20:29
ruoso_ but the $interpreter is not the one that holds the other continuation 20:30
it's the current $frame
oh...
right
the $interpreter would use the "back" method to fetch it... d'oh
gaal um, why is make test depending on a very new version of yet another build tool, that isn't in the latest ubuntu? 20:31
pmurias gaal: or do you want to just run test/24_mold
gaal well, the latter for now 20:32
ruoso_ packing stuff... should be back later...
pmurias gaal: you can change the version number in CMakeLists to the one you have and if make test runs commit it
what's the version of cmake that you have 20:33
20:33 ruoso_ left
gaal pmurias: 2.4.6 20:34
and I get errors like
CMake Error: The end of a CMakeLists file was reached with a FOREACH statement that was not closed properly. Within the directory: /home/gaal/src/pugs/v6/smop
pmurias make;./build/test/24_m0ld.t
gaal: after decrementing the version check at the top? 20:36
gaal yes
pmurias found something which make cause it in cmake changelog 20:39
pugs_svn r22016 | pmurias++ | [mold] reverted ruoso's change to identifier, might have made the CMakeLists work with preivous versions of cmake 20:41
gaal so: does m0ld reject single-letter identifiers on purpose?
pmurias no
gaal: does cmake work now? 20:43
how do i install an old version of a package in debian?
gaal pmurias: trying to resolve conflicts, sec 20:44
re: old version, don't remember, think it's something like pkg=the_old_version
pmurias version 2.4.6 wasn't found in testing 20:45
20:46 rdice left
gaal something fishy is going on in the tree, svk pull is showing lots of conflicts where there are none 20:47
pugs_svn r22017 | gaal++ | r7317@gaal-lap (orig r19402): ruoso | 2008-01-10 17:25:23 +0200 20:48
r22017 | gaal++ | [yap6] last commit before rename
r22017 | gaal++ | r7326@gaal-lap (orig r19411): ruoso | 2008-01-10 18:13:53 +0200
r22017 | gaal++ | [yap6] cleaning up yap6 dir, leaving a goodbye note.
r22017 | gaal++ | r7332@gaal-lap (orig r19417): ruoso | 2008-01-10 21:09:40 +0200
r22017 | gaal++ | [yap6] updating yap6 goodbye note.
r22017 | gaal++ | r7337@gaal-lap (orig r19422): pmurias | 2008-01-10 21:59:33 +0200
r22017 | gaal++ | points to the right directory
gaal uh what
pmurias encountered it myself before
pugs_svn r22018 | pmurias++ | removed the v6/yap6 dir 20:49
pmurias maybe this will help
20:49 donaldh joined
gaal how did r22017 happen, I didn't commit anything 20:49
pmurias svk bugs 20:50
had exactly the same problem when i used svk 20:51
gaal somehow my svk replayed some old commits, and broke the tree. I can't pull the last r. 20:54
pmurias it can be circumvented somehow, don't remember how i did it, but my svk kept reporting fake conficts 20:56
gaal well, I know how to skip an r in svk, but my client's still broken now :/ 20:57
svk sy -s r22017
or rather, r22018
argh, enough computers for today! 20:59
21:01 elmex left 21:03 thepler left 21:04 meppl left
pmurias shower& 21:05
21:08 exodist_ left 21:40 rindolf left 21:43 larsen_ joined 22:01 pmurias left 22:33 meppl joined
pugs_svn r22019 | moritz++ | [t/spec] add basic tests for slurpy parameters 22:35
22:38 explorer__ joined, jferrero left, explorer__ is now known as jferrero 22:41 preflex left 22:43 preflex joined 22:56 preflex left 22:58 meppl left 22:59 meppl joined 23:01 donaldh left 23:03 BinGOs left 23:08 preflex joined, BinGOs_ joined 23:27 preflex left 23:28 preflex joined 23:44 BinGOs joined 23:47 BinGOs_ left 23:49 alester left, Schwern left, sri_work left, IRSeekBot left, lisppaste3 left, PerlJam left, szbalint left, nnunley left, Arathorn left, beppu left, yahooooo left, clkao left, revdiablo left, sunnavy left, silug left, obra left, rakudo_svn left, simcop2387 left, [particle] left, hcchien left, c1sung_ left, stef_ left, Lunchy left, bbkr left, pjcj_ left, pugs_svn left, lumi left, baest left, buubot left, sri_work joined, alester joined, rakudo_svn joined, IRSeekBot joined, simcop2387 joined, Schwern joined, [particle] joined, lisppaste3 joined, hcchien joined, c1sung_ joined, stef_ joined, pugs_svn joined, pjcj_ joined, Arathorn joined, revdiablo joined, baest joined, obra joined, clkao joined, sunnavy joined, bbkr joined, buubot joined, Lunchy joined, lumi joined, beppu joined, silug joined, yahooooo joined, PerlJam joined, szbalint joined, nnunley joined 23:50 Schwern left, alester left, szbalint left, revdiablo left, Arathorn left, yahooooo left, PerlJam left, beppu left, nnunley left, sunnavy left, clkao left, silug left, obra left, lisppaste3 left, IRSeekBot left, sri_work left, lumi left, bbkr left, baest left, pugs_svn left, [particle] left, rakudo_svn left, pjcj_ left, c1sung_ left, stef_ left, hcchien left, Lunchy left 23:51 buubot left, simcop2387 left, [particle]1 joined, sri_work joined, alester joined, rakudo_svn joined, IRSeekBot joined, simcop2387 joined, Schwern joined, lisppaste3 joined, hcchien joined, c1sung_ joined, stef_ joined, pugs_svn joined, pjcj_ joined, Arathorn joined, revdiablo joined, baest joined, obra joined, clkao joined, sunnavy joined, bbkr joined, buubot joined, Lunchy joined, lumi joined, beppu joined, silug joined, yahooooo joined, PerlJam joined, szbalint joined, nnunley joined, orafu left 23:52 OuLouFu joined 23:55 smtms left, smtms joined