Parrot 3.10.0 "Apple Pi" | parrot.org | Log: irclog.perlgeek.de/parrot | #parrotsketch meeting Tuesday 19:30 UTC
Set by moderator on 2 December 2011.
00:30 whiteknight joined 01:02 kid51 joined
dalek sella/genetic: 12dc30d | Whiteknight++ | s (7 files):
Add Genetic to the build. Several fixes to make it build
01:57
sella/genetic: b16f3f0 | Whiteknight++ | src/include/Genetic.winxed:
Add in a header file for Genetic
sella/genetic: 17a8978 | Whiteknight++ | s (8 files):
Several fixes to the Genetic classes so that we can pass some basic adhoc tests.
02:41 alvis joined 02:43 JimmyZ joined
dalek itor: f55a6ad | NotFound++ | src/Guitor.winxed:
improve a bit the look of the menu items
02:56
itor: 47d88f2 | NotFound++ | examples/pokedit.winxed:
new example pokedit, a text editor (in progress)
03:05
03:39 GeJ joined
dukeleto cool, rosella is getting genetic algorithms 03:59
05:23 Nol888 joined 05:27 rfw joined
dalek itor: 1e22980 | NotFound++ | / (3 files):
Map and Unmap notify events
05:36
itor: 424f9ff | NotFound++ | examples/pokedit.winxed:
less coupling between controller and windows in example pokedit
05:37
itor: ab55756 | NotFound++ | examples/pokedit.winxed:
bigger cursor in example pokedit
05:58
06:37 baest joined
aloha (parrot/parrot) Issues opened : 228 (A 'tools/docs/mk_pod2man.pl' script to autogen the installable binaries' POD files into *roff pages ...) by ayardley : github.com/parrot/parrot/issues/228 06:46
08:09 mj41 joined
dalek kudo/ex-from-actions: f3f084c | moritz++ | src/Perl6/Actions.pm:
thinko
09:19
09:24 snearch joined 09:36 contingencyplan joined 09:44 nbrown joined
dalek kudo/ex-from-actions: 602996b | moritz++ | src/core/Exception.pm:
be explicit about calling .gist

IMHO it should work without it, but it does not. Not sure why
10:14
kudo/ex-from-actions: df1294a | moritz++ | src/Perl6/Actions.pm:
HLL::Compiler.lineof returns 0-based line numbers

so add 1 to them for now
10:20 lucian joined 11:21 nbrown_ joined, particle1 joined
dalek p: f81b6c2 | moritz++ | src/HLL/ (2 files):
return 1-based line numbers of HLL::Compiler.lineof
11:27
p: dc0ca28 | moritz++ | src/stage0/ (6 files):
update bootstrap
kudo/ex-from-actions: b690654 | moritz++ | / (3 files):
use a HLL::Compiler.lineof that returns 1-based line numbers
11:29
11:30 preflex_ joined 12:32 schmooster joined 12:34 mtk joined 12:46 bluescreen joined
dalek p: 86b9112 | moritz++ | src/HLL/Compiler.pm:
backport lineof optimization from PCT

This backports the binary search lineof optimization from PCTs HLLCompiler to HLL::Compiler.lineof
12:55
13:43 alin joined
dalek kudo/nom: f3f084c | moritz++ | src/Perl6/Actions.pm:
thinko
13:51
kudo/nom: 602996b | moritz++ | src/core/Exception.pm:
be explicit about calling .gist

IMHO it should work without it, but it does not. Not sure why
kudo/nom: df1294a | moritz++ | src/Perl6/Actions.pm:
HLL::Compiler.lineof returns 0-based line numbers

so add 1 to them for now
kudo/nom: b690654 | moritz++ | / (3 files):
use a HLL::Compiler.lineof that returns 1-based line numbers
kudo/nom: de83900 | moritz++ | / (5 files):
Merge branch 'ex-from-actions' into nom
kudo/nom: c27eb70 | moritz++ | tools/build/NQP_REVISION:
bump NQP revision to get lineof optimization
kudo/nom: b20ab2e | moritz++ | src/core/Mu.pm:
make uninitialized warnings more robust
14:11 preflex_ joined 14:24 muixirt joined 14:42 alvis joined 14:45 nbrown joined
moritz what's the right way to copy a file to a directory? 15:30
File.copy doesn't accept directories as destination :/
15:31 Psyche^ joined
moritz submits github.com/parrot/parrot/issues/229 15:42
dalek sella/genetic: 0608be1 | Whiteknight++ | s (9 files):
Several refactors for genetic.

Add in a new Context object to hold some of the particulars, and remove all state from the Engine. Combine all the mutator logic into a Generic mutator. Remove other types. Use Queryables more in the Engine to simplify flow.
Add basic caching to Random.default_uniform_random, to ensure we aren't creating a new one (and potentially seeding it the same in tight loops).
15:45
aloha (parrot/parrot) Issues opened : 229 (the copy method in the File dynpmc does not accept a directory as destination) by moritz : github.com/parrot/parrot/issues/229 15:47
dalek kudo/parameter-perl: 9e3f3a2 | moritz++ | src/ (5 files):
store the original perl source for Parameter in an attribute

it turns out that there are so many cases to cover in Parameter.perl that reconstructing it from the various flags and attributes is much more complicated than simply storing the source code. At least that is my hope :-) Does not yet actually store the source
15:48
kudo/parameter-perl: faf6af8 | moritz++ | src/Perl6/Actions.pm:
try to record Parameter.perl
15:58 contingencyplan joined 15:59 bluescreen joined 16:53 estrabd joined
cotto ~~ 16:53
17:06 nopaste joined, TonyC joined 17:11 Tene joined 17:14 dmalcolm joined 17:31 tadzik joined 17:41 fperrad joined
dukeleto ~~ 17:50
18:12 whiteknight joined 18:14 he_ joined
whiteknight good afternoon, #parrot 18:19
18:26 benabik joined
PerlJam whiteknight++ good advent to you! :) 18:28
whiteknight PerlJam: And a good advent to you too! 18:29
benabik o/ #parrot 18:32
whiteknight hello benabik
18:33 baest joined
benabik Hey whiteknight, how's things? 18:33
18:33 Hunger joined
whiteknight benabik: pretty good, actually. You? 18:39
benabik whiteknight: Pretty good, other than this stupid statement of purpose. 18:40
whiteknight statement of purpose? 18:41
benabik For PhD applications.
whiteknight oh, fun
"I intend to use my evil powers to take over the world, all the while laughing maniacally" 18:42
benabik :-D
whiteknight benabik: what area of study do you want to pursue? 18:44
benabik Programming Language Theory / Compilers.
whiteknight heh, I was thinking the same kind of thing for myself
PerlJam whiteknight: Another post idea for you ... what are parrot's measures of success? 18:45
benabik PLT is actually pretty interesting. Type systems and syntax derivations are fascinating strutures.
And compilers are the key to making it all actually do something. :-D
whiteknight PerlJam: I'm not sure I can answer that question myself, much less write an entire post about it :)
benabik: I'm far more oriented towards practical applications than abstract theory
benabik whiteknight: Haven't you learned anything from academia? An article posing a question is just as important as an answer.
atrodo benabik++ 18:46
benabik whiteknight: I like playing both sides. I like to learn enough theory to create interesting applications. :-D 18:47
(Note I didn't say _practical_ applications. ;-)
whiteknight :)
PerlJam the whole idea of "virtual machines" didn't really have *practical* application when it was invented ;) 18:48
dalek sella/genetic: ca807ca | Whiteknight++ | src/unstable/genetic/ (2 files):
Add in two missing files
18:49
benabik genetic?
PerlJam bioparrot?
whiteknight oh, I'm playing around with a library for genetic algorithms 18:50
nothing to look at yet 19:03
dukeleto whiteknight: let me know when the genetic stuff in rosella is ready enough to try to implement root finding, i.e. f(x) = 0 19:19
whiteknight dukeleto: It's probably capable now, just not very user-friendly 19:20
nine Good evening #parrot 19:21
benabik o/ nine
whiteknight dukeleto: I've been writing tests similar, such as searching a 2D plane for the top point of a virtual pyramid
hello nine
dukeleto whiteknight: virtual pyramids! Obviousy root-finding is not cool anymore. 19:22
whiteknight: i remember being very interesting in GA in skool, but I never got to actually study them in depth 19:23
nine whiteknight: low level threading works quite nicely. But namespaces give me a hard time. t/pmc/task.t fails because it can't find the ok function. Tried to use proxies there as well but I know much too little about this stuff to make it work
dukeleto s/interesting/interested/
whiteknight nine: Here there be dragons. Namespaces are one of the dirtiest parts of Parrot
dukeleto nine: gist the full error you get about ok not being found
19:23 baest joined
dukeleto nine: exporter.'import'( 'plan ok' :named('globals') ) 19:24
whiteknight dukeleto: The genetic algorithm itself is pretty simple to implement. It's filling in all the details of each new problem that wants to use it which is hard
dukeleto nine: that might help
whiteknight: yes, that is the fun part :)
whiteknight dukeleto: I'm not sure he should have to import or export. If he's in the root namespace and has read-only access to namespace in the parent interp things should just appear 19:25
dukeleto nine: exporter = new ['Exporter']
nine whiteknight: that's what I think. Using a sub for a task should work just like calling the sub. Otherwise I imagine it being...interesting for compiler writers ;) 19:26
whiteknight nine: somewhere along the line I suspect the new task isn't setting the current_namespace field of the call context 19:27
or, is setting it incorrectly
nine: the CallContext has a current_namespace field that should point to the current namespace, for looking up subs by name etc. Next time you're in the debugger looking at this problem, find out what that field is set to 19:28
For the code to "just work" you want it to either point to the namespace itself or point to a proxy for the namespace
and if that is set up correctly using a proxy, we need to make sure the proxy is correctly forwarding the necessary vtable calls to the namespace 19:30
nine vtables is a good keyword. They seem to be referenced from the interp, but not in a pmc but in a pointer array 19:32
whiteknight what are, namespaces?
dukeleto benabik: i ordered Proofs From The Book, thanks again for the recommendation! 19:33
benabik dukeleto: Let me know what it's like. I've never actually seen it. :-D
nine whiteknight: IIRC a Hash 19:34
whiteknight ah, I found an old quote that will be very helpful 19:35
whiteknight> interp->HLL_namespace is a hash, not a namespace
whiteknight> and interp->class_hash is a namespace, not a hash
whiteknight> I love this code with all my heart
nine Another problem is parrot trying to write to namespaces. Which won't work in any case if namespaces are proxied 19:38
whiteknight right
there are a few opcodes that write to namespaces, and the packfile loader is a jerk about it, but I don't think too many other places write to namespaces
nine So do you think it worthwhile to work at proxying namespaces? If it's mostly the packfile loader, we could simply mandate loading having to run on the main thread. 19:42
benabik We could have COW namespaces or some such. But that sounds like work for later. 19:43
whiteknight benabik: COW is the path to madness. It makes huge numbers of optimizations impossible in a threaded environment 19:45
dukeleto benabik: will do! It just shipped, hoping to get my hands on it soon :)
whiteknight nine: disallowing packfile loading in all non-main worker threads seems like the best 19:46
a tell_main_to_load_this_packfile_at_the_earliest_convenient_point opcode seems like a good idea
maybe with a shorter name
or tell_main_to_load_packfile_and_wait_till_its_done 19:47
moritz defered_lock_packfile
*load
nine Or just the same thing we do with writes to shared data: schedule a little sub on the main thread 19:48
whiteknight tell_main_to_load_packfile_while_I_go_get_some_tea_or_something
benabik To start, probably better to just have load_packfile fail and let people use ordinary messaging to ask their main to do it.
whiteknight nine: yeah, that works too
nine Speaking of which... I think we need in addition some schedule_synchronously which only finishes when the task on the main thread actually ran.
whiteknight yes, that would be a very good idea
very
nine async write is nice for things like writing results back to some array. But sometimes one actually needs the new value... 19:49
benabik futures are nice
nine Thought about this and I think it could simply be implemented by a mutex and a double lock in the waiting thread with an unlock in the writing thread 19:50
Or a bit more coplicated by letting the waiting task sleep and wake it when the write is done... 19:51
benabik sleep/wake is less certain. Have to check to see if you were woken for the reason you think. 19:52
(Speaking from my experiences in Java.)
19:52 snearch joined
whiteknight nine: putting the waiting task to sleep seems like the best idea to me. We could easily use that mechanism to implement AIO and synchronous IO 19:54
well, depending on overhead 19:55
19:55 alin joined
nine whiteknight: oh yes, I like this! 19:55
Ok, I will run this a little through my head. Overhead would probably in the same range as writes to shared data themselves. Basically a schedule_immediate 19:56
dalek kudo/nom: 92f3830 | moritz++ | src/core/Complex.pm:
fix infix:<**> for 0 base and Complex numbers
20:01
nine gist.github.com/1468847 is the backtrace I now get 20:02
dngor Have you seen Disruptor? 20:06
20:06 lucian joined
whiteknight Disruptor? 20:09
benabik Disruptor can mean: an energy weapon in Star Trek or Star Wars. A real weapon aka the Dazzler. A game for the PS1. … en.wikipedia.org/wiki/Disruptor 20:10
nine Much more interesting. The backtrace without cloning of classes. gist.github.com/1468875 Fails when trying to make a local copy of the tasks's code 20:11
wow...progress :) Removing the workaround for Parrot_clone not doing the Right Thing with subs actually makes the test work :) 20:13
benabik That sounds fishy. 20:14
Does Parrot_clone DTRT, or is it doing the wrong thing but not exploding?
20:16 Yuki`N joined
nine Well I salvaged Parrot_thread_make_local_copy from the old threading code. The docs say: Creates a local copy of the PMC. This includes workarounds for Parrot_clone() not doing the Right Thing with subroutines (specifically, code segments aren't preserved and it is difficult to do so as long as Parrot_clone() depends on freezing). 20:16
dngor stackoverflow.com/questions/6559308...ttern-work 20:17
benabik Well, if Parrot_clone doesn't use freeze anymore, then it sounds golden. :-)
nine Ah Disruptor! Yes, read about that
benabik: I think it still depends on freeze, but since currently I share code segments read only anyway, I actually can live with them not being cloned 20:18
Disruptor is martinfowler.com/articles/lmax.html 20:19
benabik Writable code segments is probably a Bad Idea anyway. See all the recent work on NX bit, etc.
whiteknight bytecode really has to stay immutable. That's the only way to make things work 20:22
once it's created and "loaded" for execution, it has to be immutable
nine Allowing only the main thread to load new bytecode also validates my current workaround in the GC. I only mark code in the main thread. 20:25
20:32 Hunger joined 20:35 lucian joined
nine Ok the rest of the task tests just test NYI stuff like send/receive 20:38
whiteknight send/receive are not implemented yet? How much effort you think that will take? 20:43
benabik aloha: Disruptor? 20:44
aloha benabik: Disruptor is martinfowler.com/articles/lmax.html
benabik It does pick up definitions not directed at it. Useful.
nine whiteknight: well they are implemented for green_threads but have to be converted to using proxies. Can't imaging that being much work now that proxies and GC work in general 20:47
whiteknight okay 20:49
if we have working locks, a simple mailbox/fifo wouldn't be hard to implement for those things 20:51
dalek itor: 3b722a4 | NotFound++ | examples/pokedit.winxed:
"Look, ma, I can write!"
21:01
nine Yep. But enough for today. Good night 21:04
whiteknight goodnight, nine 21:12
21:30 mj41 joined 21:34 wagle joined, perlite_ joined 21:53 cogno joined 22:18 alin joined
dalek itor: 174ba88 | NotFound++ | examples/pokedit.winxed:
paste from clipboard in example pokedit
22:33
22:45 nbrown joined 22:48 mj41 joined
dalek itor: ca4e75f | NotFound++ | examples/pokedit.winxed:
middle button paste in exaple pokedit, unfinished
23:06
23:15 aloha joined 23:29 lucian joined