Camelia, the Perl 6 bug

IRC log for #parrot, 2010-04-02

Parrot | source cross referenced

| Channels | #parrot index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
00:06 rt7 joined #parrot
00:33 cottoo joined #parrot
00:36 lucian joined #parrot
00:49 eric_j x
00:52 abqar joined #parrot
00:53 cotto joined #parrot
01:18 Andy joined #parrot
01:30 tcurtis joined #parrot
01:31 leprevost joined #parrot
01:49 mikehh joined #parrot
01:50 cotto joined #parrot
01:51 Austin I think that shall never envision
01:51 Austin an op unlovely as division.
01:51 Austin An op whose answer must be guessed,
01:51 Austin and then, through multiply, assessed.
01:51 Austin An op for which we dearly pay
01:52 Austin in cycles wasted every day.
01:52 chromatic Accuracy thrown upon the floor
01:52 chromatic Thanks to IEEE seven eight four
01:54 davidfetter but that's sane. if you want mental
01:54 davidfetter try some functions transcendental
01:55 Psyche^ joined #parrot
02:06 lucian joined #parrot
02:17 theory joined #parrot
02:22 dalek parrot: r45375 | jkeenan++ | trunk/t/steps/auto/arch-01.t:
02:22 dalek parrot: Because of they way in which the determination of cpuarch has changed on
02:22 dalek parrot: Darwin (cf.:  �http://trac.parrot.org/parrot/ticket/1504), a test is not
02:22 dalek parrot: passing.  Temporarily commenting out all tests simulating Darwin until we can
02:22 dalek parrot: devise a workaround.
02:22 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45375/
02:23 JimmyZ joined #parrot
02:28 theory joined #parrot
02:38 dalek parrot: r45376 | jkeenan++ | trunk/config/auto/arch.pm:
02:38 dalek parrot: Correct incorrect commenting out.
02:38 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45376/
02:38 dalek parrot: r45377 | jkeenan++ | trunk/t/steps/auto/arch-01.t:
02:38 dalek parrot: Correct incorrect commenting out.
02:38 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45377/
02:38 dalek parrot: r45378 | jkeenan++ | trunk/config/auto/arch.pm:
02:38 dalek parrot: Revert to previous version.  Last commit was premature.
02:38 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45378/
02:41 janus joined #parrot
02:49 atrodo joined #parrot
02:50 GeJ_ Hello all.
02:50 purl It's a crazy world, but hello to you too!
02:52 GeJ Did anyone report a recent test failure in t/compilers/imcc/syn/regressions.t
02:55 nopaste "GeJ" at 202.171.79.135 pasted "Recent t/compilers/imcc/syn/regressions.t (not there earlier this week)" (10 lines) at http://nopaste.snit.ch/20160
02:56 GeJ "failure" you moron! "Recent t/compilers/imcc/syn/regressions.t failure."
02:57 chromatic There are updates in TT #641 on that recently.
03:02 Coke (not there because the test that is failing was just added.)
03:02 Coke it has since been todo'd, I thought.
03:02 Coke also: it doesn't fail for me, so I can't fix it. =-)
03:02 GeJ Dammit! Sorry about the noise. Should have checked that myself since it was in the error message. Apologies.
03:04 elmex joined #parrot
03:04 bubaflub joined #parrot
03:15 Coke ... it is sad to me that it is easier to write PIR than NQP still.
03:21 sorear I find writing assembly easier than writing Perl
03:21 sorear it just takes longer
03:40 theory_ joined #parrot
03:40 ash_ joined #parrot
03:45 dalek partcl-nqp: 553213c | Coke++ |  (2 files):
03:45 dalek partcl-nqp: move test into 'make test' and todo the one failing test.
03:45 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/553213caa38e46997b3862c21f793624a3b3164e
03:45 dalek partcl-nqp: ff2c4f1 | Coke++ |  (2 files):
03:45 dalek partcl-nqp: move test into 'make test' and todo the one failing test.
03:45 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/ff2c4f1bf5498a7133055f7a4dc1cd91af46c830
03:45 dalek partcl-nqp: 9bd6294 | Coke++ |  (2 files):
03:45 dalek partcl-nqp: todo the tests we fail, but run this file with 'make test'
03:45 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/9bd6294705c4527268e78077e896e2099678c429
03:45 dalek partcl-nqp: 6fc8b70 | Coke++ |  (3 files):
03:45 dalek partcl-nqp: Translate partcl's PIR-based [foreach] into NQP.
03:45 dalek partcl-nqp: most tests pass, so let's run them by default.
03:45 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/6fc8b70fee41fa2bf108b5d72c2c8e1dfdae4485
03:47 Austin Mmm.. the full backup is going to take more than 24 hours.. gotta love USB...
03:47 Austin usb--
03:52 ash_ firewire++? or usb 3.0, or e-sata?
03:53 Austin It's a laptop.
03:53 Austin NAS would be my best bet.
03:53 Austin But usb storage is cheap.
03:53 Austin And it's only once a month...
03:54 ash_ i try to do a backup every 3-5 days, just cause i use a laptop all the time and had 1 harddrive go bad on me already, don't wana loose anything again
03:56 bubaflub left #parrot
03:57 ash_ so... do you think doing PAST optimizations or working on an llvm stack frame builder would be more beneficial? i am trying to figure out my proposal for a GSOC
03:59 Austin Heh. Me too - I run incrementals every day.
04:00 Austin I thought your original proposal was for the stack frame builder. That seems like the safer investment to me - "safer" meaning that it's likely to last longer without getting obsoleted.
04:00 ash_ yeah, i just think it might not take me the whole time
04:01 ash_ i guess i could do libffi too, to replace the current NCI system
04:06 ash_ i was talking to whiteknight a while back, he was saying AST level optimizations might be useful, (see http://irclog.perlgeek.de/p​arrot/2010-03-31#i_2178629 )
04:07 Austin They'd be useful, no doubt. But there are too many projects pulling in too many directions for me to consider doing it anything but risky.
04:07 Austin As for not taking the whole time, it has never been my experience that software development takes less time than you think it will...
04:07 ash_ yeah, thats kinda what i was thinking
04:07 ash_ yeah, thats also my thinking
04:08 ash_ it doesn't seem like it will take me the whole time to do the llvm stack frame builder, but i know it will take longer than i expect
04:10 * sorear ponders a POSIX stack frame builder
04:10 ash_ especially since i'd be working with stuff i am not greatly familiar with, but whiteknight thought it wouldn't take me that long, i think plobsing said he didn't think it would be to much work, he did a stack frame builder for libjit, but i'd expect it to take me at least half the time, if not more
04:10 ash_ but i don't really know the internals of parrot enough to say i'd be working on XXX module for week 1-2, YYY module for 3-4, etc. which is something they'd like in the propsal
04:11 Austin If you don't know that, then you can't really make an estimate.
04:11 Austin And, of course, you have to add "learn all that crap" to the front of the project schedule.
04:12 ash_ sorear: by POSIX you mean? ....
04:12 sorear ash_: POSIX.1-2008, http://www.opengroup.org/onlinepubs/009695399/
04:12 sorear er, .2004
04:13 sorear POSIX provides for a C99 compiler and dlopen
04:13 sorear that's all we need
04:13 ash_ i have been working with the llvm for my project i am doing right now, a compiler independent study, i am trying to implement some of nqp, (nq-nqp is what i am calling it, i think i can get most things to work except regexs)
04:13 sorear non-portable stuff like libffi will be much faster of course
04:14 sorear *a C99 compiler available at runtime
04:15 ash_ libffi is pretty cross platform, as far as i can tell
04:16 sorear What is the standard meaning of 'cheats' in PCT-based compilers?
04:16 Austin Stuff in pir
04:17 Austin Stuff that you can't do in nqp, or in regex, or whatever.
04:17 Austin Basically, the stuff that has to be hacked together to get the rest of the system to work.
04:20 plobsing joined #parrot
04:25 theory joined #parrot
04:39 sorear Can you write a tailcall in NQP?
04:40 Austin No
04:40 Austin You can emit pir that does it, if you're careful.
04:40 Austin Q:PIR { ... pir code .. };
04:41 * sorear is rewriting some predates-NQP PIR code that doesn't actually still need to be PIR
04:41 sorear it's littered with tailcalls, because they're typing-efficient in PIR
04:42 Austin Heh
04:45 sorear Adding all these extra stack frames stings a little
04:59 sorear Austin: Is it possible to use perldoc with NQP-rx?
04:59 Austin Questionable.
04:59 sorear my PIR has lots of 5-POD
04:59 Austin NQP has pod support, but it tries to be pod6.
05:00 Austin So you'll have to surround everything with =begin =end
05:00 sorear POD6?  I would have thought that POD was good enough if anything in Perl was
05:00 Austin And =cut is dead.
05:00 Austin Don't get me started.
05:00 Austin Pod6 is xml with equal signs.
05:01 chromatic POD was never good enough.
05:02 Austin True.
05:02 Austin And now POD6 is, too.
05:18 ash_ joined #parrot
06:52 eiro joined #parrot
06:52 eiro_ joined #parrot
06:52 eiro joined #parrot
06:55 theory joined #parrot
07:32 bubaflub joined #parrot
07:42 sorear Does PIR have a line continuation syntax?
07:48 jjore joined #parrot
07:49 jjore joined #parrot
08:03 dalek joined #parrot
08:04 sorear I keep forgetting to wait for dalek before big pushes
08:05 dalek blizkost: b6cfbb4 | sorear++ | perl5.pir:
08:05 dalek blizkost: Use the actual symbolic constants
08:05 dalek blizkost: review: http://github.com/jnthn/blizkost/commit/​b6cfbb4c7c58eb36aacbff48c88394731c6eb8fb
08:05 dalek blizkost: 4efce50 | sorear++ | perl5.pir:
08:05 dalek blizkost: Use an actual attribute for the interpreter cache
08:06 dalek blizkost: review: http://github.com/jnthn/blizkost/commit/​4efce505e58c1dc26bdc3c04c4665f5697e2ad93
08:06 dalek blizkost: 98818c9 | sorear++ | examples/tk.pl:
08:06 dalek blizkost: Work around a NQP limitation caught by jnthn++
08:06 dalek blizkost: review: http://github.com/jnthn/blizkost/commit/​98818c9f96b02cbe119ee22139a130cf36a3a63c
08:06 dalek blizkost: 929684b | sorear++ | perl5.pir:
08:06 dalek blizkost: Eliminate the deparse-reparse from module loading
08:06 dalek blizkost: review: http://github.com/jnthn/blizkost/commit/​929684b2ed9a64e2722f6907c0593a25533a4735
08:09 bwk joined #parrot
08:09 bwk \quit
08:13 iblechbot joined #parrot
08:27 dalek blizkost: 5145ceb | sorear++ |  (2 files):
08:27 dalek blizkost: Switch to PDD-31 style load_module
08:27 dalek blizkost: We're only implementing the string form; namespace considerations
08:27 dalek blizkost: seem to imply parse_name is unimplementable for Perl 5.  It will
08:27 dalek blizkost: probably be gone in my PDD-31 replacement draft.
08:27 dalek blizkost: review: http://github.com/jnthn/blizkost/commit/​5145cebcdd169a99736b39cba4e0dbe2e61b470d
08:53 fperrad joined #parrot
10:07 clinton joined #parrot
10:37 mikehh codetest failure - t/codingstd/pir_code_coda.t - for file t/profiling/profiling.t which is in fact nqp so the test is wrong
10:37 mikehh all other tests PASS (pre/post-config, make corevm/make coretest, smoke (#32966), fulltest) at r45378 - Ubuntu 9.10 i386 (g++ with --optimize)
10:38 dalek parrot: r45379 | fperrad++ | trunk/runtime/parrot/library/distutils.pir:
10:38 dalek parrot: [distutils] fix install on *nix
10:38 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45379/
11:10 dalek nqp-rx: 31b97cc | sorear++ |  (2 files):
11:10 dalek nqp-rx: Implement paragraph and abbreviated Pod comments
11:10 dalek nqp-rx: With this, NQP implements all forms of pod comment defined in S26, except
11:10 dalek nqp-rx: for the multiline declaration comment (left out on purpose, it's useless
11:10 dalek nqp-rx: without a metamodel) and paragraph blocks which are terminated by the
11:10 dalek nqp-rx: start of a delimited block (a corner case that STD fails too).
11:10 dalek nqp-rx: review: http://github.com/perl6/nqp-rx/commit/3​1b97cc76359dbd8582da12c90ed56526d9bf7ce
11:12 dalek parrot: r45380 | jkeenan++ | trunk (2 files):
11:12 dalek parrot: Reinstate tests to simulate Darwin.
11:12 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45380/
11:13 kid51 joined #parrot
11:18 riffraff joined #parrot
11:23 dalek rakudo: 1c57374 | moritz++ | src/core/metaops.pm:
11:23 dalek rakudo: implement 0-ary infix operators, to be used as the degenerated case by the reduce meta operator
11:23 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/1​c573748de8443ff8832519e15af5130d06dc950
11:35 mikehh getting a Segmentation fault in t/compilers/imcc/syn/regressions.t - Failed test:  18 on g++ (no --optimize) which I don't get on g++ with --optimize - Ubuntu 9.04 i386
11:47 mikehh get the same results with gcc the test passes with --optimize and fails without
11:56 payload joined #parrot
11:58 payload joined #parrot
12:03 snarkyboojum joined #parrot
12:13 Whiteknight joined #parrot
12:14 Whiteknight good morning, #parrot
12:32 Mokurai1 joined #parrot
12:34 jsut joined #parrot
12:44 atrodo joined #parrot
12:48 payload joined #parrot
12:52 M_o_C joined #parrot
13:03 payload joined #parrot
13:07 lucian joined #parrot
13:22 dalek rakudo: dd2043b | moritz++ | t/spectest.data:
13:22 dalek rakudo: we pass 4 more tests
13:22 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/d​d2043b5c06b1c94ce029d3fd788e2c75ac0471e
13:29 patspam joined #parrot
13:52 khairul joined #parrot
14:01 dalek parrot: r45381 | NotFound++ | trunk/compilers/imcc/pbc.c:
14:01 dalek parrot: use Parrot_pmc_new_init_int in mk_multi_sig
14:01 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45381/
14:19 Themeruta joined #parrot
14:20 theory joined #parrot
15:22 dalek parrot: r45382 | NotFound++ | trunk (3 files):
15:22 dalek parrot: new function Parrot_pmc_new_constant_init_int, use it in mmd_build_type_tuple_from_type_list
15:22 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45382/
15:35 ash_ joined #parrot
15:39 dalek parrot: r45383 | NotFound++ | trunk/src/multidispatch.c:
15:39 dalek parrot: use init_int in mmd_cvt_to_types
15:39 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45383/
15:42 Andy joined #parrot
15:54 Chandon joined #parrot
15:55 dalek parrot: r45384 | NotFound++ | trunk/src/pmc (2 files):
15:55 dalek parrot: some more init_int usages
15:55 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45384/
15:56 iblechbot joined #parrot
15:56 Chandon Good morning, all. I'm Nat, and I'm looking to to a GSoC project this summer. Whiteknight's mutable strings thing looks like it could be interesting. Any thoughts?
15:58 * moritz hopes they are immutable strings :-)
15:58 Chandon Yea, that's totally what I meant.
15:59 moritz I'm not much of a parrot hacker, more a parrot user. And as a user I'd like to have those
15:59 Chandon Aside from performance, what differences are you thinking of from a user perspective?
16:00 moritz concurrency
16:00 purl concurrency is a bitch
16:00 moritz it's much easier to share immutable objects between threads
16:00 ash_ concurrency still fails in parrot, last i checked it doesn't handle hll's right still
16:00 moritz because you don't need any locking
16:00 moritz ash_: yes, but it's still a step in the right direction
16:01 ash_ yeah, immutable strings would help
16:01 moritz ash_: and Chandon didn't want the "performance" answer :-)
16:01 Chandon The existing copy-on-write mechanism doesn't give you most of that?
16:01 moritz doesn't seem to
16:02 moritz btw, Perl 6 specifies strings as immutable, so it would be a closer fit that way
16:03 ash_ a lot of languages make strings immutable, python does the same thing
16:03 Chandon It does make it interesting for languages that do allow string mutation, but that's the fun of the project I guess.
16:04 moritz one can always have a string container object that can throw away old strings and allocate new strings
16:04 moritz to pretend mutability
16:04 ash_ that takes a performance hit though, since you have to make so many throw away objects
16:04 moritz sure; you'll suffer one way or the other
16:04 ash_ you could use a mutable array to pretend to be a string, think char[]
16:05 moritz sure
16:05 moritz or even a tree structure
16:05 ash_ but thats not what the issue is for parrot, parrot would certainly benefit from immutable string semantics
16:06 Chandon What's the state of concurrency in Parrot now?
16:06 moritz broken
16:07 Chandon You can't even get two concurrent execution paths running?
16:07 mikehh joined #parrot
16:09 ash_ in pure parrot code some concurrency is possible, but not well tested and most certainly buggy
16:09 ash_ if you import a hll or some shared libraries it crashes
16:09 ash_ (hll = high level language, like rakudo)
16:10 Chandon That sounds like it needs some work done.
16:10 Chandon Any idea what's breaking?
16:11 moritz cloning of classes
16:11 moritz or namespaces
16:11 purl well, namespaces is http://www.plover.com/~mjd​/perl/FAQs/Namespaces.html or http://www.w3.org/TR/REC-xml-names/
16:11 moritz at least last I looked
16:11 ash_ https://svn.parrot.org/par​rot/trunk/t/pmc/threads.t might be worth running
16:11 moritz and somebody brave wrote up patches for it, but nobody from the core developers reviewed them (either no time, or no expertise in that area of parrot)
16:16 Chandon Where are the patches waiting?
16:17 moritz somewhere in trac
16:18 moritz don't find it anymore
16:19 joeri joined #parrot
16:23 ash_ http://trac.parrot.org/parrot/ticket/757 i think is what moritz is referring to
16:23 moritz right
16:23 moritz I've asked on two or three #parrotsketch meetings for review
16:24 tewk I have patches too, maybe I'll look at them today
16:31 eric_j joined #parrot
16:31 Chandon I wonder if "pound my head on concurrency for a couple months" would be a valid GSoC project topic.
16:31 moritz well, you'd have to come up with some plan of sorts
16:33 ash_ maybe explain how you plan on finding problems with the current system and how you'd address some common threading issues
16:34 moritz and if possible, talk to allison first - I think she has some kind of rough plan
16:35 Chandon Sounds reasonable.
16:37 Chandon I should probably come up with a plan for the immutable string thing first. If I got approved on that it would hurt less and would give me the background to work on concurrency.
16:42 hercynium joined #parrot
16:48 he__ joined #parrot
16:51 AndyA joined #parrot
16:55 riffraff joined #parrot
16:56 cotto_work joined #parrot
17:06 payload joined #parrot
17:27 payload joined #parrot
17:30 mikehh joined #parrot
17:31 payload joined #parrot
17:32 payload joined #parrot
17:33 dalek parrot: r45385 | NotFound++ | trunk/compilers/imcc/pbc.c:
17:33 dalek parrot: off-by-one array dim in build_key, fix TT #641
17:33 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45385/
17:36 mikehh Notfound: r45385 seems to work for me
17:48 elmex joined #parrot
18:03 cotto_work joined #parrot
18:03 Chandon How does garbage get collected with multiple threads right now?
18:05 moritz by stopping them all, I think
18:06 Whiteknight joined #parrot
18:07 moritz the GC as as stop-the-world as can be
18:08 Chandon Probably don't want to be relying on it staying that way.
18:08 moritz aye
18:08 Chandon Hey Whiteknight, it's Nat Tuck, I'm working on this GSoC app for immutable strings - hoping to get something posted to the mailing list today.
18:09 Whiteknight hello Chandon, nice to talk to you again
18:09 mikehh joined #parrot
18:09 Whiteknight Chandon: I want to warn you, some other prospective GSoC students, and even some impatent developers are talking about doing Immutable strings too. You will definitely want to have a back-up plan ready
18:11 Chandon I keep getting distracted by concurrency issues, so I'm thinking of coming up with some sort of make-threading-work proposal.
18:14 lucian joined #parrot
18:15 Whiteknight Chandon: If I were doing GSoC myself this year, threading would be my project
18:16 Whiteknight so it's a good one to do, if you have the chops for it
18:16 Chandon Have a project proposal I can steal? =P
18:17 Whiteknight somebody was putting together a proposal for an overhaul. I think it was tewk
18:18 Whiteknight his idea was for multiple levels of threads: OS threads internally which could be used transparently for a variety of things, and "Parrot" threads which would be the high-level ones that the user used directly
18:18 Chandon Where the latter is multiplexed onto the former?
18:19 Whiteknight I'm not sure about the details of it.
18:20 Whiteknight There is a definite need to make threading cheaper, to be able to share data between threads, and to properly handle asynchronous callbacks in a sane way
18:20 Whiteknight that could all be broken up into multiple projects
18:21 Whiteknight so don't think you would need to propose to fix everything
18:22 Chandon In the current code how does threading work? I've seen some evidence that a thread = a copy of the interpreter like Perl5.
18:22 Whiteknight yes, that's it exactly
18:22 Chandon That should probably get fixed.
18:23 Whiteknight Well, for PIR-level threads, that's really the way to do it
18:23 Whiteknight you need an interpreter to keep track of bytecode and everything
18:23 Whiteknight what we need is a good system for sharing data between two interpreters, so we can be cheaper about creating and running them
18:24 Whiteknight http://docs.parrot.org/parrot/latest/ht​ml/docs/pdds/pdd25_concurrency.pod.html
18:24 Chandon What does an interpreter have in it more than, say, a stack and registers?
18:24 Whiteknight (that's the current design document, which would need an overhaul anyway
18:24 Whiteknight no stack
18:25 Whiteknight http://trac.parrot.org/parrot/browse​r/trunk/include/parrot/interpreter.h
18:26 Whiteknight contains pointer to the current bytecode file in memory, pointer to the list of classes, pointer to the namespaces, pointer to the op library, list of global variables, and other stuff
18:27 Whiteknight parrot_interp_t
18:28 Whiteknight Anyway, I have to unplug for a while. Feel free to send me any questions via email, or send any ideas or questions to the mailing list
18:28 Whiteknight talk to you later
18:28 Chandon Interesting. The only problem with a threading project is that step 1 is to understand basically the whole codebase pretyt well.
18:28 Chandon Later.
18:37 GodFather joined #parrot
18:41 dalek rakudo: 8f35ce2 | (Solomon Foster)++ | src/core/metaops.pm:
18:41 dalek rakudo: Add new reducewith sub intended to be the backend for [op] (though that is not wired up yet).
18:41 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/8​f35ce29e93a779c8f791fc80011ea7477451161
18:42 chromatic joined #parrot
18:58 dalek rakudo: 0ccaf6c | moritz++ | src/core/metaops.pm:
18:58 dalek rakudo: implement :$chaining in reducewith()
18:58 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/0​ccaf6c4ddaef2100bad6fe013a3bcd1825b3dc2
18:58 ash_ joined #parrot
19:09 sorear Chandon: What do you need explained?  (This is my chance to see if I actually know what I think I know)
19:10 sorear also are you familiar with zero-byte mutex technology?  that could be an interesting addition to parrot
19:10 Chandon Nope. How do you put a mutex in zero bytes?
19:11 Chandon As for explanations, how are there multiple tasks in an interpreter and also one continuation pointer? Wouldn't only one of those things make sense?
19:12 sorear There is 1 interpreter per task
19:12 sorear two distinct interpreters are not always completely separate
19:12 sorear they can share a PMC heap, for instance
19:13 sorear it's kinda like the perl 5 threading model, but PMCs etc remain shared unless you explicitly request to clone them
19:14 sorear and then you have PMCs that can be accessed from >1 interpreter
19:14 sorear which is a pretty nonobvious property, and if you ask me, likely the source of 75% of our threading bugs
19:14 Chandon How does locking work in this story?
19:14 sorear every PMC has a mutex field
19:15 sorear you're supposed to lock PMCs before doing stuff with them
19:15 Chandon So mutex_init gets called whenever a PMC is allocated?
19:15 sorear I mostly stopped trying to understand the threading system after I realized it didn't work, since I'm just an extensions programmer
19:15 sorear yes
19:16 sorear you put a mutex in zero bytes by locking on the /address/
19:16 sorear set up a global hash table of fixed size
19:16 Chandon Does every PMC get its lock twiddled every time it gets touched even in single threaded code?
19:16 sorear when you want to lock a mutex, hash the address, then lock the hash table entry
19:16 sorear optionally, if you need better recursion properties, dangle a list of locked addresses off the hash table entry and only keep the entry itself locked momentarily
19:17 Chandon Doesn't that make it harder to reason about deadlock, since you don't know which mutex you're locking?
19:18 sorear Chandon: We would use vtable magic to only lock variables when there are multiple interpreters sharing the current heap
19:18 dalek rakudo: bcdee8e | moritz++ | src/core/metaops.pm:
19:18 dalek rakudo: reducewith with triangle; implement combination of chaining and right-assoc
19:18 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/b​cdee8ef256fb2fe0af01466f6b1faff115dce84
19:18 sorear I'm using the hypothetical mood here because working threads don't actually exist
19:19 sorear I can't describe the operations of things that don't exist, except in the hypothetical
19:19 chromatic ... for various definitions of "working" and "exist"
19:19 sorear bad: are  good: could be
19:21 sorear Chandon: Yes, which is probably why it hasn't been done
19:21 sorear I first saw the technique in the FreeBSD kernel... they use it all over
19:22 sorear see also the "optionally, if you need better properties"
19:22 Chandon The only way I can think to make it safe would be a "never hold two locks" rule.
19:23 sorear right
19:31 tewk I'm convinced that locks are the wrong model.
19:34 bubaflub joined #parrot
19:36 Chandon tewk: What's the right model then?
19:36 tewk message passing between threads.
19:36 purl Sorry, I've never seen passing before.
19:38 particle isn't that why that's what the PDDs spec?
19:38 Chandon To do that, you either need to deep copy everything, have everything be immutable, or get clever with locks under the hood, right?
19:39 Chandon Also, there's some algorithms you can't implement in that world, so you still want to give users access to locks when they need them.
19:40 eric_j Chandon, what algorithms?
19:40 tewk Chandon, I think we should support locks.
19:41 tewk I would say that algorithms that require locks don't scale.
19:41 dalek rakudo: eaf92e0 | moritz++ | docs/ChangeLog:
19:41 dalek rakudo: [docs] start ChangeLog for next release
19:41 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/e​af92e0625f6ab1351335903840168e5e5e0032f
19:42 Chandon eric_j: My best example is randomized best first minimax search on game trees, but there are probably simpler examples.
19:42 sorear (If message passing is strictly better than locks, why do SMP computers exist?)
19:42 eric_j thanks
19:43 tewk But getting locks right is an endless task.  Locks are espcially brittle as you evolve a code base.
19:44 tewk sorear, any large SMP machine is doing message passing in hardware via NUMA.
19:48 sorear I thought SMP and NUMA were antonyms
19:48 Andy joined #parrot
19:48 Chandon Is that really any different than saying that any SMP machine is doing message passing in hardware via its cache coherency protocal?
19:51 tewk Chandon, I wouldn't call a single bank of memory and snoopying protocols message passing.
19:52 Chandon That's probably reasonable, but it sure looks that way if you're standing in an L1 cache.
19:53 Chandon It's not unreasonable to pretend that the NUMA memory is level-4 cache for some imaginary single memory bank.
19:53 tewk Chandon, you can pretend, but you don't get scaling by pretending.
19:56 Chandon It's just another higher latency, the same as any other cache miss.
19:56 tewk The last project I heard about(a couple of years ago)  had to use special purpose library calls to make sure memory allocations occured in the memory bank next to the chips where the computation was going to occur to get good scalability
19:57 * Coke skips review.
19:57 Chandon The OS still isn't doing that automatically?
19:59 tewk Chandon, most parallel codes are memory bandwidth bound, placing memory close to computation improves overall memory bandwidht.
20:00 Chandon Right. I'd just expect a numa-aware scheduler to know that. I guess with Linux we're still in the land where it'll happily reschedule you to a different processor board.
20:00 sorear sure, message passing is better in the large
20:00 sorear but what about the small
20:00 sorear on a 2010 dual core / single main memory board, how much do you lose by requiring message passing and nonshared heaps?
20:02 Coke seen austin?
20:02 purl austin was last seen on #parrot 14 hours, 59 minutes and 54 seconds ago, saying: And now POD6 is, too.
20:03 Chandon It really depends on the application and the algorithm. For some things, nothing, for others, everything.
20:03 Coke anyone know how to override a vtable from NQP?
20:03 lucian joined #parrot
20:03 ash_ can you override vtable's in nqp?
20:05 dalek rakudo: fc30fad | moritz++ | docs/release_guide.pod:
20:05 dalek rakudo: [docs] the Copenhagen release has already happend; colomon++ voluntueered for May
20:05 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/f​c30fad47726ea062ba512bbf2b1ed20b8b027eb
20:07 sorear Coke: using the metamodel
20:08 Coke sorear:
20:08 Coke :?
20:08 purl : is the path separator
20:10 sorear P6metaclass.get_parrotclass($cla​ss).add_vtable_override('name', &code)
20:10 sorear from kakapo
20:14 Coke is that available ins traight nqp-rx ?
20:14 sorear yes
20:19 Coke ash_: here's another one: can I have a .panic in a grammar that intepolates values?
20:19 Coke er, variables.
20:20 ash_ doesn't panic cause it to die?
20:22 dalek rakudo: cfc139f | moritz++ | src/core/Rat.pm:
20:22 dalek rakudo: trivial Rat.new() without arguments (returns 0/1)
20:22 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/c​fc139f2ec898580f4d8dfbae88d59a59a54d521
20:24 dalek nqp-rx: 67a8eaf | jonathan++ | src/Regex/P6Regex/Actions.pm:
20:24 dalek nqp-rx: Correct action methods for \e and \f sequences in regexes.
20:24 dalek nqp-rx: review: http://github.com/perl6/nqp-rx/commit/6​7a8eaf07469e5b2dbddaf432542891f9ff9f37a
20:24 dalek nqp-rx: e3f10da | jonathan++ | src/HLL/ (2 files):
20:24 dalek nqp-rx: Add detection of unknown backslash sequences and fix the \$ bug along the way. masak++ too. :-)
20:24 dalek nqp-rx: review: http://github.com/perl6/nqp-rx/commit/e​3f10daae3ea4e2feceabc042ca9a0d241a4d6c3
20:24 dalek nqp-rx: b17415a | jonathan++ | src/HLL/ (2 files):
20:24 dalek nqp-rx: Properly implement \f, \e and \0 escapes in strings.
20:24 dalek nqp-rx: review: http://github.com/perl6/nqp-rx/commit/b​17415a4def6dea00c31baee69bb65399553bc7c
20:24 dalek nqp-rx: 88873ca | jonathan++ | src/stage0/ (3 files):
20:24 dalek nqp-rx: Update the bootstrap.
20:24 dalek nqp-rx: review: http://github.com/perl6/nqp-rx/commit/8​8873caed7a79816de7efd1cd2709b89425eb934
20:24 moritz Coke: http://github.com/rakudo/rakudo/blo​b/master/src/Perl6/Grammar.pm#L120 something like this?
20:26 Coke moritz: except in a grammar, not in a method.
20:26 Coke like...
20:27 Coke http://github.com/partcl/partcl-nqp/b​lob/master/src/Partcl/Grammar.pm#L72
20:27 moritz Coke: it's a method in a grammar, and can be called with <.obs('foo', 'bar')>
20:28 Coke ah. so you just push the code somewhere where you /can/ do variable subst.
20:30 moritz aye
20:33 Coke hurm.
20:33 Coke I have something like \S+ <.panic "..."> - how can I pass the contents of the \S+ into the .Method I'm defining?
20:33 particle joined #parrot
20:33 Coke $<extra>=(\S+) <.badList($extra)> fails...
20:35 tetragon joined #parrot
20:35 dalek parrot: r45386 | jonathan++ | trunk/ext/nqp-rx/src/stage0 (3 files):
20:35 dalek parrot: [nqp-rx] Update to latest nqp-rx to get various fixes to escape handling.
20:35 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45386/
20:36 moritz Coke: <.badList($<extra>)> maybe?
20:37 moritz Coke: if that doesn't work, maybe you need to fall back to closure in the regex, like in http://github.com/rakudo/rakudo/blo​b/master/src/Perl6/Grammar.pm#L273
20:40 nopaste "coke" at 72.228.52.192 pasted "moritz..." (15 lines) at http://nopaste.snit.ch/20163
20:40 Coke moritz: closures work in nqp-rx?
20:41 moritz Coke: aye
20:41 Coke ok, trying that...
20:41 sorear Austin: as of r45386, you can now use full Pod6 in NQP, not just that yucky =begin/=end version
20:47 Coke moritz++ !
20:48 Coke now I just need to figure out how to get a less helpful panic that doesn't tack on the "near..."
20:52 Coke moritz: any suggestions on that one? =-)
20:53 Coke (i tried end the panic with a \n, but that doesn't work as advertised.
20:55 * Coke guesses pirop::die
20:55 Coke (except spelled right.)
20:58 Coke whee.
21:02 Austin Coke: You can override a vtable pretty simply. There's a method on Class.pmc for it.
21:03 dalek rakudo: 0893322 | jonathan++ | build/PARROT_REVISION:
21:03 dalek rakudo: Bump PARROT_REVISION to get latest nqp-rx fixes.
21:03 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/0​8933220122b0aa94ac25f95db77fe493794dfca
21:03 Austin Whoops, nevermind. sorear++
21:03 dalek rakudo: 50fa7b0 | jonathan++ | t/spectest.data:
21:03 dalek rakudo: Turn S02-literals/fmt-interpolation.t back on.
21:03 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/5​0fa7b06cbbd178723e6bc513dfd425bac106f88
21:05 sorear Austin: you can use =head1 and whatnot in NQP now
21:06 Austin Yeah, I saw that.
21:07 Coke moritz++
21:07 Coke moritz++
21:08 moritz Coke++ # actually using the stuff :-)
21:08 Coke Austin: Trying to figure out how I can call the override in an INIT block on a sub that won't be visible anywhere else.
21:08 Austin Huh?
21:08 Austin What are you trying to override?
21:08 Coke TclList's get_string.
21:09 Coke (there's a PIR override, i want to rewrite it in NQP) - but I don't want the sub I use for it to be visible anywhere else.
21:09 Coke ... though I guess I could have a get_string method with no real harm.
21:09 dalek partcl-nqp: 163b622 | Coke++ |  (3 files):
21:09 dalek partcl-nqp: Fix error handling on some malformed lists.
21:09 dalek partcl-nqp: Run the test file that covers these; todo the ones we don't pass yet.
21:09 sorear partcl-nqp is going to be /pure/ nqp?
21:09 dalek partcl-nqp: review: http://github.com/partcl/partcl-nqp/commit​/163b622bb479d4470308197754eda5668ecf9a1f
21:10 Austin Put it in a separate namespace if you want, but I wouldn't worry too much about it.
21:10 sorear you're not going to have a C/Pmc2c kernel?
21:10 Austin Sorear: No good reason to.
21:10 Austin (Unless there's a floating point issue...)
21:11 Austin But tcl isn't really the language I think of when I think of floating point...
21:11 darbelo joined #parrot
21:11 Coke sorear: partcl was c/PMC based.
21:12 Coke partcl-nqp isn't going to use C unless it absolutely has to.
21:12 sorear I see
21:14 Coke Austin: real tcl handles FP just awesomely.
21:15 Austin Sure, but does it handle it the same way that parrot does?
21:16 Coke see partcl for my thoughts on that so far. =-)
21:19 * Austin ++ # Kakapo now has roles with attributes.
21:20 Coke Austin++ #extra space in that one.
21:25 Austin And now I'm looking at everything through role-tinted goggles..
21:26 Coke Austin, sorear. ok. I have a class, TclList. in an INIT block, I say:
21:26 Coke P6metaclass.get_parrotclass($cla​ss).add_vtable_override('name',
21:26 Coke &TclList::get_string)
21:27 cognominal joined #parrot
21:28 Mokurai joined #parrot
21:28 Coke Later I have TclList { method get_string() {} }
21:28 Coke dies with: Symbol '$class' not predeclared in <anonymous>
21:28 Austin Okay
21:28 Austin So fix it
21:29 Austin my $class := 'TclList'
21:29 Coke ... damnit.
21:29 Coke Coke--
21:29 Coke rakudo: "Coke--".say
21:29 Austin Also, lose the '&' I think.
21:35 Austin www.girlgeniusonline.com - scantily-clad Victorian babes .. with robots
21:40 treed Scantily-clad Victorian?
21:40 treed Uh, hm.
21:44 Coke ah, sparks.
21:46 snarkyboojum joined #parrot
21:57 Austin treed++
21:57 Austin I'm glad someone caught that..
21:58 treed (I wasn't about to click the link at work)
21:58 Austin :)
21:58 treed So I can only image.
21:59 treed "What, she's only wearing two layers of clothing?"
21:59 Austin It's SFW - Phil Foglo is pretty much a PG cartoonist..
21:59 integral joined #parrot
22:17 Coke Girl Genius is a good comic.
22:17 Coke must put in an order for a physical copy...
22:27 kid51 joined #parrot
22:27 dalek rakudo: e889ed4 | masak++ | t/spectest.data:
22:27 dalek rakudo: [spectest.data] uncommented two test files
22:27 Coke Null PMC access in find_method('get_parrotclass')
22:27 dalek rakudo: S05-mass/properties-block.t and S05-mass/properties-block.t
22:27 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/e​889ed4ef181d8111d721f31cd0b4a617c1a1665
22:27 Austin make sure you loaded p6object
22:27 Austin Should be loaded if you're interpreting, but not if you compiled
22:31 dalek parrot: r45387 | NotFound++ | trunk/src (4 files):
22:31 dalek parrot: some more init_int usages
22:31 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45387/
22:37 Coke if I load it in the init, I get:
22:37 Coke t/library/p6object.t
22:37 Coke ..
22:37 Coke no.
22:37 Coke A method named 'HOW' already exists in class 'P6object'. It may have been supplied by a role.
22:37 Coke yah, that.
22:38 Austin Heh
22:38 Austin load bytecode not being smart enough
22:39 Austin Also means you shouldn't be getting the get_parrotclass error. What code produces that?
22:39 darbelo Say, is any of the "Let's standardize on a sigle string encoding inside parrot" guys about?
22:39 nopaste "coke" at 72.228.52.192 pasted "austin" (14 lines) at http://nopaste.snit.ch/20164
22:41 Austin Looks good to me.
22:41 Austin FWIW, $tcl is the same
22:41 Coke yes.
22:41 Austin So you could do $tcl.add_vtable_override(...)
22:41 Coke oh!
22:42 Austin Oh.
22:42 Austin Is TclList actually a P6object class?
22:43 chromatic Hooray for single string encodings, and Victorian steampunk (as opposed to, say, Cromwellian Steampunk).
22:43 Austin No, because you never declare the class
22:43 Coke Austin: the class is created in PIR
22:43 Austin Ah.
22:43 Coke using $tcl avoids the problem. danke.
22:44 Coke ah. and no, it's not a p6object class. =-)
22:44 Austin Where is that pir?
22:44 darbelo chromatic: I'm trying to fit 'single encoding' into my NFG GSoC proposal.
22:44 Coke src/class/tcllist.pir
22:45 darbelo The big win is already stated in the rationale for NFG. But the PDDs argue for 'bazzillions of encodings and NFG'
22:45 Coke ok. it doesn't error, but it doesn't add the override, either.
22:46 Coke (it's defaulting to RPA's get_string)
22:46 Coke so, do I have to be using P6objects to get this to work? blah.
22:46 chromatic What if you were to assume that the encoding only mattered when entering or leaving Parrot, darbelo?
22:47 Coke grumble.
22:47 purl i guess grumble. is it typically possible to order replacement laptop keys?
22:47 Austin You've already got a vtable there.
22:47 Austin In tcllist.pir
22:48 darbelo Everythign gets normalized on the way in, and reconverted on the way out?
22:48 Austin I think it ignores you.
22:48 Coke Austin: yes. that's the one I'm trying to move. =-)
22:48 dalek rakudo: 9a20634 | jonathan++ | src/ (2 files):
22:48 dalek rakudo: Make A::B.new in the case that A::B doens't exist emit a message that mentions A::B, not just a null PMC access.
22:48 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/9​a20634ae6cf444b432d5b8dce40688a78b461fa
22:48 chromatic darbelo, that sounds reasonable to me.
22:49 Coke so in my local copy, the PIR one is gone, and I'm trying to get it to recognize a PIR version that just returns "eek";
22:49 Austin Okay
22:49 Coke er, s:2nd/PIR/NQP/
22:49 darbelo If we do that, parrot would only have to worry about normalized strings, the encoding and charset pointers go away from the string struct, etc.
22:50 Austin Are you confusing "get_string" and "name" ?
22:50 Coke ... damnit.
22:50 Coke just like I did $class, early. =-)
22:50 darbelo But 4-byte chars strike me as too memory expensive for widespread use.
22:50 Austin (Of *course* they're different... how could they *not* be different...)
22:50 Coke muuuuch better.
22:50 Austin laugh
22:51 Austin Work?
22:51 purl Work - the curse of the drinking class.  (Oscar Wilde)
22:51 darbelo We already use too much memory as it is.
22:51 chromatic darbelo, you pick your poison, I guess.
22:51 Coke I took the sample code provided, updated it, ripped it out, added it back in, but forgot to update it the second time.
22:51 Coke much better, thank you. now to work on the actual conversion.
22:51 Austin darbelo: 4 byte really isn't fetch-efficient. You want to plan for 8 byte characters, at least on 64 bit machines...
22:52 chromatic If we only had 1, 2, and 4 byte encodings, that's not *too* many to support.
22:52 chromatic The real problem is variable-width encodings.
22:53 dalek TT #1541 created by jkeenan++: warnings appearing during 'make' invocation of pmc2c.pl
22:53 dalek TT #1541: http://trac.parrot.org/parrot/ticket/1541
22:53 darbelo Maybe I can do it as a two pater. Implement NFG as specified in the PDD for the midterms and then ripping out all of the other encodings for the final evaluation.
22:56 chromatic Call the second part a stretch goal, and I'm all for it.
23:09 bubaflub joined #parrot
23:14 Coke argh. I'm just a complete idiot today. have a place for a Q:PIR block. if I put in the guts of the old get_string, I get a 'blockoid' parsing error on the nqp. if I have an empty Q:PIR {}; , it compiles.
23:16 Coke ... and there it is. Q:PIR doesn't like embedded {}'s
23:20 chromatic Can you double up the curlies?  Q:PIR {{ ... }};
23:20 dalek parrot: r45388 | jkeenan++ | trunk/lib/Parrot/Pmc2c/Pmc2cMain.pm:
23:20 dalek parrot: Applying patch submitted by Util++ for �http://trac.parrot.org/parrot/ticket/1541.
23:20 dalek parrot: review: http://trac.parrot.org/parrot/changeset/45388/
23:24 Coke AIGH. it doesn't even like them in NQP!
23:25 Coke if I do a my $bl := "{"; in NQP to avoid the problem in PIR, it still blows up, even with nothing in the PIR.
23:25 Coke it's TGE all over again.
23:27 Coke chromatic: it's slightly better that way. then it dies with:
23:27 Coke error:imcc:syntax error, unexpected $undefined, expecting '(' (':') in file 'src/TclList.pir' line 428
23:28 Coke (which is the end of the file)
23:28 dalek rakudo: 3469ffe | jonathan++ | src/Perl6/ (2 files):
23:28 dalek rakudo: Wire reduce meta op up to use the new reducewith that can handle chaining, triangle form and right-associative ops.
23:28 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/3​469ffe042f2b2f749a163cbdb80289120d06a51
23:35 Coke arrrrgh.
23:36 nopaste "coke" at 72.228.52.192 pasted "ARGH" (206 lines) at http://nopaste.snit.ch/20166
23:36 Coke ok. that dies with the same error I just mentioned.
23:37 Coke (tried replacing the PIR {}
23:37 Coke with some safer equivalents.
23:40 Coke AHA. a := snuck into the PIR.
23:40 Coke a LTA error message.
23:42 dalek TT #641 closed by bubaflub++: Crash when loading PIR file
23:42 dalek TT #641: http://trac.parrot.org/parrot/ticket/641
23:43 eternaleye joined #parrot
23:54 mikehh joined #parrot
23:59 sorear darbelo: What possible advantage does "loads and loads of encodings" bring :/

| Channels | #parrot index | Today | | Search | Google Search | Plain-Text | summary

Parrot | source cross referenced