pugscode.org/ | nopaste: sial.org/pbot/perl6 | ?eval [~] <m oo se> | We do Haskell, too | > reverse . show $ foldl1 (*) [1..4] | irclog: irc.pugscode.org/ Set by diakopter on 11 July 2007. |
|||
pugs_svn | r19333 | Darren_Duncan++ | ext/Muldis-DB/ : updated copyright range-ends to 2008 | 00:03 | |
00:19
REPLeffect left
00:26
shafire joined
|
|||
shafire | hi | 00:26 | |
ranti? | |||
:o | |||
ah pbuetow :) | 00:27 | ||
pbuetow | hallo shafire | ||
shafire | 3st xD | 00:28 | |
00:28
lorn_ joined
00:32
pbuetow is now known as buetow
00:33
buetow is now known as pbuetow
00:42
jferrero joined
00:46
shafire left
01:14
devogon left
01:32
drbean joined
01:56
kanru joined
02:04
vdrab joined
02:07
Caelum left
02:09
jferrero left
02:16
Caelum joined
02:23
Limbic_Region joined
02:36
hexmode left
02:48
hexmode joined
|
|||
pugs_svn | r19334 | rhr++ | [Unicode.pm] factor out Utable, tests for Utable, some S29 stuff, misc fixes | 02:48 | |
02:57
jrm__ joined
03:13
DaGo left
03:14
jrm__ left
03:16
Limbic_Region left,
lisppaste3 left
|
|||
pugs_svn | r19335 | rhr++ | [Unicode.pm] implement <alpha> <digit> <isZs> etc. | 03:19 | |
r19336 | rhr++ | [Unicode.pm] forgot ;s | 03:22 | ||
03:27
lisppaste3 joined
03:30
thoughtpolice left
03:50
vainguard joined
04:10
lorn_ left
04:16
vainguard_ joined
04:21
nipotaway is now known as nipotan
04:25
vainguard left
|
|||
diakopter | TimToady: you're trying to keep the language agnostic, or trying to keep the language implementation agnostic? If the former, it tickles me. | 04:29 | |
above, insert a hyphen between implemenation and agnostic. | 04:30 | ||
04:49
vainguard_ is now known as vainguard
05:32
nipotan is now known as nipotaway
05:49
Andrew__ left,
vainguard left
06:08
szabgab left
06:27
Auzon left
06:28
Schwern joined
|
|||
Schwern | What's "quasiquoting"? | 06:28 | |
Schwern just found q:code in S02 | |||
jql | larry stole that from lisp | 06:29 | |
Schwern | Ok, what's it in Lisp? | ||
allbery_b | backquote | 06:30 | |
Schwern | WHAT DOES IT DO | ||
allbery_b | it quotes except when things are *un*escaped | 06:31 | |
Schwern | I don't understand. Can you give an example? | ||
allbery_b | in Lisp, `(sexpr) is quoted excvept whn something is preceded by , or ,@ | ||
in which case it is expanded (,foo expands a list in place as (list), ,@foo expands the list inline so it is added to whatever the current sexp is) | 06:32 | ||
Schwern | Let's assume I don't know Lisp | ||
jql | (don't `(you ,@quote-me)) | ||
Schwern | What do you use it for? | ||
Tene | allbery_b: can you give an example of a Perl 6 quasiquote, perhaps, and its meaning? | ||
allbery_b | code generation (in lisp via macros; in perl by manipulating ASTs) | ||
jql | it's for interpolating variables into an eval{} q construct | ||
Schwern | How is it better than eval STRING? | 06:33 | |
allbery_b | in p6? not so much. I'm still weak on the language, never mind how the AST stuff worjks | ||
06:33
__Ace__ joined
|
|||
jql | eval "\$foo $bar" vs q:list<$foo ,$bar> | 06:34 | |
err, s/list/lisp/ | |||
Schwern | Isn't it q:code? | 06:35 | |
jql | yes, but my version wasn't valid for q:code | ||
mine was made-up bs | |||
Schwern | ah ha | ||
allbery_b | the very shoprt version, as I understand it (which may bre incorrect): you have more control over the substitution because you specify exactly the context into which it substitutes. in the evlal string version, the string could contain random evil stuff; in quasiquoted code, it has to be exactly what is permitted at that place (e.g. if it's looking for a variable, only a variable can be substituted) | 06:36 | |
it's not interpolating a string, it's interpolating a semantic element | 06:37 | ||
Schwern | What's "it" in "it's looking for a variable"? | ||
allbery_b | (niot syntactic) | ||
jql | quasi-quoting is a lot more like allowing interpolation into an eval{} than an eval"" | ||
allbery_b | it = the perl parser | ||
quasiquoted code is parsed. but you can substitute specific things into it (hence "quasi": you control where substition is permitted) as long as what is substituted is acceptable in that particular place in the generated parse tree (not in the source!) | 06:39 | ||
Schwern | Yeah, I'd need to see an example | ||
allbery_b | except I'm not sure if it actually works at the parse tree level or at the source level | ||
I think we all do, to be honest :) | |||
jql | I don't know the syntax for dequoting stuff | 06:40 | |
allbery_b | I'm not cl;ear on what level p6 quasiquoting actually operates | ||
Schwern | It came up because of the issues with this in Perl 5: eval "sub $name { my \$foo = 42; print $name }" | ||
jql | oh bleh | 06:41 | |
Schwern | The whole problem of interpolating code as a string and how there's no good way to do it. | ||
allbery_b | I know how quasiquoting works in lisp, and have some idea of how it works in template haskell (which operates on the level of the parse tree / AST). I think p6 is more like the latter | ||
Schwern | And realizing that Perl 6 interpolating {} is going to make that easier and harder. | ||
So there must be an improved substitute. | |||
And then stumblign on q:to:code | |||
jql | macro gimmeh($name) { qc{ my sub !$name! { my $foo = 42; print !$name! } } } # how about I steal some syntax | 06:44 | |
Schwern | qc already means something. | 06:45 | |
jql | actually, print !$name! is a syntax error | ||
jql sucks | |||
Schwern | quote closure | ||
jql | say !!$name!! | ||
there, invented "" for quasis | |||
heck, it could be a meta-twigil | 06:46 | ||
$'name | 06:47 | ||
although reintroducing unmatched ' is verboten | |||
06:52
hexmode left
06:57
jjore-m joined
06:58
jjore-m left,
jjore-m joined
07:38
lyokato_ joined
|
|||
pugs_svn | r19337 | Darren_Duncan++ | ext/Muldis-DB/ : in Value.pm, demoted Order type from generic to catalog-specific | 07:40 | |
07:56
Aankhen`` joined
08:05
pmurias joined
|
|||
pmurias | Schwern: the quasi-quote is equvialent to writing the ast AST in the AstNode.new(...) form, only with better syntax | 08:07 | |
checking if the example i wrote is update with the spec | 08:09 | ||
TimToady | yes, the basic problem with eval "" is that it has to reparse the entire string, including (often) large quantities of non-varying code | 08:11 | |
a quasi quote allows you to parse the non-varying bits only once at compile time, while still allowing you to plug in bits of AST for the varying parts | |||
not only is this more efficient, but it's also more secure | 08:12 | ||
(much like the placeholders that DBI uses to prevent SQL injection attacks) | |||
pmurias | TimToady: one thing i wandered about is if the various implementatins will have to adapt a single AST to make the macros portable? | ||
TimToady | seems like it, doesn't it? | 08:13 | |
pmurias | * implementations | ||
if the have the same grammar and AST they will probably have interchangable componets | 08:15 | ||
* components | |||
TimToady | on the other hand, we can probably parse bits of code with an eval-like operator that returns AST | ||
as long as the parser knows which rule to start with | |||
so as long as the same rules are called, it doesn't matter so much if the trees are different | 08:16 | ||
but that approach would not be quite as safe as directly constructing AST | 08:17 | ||
so yes, I'm hoping for convergence there | |||
or maybe there's some common AST form that each implementation can transmogrify into its own form | 08:18 | ||
08:29
devogon joined
08:33
p6quester joined
|
|||
pmurias | .HOW returns a metaclass instance, which .isa a metaclass, right? | 08:34 | |
pugs_svn | r19338 | pmurias++ | [yap6] fixed minor grammar issues | 08:38 | |
08:42
p6quester left
|
|||
TimToady | pmurias: correct | 08:49 | |
thunk & | 08:50 | ||
pmurias | TimToady: thanks | 09:03 | |
gaal | hi there | 09:30 | |
09:30
devogon left,
devogon joined
09:32
devogon left,
devogon joined
09:33
jisom joined
|
|||
pmurias | gaal: hi | 09:34 | |
10:33
thoughtpolice joined
10:47
meppuru joined
10:48
IllvilJa joined
11:07
meppuru left
11:16
iblechbot joined
11:39
vdrab left
11:40
cognominal_ left,
cognominal_ joined
11:45
meppuru joined
11:49
meppel-san joined
11:55
Schnueff joined
12:03
jisom left
12:09
meppuru left
12:11
rindolf joined
12:14
jferrero joined
12:20
lyokato_ left
12:21
kanru left,
blindfish_ joined
12:23
kanru joined
12:46
masak joined
12:49
jedai joined
|
|||
ruoso | pugs: my int $a = '1'.int(); | 13:49 | |
exp_evalbot | RESULT[\1] | ||
ruoso | pugs: my Int $a = '1'.int(); | ||
exp_evalbot | RESULT[\1] | ||
ruoso | pugs: my Int $a = '1'.Int(); | ||
exp_evalbot | OUTPUT[*** No such method in class Str: "&Int"ā¤ at /tmp/VJ8PDfysAF line 1, column 8-22ā¤] | ||
13:49
ludan joined
13:56
meppel-san left
13:57
araujo left
13:59
__Ace__ left
14:01
__Ace__ joined
14:05
meppel-san joined
14:06
jrm_ joined
14:08
lorn joined
14:20
ludan left
|
|||
ruoso | pugs: my Int $a = 1; my int $b = $a; | 14:21 | |
exp_evalbot | RESULT[\1] | ||
ruoso | Int and int autoboxes | ||
right, but which is the method we call on Int to get a int? | 14:22 | ||
I suppose that is "standard" API | 14:23 | ||
I mean, there might be several Int implementations coexisting | 14:24 | ||
14:24
drrho joined
|
|||
ruoso | as any object can have a metaclass that returns true on $obj.^does(Int) | 14:26 | |
14:27
__Ace__ left
14:29
polettix joined
|
|||
ruoso | maybe these would be metamethods | 14:30 | |
like .^does and .^can | |||
maybe .^native($type) | 14:31 | ||
In the YAP6 model, it makes sense to be in the metaclass | 14:32 | ||
pmurias | ruoso: you seem to be using the phrase "metaclass" in place of "metaclass instance" | ||
ruoso | yes | 14:33 | |
in fact | |||
pmurias | go on | ||
ruoso | but that's because in this model, | ||
the metaclass is always a prototype | |||
that is realized in the low-level | 14:34 | ||
in C | |||
hmm | |||
ok... it doesn't need to be a prototype | |||
hmm | 14:35 | ||
not sure | |||
in fact, it's its own prototype | |||
yes | |||
but anyway | |||
you know what I mean, right | |||
? | |||
there's no metaclass class | 14:36 | ||
there are only metaclass instances | |||
pmurias | i see | ||
ruoso | and the metaclass API | ||
which have .does, .can and .isa | 14:37 | ||
pmurias | there will be metaclasses when the model bootstraps | ||
? | |||
ruoso | and I'm now thinking about .native | ||
always | |||
that's how you'll be able to use p5 objects from yap6 | |||
or even PMCs | |||
remember, a Int is simply something that returns true to .^does(Int) | 14:38 | ||
so nothing stops me from using a SV* directly as an Int | 14:39 | ||
pmurias | i mean .HOW() returns a metaclass instance, which is not .isa anything at first | ||
ruoso | it's design by contract | ||
yes | |||
metaclass .isa itself | |||
heh | |||
14:40
xinming joined
|
|||
pmurias | ruoso: but Foo.HOW() .isa Class.HOW() | 14:42 | |
(Foo.HOW).isa(Class.HOW) | 14:43 | ||
ruoso | in theory, that's true if both Foo and Class are laid out as the same metaclas | 14:44 | |
s/as the/by the/ | |||
because the metaclass is also a prototype | |||
pmurias | a metaclass? | 14:45 | |
ruoso | "metaclass instance" | ||
but it never realizes itself as an object | 14:46 | ||
Foo.HOW().new() should return another prototype | |||
instead of an object that have Foo.HOW() as its prototype | |||
pmurias | i think metaclass instance and the prototype object are seperate thing | ||
ruoso | they are | ||
I mean | |||
Foo.WHAT is not the same as Foo.HOW | 14:47 | ||
pmurias | yes | ||
ruoso | but Foo.HOW.WHAT is the same as Foo.HOW | ||
and Foo.HOW.HOW is the same as Foo.HOW | |||
pmurias | Foo.HOW.HOW is diffrent from Foo.HOW | ||
ruoso | and what is it? | 14:48 | |
the metaclass's metaclass | |||
you just change the invocant | |||
$a.foo() is $a.HOW.can(foo).call($a: ) | 14:49 | ||
$a.foo() is $a.HOW.can("foo").call($a: ) actually | 14:50 | ||
pmurias | ruoso: Foo.HOW.HOW is the Foo's metaclass instance parents metaclass instance | ||
so it's Class.HOW | |||
ruoso | Only if Foo is laid out by the Class metaclass | 14:51 | |
pmurias | we need a better term than "metaclass instance" a metaobject would be fine | ||
ruoso | which may not be true | ||
pmurias | ruoso: yes | ||
ruoso | and what is Class.HOW if not Class again? | ||
and there's the bootstrap | |||
pmurias | Class.HOW is the special case | 14:52 | |
ruoso | we don't need a special case | ||
we can bootstrap | |||
pmurias | Class.HOW is not Class | 14:54 | |
ruoso | that's an implementaiton detail | ||
14:54
vainguard joined
|
|||
ruoso | actually Class.HOW may be p6opaque | 14:54 | |
but then Foo.HOW will probably be p6opaque again | |||
pmurias | Class.HOW.HOW === Class.HOW # that's the special case | ||
14:55
ispy_ left
|
|||
ruoso | well.. it's a special case in the implementation, not in the architecture... | 14:55 | |
it's a bootstrapped metaclass | |||
a metaclass that can be described by itself | |||
pmurias | normal class are not bootstrap is what i mean | 14:56 | |
* classes | |||
ruoso | normal classes depend on the metaclass | ||
and by class here, we really should use prototypes | |||
a metaclass is something that is self-suficient | 14:57 | ||
pmurias | prototype objects are not metaclass instances | ||
ruoso | no, | ||
but metaclass instances are prototype object | |||
s | |||
pmurias | i don't think they are | 14:58 | |
ruoso | I mean, they don't need to be | ||
that's how I managed to figure out how to bootstrap in the model I designed | |||
that is implementation specific | 14:59 | ||
pmurias | i mean in Perl 6 | ||
ruoso | Perl 6 doesn't really differentiate between prototypes and objects | ||
a prototype is something that can be used as an object | |||
it's implementation specific how to define the differences between them | 15:00 | ||
15:01
Schwern left
|
|||
pmurias | class Foo {method methods() {print "foo!!!"}};::Foo.methods | 15:01 | |
kp6: class Foo {method methods() {print "foo!!!"}};Foo.methods | 15:02 | ||
exp_evalbot | r19338: OUTPUT[foo!!!] | ||
pmurias | kp6: class Foo {method methods() {print "foo!!!"}};Foo.HOW.methods | ||
exp_evalbot | r19338: OUTPUT[syntax error at position 53, line 1 column 53:ā¤class Foo {method methods() {print "foo!!!"}};Foo.HOW.methodā¤ ^ HEREā¤] | ||
pmurias | kp6: class Foo {method methods() {print "foo!!!"}};(Foo.HOW).methods | ||
kp6: class Foo {method methods() {print "foo!!!"}};say (Foo.HOW).methods | |||
exp_evalbot | r19338: RESULT[no method 'APPLY' in Class 'Undef'ā¤ at compiled/perl5-kp6-mp6/lib/KindaPerl6/Runtime/Perl5/MOP.pm line 345ā¤ KindaPerl6::Runtime::Perl5::MOP::__ANON__('HASH(0x824c364)', 'APPLY', 'HASH(0x8e76204)') called at compiled/perl5-kp6-mp6/lib/KindaPerl6/Runtime/Perl5/MOP.pm line 169ā¤ | ||
..main::DISPATCH('HASH(0x824c364)', 'APPLY', 'HASH(0x8e76204)') ca... | |||
r19338: OUTPUT[methodsHOWWHATā¤] | |||
ruoso | kp6: say Int.HOW.WHAT | 15:03 | |
exp_evalbot | r19338: OUTPUT[Intā¤] | ||
ruoso | kp6: say (Int.HOW).WHAT | ||
exp_evalbot | r19338: OUTPUT[Classā¤] | ||
ruoso | but that's how kp6 implements | ||
nothing says that the metaclass instance of Int must be Class | |||
it can be anything else | |||
kp6: say (Int.HOW).HOW | |||
pmurias | ruoso: yes but it can't be Int | ||
exp_evalbot | r19338: OUTPUT[Classā¤] | 15:04 | |
ruoso | pmurias, it could | ||
nothing stops it from being | |||
it only needs to be a Int implementation that supports the metaclass API | |||
pmurias | ruoso: i meant the standard Int class | 15:05 | |
ruoso | the thing is | ||
there's no "standard" int class | |||
Int is anything that returns true to $foo.^does(Int) | |||
15:05
xinming_ left
|
|||
ruoso | I can have several Int implementations coexisting | 15:06 | |
Ok, only one will be registered in the namespace as Int | |||
but even then | |||
I can have it changed | |||
and the change can be scoped | 15:07 | ||
pmurias | the one which is registered in "vanilla" Perl 6 | 15:08 | |
ruoso | you mean the API | ||
I agree that there's a standard API | |||
it's design by contract | 15:09 | ||
15:09
jhorwitz joined
15:18
alester joined
|
|||
pugs_svn | r19339 | ruoso++ | [yap6] a big block of comment in yap6.h introducing how to deal with the native types. | 15:21 | |
ruoso | pmurias, please take a look at that last comment block in yap6.h | ||
pmurias | ok | 15:25 | |
ruoso: i don't think the native method has to live in the metaclass | 15:29 | ||
ruoso | where would it be? | 15:30 | |
pmurias | in the Int class | ||
ruoso | I thought about it, | 15:32 | |
but there's one important reason for it to be in the metaclas | |||
which is the fact that building a native object requires low-level call | |||
I mean | |||
you can't say int.new(1) | 15:33 | ||
pmurias | class Int {has int $.value;method int {return $.value;} | ||
ruoso | because 1 is already a int | ||
so | |||
it woul be int.new(int.new(int.new( ... | |||
the low-level int creation needs to be made at low-level | |||
pmurias | 1 compile to well... 1 which is int | ||
s/compile/compiles/ | |||
ruoso | yeah... but thinking in implementation, this means a C call | 15:34 | |
not a Perl clal | |||
call | |||
pmurias | yes | ||
ruoso | and this even for classes implemented completely in Perl | 15:35 | |
so, considering that the metaclass already needs to be implemented in C | 15:36 | ||
at least some part of it | |||
I thought it would be interesting to consolidate that there | |||
pmurias | ruoso: how will you pass the value of the int to the metaclass | 15:37 | |
unless you use church numerals | |||
ruoso | that's the point, the metaclass understands the object representation | ||
and can extract it from there | |||
pmurias | if you pass buf yes | 15:39 | |
ruoso | hm? | ||
pmurias | a bag of bits | ||
ruoso | I mean, we are talking about C code here | ||
the metaclass understand the C structure of the data | 15:40 | ||
and can deal with that | |||
pmurias | so we can do int.new(1) | ||
ruoso | in C, yes | ||
which would probably be yap6_int_create(1) | |||
15:41
meppel-san left
|
|||
pmurias | in opcode tree we do something in the style of call(prototype('int'),'new',int(1)) | 15:41 | |
15:42
meppel-san joined
|
|||
ruoso | pmurias, no... probably something more call(lowlevel('int_create',1)) | 15:42 | |
pmurias | was just making stuff up | 15:43 | |
ruoso | I see, but I really mean that this should be an explicit lowlevel thing | ||
15:43
kanru left
|
|||
ruoso | not implicit | 15:43 | |
it's a lowlevel operator | |||
15:45
vainguard_ joined
|
|||
pmurias | in order for native to work you'll need a custom metaclass for Int | 15:52 | |
pugs_svn | r19340 | ruoso++ | [yap6] some more reasoning on why the "native" method resides in the metaclass | ||
ruoso | pmurias, probably... | 15:53 | |
but I would probably have it in the first place | |||
because I don't want Int to have the same representation of Complex | |||
or Str | 15:54 | ||
but, for instance... | 15:55 | ||
if we're mapping SV*s | |||
every SV object can return a native type in the same way | |||
so the YAP6-SV metaclass would implement native(int) directly | 15:56 | ||
without an extra call to imply numeric context | |||
so, basically, every SV would be able to say .^does(Int) | 15:57 | ||
hmm | 15:58 | ||
but it doesn't need to | |||
16:00
vainguard left
16:04
vainguard joined
|
|||
ruoso | pmurias, ok... now I'm in doubt | 16:05 | |
maybe it should go to the Int implementation | |||
and not the metaclass | |||
16:12
acmoore joined
|
|||
pmurias | ruoso: you can have a perl5-hash-based-object metaclass, but a YAP6-SV would be rather limited | 16:16 | |
ruoso | pmurias, as limited as perl5-hash-based-object is | 16:17 | |
pmurias | s/limited/diffrent | ||
different | 16:18 | ||
16:18
vainguard_ left
|
|||
ruoso | well... p5 oo may have different implementations | 16:18 | |
but in the end you have a ref blessed to a package name | 16:19 | ||
pmurias | you can have metaclasses for diffrent p5 oo implementations | ||
* different | |||
or a read only one for a ref blessed to a package name | |||
ruoso | pmurias, I wouldn't expect to be able to have a rw metaclass to a p5 object | 16:23 | |
I mean, | |||
my $foo = some_sub_that_returns_a_p5_object() | |||
$foo does Bla; | 16:24 | ||
would create a new prototype that extends the original class and composes with Bla | |||
the new prototype would point to a "composition" metaclass | |||
that would know how to ask for the previous prototype | 16:25 | ||
16:29
rindolf left
16:34
rindolf joined
16:41
|Jedai| joined
|
|||
pmurias | the metaclass would wrap the perl5 object so that perl5 integers returned from methods will be turned into perl6 int's | 16:43 | |
hosting a starcraft lan party& | 16:45 | ||
16:45
pmurias left
16:48
_Jedai_ joined
16:52
Psyche^ joined
|
|||
pugs_svn | r19341 | ruoso++ | [yap6] declaring the native-type prototypes and the low-level API for using them | 16:54 | |
16:55
thoughtpolice left
|
|||
mncharity | exists MY::<$a> ?? MY::<$a> !! exists OUR::<$a> ?? OUR::<$a> !! exists GLOBAL::<$a> ?? GLOBAL::<$a> !! CANDO($?PACKAGE, Item, '$a') | 16:57 | |
is that what name resolution of $a looks like? | |||
16:59
jedai left
|
|||
mncharity | TimToady: ^^^ ? tnx | 17:02 | |
17:02
DaGo joined
|
|||
pugs_svn | r19342 | ruoso++ | [yap6] I think this is the entire external API for YAP6 | 17:05 | |
17:06
|Jedai| left
17:07
_Jedai_ left
17:09
Patterner left,
Psyche^ is now known as Patterner
17:11
fihi09 joined
|
|||
rhr | can you slice up slurpy args like so? sub foo(*$first, *@ignored[11], *$thirteenth, *@rest) {...} | 17:23 | |
17:26
Psyche^ joined
17:30
marmic left
17:33
marmic joined
17:35
rindolf left
17:37
chris2_ joined
17:45
araujo joined
17:50
Patterner left,
Psyche^ is now known as Patterner
17:53
barney joined
18:11
rindolf joined
18:12
alester left
|
|||
diakopter | Juerd_: ping | 18:14 | |
18:18
meppel-san left
|
|||
pugs_svn | r19343 | ruoso++ | [yap6] yap6.h now includes three files. This files now should have the YAP6 external API complete. | 18:19 | |
r19344 | ruoso++ | [yap6] The public headers are moved from src to include. These are the headers that programs using YAP6 will include. | 18:23 | ||
ruoso | I still have to work on the MESSAGE method of the metaclass to include something related to exception model and stuff... | 18:26 | |
but apart from that, I think the way it's design will support Perl 6 completely | |||
18:51
vainguard_ joined
19:02
Schnueff left,
masak left
19:05
vainguard left
|
|||
pugs_svn | r19345 | rhr++ | [Unicode.pm] start reading and dumping the UCD. implement %open2close per S02:68 | 19:08 | |
r19345 | rhr++ | [Utable.pm] add .perl and tests | |||
19:22
meppuru joined
19:23
jjore-m left,
vainguard joined
|
|||
pugs_svn | r19346 | ruoso++ | [yap6] a "repr" member of the YAP6__Object structure is where the object representation will be held. | 19:26 | |
19:28
jisom joined
19:39
vainguard_ left
19:44
drrho left
19:48
lorn left
19:51
barney left
19:53
chris2_ left
19:55
barney joined
|
|||
TimToady | rhr: no, formal parameters can't take subscripts | 19:55 | |
mncharity: not exactly. MY should give a view of all lexically scoped declarations including "our" and "state" | 20:00 | ||
arguably it's misnamed | |||
also, it doesn't fallback to GLOBAL under strict | |||
20:03
vainguard_ joined
|
|||
TimToady | (or do the package CANDO lookup either) | 20:04 | |
under strict, if it's not lexically declared or imported, it's not visible | |||
wolverian | TimToady, can you use pattern matching to do the same thing (slice up the slurpy args)? though doing that beyond splitting head and tail goes into dependent types territory if you want to define it that way.. | 20:07 | |
TimToady | you can certainly apply subsignatures to array arguments, so there's doubtless some way to work it so the nth element gets bound to a particular variable name, but subscript notation doesn't have much to do with it on the formal end | 20:10 | |
wolverian | yeah. | 20:13 | |
20:15
jisom left
20:18
vainguard__ joined
20:20
vainguard left
|
|||
rhr | TimToady: yes, I see. how would you do that? I can't see any way to get an xx in there without using eval | 20:24 | |
20:27
kingkongrevenge joined
|
|||
TimToady | you can match a signature to any individual listy parameter using [$a,$b,$c] | 20:28 | |
so $c is by definition the 3rd element | |||
see S06:1328 "Unpacking array parameters" | 20:30 | ||
lunch | |||
& | |||
20:33
vainguard_ left
20:37
vainguard joined,
vainguard__ left
20:40
devogon left
|
|||
rhr | can you do something like: my Sig $one := :(*$ignored); my Sig $eleven := $one xx 11; sub foo(*$first, |$eleven, *$thirteenth, *@rest) {...} ? | 20:45 | |
20:49
vainguard_ joined
|
|||
mncharity | TimToady: thanks | 20:49 | |
On an unrelated note, | 20:51 | ||
it seems the kp6 and pugs front-ends are complementary (objects vs language-coverage) | 20:52 | ||
has anyone considered doing common backend? | |||
Ie, a kp6 backend which also works as a pugs backend. | |||
So one could do the prelude in kp6 dialect, but drive it with the entire pugs t/. | 20:53 | ||
thoughts? questions? | 20:54 | ||
20:56
barney left
20:57
vainguard_ left
20:58
vainguard left
21:05
barney joined
21:07
rindolf left
|
|||
mncharity | avar: ping? | 21:12 | |
anyone know the state of the kp6 lisp backend? | 21:15 | ||
fax: aankhen: fglock: ping? | |||
21:15
devogon joined
|
|||
mncharity | err, Aankhen | 21:16 | |
Aankhen`` even | 21:17 | ||
21:28
DaGo left
|
|||
mncharity | Is there a recommended revision (and ghc version) to get a working pugs? make o | 21:30 | |
rhr | current rev should work well with 6.6.1, I think | 21:31 | |
mncharity | n HEAD failed with Setup: error reading dist/setup-config; run "setup configure" command? Build failed for '/a/home/jobsearch/a_bit_of_perl6/pugsx1/dist/build/libHSPugs-6.2.13.a': 256 at util/build_pugs.pl line 372. | ||
rhr: trying... my thanks | |||
Aankhen`` | mncharity: Yes? | 21:36 | |
mncharity | Aankhen``: hi. I was wondering what the state of the kp6 backend is. saw you in the log. | 21:38 | |
*lisp backend | |||
Aankhen`` | mncharity: I'm not sure, sorry. avar would know better. | ||
mncharity | np. thanks | ||
Aankhen`` | I stopped working on it a long time ago. | ||
mncharity | ok | 21:39 | |
hmm, was any thought given to being a pugs backend as well? or was the focus entirely on kp6? | 21:40 | ||
Aankhen`` | The focus was entirely on KP6 while I was there. | 21:41 | |
I'm not sure Pugs entered the picture. | |||
mncharity | ok. thanks again | ||
21:43
ispy_ joined
21:44
Aankhen`` left
21:53
jhorwitz left
21:54
kupopo left
|
|||
pugs_svn | r19347 | rhr++ | [Unicode.pm] a new Str.graphs. some p5 unicode prop defs. | 22:01 | |
Juerd_ | diakopter: pong | 22:04 | |
mncharity | gaal: re Test-TAP-HTMLMatrix, 103 passes, 1 failure, and guess which configuration I have. sigh. :) | 22:14 | |
TreyHarris | i'm puzzling at a line in TimToady's recent edit to S09: my :($obj) := $cap; | 22:26 | |
that ":($obj) :=" is creating an anonymous Pair, and binding $obj to the value part of the Pair? | 22:27 | ||
mncharity | I'm quite rusty, but I believe the :($obj) is a Signature, rather than a Pair. | 22:28 | |
TreyHarris | oh! i thought signatures were :: | 22:29 | |
mncharity | I remember seeing "my :($obj) " is the same as "my($obj)". | ||
TreyHarris | I was going by S02, the line "'' => $x :($x)" | 22:30 | |
mncharity: you just said two different things... the colon makes it a Signature, or the colon is doing nothing at all? | 22:31 | ||
22:32
fglock joined
|
|||
fglock | obra: ping | 22:32 | |
lambdabot | fglock: You have 1 new message. '/msg lambdabot @messages' to read it. | ||
mncharity | In "my($x);", the "($x)" part is a Signature, with the ":" optional here in my. | 22:33 | |
hi fglock | |||
fglock | mncharity: hi | ||
TreyHarris | mncharity: so you're saying TimToady didn't need the colon there in S09? | 22:34 | |
mncharity | fglock: any idea what the state of the kp6 lisp backend is? | 22:35 | |
fglock | mncharity: it blocked at implementing an AST transform to emulate perl6 lexical scopes, | 22:36 | |
kp6-c is also waiting for that | 22:37 | ||
mncharity | TreyHarris: assuming my understanding is correct, I'm saying the code would behave identically without it. which is _not_ saying it isn't needed there in S09 for expository purposes. | ||
"AST transform to emulate perl6 lexical scopes"? | 22:38 | ||
rhr: indeed ghc 6.6.1-3.fc7 x86_64 is indeed working on f8. make test is running. thanks again. | 22:40 | ||
22:50
barney left
|
|||
fglock | mncharity: the lisp and C runtimes don't implement lexical scopes directly (but Perl 5 and Parrot do); we need to translate the AST to a very simplified form | 22:50 | |
mncharity | the lisp runtime can't implement lexical scopes directly too? | 22:53 | |
fglock | good question, I think it could | 22:55 | |
mncharity | so perhaps the kp6 lisp backend is more sleeping than blocked | 22:58 | |
fglock | mncharity: do you know some lisp? :P | 23:00 | |
23:01
Auzon joined
|
|||
fglock | mncharity: re kp6 and pugs - I'm now trying to make kp6 and perl6-parrot converge | 23:03 | |
unfortunately, I don't know enough haskell | |||
mncharity: and pmurias has been working on merging v6.pm into kp6 | 23:04 | ||
mncharity | re lisp, a bit. :) | ||
re converges, oo, nifty | |||
though converging with parrot... well, | 23:05 | ||
hmm. I note that, in the past, attempts to converge with parrot have proved troubled and time absorbing. so... | 23:06 | ||
23:07
cathyal joined
|
|||
cathyal | hi | 23:07 | |
pbuetow | hi | ||
mncharity | perhaps just keep an eye on the slippery slope, and don't let it absorb all your time? perhaps? | ||
fglock | kp6 can be developed simultaneously in several platforms, so Parrot features are not really blocking kp6 itself | 23:09 | |
re absorb - I don't think it makes sense to have more than one Perl6-in-Perl6 compiler | 23:13 | ||
so I'm trying to work on perl6-parrot too | |||
mncharity | re pugs/haskell, one random idea might be to dump the pugs front-end's incomplete PIL for t/, in some form more easily manipulated, into svn. So one could then generate kp6 compatible something... kp6 ast? To provide an additional source of exercise for kp6 components. | ||
re parrot, ok | 23:14 | ||
23:15
Samsta joined
|
|||
Samsta | how do I XOR the hexadecimal values of two strings together? | 23:16 | |
mncharity | fglock: do you have any feel for how easy/hard it might be to translate PIL to kp6? | ||
fglock | hmm | ||
easy, but I don't think it's a good idea | |||
mncharity | :) | ||
fglock | we need to fix kp6 instead | 23:17 | |
which means (current milestone) to integrate the STD grammar | 23:18 | ||
mncharity | hmm | ||
fglock | the grammar refactoring is stalled, we've been working in the bootstrap and optimizations instead | 23:20 | |
mncharity | the last time I looked at STD, long ago, it was kind of scary how much p6 had to be working to use it as written. | ||
s/much p6/much of p6/ | 23:21 | ||
fglock | we seemed to need bootstrap and optimizations before refactoring the grammar - now I'm not so sure | ||
kp6 implements most of the scary parts | |||
it still needs a longest-token algorithm in regexes | 23:22 | ||
23:23
cathyal left,
Limbic_Region joined,
vainguard joined
|
|||
mncharity | re scary parts implemented, :) | 23:23 | |
fglock | re t/ - some problems are VM problems, not compiler problems | 23:24 | |
mncharity | i don't understand | 23:25 | |
fglock | kp6 has some tools to work around missing virtual-machine features, but the run-time cost is high | 23:26 | |
features == OO, closures, variable scopes, threads, ... | 23:28 | ||
mncharity | ahhh | ||
23:28
ispy_ left
|
|||
fglock | most of last year's work has been focusing on working around these features, instead of focusing on the compiler | 23:30 | |
mncharity | yeah. I keep looking for a backend language which makes it easier. p5, ruby, CL, etc. but a lot of the value of p6 lies in its being able to do this set of things which currently aren't easy to get together. so for bootstrap, it's a pain. :) | 23:32 | |
23:35
vainguard_ joined
|
|||
mncharity | is kp6 self compiling? | 23:35 | |
23:35
iblechbot left
|
|||
fglock | re pain - kp6 strong point is working around missing features in the backend | 23:35 | |
mncharity | ah, interesting | 23:36 | |
fglock | it does compile itself, | ||
but you need to compile using "less features" in order to have reasonable performance | 23:37 | ||
mncharity | /me pictures "use v6; use less features;" | ||
fglock | that's why we are working on optimizations | ||
mncharity | backend performance or compiler? | 23:38 | |
fglock | either you have the perfect VM, or you emulate+optimize and hope it still works reasonably fast | 23:39 | |
backend | |||
the third option is, use less features | |||
mncharity | right | ||
23:40
Samsta left
23:42
jferrero left
|
|||
mncharity | is it plausible to picture "optimizing" the backend by swapping in a different language/runtime? eg, something with a good JIT? | 23:43 | |
fglock | obra: we'll be in Porto on sunday until 17h | 23:44 | |
mncharity | how straightforward would it be to implement p6-style oo at this point? on top of some random modern non-strongly-typed oo language. | ||
fglock | that's what ruoso is working on - hmm, but C is strongly typed and not modern | 23:46 | |
do you mean python or what? | |||
I did implement mp6 on Groovy, but that was just an experiment | 23:47 | ||
23:48
jferrero joined
23:52
vainguard left
|
|||
fglock | sleep & | 23:54 | |
23:56
vainguard_ left
|
|||
mncharity | good night fglock. nice talking with you. | 23:57 | |
re what?, I was just looking... :) | 23:58 |