Parrot 5.2.0 "Stuffed Parrot" | parrot.org/ | Log: irclog.perlgeek.de/parrot | #parrotsketch meeting Tuesday 19:30 UTC
Set by moderator on 2 April 2013.
01:23 Psyche^ joined 01:49 woosley joined
dukeleto ~~ 02:03
02:37 woosley joined 02:47 preflex_ joined 06:24 Mike-PerlRecruiter_ joined
tangentstorm is IMCC dead and gone? 07:34
sorear no 07:38
IMCC is undead. it cannot be killed, and it drains the life out of everything it touches.
tangentstorm cool 07:39
but where is it?
sorear what, imcc?
tangentstorm gah
i don't know why i couldn't find it
oh because it wasn't in the install directory when i did make install for rakudo. my bad. i'm catching up on 10 years of changes and not very organized tonight :) 07:40
what happened to the PIRC thing that was meant to replace it? 07:41
moritz it got tuit-starved, afaict 08:28
tangentstorm is leo still around? 08:33
moritz no 08:35
hasn't been for ages 08:36
tangentstorm yeah, didn't think so... hrm.. so where is the repo for pirc?
08:37 xcombelle joined
moritz github.com/parrot/pirc 08:38
tangentstorm oh. thanks! :)
Project Manager ENOBODY -- github.com/parrot/parrot/blob/mast...LE_PARTIES ? 08:41
dalek kudo/nom: 070f3a4 | moritz++ | src/Perl6/Metamodel/BOOTSTRAP.pm:
RT #117583: guard against NULL container spec
08:55
10:09 woosley joined 12:09 PacoAir joined 12:44 contingencyplan joined 15:18 xcombelle joined
dukeleto tangentstorm: howdy 15:36
tangentstorm: you seem to be old skool. When was the last time you were around these parts?
tangentstorm: and you are right, nobody wants to be a Project Manager for us, and I don't blame them 15:37
tangentstorm hey dukeleto :) 16:25
actually I dropped in a few weeks or months ago for a day or two, but mostly I was working on a python->parrot compiler in 2003, around the time of the pie-thon (but mine was a different approach from san sugalski's) 16:26
pirate.he.sabren.com/viewvc.cgi/pirate/
<- went by sabren back then
I would be kind of interested in being a project manager, but I don't think you guys would like the direction I would take parrot in. 16:35
16:36 larks joined
masak tangentstorm: let's hear it :) 16:37
tangentstorm Well... I would prioritize the multi-language aspect. 16:38
masak \\o/
tangentstorm That would mean actively competing with the other vm options for rakudo, but not at the expense of other platforms. 16:39
And it might mean merging in code from other vms, like cog for squeak/pharo, or code.google.com/p/dwscript/ 16:40
vms that aren't necessarily written in c...
or aren't necessarily purely register based.
maybe v8 16:41
Somewhere a while back I saw a post on the wiki about finding a much smaller instruction set and implementing the rest of the instructions around that core... I think that's a really strong idea. 16:43
dukeleto tangentstorm: great to meet you
tangentstorm: are you a college student by any chance?
tangentstorm: that is called M0
tangentstorm nope
dukeleto tangentstorm: look at the m0 branch in parrot.git 16:44
tangentstorm: cotto and I need help with it
tangentstorm: real life has causes has required a stack of work that is preventing cotto and I from merging m0
tangentstorm: there is also the beginning of llvm support in parrot, but we are not leveraging it much
tangentstorm: we need a way of generating the glue code to LLVM, because it moves faster than parrot. We can't be writing glue code to LLVM manually 16:45
tangentstorm There is a game called hedgewars that is also doing GSoC.
dukeleto tangentstorm: there are 177 orgs, 40 new this year
tangentstorm Yeah
dukeleto tangentstorm: parrot is lucky to be part of it this year
tangentstorm But I've been recruited to mentor for hedgewars. :) 16:46
dukeleto many many old skool orgs were not included, like VLC and Minix. But this is to allow new orgs a chance, and I think that is great.
tangentstorm: what is hedgewars?
if parrot was not accepted one year, I would not take offense.
tangentstorm Hedgewars is a GPL multiplayer game like worms or scorched earth, but with hedgehogs.
dukeleto TPF doesn't seem to be part of it, but I am not sure if they applied.
tangentstorm It's written in a mix of pascal, haskell, and c++. 16:47
dukeleto tangentstorm: wow.
tangentstorm: never heard that combination before
tangentstorm And probably a few other things I'm not remembering. I know there's a port for java and a really bad experimental one for javascript.
dukeleto tangentstorm: what is your current interest in Parrot? 16:48
tangentstorm: we just got really awesome threads in master, but they are barely used
tangentstorm :D I don't know.
I mostly just decided to try perl5 on a whim yesterday because I needed to parse some log files. :)
dukeleto tangentstorm: we have hybrid threads, where you can choose an M:N ratio between threads and cores 16:49
tangentstorm: I did that 17 years ago and I never stopped using Perl :)
tangentstorm That sounds pretty cool.
dukeleto tangentstorm: this is some background: perl6advent.wordpress.com/2012/12/...t-threads/
tangentstorm I don't really use threads much very often so I'm not really an expert, but I do think that parrot's support for continuations and async i/o is one of it's strongest points. To be able to add threads and multi-processor support on top of that is pretty darn cool. 16:54
code.google.com/p/besen/ <- This is a complete implementation of ecmascript 5, written in free pascal / delphi... It has at least some JIT support. 16:57
the author is currently working on an object pascal -> llvm compiler (one of about 3 than i know of) 16:58
If that's not obscure enough, there are also several people working on oberon compilers. :D
These are mostly individuals doing all this stuff on their own, by hand. 16:59
Someone said either here or on perl6 a while back (maybe last night or in the logs, i don't know) that the goal shouldn't be to make compiler geeks happy... Which I think makes sense for perl6 but not necessarily for parrot. 17:01
Because people who are seriously writing compilers tend to be rather set on doing things their own way, either because they want to learn or they want to attack the overwhelming complexity in the software world, or just because they're the smartest person they know and they want to remake everything in their image. ;D 17:03
Or else they're business guys who have a vested interest in keeping a particular language alive or something, like the guy funding one of the pascal->llvm ports. 17:04
I think if parrot could somehow give these people a way to contribute and collaborate without giving up their own projects, that would be a way it could gain some momentum. 17:06
This vm has ports to something like 10-12 different languages, mostly contributed by random people who just thought it was cool: rx-core.org/docs/The_Ngaro_Virtual_Machine.html 17:07
It's nowhere near as sophisticated or useful as parrot, but you can write it by yourself in under a week. 17:08
And so people have, and now you can run it pretty much anywhere. :)
If m0 can be that small and portable, that would help tremendously. 17:09
But then there might not just be one parrot, but a whole collection of little m0 VMs.
Anyway I will stop ranting now. :) 17:10
AFK for a bit, but also one last thing: I would revive the parrot forth project, rewrite it in pure pasm if it isn't already, and implement IMCC in that. 17:17
dukeleto tangentstorm: interesting thought 17:27
tangentstorm: PIR is the new PASM
tangentstorm: :)
tangentstorm: IMCC is a bad idea
tangentstorm: but your plan intrigues me 17:28
dalek p: 71fab2d | jnthn++ | src/core/ (3 files):
Clean up JVM/Parrot divergences in src/core.
17:44
p: 84d8cc0 | jnthn++ | src/how/RoleToClassApplier.pm:
Fix to role collision handling from NQP JVM.

The collisions list is just names, not code objects.
tangentstorm hmm. does PIR co 17:56
compile to pasm? or is it a replacement?
(the "I" sounds like intermediate)
tangentstorm looks at the code 17:57
dalek p: dacc4d7 | jnthn++ | src/QAST/ (7 files):
Resolve divergence in QAST nodes.
17:59
tangentstorm i'm not clear what the difference between imc and pir is ... they look the same (the languages, not the compiler) 18:05
ah ok. imc = pir, from the imcfaq 18:06
yeah, I would write the tool that compiles pir -> pasm in pasm 18:07
possibly by way of forth 18:08
dukeleto tangentstorm: take a look at the m0 branch 18:12
tangentstorm: i will get you a link in a second
tangentstorm: github.com/parrot/parrot/blob/m0/d...d32_m0.pod
tangentstorm: make a pot of coffee, and read that :)
tangentstorm thanks. i found the branch but ton sure what i'm looking for... aha.
dukeleto tangentstorm: it is a spec for about 40 opcodes 18:13
tangentstorm: m0 stands for "magic level 0"
tangentstorm: we want to shrink the amount of C in Parrot to the tiniest amount necessary
tangentstorm lorito was what I was looking for. 18:14
glad that lorito = m0 :)
dukeleto tangentstorm: yes. m0 is a step on the staircase of lorito :)
tangentstorm: once m0 is in place, we can build many shiny things on top of it. Like a JIT that can have a chance of working 18:15
tangentstorm: we deleted our old JIT in 1.7.0 because it was unmaintanable and couldn't work well because of how parrot internals changes between PIR/PASM and C constantly 18:16
making optimizations impossible or very hard at best
tangentstorm: m0 has a test suite
tangentstorm: there is a reference implementation in Perl, and the beginning of a C implementation 18:17
tangentstorm: you can tell the test suite to run against each of them, iirc. I think I worked on that.
tangentstorm: git blame is your friend :)
tangentstorm: there may be some bugs in the doc 18:18
tangentstorm pretty cool stuff. 18:19
I really like this, but I would make one significant change. 18:20
dukeleto tangentstorm: i think the "m0" branch is the combination of m0-prototype and m0-spec, and those two need to be removed, but I am not sure
tangentstorm: do tell
tangentstorm: or send a pull request :)
tangentstorm well, two i guess, but they're abouth the same concept: move the ffi/pmcs out of the vm 18:21
for strings, just put the string data in the vm's ram
the thing that is so awesome about ngaro (at least to me) is the port concept.
ngaro itself has 30 opcodes and it can run pretty much anywhere. 18:22
any kind of IO is done through a set of ports.
so if you wanted to add a general-purpose c ffi, you would just create an "FFI device" and talk to that device through the port. 18:23
but once you did that, you're no longer coupled to c, and you could use the same interface for talking to javascript or assembly language, or go, or whatever. 18:24
dukeleto whoa!
tangentstorm or you could be talking across the network to an ffi device there
dukeleto tangentstorm: have you played with Factor before?
tangentstorm yeah
dukeleto tangentstorm: forth-inspired
tangentstorm retro and factor are very very similar
dukeleto tangentstorm: it has an "alien" ffi system
tangentstorm but factor's vm is much bigger
dukeleto tangentstorm: i am familiar with factor and know some of the core devs personally 18:25
tangentstorm games.tangentcode.com/mineswpr/
^ this is ngaro/retro running in a browser
unfortunately, i introduced some bugs and if you type while it's refreshing the screen the whole thing locks up
dukeleto tangentstorm: what you are describing to me sounds way better than the "alien" concept, or perhaps it is just one more abstraction on top of the "alien" concept
18:26 Mike-PerlRecruiter_ joined
tangentstorm i can't take credit for it... i was going to make my own simple stack vm until i found ngaro. 18:26
dukeleto tangentstorm: so you have an abstract "ffi device" listening on a port?
tangentstorm: have you heard of NekoVM?
tangentstorm yeah for haxe but i don't know a lot about it.
dukeleto tangentstorm: that seems to have a small but dedicated developerbase
tangentstorm: isn't talking over a port hella slow?
tangentstorm: is that the price to pay for portability? 18:27
tangentstorm: it may be a good deal :)
tangentstorm by "port" i mean an array of numbers.
dukeleto tangentstorm: ah!
tangentstorm which could be registers
dukeleto tangentstorm: so that is the same as an "alien" in Factor-speak
tangentstorm in the js version here, there's no ffi yet
dukeleto tangentstorm: binary data, essentially?
tangentstorm yah, one sec.. i'll show you the code
btw, this is the official demo: retroforth.org/demo/ 18:28
the main version is written in C and is much much faster obviously.
dukeleto cool! 18:29
tangentstorm the minesweepr game is my port to try and speed up the javascript one
dukeleto tangentstorm: so how do we keep m0 from knowing as little as possible about FFI?
tangentstorm one of the the things I did is I took a javascript library called escapes.js that does ANSI terminal emulation and I converted it to an ngaro device.
dukeleto tangentstorm: what hooks does it actually need? 18:30
tangentstorm by defining interfaces/protocols for each kind of device.
I've never designed an FFI before but I know someone who has.
elm-lang.org/
(haskell-like language that compiles to javascript)
I hounded him to add interaction with real javascript and he surprised me by implementing a really nice event-based FFI 18:31
I'd have to study it a bit more to tell you about it though. :/
here is the port interface: github.com/tangentstorm/ngaro-js/b...ro.js#L438 18:33
4 lines of code :)
basically there are 3 opcodes in ngaro: OUT, IN, and WAIT 18:34
OUT writes a number to a port, IN reads a number from a port, and WAIT runs the IO loop here so one of the devices runs.
each port has a port handler, which is just a function that takes a value and returns a value.
value being one 32 bit integer. 18:35
but it's not super clean, because the port handlers can then proceed to push and pop numbers off the stack, and occasionally poke around at arbitrary places in the VM's ram.
this minesweepr game runs identically on the C and pascal vm's in the linux console btw. 18:36
in theory, you can run it on an arduino or pic or whatever.
like over a serial device or something. i don't have the hardware to try it, but there are ports of the vm to those platforms. 18:37
This javascript code isn't anywhere near close to optimized, btw. It was the author's first javascript program. 18:38
dukeleto tangentstorm: this is seriously interesting stuff 18:39
tangentstorm (all i did was add tests and refactor it a bit to make it run on node.js in the console)
i'm trying to make a game engine off this stuff.
with a "sprite device"
where a sprite would be a lot like a PMC for parrot, and the device would sort of manage it, if that makes sense.
I kind of had the same idea for "string devices"... but i haven't tried it yet. 18:40
dukeleto: There's also a guy who hangs out in #retro making another vm that compiles to a 4-bit instruction set. He treats it as a bytecode to avoid extra bit-shifting 18:41
So there are 256-instructions that each just do some combination of 2 ops :) 18:42
The point is it's insanely fast, and the whole vm can live inside the cpu cache.
like on intel/amd you have these 128-bit registers for MMX and SSE that are just sitting around doing notihng because everyone uses the graphics card to do vector stuff these days. 18:43
you can pack 32 of the instructions into one of those registers, and you can use bit-rotation operations to give yourself an automatic infinite loop :) 18:45
The point is: make it small enough that some random guy with a cool idea like that can come and tinker with it, and they will, because it's easier than starting from scratch.
dalek kudo/nom: b5bdbe4 | (Geoffrey Broadwell)++ | src/core/Str.pm:
Convert pir::const::CCLASS_PRINTING to nqp::
tangentstorm (and i think m0 does this quite nicely for parrot!) 18:46
Oh 18:51
Another reason for moving PMCs and the C api out of the vm and into an external "device" is that once you do that you can put m0 on an FPGA.
dalek p: 49dd649 | jnthn++ | src/QRegex/NFA.nqp:
Remove some bogus type constraints.

Since we typically calculate with floats in NQP, we can't rely on the arguments being int here. Somehow we get away with this on Parrot, but NQP JVM enforces them more Perl 6-ishly. Also, they may have led to reboxing, so we may be better off without them anyway.
19:05
p: 008a923 | jnthn++ | src/QRegex/NFA.nqp:
Remove misleading commented out code and a hack.

The code explained what the C op it was replaced with at the point it was translated. However, now things have evolved, so better to just toss it.
p: b48d067 | jnthn++ | src/QAST/Operations.nqp:
Add nqp::setelems.

To abstract away pir::assign__0Pi.
19:19
p: d8426fc | jnthn++ | src/stage0/ (9 files):
Update bootstrap to get some nqp:: ops.
p: a3d1061 | jnthn++ | src/QRegex/Cursor.nqp:
Clean up Cursor and related classes.

Means that most code now matches the JVM version.
19:20 PacoAir joined
dalek p: 67270f7 | jnthn++ | src/QRegex/P6Regex/Grammar.nqp:
Add SC handle uniqueness fix from NQP JVM.
19:32
20:06 mtk joined
dalek p: 08d0103 | jnthn++ | src/HLL/Actions.pm:
s/atkey/atpos/ fix from NQP JVM.
20:10
p: ea56c24 | jnthn++ | src/ (3 files):
Various tweaks to HLL and NQP for JVM compat.
p: d46b465 | jnthn++ | src/HLL/ (2 files):
Final couple of syncs with NQP JVM.

Remaining differences are bits that need to be backend specific.
20:54
21:35 davidfetter joined
dalek p/jvm-support: b7c2129 | jnthn++ | / (63 files):
Use .nqp extension consistently.
21:43
p/jvm-support: 491b38b | jnthn++ | 3rdparty/asm/ (2 files):
Add 3rdparty/asm from nqp-jvm-prep repo.
p/jvm-support: a8721d5 | jnthn++ | / (123 files):
Move C code, ops and PMCs under src/vm/parrot/.
p/jvm-support: 669532a | jnthn++ | .gitignore:
Update .gitignore.
21:44
p/jvm-support: 48af6ff | jnthn++ | / (3 files):
ModuleLoader.nqp will be VM-specific.
22:13
p/jvm-support: 7b9b760 | jnthn++ | src/Regex/constants.pir:
Toss dead code.
p/jvm-support: ba54813 | jnthn++ | / (7 files):
Parrot QAST backed moves under src/vm/parrot.
p/jvm-support: af466c8 | jnthn++ | / (3 files):
Split out HLL::Backend from HLL::Compiler.
22:41
p/jvm-support: d6ff63d | jnthn++ | / (3 files):
NQP Ops.nqp is also VM-specific.