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:36
Alias_ joined
00:43
justatheory left
00:49
jferrero left
00:50
silug joined
00:56
benzo left
01:08
eternaleye joined
|
|||
pugs_svn | r22549 | lwall++ | [assign.t] missing semicolons | 01:08 | |
01:11
alester left
|
|||
pugs_svn | r22550 | lwall++ | [STD] there is no infix:<is> (was hiding missing semicolons in assign.t) | 01:24 | |
r22550 | lwall++ | [viv] much improved typology of EXPR asts (and doesn't lose nested ops) | |||
01:30
alanhaggai joined
01:32
BinGOs left
01:37
PZt left,
BinGOs joined
01:41
ab5tract left
01:49
hercynium_ joined
01:52
PZt joined
02:05
alester joined
02:08
felipe left
02:09
zostay_ is now known as zostay
02:15
eternaleye left
02:17
Limbic_Region left
02:23
eternaleye joined
02:49
agentzh left,
agentzh joined
|
|||
pugs_svn | r22551 | lwall++ | [basic.t] default expression must come after traits | 02:50 | |
r22552 | lwall++ | [viv] autogenerate VAST packages as needed | 02:52 | ||
03:10
ab5tract joined
03:11
jhorwitz left
03:32
felipe joined,
alanhaggai left
03:35
jfredett left
03:44
agentzh left,
agentzh joined
|
|||
pugs_svn | r22553 | lwall++ | [viv] can now reconstruct the p6 from the ast for simple expressions | 04:17 | |
04:56
masak joined
05:05
Patterner left
05:08
Psyche^ joined,
Psyche^ is now known as Patterner
05:14
|Jedai| joined
05:21
Bzek joined
05:28
|Jedai| left
05:29
|Jedai| joined
06:09
BinGOs_ joined
06:11
agentzh left,
agentzh joined
06:22
BinGOs left
06:30
ashizawa joined
06:44
alester left
06:47
BinGOs_ is now known as BinGOs
06:49
alester joined,
alester left
06:59
iblechbot joined
07:00
alester joined
07:05
penk joined
07:09
agentzh left,
agentzh joined
07:12
sri_work joined
07:13
agentzh left
07:16
alester left
07:17
agentzh joined
07:23
viklund joined
07:29
masak left
07:36
ab5tract left
07:46
Alias_ left
07:57
zamolxes left
08:04
cosimo joined
08:07
BinGOs_ joined
08:09
BinGOs_ left
08:15
elmex joined
08:21
BinGOs left
08:27
jferrero joined
08:54
BinGOs joined
09:17
renormalist joined
09:37
tomyan joined
|
|||
moritz_ | std: class A { sub :foo { say bar }; }; | 09:45 | |
lambdabot | moritz_: You have 1 new message. '/msg lambdabot @messages' to read it. | ||
p6eval | std 22553: OUTPUT[Unknown routines: bar called at 1 parsed] | ||
moritz_ | @massages | ||
lambdabot | azawawi said 11h 46m 54s ago: any-list.pir p5chop and p5chomp is running all tests now. Patches are on RT. Thanks. | ||
09:55
meppl joined
10:06
Bzek left
10:18
Bzek joined
10:21
ruoso left
10:30
xinming_ joined
10:31
xinming left
10:33
kanru left
10:38
xinming joined,
Ontolog joined
10:39
xinming_ left
10:47
xinming_ joined,
xinming_ left
10:48
dmq joined,
dmq left
11:00
[particle] joined,
ruoso joined
11:03
Ontolog left,
xinming left
11:04
xinming joined
|
|||
moritz_ | @tell azawawi thanks for the patch. However (as the others that modify self) I'll wait wih applying until the lexical issues are sorted out | 11:06 | |
lambdabot | Consider it noted. | ||
11:07
penk left
11:12
[particle-split] left
11:14
xinming left,
xinming joined
|
|||
pugs_svn | r22554 | ruoso++ | [smop] small bugfix in native bool was causing unexpected behavior | 11:30 | |
ruoso | er... actually it wasn't the bugfix that was causing the unexpcted behavior... *sigh* | 11:31 | |
11:36
alanhaggai joined
11:48
kanru joined
11:58
meppl left
12:01
xinming left
12:06
bjakb joined
|
|||
bjakb | hello? | 12:09 | |
moritz_ | hi | ||
12:10
xinming joined
|
|||
bjakb | I have a problem with the Pugs installation, can somebody might help me? | 12:12 | |
moritz_ | I can try | ||
but only if I know what your problem is | |||
12:14
bjakb2 joined
|
|||
bjakb | sorry I have a problem with my irc client could you please repeat your answer? | 12:14 | |
moritz_ | the logs are at irc.pugscode.org | 12:15 | |
in short "I can try" | |||
12:17
bjakb left
|
|||
bjakb2 | OK, I'm following the installation instructions of pugs | 12:19 | |
12:19
kanru left
|
|||
moritz_ | which instructions? | 12:19 | |
bjakb2 | that is the best to install it with cabal | ||
'cabal update' | |||
'cabal install Pugs' | |||
12:19
kanru joined
|
|||
moritz_ | ok | 12:20 | |
bjakb2 | to be able to do that you have to install a few haskell packages - which i did install | ||
12:20
Bzek left
|
|||
bjakb2 | I was also able to run the two mentioned cabal commands | 12:21 | |
the installation went through without any errors | |||
But, at the end, I cannot run pugs | |||
I can also not find any pugs binary | 12:22 | ||
moritz_ | the binary will be in ~/.cabal/ somewhere | 12:23 | |
probably ~/.cabal/Pugs/bin/pugs or something along these lines | |||
which OS are you on? | |||
12:26
Ontolog joined
|
|||
bjakb2 | say 'hello' :-) | 12:28 | |
12:29
ashizawa left
|
|||
bjakb2 | moritz: the binary was indeed in the ~/.cabal directory - thanks | 12:29 | |
moritz_ | bjakb2: you're welcome | 12:30 | |
12:32
bjakbh joined
|
|||
bjakb2 | the next thing I want to try is to compile perl6 code into perl5 - that sounds interesting | 12:34 | |
moritz_ | I don't think that's properly implemented in pugs | 12:35 | |
elf does it, though | |||
ruoso | pugs: module Foo { sub bar { baz() } }; &Foo::baz := sub { say 1 }; Foo::bar() | ||
p6eval | pugs: OUTPUT[1] | ||
bjakbh | elf? - never heard of that | 12:36 | |
moritz_ | elf: say "hi"; | ||
p6eval | elf 22554: OUTPUT[hi] | ||
12:36
bjakb2 left
|
|||
moritz_ | see also perl.net.au/wiki/Elf | 12:37 | |
lambdabot | Title: Elf - PerlNet | ||
ruoso | pugs: module Foo { sub bar { our $foo = 1; }; sub baz { say $foo } }; Foo::bar(); Foo::baz(); | 12:38 | |
p6eval | pugs: OUTPUT[***  Unexpected " }" expecting "::" Variable "$foo" requires predeclaration or explicit package name at /tmp/Bwbo2aprAs line 1, column 59] | ||
ruoso | pugs: module Foo { sub bar { our &foo := sub { say 1 } }; sub baz { say foo() } }; Foo::bar(); Foo::baz(); | 12:39 | |
p6eval | pugs: OUTPUT[*** Cannot use Undef as a Code object at /tmp/vScVoZWa3S line 1, column 67-73] | ||
ruoso | pugs: module Foo { sub bar { our sub foo { say 1 } }; sub baz { foo() } }; Foo::baz(); | 12:43 | |
p6eval | pugs: OUTPUT[1] | ||
12:43
bjakbh left
|
|||
ruoso | that means one of two things: | 12:44 | |
1) The package variables are visible as if they were declared as "our" even if there isn't such a declaration... | |||
2) sub dispatch sees if the current package CANDO that after looking in the lexical scope | 12:45 | ||
moritz_ | ruoso: 'our sub' is the same as 'sub' | 12:46 | |
ruoso | but the local name is installed inside that scope only... | ||
12:48
bjak joined
|
|||
moritz_ | hurm | 12:48 | |
ruoso | which probably means that the option 2 is the correct one | 12:49 | |
12:49
alester joined
|
|||
ruoso | sub dispatch is 'no strict' | 12:49 | |
it falls back to global lookup (by global meaning looking up in the package, and not only on the lexical scope) | 12:50 | ||
pugs: $Foo::bar = 1; module Foo { sub foo { say $bar } }; Foo::foo(); | 12:51 | ||
p6eval | pugs: OUTPUT[***  Unexpected " }" expecting "::" Variable "$bar" requires predeclaration or explicit package name at /tmp/uEICR3JQar line 1, column 47] | ||
ruoso | pugs: &Foo::bar = sub { 1 }; module Foo { sub foo { say bar() } }; Foo::foo(); | ||
p6eval | 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 = (mkType \"An... | ||
ruoso | pugs: &Foo::bar := sub { 1 }; module Foo { sub foo { say bar() } }; Foo::foo(); | ||
p6eval | pugs: OUTPUT[1] | ||
moritz_ | ruoso: re sub lookup is 'no strict', that's my feeling as well | 12:52 | |
ruoso | pugs: &Foo::bar := sub { 1 }; module Foo { sub foo { say &bar.() } }; Foo::foo(); | 12:53 | |
p6eval | pugs: OUTPUT[***  Unexpected ".()" expecting "::" or signature value Variable "&bar" requires predeclaration or explicit package name at /tmp/pstwoiEGm4 line 1, column 56] | 12:54 | |
ruoso | indeed... it looks like so... | ||
12:55
bjak left
|
|||
ruoso | alright... so it looks that sub dispatch does: | 12:56 | |
1) looks for all variants from the lexical scope and from package CANDO | |||
12:56
bjakb joined
|
|||
ruoso | (it traverses itself the lexical scope, so a inner declaration doesn't mask the outer declaration) | 12:56 | |
greps for the ACCEPTS | 12:57 | ||
moritz_ | (CANDO sounds like a reactor from a nuclear power plant; but I probably confuse that with CANDU) | ||
12:57
alester left
|
|||
ruoso | sorts using a "pluggable disambiguation code" | 12:57 | |
and invoke the first | |||
and we leave a cache of all variants in the innermost declaration as the room for optimizations | 12:58 | ||
moritz_ | sounds sane | ||
12:59
Alias_ joined
13:01
Alias__ joined
13:02
z80ASM joined,
xinming left
13:06
Alias_ left
13:22
z80ASM left
13:27
pmurias joined
13:28
BinGOs left,
iblechbot left
13:30
jferrero left
13:31
pmurias_ joined,
pmurias_ left
|
|||
pmurias | is it possible to add multi variants at runtime? | 13:31 | |
moritz_ | yes | ||
pmurias | how? ;) | 13:33 | |
moritz_ | proto foo; eval 'sub foo($x) { $x*2 }'; say foo(2); | ||
pmurias | perl6: multi foo(1) {say 3};foo(1); | 13:35 | |
p6eval | pugs: OUTPUT[***  Unexpected "1" expecting formal parameter or ")" at /tmp/yOHlPNDb3K line 1, column 11] | ||
..elf 22554: OUTPUT[No viable candidate for call to multimethod foo(#) at (eval 121) line 4 at ./elf_f line 3861] | |||
..rakudo 31827: OUTPUT[Statement not terminated properly at line 1, near "{say 3};fo"current instr.: 'parrot;PGE::Util;die' pc 119 (runtime/parrot/library/PGE/Util.pir:82)] | |||
pmurias | perl6: multi foo(Int $a) {say 3};foo(1); | 13:36 | |
p6eval | elf 22554, pugs, rakudo 31827: OUTPUT[3] | ||
13:36
BinGOs joined
|
|||
moritz_ | perl6: multi foo(Int $x) { say "Int" }; eval 'multi foo(Str $x) { say "Str" }'; foo(1); foo("bar"); | 13:37 | |
p6eval | elf 22554, rakudo 31827: OUTPUT[IntStr] | ||
..pugs: OUTPUT[IntInt] | |||
moritz_ | elf++ | ||
rakudo++ | |||
pmurias | is it possible to close multis? | ||
like use multi :closed? | |||
moritz_ | dunno | ||
don't think it makes much sense | 13:38 | ||
pmurias | why? | ||
moritz_ | because multis are one of teh central mechanism to get extensibility into Perl 6 | 13:39 | |
ruoso | www.perlfoundation.org/perl6/index....b_dispatch | ||
lambdabot | Title: SMOP Multi Sub Dispatch / Perl 6, tinyurl.com/43fhyt | ||
13:39
Lorn joined
|
|||
pmurias | ruoso: hi | 13:40 | |
ruoso | hi pmurias | ||
pmurias | ruoso: withought variant disambiguation multis wouldn't be more powerfull then normal methods | 13:42 | |
ruoso | indeed | 13:43 | |
13:43
BinGOs left
|
|||
ruoso | pmurias, refresh the wiki page ;) | 13:43 | |
13:43
renormalist left
13:44
BinGOs joined
|
|||
pmurias | we also need to check for ambiguity | 13:45 | |
that is there need to be 1 topmost item | |||
ruoso | pmurias, I think the disambiguation code would 'fail' in that case | 13:46 | |
pmurias | ok | 13:47 | |
13:49
xinming joined
|
|||
pmurias | ruoso: can i remove the nasty adjective | 13:50 | |
? | |||
13:50
abra joined
|
|||
ruoso | yeah... :) | 13:50 | |
moritz_ | ;) | ||
pmurias | got to run to eat something and catch a train | 13:54 | |
& | |||
13:54
pmurias left
13:58
alester joined
14:01
kanru left,
xinming left
14:02
viklund left
14:09
[particle]1 joined
14:14
iblechbot joined
14:27
[particle] left
14:32
eternaleye left
14:37
sscaffidi joined,
coke joined
15:02
z80ASM joined
|
|||
rakudo_svn | r31829 | pmichaud++ | [rakudo]: spectest-progress.csv update: 205 files, 4366 passing, 11 failing | 15:07 | |
15:11
sscaffidi left
15:12
hercynium_ left
15:16
justatheory joined
15:20
mj41_ left
15:21
ab5tract joined
15:22
z80ASM left
15:26
mj41 joined
15:27
alanhaggai left
15:29
z80ASM joined
15:32
lisppaste3 left
15:38
xinming_ joined
|
|||
ruoso | TimToady, if you have some time, could you please take a look at www.perlfoundation.org/perl6/index....b_dispatch | 15:42 | |
lambdabot | Title: SMOP Multi Sub Dispatch / Perl 6, tinyurl.com/43fhyt | ||
15:43
Exodist joined
15:46
lisppaste3 joined
|
|||
TimToady | I never have some time :) | 15:47 | |
unless you count negative time... | |||
PerlJam | ruoso: I just looked at it and your examples look single-dispatchy | 15:48 | |
ruoso | PerlJam, what do you mean? | 15:49 | |
TimToady | thinking about lexical CANDO now :) | 15:50 | |
15:51
kanru joined
|
|||
TimToady | as someone mentioned earlier, you need to deal with ambiguities too | 15:52 | |
15:52
jhorwitz joined
|
|||
TimToady | and there are probably a few other things from S12:876 that will need to be considered eventually | 15:55 | |
though a lot of it can be swept under the carpet of "sorting" | |||
but it basically looks sane | 15:56 | ||
ruoso | lexical CANDO? | ||
TimToady | lexical autoloading of some sort or other | 15:57 | |
probably only dynamic response, not install new symbols | |||
ruoso | ah... I see... | ||
it seems heavyweight to call CANDO for every lexical scope in the tree | 15:58 | ||
TimToady | but it would be nice to intercept the query on the way outward | ||
15:58
xinming_ left,
xinming_ joined
|
|||
ruoso | TimToady, probably installing symbols at runtime is better | 15:58 | |
instead of doing the AUTOLOAD way | |||
TimToady | well, the presence of a CANDO in an outer lexical scope would basically pessimize the ability to know what a name means at compile time | 15:59 | |
but that can be known at compile time :) | 16:00 | ||
ruoso | oh... I see... you're actually thinking about CANDO not being in the package at all | ||
TimToady | that's what I mean by "lexical" | ||
coke | has anyone written a rule to english translator? | ||
lambdabot | coke: You have 1 new message. '/msg lambdabot @messages' to read it. | ||
ruoso | I initially read that as "additionally in the lexical scope" | 16:01 | |
TimToady | but also potentially in the package, as it is currently | ||
ruoso | ok... | 16:02 | |
so it basically means adding another step... | |||
TimToady | anyway, just a thought, doesn't even need a bit in the lexical scope unless you actually find a my CANDO at compile time | ||
ruoso | hmm... I see... the presence of a CANDO would generate a degenerated lexical scope object | 16:03 | |
TimToady | which would know to treat the CANDO as * | ||
it's probably not worth worrying about right now | 16:04 | ||
ruoso | yeah... it looks like something that can be just plugged in | ||
TimToady | can be retrofitted to the compiler if we decide to do it later | ||
16:04
alanhaggai joined
16:05
z80ASM left
16:07
z80ASM joined
|
|||
diakopte1 | moritz_: you pinged | 16:08 | |
16:09
diakopte1 is now known as diakopter_o,
diakopter_o is now known as diakopter
|
|||
diakopter | moritz_: you pang | 16:10 | |
moritz_ | diakopter: yes, about the SVN::Web stuff, but Infinioid helped me to sort it out in the mean time | ||
diakopter | that guy is very resourceful | 16:11 | |
what was wrong with it | |||
moritz_ | it died on every request :/ | ||
diakopter | what caused that symptom | ||
moritz_ | assertion failure in some svn libs... changing a path from '/' to '' helped | 16:12 | |
16:16
exodist_ joined,
Exodist left,
exodist_ is now known as Exodist
|
|||
pugs_svn | r22555 | moritz++ | [t/spec] unfudge passing tests in split-simple.t | 16:17 | |
16:31
[particle] joined
|
|||
pugs_svn | r22556 | moritz++ | [t/spec] more tests for unchanged source string in transliteration tests. | 16:34 | |
16:36
z80ASM left
16:43
Alias__ left
16:47
[particle]1 left
16:56
cosimo left
17:07
xinming_ left,
xinming joined
17:13
mberends joined
17:17
apeiron left
17:18
jferrero joined
17:19
apeiron joined
17:20
abra left
17:28
raiph joined,
raiph left
17:30
jan_ left
17:32
jan_ joined,
coke left
17:33
meppl joined
17:42
smg left
17:46
sri_work left
|
|||
rakudo_svn | r31835 | moritz++ | [rakudo] workaround for RT #59730 by cjfields++ (Str.trans with closures) | 18:06 | |
pugs_svn | r22557 | moritz++ | [t/spec] unfduge passing test, cjfields++ | 18:07 | |
18:11
pyrimidine joined
18:12
Exodist left
18:15
Exodist joined
18:20
abra joined
|
|||
pugs_svn | r22558 | moritz++ | [t/spec] added a test file for infix:<where> | 18:33 | |
18:33
abra left
|
|||
moritz_ | I would appreciate it if somebody could take a look at r22558, not sure I fully understood that operator | 18:37 | |
18:39
Southen_ joined
18:56
Southen left
18:58
ruoso left
19:02
alanhaggai left
19:03
zamolxes joined,
tomyan left
19:06
pyrimidine left
19:12
smg joined
19:15
[particle1 joined
19:19
[particle1 left
|
|||
TimToady | moritz_: well, I don't know if I'm somebody, but it looks okay to me. | 19:36 | |
moritz_ | TimToady: you're somebody enough to count in this one ;) | ||
TimToady | it's a bit subtle that the closures doing appending are returning true | 19:37 | |
moritz_ | subtle, but intended ;) | ||
TimToady | well, but you could say $x ~= 'b'; True to be explicit | ||
moritz_ | right | 19:38 | |
TimToady | just thinking of the Gentle Reader | ||
btw, thanks for all your spectacular work on the test suite | 19:39 | ||
moritz_ | my pleasure | 19:40 | |
TimToady | what's your opinion of changing all the is $a,$b to ok $a eqv $b? | ||
or maybe even making the builtin ok an infix? | |||
so you could say $a eqv $b ok "message" | 19:41 | ||
moritz_ | wait a sec... | ||
TimToady | well, would look better with ok lined up with tabs | ||
moritz_ | I like "ok" up front | 19:42 | |
TimToady | or maybe the builtin tests could be $a eqv $b OK "message"; | ||
well I like what you're testing up front :) | |||
and I don't like commas | 19:43 | ||
moritz_ | why do you want to make them all operators? | ||
TimToady | esp when they can be confused with precedence | ||
moritz_ | re all is $a, $b to ok $a eqv $b, I think many comparisons should stay string comparisons | ||
TimToady | well, that's the trouble, people are using them both ways, so ok would make it explicit | 19:44 | |
moritz_ | right | ||
TimToady | anyway, I'm just trying to think of a construct that reads more like "and", except it has to pay attention to the right side all the time | 19:45 | |
fullermd | "with"? | ||
moritz_ | well, the infix:<where> is rather confusing when read as english | ||
TimToady | in fact, ok doesn't work well because it's the wrong valence, and because it disappears too easily in the middle | ||
moritz_ | that's why you suggested OK, right? | 19:46 | |
as all caps | |||
TimToady | yes, but also to hide the builtin a little better, since there are other functions too | ||
not that anyone is going to want to define infix:<DIES_OK>, but you never know... :) | 19:47 | ||
moritz_ | anyway, I think that explicit comparison semantics are good, but I somehow fear all the work that it will make | ||
TimToady | another reason I want to get rid of "is" is because it's overloaded in Perl 6 | ||
moritz_ | right | ||
TimToady | but I know how to work around that | 19:48 | |
(though it's ugly) | |||
19:48
[particle]1 joined
|
|||
TimToady | still, I'd rather not have the cognitive dissonance | 19:48 | |
and the is test is horribly imprecise | |||
well, one argument (a weak one) for keeping a verb out front is that you could more easily make macros that way for evalish arguments | 19:49 | ||
but of course that's awfully fancy | 19:50 | ||
moritz_ | right now I'd rather rewrite all is() tests to ok() than rewriting everything to infix operators; but I don't see how early implementations can give good summaries of failing tests | ||
TimToady | you mean with an infix? | ||
don't see a problem with ok() | |||
moritz_ | ok $a eq $b would just say "not ok", whereas is() can tell you what's expected and what you got | 19:51 | |
TimToady | ah | ||
moritz_ | so unless you have a very clever macro you loose the information too early | ||
TimToady | I wonder how easy it would be to allow parameter properties that capture the text of the parameter, not because you want to reprocess the text like a macro, but simply for documentation | 19:53 | |
could write assert() using that too | |||
as long as the original program is available as a string, and we know where the argument started and stopped, it could be done. | 19:54 | ||
moritz_ | but how does that help with error reporting? | ||
TimToady | right, still doesn't give you the two values...drat... | 19:55 | |
moritz_ | an assert($x eq $y) would know '$x eq $y' and true/false | ||
19:55
jferrero left
|
|||
moritz_ | unless it would peek into the AST of its arguments, which is really non-trivial | 19:58 | |
TimToady | maybe there wants to be a metaoperator, as long as we're dreaming | ||
because you can change is to iseq, iseqv, but is== is not good | |||
don't really need to deal with AST, I think | 19:59 | ||
moritz_ | so would you write '$x iseq $y OK "message";'? | 20:00 | |
that'd be confusing, to say the least | 20:01 | ||
TimToady | something like that, though that's kind of ugly | ||
but something that would automatically capture $x, $y, '$x eq $y', and eval '$x eq $y' | 20:02 | ||
well, and maybe 'eq' | |||
moritz_ | still sounds like too much magic for basic implementations | 20:03 | |
TimToady | could always hardwire 'ok' into the grammar too | 20:04 | |
as long as we're building in test ops, that would not be terribly difficult | 20:05 | ||
after all, all the built-in constructs are essentially macros | 20:06 | ||
and the utility of this might well outweigh the futility :) | |||
moritz_ isn't entirely convinced | 20:07 | ||
TimToady | people weren't entirely convinced by fudge either :) | 20:08 | |
moritz_ | aye ;) | ||
TimToady | anyway, if we set up the syntax such that a stupid ok could work without macroizing, but you just get less info, that's probably cool | ||
then if the grammar redirects to a smart ok, we just get more info | 20:09 | ||
moritz_ | maybe you could even convince viv to rewrite the tests automatically | 20:10 | |
TimToady | well, that'd be at the parse tree or ast level, but sure, that's about the right level to recognize the structure of the first argument | 20:11 | |
on the other hand, if it's just a grammar rule, we just pick the right precedence to pick off the two sides of the comparison | 20:12 | ||
several equivalent aproaches | |||
20:14
BinGOs left
|
|||
moritz_ | brb | 20:15 | |
20:15
FurnaceBoy joined
|
|||
pmichaud | it almost cries out for making it clear that 'ok', 'is', etc. are truly test operators | 20:17 | |
so maybe infix:<?is> infix:<?ok> | |||
where ?is is a ternary. | 20:18 | ||
20:18
[particle]1 left
|
|||
pmichaud | or, infix:<?is> keeps its arguments somewhere that ?ok can use in a diagnostic message | 20:19 | |
$a ?is $b ?ok "variable equivalence" | |||
moritz_ | in a contet var, or something? | ||
pmichaud | true ?ok "truth" | ||
I'm just throwing out notions here -- I'm not convinced myself. | 20:20 | ||
20:20
r0bby left
|
|||
pmichaud | maybe it's another meta prefix | 20:20 | |
$a ?eqv $b :diag<equivalence of variables> | 20:21 | ||
TimToady | there are obvious infelicities in the current approach, so we might as well fix 'em all :) | ||
pmichaud | although ? wouldn't work well as the meta prefix. | ||
20:21
r0bby joined
|
|||
TimToady | yeah, I was thinking about metaops earlier | 20:21 | |
pmichaud | oh, I guess it wouldn't be toooooo bad | ||
moritz_ | pmichaud: in principle I like the notation, but it looks like more character noise | ||
pmichaud | maybe it's just an adverb to the existing ops? | 20:22 | |
$a eqv $b :test<items are equivalent> | |||
$a eq $b :test<items are string equivalent> | |||
TimToady | I was thinking if we wrote 'ok' as a macro the extra info would come in as named args | ||
so the first two args would still be the boolean and the string | |||
pmichaud | but the advantage of tying it to the comparison operator is that it has the operands immediately available for a diagnostic message | 20:23 | |
TimToady | hmm, interesting syntax | ||
pmichaud | unless we have "interesting values of boolean" :-) | ||
TimToady | Test Yourself! | ||
pmichaud | it could even be | 20:24 | |
$a eq $b :ok<items are string equivalent> | |||
if there's no :ok adverb, then it's not part of the test output. | |||
TimToady | and the operator knows its own identity too | ||
pmichaud | of course, this assumes that we have adverbs, which might be a little difficult in a newish implementation :-| | ||
I'm guessing it's less difficult now that there's a standard grammar, though. | 20:25 | ||
20:25
zamolxes left
|
|||
TimToady | which is the advantage of a stupidish ok $a eqv $b, "string" | 20:25 | |
with extra named args containing the pertinent bits of the first arg | |||
which a stupid "ok" can ignore | |||
20:25
zamolxes joined
|
|||
pmichaud | rakudo's lack of adverb support is mostly because it wasn't entirely clear how to get them into the grammar | 20:26 | |
(whereas it's much clearer now.) | |||
TimToady | but especially with tabs before :ok it could look very clean | ||
pmichaud | yes | ||
20:26
BinGOs joined
|
|||
pmichaud | ....and.... | 20:26 | |
TimToady | it would also be pretty easy to preprocess into a stupider form | 20:27 | |
pmichaud | a newbie compiler could just treat :ok as a special syntax | ||
TimToady | assuming one per line | ||
pmichaud | until it has full adverb support | ||
TimToady | that too | ||
moritz_ | one per line isn't always realistic | ||
TimToady | now we just have the problem of dispatching to the version of comparisons that supports the :ok parameter... :/ | 20:28 | |
pmichaud | it's also nice because the default :ok could give a reasonable message based on the operator type | ||
i.e., $a eqv $b :ok | |||
could give a nicer error message than ok($a eqv $b) | |||
s/error/diagnostic/ | |||
TimToady | "FOO isn't eqv to BAR you #$&*@#$&!" | ||
pmichaud | exactly. | 20:29 | |
that's much nicer. | |||
how many comparisons would need to support :ok? | |||
most other comparisons could be reduced (in tests) to versions that support :ok, same as we do now | |||
TimToady | I wonder how often we'd have people making the error of trying to interpoalte into :ok<bad $x pardner> | 20:30 | |
pmichaud | I also wonder what happens with negative comparisons | ||
$a != $b :ok<not equal> | |||
I guess that actually works. | 20:31 | ||
TimToady | presumably meta-! needs to know about it | ||
pmichaud | anyway, I think I've tossed my popcorn for now. | ||
er, peanuts | |||
TimToady | peanuts hurt more | ||
pmichaud | (I used to go to melodramas where the "peanut gallery" actually threw popcorn at the actors) | ||
TimToady | anyway, I think this could be a new state of the art | 20:32 | |
moritz_ | agreed | ||
TimToady | and it doesn't look terribly hard | ||
pmichaud | the :ok adverb? really? I did something good? ;-) | ||
TimToady | for once :P | ||
moritz_ | if it's reasonable to implement (which I can't really judge) I'm all for it | 20:33 | |
TimToady | well, even if it's unreasonable, wouldn't be the first time I forced it anyway... :) | ||
pmichaud | THAT'S for sure! :-P | ||
TimToady | after all, Perl Philosphy is simply to torment the implementors on behalf of the user | 20:34 | |
pmichaud | aha! I have a quote for my keynote. | ||
moritz_ | lol | ||
pmichaud | and perhaps a theme. | ||
TimToady | wow, I said something good (for once) | ||
FurnaceBoy | eh, you're frequently quotable. | 20:36 | |
<TimToady>ASCII just doesn't have enough brackets... I've noticed this before... | |||
pmichaud | that's why we make new ones, like "<< >>" | 20:37 | |
and #{ ... } | |||
and =begin FOO ... =end FOO | |||
TimToady | there aren't enough quotidian quotes | ||
pmichaud | and even things like '(' ~ ')' <EXPR> | 20:38 | |
which is a particularly bizarre form of bracketing construct :-) | |||
TimToady | in which the contents leak out of the brackets :) | ||
moritz_ | so what happens to plan()? | 20:39 | |
TimToady | why should it change? | ||
moritz_ | everything else is an operator now | ||
pmichaud | we still want todo(), plan() | ||
20:40
apeiron left
|
|||
TimToady | we just want to throw out the "use Test;" part | 20:40 | |
unless you want a different tester | |||
moritz_ | so 'use Test::Most' would just overwrite... what? | ||
the :ok part, somehow? | 20:41 | ||
TimToady | all those functions that aren't there anymore :) | ||
pmichaud | :ok becomes the "builtin" form for testing, but other modules can still define their own "is", "ok", "dies_ok", "is_deeply", whatever equivalents | ||
as normal functions | |||
TimToady | I wonder if people are going to be upset by our taking :ok as an adverb | 20:42 | |
pmichaud | on the operators? | ||
moritz_ | so if somebody wants to change the behaviour of :ok, which hooks do they pull? | ||
pmichaud | or in general? | ||
TimToady | write a set of comparisons that have :ok as a named parameter and included in the current lexically scope more tightly than the builtins from the prelude | 20:43 | |
that's all | |||
and you only have to redefine the ones you want to change | 20:44 | ||
that's why lexically scoped multis interleave with other longnames from other scopes the way they do | |||
(used to be the other way till we got smarter) | 20:45 | ||
anyway, the :ok call won't dispatch at all to a version that doesn't support :$ok as a parameter | 20:46 | ||
pmichaud | that might result in "spooky at a distance" | ||
TimToady | I presume the proto has :ok in it but the standard operator leaves that out of the sig | 20:47 | |
how so? | |||
pmichaud | $a foo $b might dispatch differently from $a foo $b :ok | ||
someone simply adding an :ok might not recognize the difference. | |||
TimToady | that's true of any multi | ||
pmichaud | true. | ||
moritz_ | so there's no magical :ok that turns an infix op into a test, as a fallback? | 20:48 | |
TimToady | fudge --ok | ||
hmm, that is a problem for fudge | |||
20:49
apeiron joined
|
|||
TimToady | how will it recognize the beginning of a statement if there's no "is/ok" there? | 20:49 | |
another problem: $x eqv $a + $b :ok will apply the :ok to the + | 20:50 | ||
pmichaud | oh well. | ||
it was a nice thought. :-) | 20:51 | ||
TimToady | they'd have to write $x eqv ($a+$b) :ok | ||
but that's just how adverbs work on operators | |||
moritz_ | another test suite faq | ||
pmichaud | presumably $a + $b :ok would not dispatch? | ||
i.e., there wouldn't be a matching infix:<+> | 20:52 | ||
TimToady | probably not, so at least it's an error | ||
albeit at runtime | |||
but hey, that's when you run the tests, at runtime :) | |||
so it can still fly, I think | 20:53 | ||
still have the fudge problem though | |||
unless we have an "is" placeholder at the beginning, or some such | |||
or change the rules for how fudge recognizes a test | 20:54 | ||
split into statements and assume anything containing :ok is a test, maybe | |||
where "split into statements" pays attention only to final ; or } | 20:55 | ||
moritz_ | and we significantly increase the number of builtin multis | 20:57 | |
TimToady | but the presence or absence of a named argument is known at compile time, so the candidate list can be optimized even before we know any of the types | 21:01 | |
pmichaud | ...and one could write the builtins with optional named params | ||
TimToady | that seems like a recipe for slow builtins | ||
moritz_ | aye | 21:02 | |
pmichaud | yes | ||
TimToady | very likely the :ok versions delegate to the non-:ok versions for the actual work | 21:04 | |
and it seems like there's going to be a lot of boilerplate | |||
which argues more for a metaoperator | 21:05 | ||
maybe :ok is really a metaoperator in disguise | |||
it just happens to bind to the same operator as a real adverb | 21:06 | ||
21:06
ab5tract left
21:08
pbuetow joined
|
|||
TimToady | but always just generates the appropriate underlying operator you need | 21:08 | |
sort of a semantic pass macro | |||
PerlJam | Are you guys talking about adding testing operators to perl 6? | 21:10 | |
moritz_ | yes | ||
PerlJam | awesome! | ||
pmichaud | PerlJam: making test functions part of the builtins, yes. | ||
moritz_ | PerlJam: the current approach looks like this: $x == 2, :ok<$x is really 2>; | ||
TimToady | no comma | ||
moritz_ | erm, withotu the comma | ||
right | |||
PerlJam | er, how does :ok know not to bind to the 2 ? | 21:11 | |
pmichaud | adverbs bind to operators | ||
TimToady | it's where an infix is expected | ||
same way 1..10:by(2) knows | |||
PerlJam | aye, I just haven't looked at perl6 syntax in a while. | 21:12 | |
so, all of the comparators grok :ok ? | |||
(or will) | |||
TimToady | make :ok a crypto-meta-operator that rewrites any operator that returns boolean | 21:13 | |
PerlJam | so, what happens to $a == 2 && $b == 3 :ok<fooey> ? Do I need parens or something? | ||
moritz_ | probably around the second == | 21:14 | |
TimToady | that one would silently fail currently | ||
I mean, fail to work as expected | |||
you'd get a useless use of, maybe | |||
PerlJam | it would silently suceed where it may should have failed :) | ||
TimToady | it's possible we should reformulate adverbs a bit | 21:15 | |
I wonder if they can be made to apply to the *top* operator visible | 21:16 | ||
instead of the last one | |||
then this would apply to the && instead of the == | |||
PerlJam | How far up the parsetree should they look? :-) | ||
TimToady | but 1..10:by(2) would still work | ||
pmichaud | then of course we have the issue of ... and 1..10:by(2) | 21:17 | |
TimToady | only inside the current scalar item, I think | ||
so make it slighty tighter than comma | |||
pmichaud: that would be fine since :by is tighter than and | 21:18 | ||
&& would be more of a problem | |||
PerlJam | This is starting to feel like the "regular" syntax version of that weird regex ~ thingie | 21:19 | |
21:20
mberends left
|
|||
PerlJam | Use the special <MAGIC HERE> operator for all your testing needs. | 21:20 | |
pmichaud | I have to go help kids with their homework | 21:21 | |
bbl | |||
21:21
FurnaceBoy left
|
|||
PerlJam | So ... what was wrong with ok($test,$str) ? Or, why do we need another form? | 21:22 | |
21:22
tewk_ joined
|
|||
TimToady | we talked about that eariler, doesn't provide anything beyond a boolean unles ok is a macro | 21:25 | |
moritz_ | PerlJam: one of the problems is that is() isn't very verbose about its comparison semantics | ||
PerlJam: and changing that to ok($a eqv $b) doesn't give any useful diagnostic output | 21:26 | ||
TimToady | backlog about the last 2 hours... | ||
PerlJam | okay. | 21:27 | |
so, an adverb that attaches to the highest precedence operator in the previous expression ? And all adverbs or just special ones with nice syntactic markers? | 21:28 | ||
TimToady | highest within , precedence | 21:29 | |
so basically loose unary precedence like "not", but a postfix | |||
21:30
kulp joined,
azawawi joined
|
|||
TimToady | but unlike current formulation, can see within (), so $a and ($b and $c) :foo applies to the second and, because it's the top operator in the expression governed by the :foo | 21:31 | |
assuming you'd never want to apply an adverb to (), which we already assume | |||
21:31
iblechbot left
|
|||
PerlJam | Those seem like really special adverbs. Could we make them look lik ^:foo or something? | 21:32 | |
s/lik/like/ | 21:33 | ||
TimToady | but since tigher than comma, works in the middle of a list: 1,2,3..10:by(2), 4,5 | ||
the only thing special is that it would write the code for you instead of dispatching to a multi with an :ok parameter | |||
PerlJam | or maybe I'm just really uncomfortable with all adverbs behaving this way. | ||
TimToady | the syntax is independent of the behavior | 21:34 | |
if you mean the meta-op semantics | |||
21:34
tewk left
|
|||
PerlJam | sure, but I'd like the former to give me some clue about the latter | 21:34 | |
TimToady | do you care that !eq is writing code for you? | ||
or += for that matter | 21:35 | ||
the only difference is whether you have to implement :ok explicitly or not, and the user doesn't really care | 21:36 | ||
PerlJam | !eq, += and :ok all occupy separate conceptual boxes in my head. Mayhap they shouldn't. | 21:37 | |
TimToady | maybe the current metaoperators all have :foo forms too, and maybe that's their native form | ||
$a + $b :assignop | |||
doesn't really fly though | |||
21:38
apeiron left
|
|||
TimToady | since you can't write === @x :reduce | 21:38 | |
not that [===] is exactly normal either :) | 21:39 | ||
PerlJam | [===] feels more natural to me though | ||
TimToady | well, I guess it means "are all of these the same object" | ||
well, you've been programmed to think of lists when you see [] | |||
PerlJam | true | ||
TimToady | which is why I picked it, after all :) | 21:40 | |
21:40
jogla joined,
BinGOs left
|
|||
PerlJam | What you need is an implementation :) They always seem to bring design flaws out (if there are any) | 21:42 | |
TimToady | anyway, I don't see much problem with treating some adverbs as semantic macros; this is not important for the user to track, only the implementor of :ok, who would otherwise have to duplicate all the builtins | ||
21:42
alester left
|
|||
TimToady | the policy of which operator to apply an adverb to is a different matter | 21:42 | |
21:42
Limbic_Region joined
|
|||
moritz_ | in rx.t we have tests like this: | 21:43 | |
ok ('bazaar' ~~ /a*: a/) ~~ Match where matchcheck($_, q/:a/), 'basic'; | |||
TimToady | gee, who wrote that mess :) | ||
moritz_ | would that become ('bazaar' ~~ /a*: a/) ~~ Match where matchcheck($_, q/:a/) :ok<basic>; | ||
PerlJam | the principle of least surprise is a strong attractor. you just have to pick the right least surprise :) | ||
TimToady | so that would apply :ok to the second ~~ if we went with the precedence solution, which is correct, I guess | 21:45 | |
moritz_ | aye | ||
TimToady | since that's the top operator | ||
moritz_ | but for longer expressions I'm a bit worried that the :ok is too far on the right | ||
21:46
apeiron joined
|
|||
PerlJam | yeah, there's a bit of distance between there | 21:46 | |
moritz_ | and it changes the expression from "useless expression in void context" to "run a test" | ||
which somehow violates the principile of end weight | |||
TimToady | well, write a longer message :) | 21:47 | |
PerlJam | heh | ||
TimToady | but it's kinda cool that brainos turn into "useless use" | 21:48 | |
it'll even tell you *which* operator leaked | 21:49 | ||
well, one of 'em, anyway | |||
and it better justifies the existence of "loose unary" precedence :) | 21:51 | ||
PerlJam | I guess part of my conceptual difficulty is that I don't think of tests in an adverbial way. I think of them as nouns that you feed stuff to. Maybe I'm just insane. | ||
TimToady | well, they're predicates, really, or assertions | ||
if there weren't a history of ! meaning factorial we'd say $a == $b! when we really mean it | 21:52 | ||
PerlJam | they're the teacher and we're the students handing in our assignments to find out if we pass or fail. :) | 21:53 | |
azawawi | hi | ||
lambdabot | azawawi: You have 1 new message. '/msg lambdabot @messages' to read it. | ||
moritz_ | the difference between a test and an assertion is that you (have to) actively run a test, whereas assertions are verified along the way of a normal executioing | ||
TimToady | yes, and you don't really want to blow execution out of the water on the first failed test :) | 21:54 | |
moritz_ | (that's what the Eiffel people generally get wrong; they say "we don't need tests, we have our design by contract" - but as long as the code is not executed, these contracts aren't checked) | ||
TimToady | you will soon have us all converted to Haskell :) | 21:55 | |
21:55
BinGOs joined
|
|||
moritz_ | TimToady: so should :ok'ed operators catch exceptions? | 21:55 | |
not before I convert myself to Haskell ;) | 21:56 | ||
TimToady | well, why not? the one think it can't do it catch parsefails... | ||
*thing | |||
moritz_ | nice | 21:58 | |
TimToady | although a parser could resync a statement if it sees an :ok coming up, I suppose, the way some parsers resync on semicolons | 21:59 | |
moritz_ | what will '1 :ok<1 is a true value>' work out to? | ||
ie when there's no operator to bind to? | |||
PerlJam | "operator expected" :) | 22:00 | |
moritz_ | well, these things must be tested somehow | ||
PerlJam | unless there's a null operator it can bind to for other possibilities | ||
moritz_ | simple truthness, dies_ok, eval_dies_ok needs to be addressed | ||
TimToady | currently it says 'No previous operator visible to adverbial pair | 22:01 | |
moritz_ | sub unfix:<> | ||
the null operator | |||
PerlJam | "unfix"? :) | ||
moritz_ | neither pre nor post nor infix | ||
TimToady | given that :ok is testing for boolean, presumably it should supply a true() | ||
moritz_ | unfix | ||
PerlJam | What's your fixity? I have none. | 22:02 | |
Limbic_Region | salutations all | 22:03 | |
moritz_ | hello Limbic_Region ;) | ||
where did you leave your ~ ? ;-) | 22:04 | ||
Limbic_Region | on use.perl it is a space | 22:05 | |
TimToady | the final frontier... | ||
moritz_ | unendliche weiten... | 22:06 | |
ELANG | |||
22:09
kulp left
22:12
pbuetow left
22:21
hercynium left
22:23
Exodist left
22:24
YMas joined
|
|||
azawawi | moritz_: any interesting RTs / tasks to work on? | 22:25 | |
moritz_ | depends on your notion of "interesting" ;) | 22:26 | |
azawawi | moritz_: something that gets committed in the end ;-) | 22:27 | |
moritz_ | azawawi: I'm sure most of your patches will get commited in the end... | 22:28 | |
on the side of the test suite there's still a lot in t/TASKS | |||
on the rakudo side - dunno, really | |||
azawawi | im actually looking at it | ||
moritz_ | perhaps infix:<where> | ||
azawawi | tests for complex: polar | ||
moritz_ | have to go to bed now :( | 22:30 | |
happy hacking ;) | |||
azawawi | me 2 it is 1:29am here | ||
good night... | |||
22:31
YMas left
22:40
hercynium joined
22:41
azawawi left
22:46
ab5tract joined
22:48
ingyfoo joined,
ingy left
22:49
ingyfoo left,
ingy joined
|
|||
pugs_svn | r22559 | azawawi++ | [t] removed unused empty directories | 22:50 | |
22:54
r0bby left
23:03
kulp joined
|
|||
pugs_svn | r22560 | putter++ | [elfish/on_sbcl] Self-compiles. | 23:04 | |
r22560 | putter++ | Undef and bool boxing. Dispatch and misc fixes. Slower. | |||
r22560 | putter++ | Doesn't quite compile the p5 version. | |||
r22560 | putter++ | [STD_red] Improved --format=cl string and nil dumping. | |||
r22560 | putter++ | [elf_h] Yet more missing argument fixes. | |||
23:12
r0bby joined
23:21
Lorn left
23:22
elmex left
23:29
kulp left
|
|||
speckbot | r14591 | larry++ | Make operator adverbs parse sanely based on precedence. They are now treated | 23:41 | |
r14591 | larry++ | as "loose unaries" (albeit still in a trailing position), and no longer require | |||
r14591 | larry++ | the parser to track "previous operator". The benefits are construed to | |||
r14591 | larry++ | outweigh the problems. | |||
r14591 | larry++ | | |||
r14591 | larry++ | Note also that existence and deletion are now simply adverbs on subscript | |||
r14591 | larry++ | operators. | |||
23:53
hercynium left
23:56
kulp joined
23:59
drbean left,
alester joined
|