|
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. |
|||