Index

Show enters and exits. Hide enters and exits.

00:00:01boyscout1 commit by Christopher Thompson
00:00:02boyscout * Handle EXIT when trapping "signals".; 7f25a2a
00:00:08evannexcastellan: that was easy! :D
00:00:25nexcastellanEasy once I figured out what the heck was going on. :)
00:03:16agardinerbrixen: i'm still getting up to speed on the new spec organisation...
00:03:33agardineri'm getting a problem pulling into spec/ruby...
00:04:17loincloth enters the room.
00:04:52qwert666 leaves the room.
00:05:26rueagardiner: Are you using the tasks or going directly?
00:05:35agardinergoing directly
00:05:51agardinerim getting merge conflicts when i attempt to pull
00:07:00rueDoes status show untracked or uncommitted changes?
00:07:35agardinernope, shows working directory clean
00:07:52agardinergit config shows the rubyspec/rubyspec repository
00:08:50rubuildius_amd64Christopher Thompson: 7f25a2ae7; 2377 files, 7772 examples, 26839 expectations, 1 failure, 1 error; http://rafb.net/p/AFqqV799.html
00:09:13jtoy enters the room.
00:11:53rueCannot reproduce that in my current state
00:14:46agardinersomething is definitely wacky
00:15:16agardinergit log on spec/ruby master shows the last commit as 2nd June
00:15:43agardinerbut head appears to reference the last commit on the rbx main repo?!
00:16:17rubuildius_ppcChristopher Thompson: 7f25a2ae7; 2377 files, 7771 examples, 26860 expectations, 0 failures, 0 errors
00:16:57agardinerah, think i'll wrestle with this another time...
00:17:11agardinerevan: a quick question and then i'm off to bed
00:17:18evansure
00:17:44agardineri've been futzing around playing with a PIC in shotgun
00:18:19agardinerits a real hack, but i'm stuck on something
00:19:20agardinerbasically, for now i'm just trying to switch the SendSite data1, data2, and data3 objects to tuples when a new receiver class is encountered
00:20:14agardinerwhat i'm seeing is that i can stash different receivers in the tuple, but they appear to then go stale
00:20:15evanok.
00:20:18heycarsten leaves the room.
00:20:36agardinerdoes the gc check the object refs in SendSite?
00:20:39evanwell, you have to validate the cache when you pull something out.
00:20:42evanoh wait
00:20:46evanwhat kind of stale?
00:21:05agardineri can put a receiver class into the tuple, and printf the name of the class
00:21:30agardinerbut the next time i get to the same point in the tuple, i get a sigbus trying to print the name
00:21:43evanhrm
00:21:49evanthe GC should be seeing those fields
00:21:52evanif not, we have to fix that.
00:22:07evanbut if it weren't seeing them, i'd think we'd have had this problem long ago.
00:22:16agardinerthat's what i thought...
00:22:29evancould you paste up a diff of what you've done?
00:22:33evanperhaps there is a clue in there.
00:22:43agardineri'm using the write barrier when i add the tuples...
00:24:29evanyou shouldn't have to explicitely call the write barrie.
00:24:43thehcdreamer leaves the room.
00:24:50agardineryou do for SendSite, cause its a hybrid beasty
00:25:36evanyou need to use SET_STRUCT_FIELD
00:25:38agardinerSET_STRUCT_FIELD
00:25:44evan:)
00:25:45agardinerzing
00:25:52evanwell, pastie the diff
00:25:55evanlet me take a look
00:26:09agardineri'd really rather not... its a mess! :-)
00:26:25evanheh
00:26:25evanok.
00:27:06agardinerso, for now, i'm right in understanding that i need to use SET_STRUCT_FIELD when i switch data1 etc to be Tuple instances
00:27:22evanyeah
00:27:23evanyou are.
00:27:32agardinerbut i just use tuple_set to save the receiver class instances into the tuple
00:27:39evanthats correct.
00:28:05agardinerok, well i'll look at this again with fresh eyes (and more confidence) later
00:28:16agardinerthanks for the sanity check
00:28:55Maledictus leaves the room.
00:29:06agardinerlater folks o/
00:29:27agardiner leaves the room.
00:32:01loincloth leaves the room.
00:35:14seydar enters the room.
00:36:15seydarbug time
00:36:36seydar`find /dev -type l` is returning a supposed link, but nothing i do can find it
00:37:00seydarthis is a problem, because the two link tests in rubinius are failing for me (TIger/PPC)
00:37:40seydarhowever... i guess this isn't really a rubinius bug, but a bug in the method ("algorithm") used to find the links
00:37:58seydarany words of wisdom of a beautiful friday night?
00:40:39rueFind out where Tiger puts links :)
00:42:11seydarbut... the find /dev -type l command returns a location BUT the location *isnt* actually there!
00:42:12evanseydar: ln -s $HOME /tmp/blah; find /tmp -type l
00:42:48seydarshould I bother trying to find a better way to test symlinks or should i just accept it as an OS bug in this specific case.
00:42:50seydar?
00:44:50evanprobably need a better way.
00:45:39seydarim on it, sir!
00:46:24evan:)
00:46:42loincloth enters the room.
00:47:33headiusevan: IO threading question for ya
00:47:46headiusI'm trying to get some blocking ops to be more "responsive" as in MRI
00:48:02evanwhich blocking ops?
00:48:12headiustrying to parse rb_thread_schedule's select logic at the moment
00:48:17headiusin this case, TCPServer.accept
00:48:23evanheadius: RUN!
00:48:40headiusyeah I know...every time I look at this code I get an enormous headache in my eye
00:48:58evani've been through it a number of times over the years
00:49:01evanso i'm pretty sure i've got it
00:49:04evanwhat you looking at?
00:49:24headiuswell the problem I'm running into is that for accept we do a full-on infinite select with Java NIO
00:49:26evanaccept registers a read wait on the fd in question
00:49:40headiusclosing the socket under select doesn't appear to wake it in this API
00:49:56evanin NIO it doesn't?
00:50:11evandoes it maybe report the fd in the error fd list?
00:50:15headiusdoes not appear to...still trying to confirm if there might be a race, but seems that way
00:50:19headiushmm that could be
00:50:25headiusthis code may only be checking the read list
00:50:34headiusand saying "hey, I'm not in the read list, so let's try again"
00:50:41headiusI'll check that
00:50:46headiusbut also, confirm this for me
00:51:08headiusMRI basically does a select...but it's not an infinite select, right? it's polling?
00:51:36Fobaxit polls so that it can do a different thread if there's nothign to read
00:52:08FobaxRead/write ops are one of the ways for MRI to do a thread context switch
00:52:12evanheadius: it's not infinite, no.
00:52:17evanselect() isn't the root of all work.
00:52:25evanit just goes into there when there is nothing to do
00:52:59evanwhen a Thread is pre-empted
00:53:01headiusFobax: yeah, I get that...I'm just trying to figure out what it does with fds that aren't ready
00:53:05evanit goes through select in poll mode
00:53:14evantrying to detect if any Threads are now runable
00:53:20evanif there are no runable threads
00:53:25evanit goes into a blocking select
00:53:28headiuson everything
00:53:29headiusok
00:53:38evanif there are Threads waiting on events, yes
00:53:42headiusI'm trying to figure out the best way to map that to real threads
00:53:47evanit goes into a blocking select.
00:54:05headiusselect in C and select in NIO are a little different, which also complicates it a touch
00:54:06evanif you have, say 2 threads waiting on IO, and 3rd that did 'sleep 5'
00:54:16evanit will end up passing 5 to select() as the sleep timeout
00:54:25evanso it can wake up, see if anything is ready to go
00:54:27evanand run them.
00:54:42headiusso along with the fd and wait event it has a "remaining timeout" value
00:54:53evanright
00:54:58evanthats because if you have 2 threads
00:54:58FobaxIn real threads, why wouldn't each thread go into a blocking select on each thread for the fds that that thread is waiting on? Does it make sense to try to join the different selects?
00:54:59evanone did
00:55:00evansleep 5
00:55:02evanand one did
00:55:04evansleep 2
00:55:10evanit does the min() on that
00:55:14evanand passes it to select
00:55:35headiusFobax: well I'm assuming that either I'm doing something wrong with NIO select or I'm missing some crucial detail....right now they do go into a normal blocking select, but it doesn't appear to be waking up when I expect it to
00:55:46headiusevan: ok, I see that now
00:55:49Fobaxah, ok
00:59:58jtoy leaves the room.
01:05:15seydarso evan, are you doing any compiler infrastructure redesign in the c++ version?
01:07:55evanno
01:08:01evansince the compiler lives in ruby
01:08:06seydardammit
01:08:10evanthere are a couple of simplications
01:08:17seydarare you doing any VM redesign?
01:08:20evanlike InstructionSequence is an array of symbols now
01:08:27evanlots.
01:08:50seydarsweet. if you have some time, would you mind telling what changes you are making?
01:08:59seydaror is there a page somewhere that already has this info?
01:09:06evanthere isn't yet, no.
01:09:08evanwell...
01:09:16fbuilesv leaves the room.
01:09:17evanit's being ported to C++
01:09:22evanso the structure is object based now.
01:09:47seydarthis just cleans up the flow of things, right?
01:10:00evanyeah
01:10:09evanworking on integrating LLVM now.
01:10:26evanso that all execution will be done in machine code.
01:10:32evanmanaged machine code.
01:10:41seydarso before i ask more about llvm, how are objects currently stored?
01:11:02evanyou mean, how does the GC work?
01:12:32seydarum, maybe?
01:12:49evanobjects are stored in memory.
01:12:52seydarmy compilers course doesn't come until spring '09, so i only know what seems obvious
01:12:59evanthey have a header
01:13:00seydarare objects just structs in memory?
01:13:05evanthey have a structure
01:13:05seydar(dont answer that)
01:13:28evanthe header can be represented as a C struct yes
01:13:33evanstruct header {
01:13:34seydarIs there someplace in the code that I can read to see this structure in either the C or C++ code?
01:13:36evan uint32_t flags;
01:13:42evan uint32_t field_count;
01:13:45evan OBJECT klass;
01:13:46evan}
01:14:12evanfield_count indicates how many OBJECT's are located in memory after the header
01:14:18evanso objects are variable size.
01:14:37seydarwhats the smallest they can be?
01:14:46evanjust the header
01:14:48evanso field_count = 0
01:14:57evanthat would be a Tuple with a size of 0
01:15:08evaneverything else has at least 1
01:15:15seydarsweet. what do you mean by "how many OBJECT's are located in memory"?
01:15:43evandid I say that?
01:15:56jbarnette leaves the room.
01:16:14evani didn't say many in there.
01:16:40evanreask your question
01:16:41seydarevan: field_count indicates how many OBJECT's are located in memory after the header
01:16:47evanoh
01:16:48evanthat.
01:16:54seydarI dont get what the field count really is
01:17:09evansay that the header starts at address 0x12
01:17:24evanand takes up 12 bytes.
01:17:48evaner. not 0x12, just 12.
01:18:00evananyway, the header ends at address 24 then
01:18:14evanrather, 24 is the first byte after the header
01:18:40seydargotcha
01:18:40evanso, starting at 24, there is an array of pointers
01:18:49evanthe size of that array is field_count
01:19:04seydarooh. sweetsauce
01:19:25seydarand the methods are accessed via the VM, and not through a pointer from the object
01:19:40seydarvariables are accessed from the array after the header
01:19:44seydardid i get that right?
01:19:52evanyeah, thats sort of right.
01:20:11seydarwhat am i missing?
01:20:13evanthe slots (whats what we call the positions in the array) aren't normally accessed directly
01:20:18evanwe build on them to create the ruby semantics.
01:20:41seydarhm. ok.
01:20:45evanso, for instance, slot 0 normally contains a pointer to a LookupTable
01:20:56evanand the ivars for that object are stored in the LookupTable
01:21:19seydarok, so they're pointers to VM objects, not other objects that were created ("ruby" objects?)
01:21:35seydari get it!
01:21:42seydarthats an interesting design.
01:21:52evanthey're all ruby objects
01:21:53evanand yes
01:21:56seydarwas there any change to that from the C to the C++ implementaion?
01:22:05evanyou always just contain pointers to other objects
01:22:12evanno
01:22:16evanthats all the same
01:22:33evanthere are 2 special cases
01:22:47evanwhich make it possible to actually build a system out of this
01:23:06evan1) an object can have a flag set in it's header, which indicates that the array is of char's not pointers.
01:23:14evanand thus the object can now just store raw data.
01:23:30seydarbefore you move on
01:23:33evanthats how ByteArray works.
01:23:41seydarwhy is that part important?
01:23:51evanotherwise, how do you represent a String?
01:24:02seydarhm. you're right
01:24:07seydarim dumb. sorry bout that
01:24:10evanno prob.
01:24:18evanthe other special case is immediates
01:24:27evanie, Fixnum
01:24:36evanso, for the number 0
01:24:45evanruby says that is a Fixnum object of value 0
01:25:01evanwell, if everytime there was a 0, we had to allocate an object in memory, that would suck
01:25:13evanwe'd end up using 12 + 4 bytes everytime, just to show a 0
01:25:38seydarso are rubinius' and MRI's numbers all singleton?
01:25:41evanso we use a technique that Smalltalk used, back in the day.
01:26:00evanbasically, these days, if you look at a pointer, it's always word aligned
01:26:06evanmeaning the bottom 2 bits are always 0
01:26:29seydaras they should be. x86 is a bitch because of its weirditude
01:26:34tarcierioccasionally pointers aren't word aligned
01:26:35seydar(imho)
01:26:41tarcieribeam.smp(68809,0xb022c000) malloc: *** error for object 0x60b500: Non-aligned pointer being freed (2)
01:26:42tarcieri:(
01:26:50evanin rubinius, the are always word aligned
01:26:53evanno other way.
01:27:03tarcieriI think they're always SUPPOSED to be aligned in BEAM too
01:27:04tarcieribut... heh
01:27:13evanso what we do is overload what a pointer can mean
01:27:23evanso if the bottom 2 bits are 0, it's an address in memory
01:27:32seydarnice. THAT is pretty fucking brilliant
01:27:37tarcieriit's a cool hack
01:27:39evanbut if the bits are, say 01, that means that the other 30 bits are actually the value itself.
01:27:46evanso 0 is actually just
01:28:03evan00000000000000000000000000000001
01:28:03seydar0------01?
01:28:09evan1 is
01:28:12evan00000000000000000000000000000101
01:28:15evanetc.
01:28:28seydarsweet.
01:28:40seydari really wish i could play with the compiler outside of C
01:28:41evanso they act like singletons
01:28:50evanseydar: the rubinius one?
01:29:35seydaryea
01:29:40evanit's all in Ruby.
01:29:42seydarwia
01:29:44seydarwait
01:29:47seydari meant the VM
01:29:50evanit doesn't get into this stuff though, because it's at a higher level.
01:29:55evanah.
01:30:01seydari need to be smacked every time i mix them up
01:30:13evanso, anyway
01:30:23evansmall numbers act like singletons
01:30:30evanbecause they actually have no storage
01:30:34evanthey can't be changed in anyway
01:30:59evanwhich is fine
01:31:05evanbecause thats how people think about numbers anyway
01:31:07evanif you could do
01:31:09evan0 << 3
01:31:12evanand change the value of 0
01:31:16evanMY MIND WOULD MELT.
01:31:23tarcieriTypeError: no virtual class for Fixnum
01:31:24tarcieri:(
01:31:26seydarhehe
01:31:45FobaxCan't you do stuff like def 1.foo; puts "asdf"; end; ?
01:31:56tarcierino
01:31:58tarcieriTypeError: no virtual class for Fixnum
01:32:15evanyou can put ivars on numbers though
01:32:22evanbut they act like you'd think
01:32:28evanthey appear on 1 everywhere
01:32:43evanbecause every 1 that ever exists is the same object.
01:32:59seydarFobax: ruby parser won't let you do def 1.foo
01:33:03evanthis, btw, is probably the biggest mind fuck for new people into VM design.
01:33:12seydarevan: what is?
01:33:19evanhow immediates work
01:33:24evanand what they mean, etc.
01:33:29seydarthat was the coolest trick ever
01:33:47Fobaxseydar: I hadn't tested that example, but I have seen an example that does something similar. Maybe it was to put ivars on numbers
01:33:51evansend Dan Ingles a thank you card.
01:34:08seydarnext time your in new england, i'm going to find you and ask you soooo many questions
01:34:18seydari'll follow you around and take notes
01:34:22evanhehe
01:34:28evanhm, i wonder when that will be...
01:34:30evanwhere in NE are you?
01:34:36seydarNH/VT
01:34:49seydarbut no one ever comes to NH.
01:34:56seydarso NY or boston is the best i can hope for
01:35:19seydarUNLESS you encourage headius to finish his master's at dartmouth, and then you visit him
01:35:38evanheadius was doing a masters at dartmouth?
01:36:16seydarno.
01:36:20seydarbut he should finish his there
01:36:54headiusI debate going back to school sometimes
01:37:12headiusthat's about as far as it gets
01:37:13ShayArnett enters the room.
01:37:16evanheadius: i didn't know you started a masters at dartmouth
01:37:20seydarhe didn't!
01:37:21headiusif I went back it would be for math or something
01:37:26evani'm confused.
01:37:28headiusheheh
01:37:29seydarhe started one someone else
01:37:31evanbut thats ok.
01:37:35evanit's friday.
01:37:47seydaryou guys have the entire night ahead
01:38:07anteaya__ enters the room.
01:38:24seydarevan: how are methods stored, and what happens when you call a method?
01:38:27tarcieriheh, headius is working on an NIO reactor for JRuby?
01:38:46tarcierinot that I'm a big fan of EventMachine, but there is... EventMachine
01:38:54evanseydar: the written text for a file is converted into a sexp
01:39:01evanthen the sexp is converted into CompiledMethod objects
01:39:04evanwhich the VM knows how to execute
01:39:26evancm = Compile.compile_string "1 + 1"
01:39:28evanputs cm.decode
01:39:29evando that.
01:39:44headiustarcieri: this will probably be something less than a full reactor
01:39:53headiusit's not really necessary for anything other than threading logic for blocking IO
01:40:05tarcierioh
01:40:08tarcieriwell I just e-mailed you
01:40:08tarcieriheh
01:40:09tarcieriwhatever
01:40:46headiusI'm game to try anything :) but my primary goal is to get thread lifecycle to better match MRI even with blocking IO in the mix
01:41:05tarcieriyeah if you want something more low level implementing it yourself probably isn't a bad idea
01:41:50tarcierithere's also MINA, although I don't know how that'd interoperate with JRuby :/
01:42:22seydarevan: i meant how are they stored in memory and how do they relate to their objects?
01:42:34headiusyeah I know about MINA too...I'll probably try to poll available options, so any suggestions are helpful
01:42:47headiusI don't want to add in a whole library if I can avoid it, but looking at code will help
01:43:07evanseydar: they're normal objects.
01:43:16evanexactly like everything else.
01:43:35seydarwhat happens when I call 1.foo?
01:43:53evanthe class of 1 is found (Fixnum)
01:44:02evanthen :foo is looked for in Fixnum.method_table
01:44:09evanif not there, look in Object.method_table
01:44:43evanwhen found, the VM creates a MethodContext object to hold the state of running
01:45:09anteaya_ leaves the room.
01:45:31evanall the details of how it executes a CompiledMethod under a MethodContext is too long for IRC.
01:45:41evanand thats something thats changing between C and C++
01:46:15atduskgreg leaves the room.
01:46:26Judofyr leaves the room.
01:47:06seydarso the lookup time for methods is O(n), where n is the number of tables it has to go through?
01:47:07evanin C++, the CompiledMethod object is used to create an LLVM Function
01:47:16evanseydar: naively, yes.
01:47:22evanbut you put a cache on the front of that
01:47:28evanso you don't have to look in the tables everytime
01:47:38seydarso it boils down to O(1)...?
01:47:43evanthat is the subject of a very large amount of research.
01:47:58seydaroh well
01:48:04evanPIC (Polymorphic Inline Cache) being cutting edge
01:48:10evanif you want to read more, google that.
01:48:23seydarits like everything i ever learned in any CS courses is becoming useful all of a sudden
01:48:32evanhehe
01:48:39seydarevan: so tell me more about how you plan to incorporate LLVM
01:48:41evani had the same feeling when I started Rubinius
01:48:48evan"Hey! These books are useful again!"
01:48:52seydaryou're just using it as a JIT, right?
01:48:56evanyep.
01:49:08seydarwhat are you able to jit in any given method?
01:49:14evana CompiledMethod has, inside it, an InstructionSequence object
01:49:27evanthat is the bytecode
01:49:35seydarRubinius bytecode?
01:49:44evanit's the control flow what the text said to do
01:49:48evanyes, Rubinius bytecode.
01:50:07ezmobius leaves the room.
01:50:11evanthe phase 1 of using LLVM (what i'm doing now)
01:50:28seydarand how are you linking that to LLVM?
01:50:29evantakes an InstructionSeqence, and writes an LLVM Function that does the same work
01:50:30rueBe back
01:50:45evanLLVM makes this pretty easy
01:50:55evanone of the opcodes is the pop instruction
01:51:02evanwhich just removes whatever is on the top of the stack.
01:51:05seydarso what is stopping you from doing the JIT part AOT, making it AOT?
01:51:22evanin this phase1 approach? nothing.
01:51:33evancould do full AOT.
01:51:38seydarso why would you ever want to move beyond phase1?
01:51:46evanbetter performance
01:52:00evanif phase1 rocks so much ass, maybe we wont have to!
01:52:00seydarwhats beyond phase1?
01:52:01evan:)
01:52:16evanthings like trace trees, hot spot optimization, etc.
01:52:24seydaralgebraic
01:52:39seydarsweetsauce
01:52:57seydarrubinius will soon have (maybe) AOT compilation, or soon a good chunk of it!
01:53:12jtoy enters the room.
01:53:17seydarok i gotta sink me teeth into this
01:53:20seydari gotta
01:53:48seydarwhere can i get the c++ book?
01:54:18seydars/book/code
01:55:07evanit's in the cpp branch
01:55:13evani haven't committed any of the LLVM stuff yet
01:55:17evanstill playing with it.
01:56:25seydarand... any advice before i jump head first in c++?
01:56:55evanhave fun!
01:57:21seydarsweet.
01:57:33seydar"im going to go kill myself, any advice?" "have fun!"
01:57:42sudoer enters the room.
02:00:51tarcierithat's how I interpreted that exchange
02:01:12evan:D
02:02:32seydarhow do i clone the c++ branch?
02:03:13evangit branch cpp origin/cpp
02:03:15evangit checkout cpp
02:03:31evanthat creates a local cpp branch that is hooked up to the remote one
02:03:43dctanner_ leaves the room.
02:04:06anteaya leaves the room.
02:04:14seydarhow do i update it?
02:04:26evangit pull
02:04:30evanwhen you have it checked out
02:04:37seydarok now im really confused
02:04:39seydari did that
02:05:06seydarbut the directory tree looks the same, and i have no clue what effect anything i do will have
02:05:30evanoh
02:05:31evanls vm/
02:05:32seydarwait
02:05:34seydarah
02:05:35seydaryea
02:05:35evanthats where the C++ code is.
02:05:43seydarman, git is interesting
02:06:47seydaris there someway to test vm/ ?
02:07:07evansure
02:07:09evancd vm
02:07:11evanrake
02:07:18evancompiles and runs the vm tests.
02:07:42lopex leaves the room.
02:07:44rue leaves the room.
02:08:41seydarhm. yes. it needs parse_tree
02:08:56seydarwhose installation has baffled me the whole two times i've tried installing it
02:09:25evanyes, thats true.
02:09:32evangem install ParseTree
02:09:41seydarwhoa. it cant be that simple
02:09:48seydardoesn't it require a bunch of other stuff?
02:09:48evanit better be.
02:09:55evangem will install the other stuff.
02:10:15seydarbut like. a copy of the ruby source and more jazz than the 1920s?
02:10:24anteaya enters the room.
02:10:36evanshouldn't no.
02:11:46seydarwhats the fusion-experiment branch?
02:12:10evanany old experiment
02:12:14evaner.
02:12:14evanan
02:15:07headiusthis next shootout is going to be a boondoggle
02:15:12seydarwhy?
02:15:25evanheadius: yeah, i'm getting that impression.
02:15:43headiusespecially given antonio's rah-rah for maglev recently
02:15:54seydarwhat the hell is a boondoggle?!
02:15:59evanit's going to be comparing apples to VMs
02:16:07evaner.
02:16:09jtoy leaves the room.
02:16:10evanVWs
02:16:12headiusheheh
02:16:22seydarVW as is visual works?
02:16:41seydari take it you two are a little sore over maglev?
02:16:55evanVW as in Volkswagon.
02:17:03evanie, a useless comparison.
02:17:05michaellatta_ enters the room.
02:17:11evanseydar: not sore, no.
02:17:15seydarthe apple analogy made more sense
02:17:29seydarclearly you two are a little ____ over maglev
02:17:36seydarthe question is what is ____
02:17:41MenTaLguY enters the room.
02:17:42evani'm pensive.
02:17:48MenTaLguYhowdy
02:17:50evanMenTaLguY: evening.
02:17:54tarcierisup MenTaLguY
02:18:11seydarhej MenTaLguY
02:18:12tarcieriwould like to know a little more about Maglev
02:18:19atduskgreg enters the room.
02:18:22tarcieriTasks/Channels are a really nice abstraction... wonder what Maglev does
02:18:35evantarcieri: i'm sure they use the Smalltalk stuff
02:18:42evanwhich, last I looked, was a mess.
02:18:43tarcieridoesn't know what that is
02:18:56seydari spoke with an old employ of gemstone the other week
02:18:59evannot a mess, just really simplistic.
02:19:05brixentarcieri: ah, I actually have been wondering what you thought of maglev
02:19:16evanSmalltalk 80, blue book style, barely had IO.
02:19:20tarcieribrixen: I need to actually look at it
02:19:20brixentarcieri: particularly, a giant share everything state machine vs actors
02:19:52tarcierievan: heh, so slightly better than Algol? :)
02:20:02seydarwell the idea behind gemstone isn't that there's some crazy restriction. its that they just extend memory to be "memory"
02:20:08brixentarcieri: I'm just curious what you think of multiple vm's with a single object store and what implications there are for an actor implementation on top of that
02:20:25seydaras of mid 1990s, at least
02:20:28MenTaLguYthere aren't any special obstacles to implementing actors atop that
02:20:40brixenMenTaLguY: ah, good to know
02:20:48evanMenTaLguY: well, communication seems like it would be poll only
02:20:56MenTaLguY(actually it makes some things easier, though I don't know about efficiency)
02:20:57evanunless you build some signalling
02:21:04headiusI don't know much about it but it seems like one design hassle would be having to be really conscious of what you make globally-reachable
02:21:08MenTaLguYwell, yes, you do need a basic signalling infrasructure
02:21:11evani don't think they have any signalling.
02:21:29evanok boys and seydar
02:21:33evani'm off to dinner and such
02:21:43tarcierineeds to go home
02:21:46seydaradios evan
02:22:04seydartarcieri: sweet work on revactor, btw. i dont think i ever really got a chance to thank you
02:22:09headiushmmm
02:22:19headiusanyone know how gemstone handles fixnums?
02:22:20tarcieriseydar: oh, thanks... it's certainly treating us well :)
02:22:41headiusI implemented fib in raw Java using our fixnum type and it's no faster than running normal code with fastest settings in JRuby
02:22:50headiuseven with dynamic dispatch removed
02:22:59seydarthats good news for jruby
02:23:04tarcieriit's absurd how much data you can push through a Ruby process while still having a crazy API on top of it implementing all the control logic
02:23:05headiusso in order to make it faster it would have to treat them as primitives somewhere
02:23:26tarcieribut re: MagLev, I haven't looked at Gemstone/S or whatever but I really doubt they have a nice kernel poll mechanism
02:23:47seydarmaglev holds most of its power in its interpreter, which is magical and underlooked
02:24:12tarcieriyeah, I'm talking specifically about I/O
02:24:20headiuswell, perhaps "neverlooked" since only a few elite members of the Ruby community have even gotten hold of maglev
02:24:26tarcieriyeah heh
02:24:26headiusso maybe you mean gemstone/s
02:24:34seydarheadius: from what i've gleaned, they only have made a few changes to the bytecode part
02:24:48seydaryea, gemstone/s and maglev, atm im using both interchangeably
02:24:49tarcieriyeah, I heard they just added a few instructions to support Ruby
02:24:50tarcieriwhich is cool
02:25:08headiusit will be cool if we find out which ones :)
02:25:16seydari want to try to get magma into ruby, and then hook that up somewhere
02:25:41seydarheadius: why not take a VM and then just adjust it to fit ruby? it could take some work, but its doable
02:25:55headiusopenjdk is just waiting to be manipulated that way
02:26:07brixentarcieri: so, do you think a single object store with multiple vm's will continue to scale on a chip like this? http://www.tilera.com/
02:26:17tarcieriheh, the Tilera is awesome
02:26:32tarcieribrixen: central anything will fail to scale well on multi-core processors
02:26:44brixentarcieri: yeah, that's what I'm wondering about
02:26:48headiusI heard one person theorize that they probably added a bytecode for dealing with Ruby's instance vars
02:26:50tarcieribrixen: the BEAM SMP scheduler is completely decentralized
02:27:03headiusmaybe they did, maybe not
02:27:12tarcierithere's no global locks (unless you use it with the hybrid heap, but they're trying to fix that)
02:27:23brixentarcieri: also, is vmactor intended to be implemented across distributed vm's or only the mvm stuff?
02:27:36tarcieribrixen: right now it only supports MVM
02:27:45brixenbut eventually?
02:27:59tarcieriyes, eventually it will need to be made compatible with a multi-node model
02:28:07brixenok
02:28:15brixentarcieri: you've seen, I'm assuming? http://www.slideshare.net/ballona/actors-a-unifying-pattern-for-scalable-concurrency-c4-2006/
02:28:32tarcieridon't think so
02:28:43tarcierithe title is certainly my take on the matter though
02:28:43tarcieriheh
02:28:57brixenin particular, slides 37-42
02:29:08tarcieriPersonally I feel that "nodes" should map to N CPU cores
02:29:10brixentrying to see this in rubinius
02:29:20seydarheadius: how would gemstone/s avoid the penalty from constantly adding objects to the database?
02:29:31brixentarcieri: that talk is by the creator of Io
02:29:36tarcieriaah
02:29:39tarcieriIo is a nifty language
02:29:49brixendunno if the talk is available, but the slides are provocative :)
02:30:02headiusseydar: the only official word is that only globally-accessible state is entered into the cache
02:30:07brixenseydar: through levels of caches, I believe
02:30:09tarcieribrixen: I'm having trouble inferring from those slides what he has in mind
02:30:18brixentarcieri: heh, ditto
02:30:19headiusso local objects not accessible outside a call stack don't propagate
02:30:26brixentarcieri: hence, my Q about vmactors
02:30:36seydarbrixen: but... the write speed!
02:30:42tarcieribrixen: however considerable optimization work has gone into optimizing multi-core systems as a single logical node
02:31:00headiuswhat I find very confusing is what if I do $proc = proc {}
02:31:00tarcieribrixen: things like cache coherency across multiple CPUs / CPU cores
02:31:35headiusthat essentially gives global access to local state...so they'd either have to break procs that go into object cache or do something else with them
02:31:47brixentarcieri: ahh
02:31:49tarcieribrixen: however the only way to really use that optimally is a shared nothing language... that lets you use shared memory as a high speed data bus while still eliminating global locks, and exposing all the cores to the programmer in a single VM
02:32:30headiusstuff like def foo(&b); eval 'puts a', b; end; a = 1; foo { } is going to be a problem if they don't implement procs and bindings right
02:32:48tarcierithat means that garbage collection can happen at the level of your shared-nothing concurrency primitive, and if it's needed before the garbage collection completes you just roll back
02:33:05brixentarcieri: ahh, interesting
02:33:06tarcierithere's no "stop the world" condition
02:33:09seydarheadius: why would $proc = proc {} raise Hell.new?
02:33:32tarcierianywho, now I really need to go home
02:33:32tarcieriheh
02:33:39brixentarcieri: thanks!
02:33:45tarcierinp
02:33:47tarcieri-> gone
02:33:59michaellatta leaves the room.
02:34:43headiusseydar: because maglev is claimed to propagate any global state across VMs
02:34:50brixenheadius: do we have specs for that?
02:34:55brixenthe def foo(&b)...?
02:35:01headiuswhich would mean you have a proc, with access to local variables in the containing scope, that's now propagated to other systems with different call stacks and locals
02:35:07headiusbrixen: yes
02:35:12seydarheadius: im guessing that that means that its available to other VMs...
02:35:12brixensweet
02:35:23seydarso why would saving a proc break shit?
02:35:24brixenheadius: now, if only they'd talk about running them :)
02:35:57headiusseydar: because it means propagating things that aren't normally global
02:36:12headiusyou might end up with stuff from all over the call stack in global state as a result
02:36:22headiusand if there's no way to call back, you can't update containing scopes
02:36:28seydaroh, because a proc carries with it a certain original binding!
02:36:31headiusright
02:36:37seydaryea, i missed that
02:36:46seydarwhats the difference between lambda, proc, and Proc.new?
02:36:48headiuspropagating a binding is going to be super problematic...so much so I don't think they'll be able to do it
02:37:06headiusseydar: arity checking
02:37:20headiusin 1.8 lambda and proc are both lambdas and enforce arity
02:37:32headiusin 1.9 only lambda and -> {} are lambdas
02:38:23seydaralrighty
02:38:34seydarmakes sense
02:38:50seydarbut now i gotta quitter la classe
02:39:02MenTaLguYyay stabby blocks
02:39:04seydarand as they say in esperantistan, gxis
02:39:18seydar leaves the room.
02:45:33VVSiz_ enters the room.
02:52:14brixenheadius: just started reading this, looks interesting: http://www.iam.unibe.ch/~scg/cgi-bin/scgbib.cgi/abstract=yes?Denk08b
02:53:51VVSiz leaves the room.
02:54:16headiusinteresting
02:54:26headiusthe meta-hook problem
02:55:28brixenyeah, very recent paper
03:07:33Fullmoon enters the room.
03:09:59cschneid_ leaves the room.
03:13:29Fullmoon leaves the room.
03:33:59obvio171 enters the room.
03:49:06Fullmoon enters the room.
03:54:38mitchellvriley enters the room.
04:16:05atduskgreg leaves the room.
04:23:11yugui enters the room.
04:25:42mitchellvriley leaves the room.
04:26:35obvio enters the room.
04:27:06obvio171 leaves the room.
04:33:33blakewatters enters the room.
04:41:15wycats leaves the room.
04:46:42benny leaves the room.
04:49:44be9 enters the room.
04:59:34blakewatters leaves the room.
05:02:56Fullmoon leaves the room.
05:11:36shame enters the room.
05:11:59wycats enters the room.
05:16:25dalee leaves the room.
05:21:51anteaya leaves the room.
05:23:02headius leaves the room.
05:24:03headius enters the room.
05:32:36rue enters the room.
05:34:11rueThere are no words for how much Hulk rocked
05:43:37Fullmoon enters the room.
05:57:13scooproh really?
06:06:48headius_ enters the room.
06:06:48headius leaves the room.
06:07:23rueYep, pure excellence
06:08:39rue leaves the room.
06:08:54rue enters the room.
06:10:13wyhaines leaves the room.
06:12:50Fullmoon leaves the room.
06:15:09dysinger leaves the room.
06:16:20ShayArnett leaves the room.
06:27:24wyhaines enters the room.
06:29:04michaellatta_ leaves the room.
06:29:23lstoll enters the room.
06:29:36michaellatta enters the room.
06:43:31lstoll leaves the room.
06:43:48headius leaves the room.
06:43:59lstoll enters the room.
06:43:59headius enters the room.
07:07:19wycatsdrbrain: does ParseTree install seamlessly on Windows?
07:07:42drbrainwycats: Luis built a package, so it should
07:09:34wycatsw00t
07:19:59blakewatters enters the room.
07:20:18lstoll leaves the room.
07:21:18headiuswhat does it use to build on windows?
07:21:49lstoll enters the room.
07:26:31wycatsheadius: http://pastie.org/214939
07:26:32wycatsheh
07:27:04headiusyeah
07:27:24headiuswhat about it?
07:27:35headiusoh wait
07:27:44headiusgah, that's a bug
07:29:26headiusrubinius does it wrong too
07:29:35headiusthough I'm not 100% up to date
07:29:48wycatsthat's MRI
07:29:51wycatsnot JRuby
07:29:57headiusyeah I know
07:30:00headiusit's a bug
07:30:02wycatsthe weird is the p local_variables
07:30:03wycatsaha
07:30:10headiuslocal_variables shouldn't show variables you can't reference
07:30:12wycatsif MRI does it and rbx does it I would say rbx does it "right"
07:30:23wycatsfor some definition of right
07:30:25headius1.9 and jruby do it the other way
07:30:33wycatsthat comes up a few times
07:30:35headiusso we're coming to you from the future...the future of being right
07:30:47wycatsJRuby does that ;)
07:30:54wycatsI have mixed feelings about that
07:31:50headiusheh
07:31:54headiusrubinius is wrong for others too
07:32:17evanew.
07:32:19evanthats dumb.
07:32:28wycatsevan: apparently it's dumb and we do it
07:32:29wycats;)
07:32:34headiusdef test; 1.times { x = 1 }; p local_variables; p x; end; test
07:32:53headiusrubinius shows x there too
07:32:56headiusand something called @lre
07:33:04wycats@lre ftw
07:33:04evanoops
07:33:08evanit shouldn't show @lre
07:33:14evanthats an internal local.
07:33:15headiusruby does not show anything there
07:33:21headiusbackref?
07:33:22wycatsevan: internal locals ... hehe
07:33:26evanno
07:33:39evanused to unwind return and break in a block to the right position
07:33:56headiusbtw, I asked about local_variables behavior at one point and matz said 1.9 is correct
07:34:03evannice.
07:34:10evandoes 1.9 show x?
07:34:14wycats"I asked Matz and he said JRuby was right... so there"
07:34:16evani find it funny a little that we do.
07:34:16headiusit does not, in either case
07:34:21evanthat rubinius does
07:34:24headiusyeah, you would have had to add it
07:34:32wycatsevan: there's possibly a spec
07:35:02evanthats quite strange.
07:35:34evansomeone must have made Kernel#local_variables look into the subscopes
07:35:35evanwhich is wrong.
07:35:42evanbecause x isn't in the local_names of the CM for test.
07:35:48headiusit doesn't go down another level btw
07:35:56headiusdef test; 1.times { x = 1; 1.times { y = 1 } }; p local_variables; p x; end; test
07:35:59evanyeah, let me check #local_variables
07:36:09headiusstill only shows @lre and x
07:36:18evanthats.. odd.
07:36:31blakewatters leaves the room.
07:36:48headiuswycats: just be happy you don't have to implement local_variables to only show variables that have been assigned once
07:37:00wycatshaha
07:37:07headiusthat's how it used to work, maybe still does in mri
07:37:23headiusyep, still does
07:37:29evanhuh. where is it getting x from in the first case...
07:37:39headiuswait. no
07:37:39evanthats definitely a compiler bug
07:37:45headiusnot on this version anyway
07:37:58headiusif false; x = 1; end still shows up x in normal local_variables
07:37:58evani think it must be pulling x out because it sees it referenced outside
07:38:10wycatsstuff like this is so gorgeous: ctx = MethodContext.current.sender
07:38:11evanwhich is an old behavior
07:38:13evanthat I removed.
07:38:15wycatsin def local_variables
07:38:47evanah, yep.
07:38:51evanyou know what
07:39:00evani'll bet that the code that calculates #local_names is wrong.
07:39:02evanlet me check.
07:39:50evanyep.
07:39:54evanit's putting them all in
07:39:58evanwithout checking the depth.
07:40:00evanthats the bug.
07:40:03headiusfyi, it does need to walk *up* though
07:40:09evanit's just in the reporting
07:40:10evanyeah
07:40:11evanit does that
07:40:13headiusok
07:40:18evanif you call #local_variables in a block.
07:40:19headiusthen over child scopes?
07:40:22evanyep
07:40:27evanthis just a simple compiler bug
07:40:32evanit's just recording too many locals
07:40:39evanin the #local_names slot of the CM
07:40:55evanthe LocalScope in the compiler can see all locals
07:40:59evanregardless of depth
07:41:13evanand this code should have only put things at depth = 0 in the Tuple
07:41:15headiuswhy not just store only the names from that context
07:41:16evanput it put everything.
07:41:23headiusthey're not used for anything else but local_variables
07:41:26evanthats what it's supposed to do
07:41:31evanit's just overzealous
07:41:32headiusahh ok
08:07:59Fullmoon enters the room.
08:23:17Fullmoon leaves the room.
08:24:00Fullmoon enters the room.
08:37:06lstoll leaves the room.
08:46:55MenTaLguY leaves the room.
08:47:48radarek enters the room.
08:50:08TheVoice leaves the room.
08:51:03headius_ enters the room.
08:51:31Judofyr enters the room.
08:53:05lstoll enters the room.
08:57:15Fullmoon leaves the room.
08:59:20headius leaves the room.
09:02:28qwert666 enters the room.
09:09:41thehcdreamer enters the room.
09:09:58headius enters the room.
09:11:31headius_ leaves the room.
09:11:32headius leaves the room.
09:11:51headius enters the room.
09:12:23headius leaves the room.
09:13:35headius_ enters the room.
09:13:42headius_ leaves the room.
09:15:26chenkai enters the room.
09:18:37Maledictus enters the room.
09:20:10qwert666 leaves the room.
09:38:18robertpostill enters the room.
09:40:05robin_dewd enters the room.
09:42:45Yurik leaves the room.
09:43:31Yurik enters the room.
09:52:43headius enters the room.
09:53:25msimbartl enters the room.
09:55:50zenspideryay! http://rafb.net/p/7OiQRa84.html
09:57:05scooprmass testing rbx?
09:57:28zenspiderthat's just mri right now... pre-filtering for rbx
09:57:35scooprah, right
09:57:43zenspiderso I've got 261 test/unit based gems I can use
09:57:51zenspiderand 15 spec based gems
09:58:09scooprdoes that include rails? :P
09:58:12Fullmoon enters the room.
09:58:29zenspiderhrm... I should actually go back and check that number for non-zero number of tests. :)
09:58:35zenspiderI'm positive rails failed
10:00:24zenspidercrap
10:00:31zenspideryeah... stupid developers
10:00:48zenspidermake that 218 test/unit and 13 rspec gems
10:01:25headius leaves the room.
10:03:11krisps leaves the room.
10:10:46Fobax leaves the room.
10:43:00sudoer leaves the room.
10:51:01msimbartl leaves the room.
11:06:13Ski1 enters the room.
11:06:38NoKarma enters the room.
11:12:44bitsweat leaves the room.
11:34:21michalw enters the room.
11:34:27krisps enters the room.
11:45:05yipstar leaves the room.
12:00:45qwert666 enters the room.
12:03:04EugZol enters the room.
12:19:39jero5 enters the room.
12:32:30EugZol leaves the room.
12:32:54chris2 enters the room.
12:37:28chenkai leaves the room.
12:42:55lopex enters the room.
12:48:06Judofyr leaves the room.
12:48:52thehcdreamer leaves the room.
12:49:16Judofyr enters the room.
12:51:32michalw leaves the room.
12:56:25thehcdreamer enters the room.
13:13:54lstoll leaves the room.
13:19:01robertpostill leaves the room.
13:19:17robertpostill enters the room.
13:38:58lstoll enters the room.
13:41:48qrush enters the room.
13:42:05qrushIf anyone's awake
13:42:19qrushi'm looking into rubinius, i'm trying to understand what exactly it does.
13:42:37qrushI guess i dont understand the whole VM thing.
13:56:20rueYou may need to be more (or less) specific
13:56:44qrushheh, it's ok. i'm looking around for an oss project to contribute to and rubinius was suggested
13:56:58qrushI'm dabbled with ruby and heard this project
13:57:08qrushbut i really dont have any experience using it or the technology behind it.
13:57:22rueThe short summary is that Rubinius just runs your Ruby programs
13:59:34rueThe fun bits are that we are implementing as much of the language as possible in Ruby rather than C and that rather than using the interpreter approach that Ruby 1.8 takes, we use a bytecode virtual machine
14:00:29qrushhttp://www.reddit.com/info/6nc1h/comments/
14:00:38qrushsome context ;)
14:00:40rueI.e., your programs are translated into a sequence of simple(r) instructions or operations that the virtual machine can perform
14:00:46qrushso like the JVM.
14:01:57rueYeah, same basic principle. In reality it will naturally be more like one of the Smalltalk or Self VMs than a Java VM but they all employ the same basic strategy
14:02:18Yurik leaves the room.
14:04:27qrushSounds neat. Is there a list somewhere of companies or even projects that use rubinius?
14:05:37gnufied enters the room.
14:10:20qrushsits back and watches the rubyconf keynote.
14:11:10Judofyr leaves the room.
14:14:05krisps leaves the room.
14:20:24dbussinkqrush: well, with rubinius you don't really need to fully understand the intricate details of the vm, there is a lot of stuff that can be done what is simpler or easier to understand
14:22:08qrushalright. i do like ruby, and i have pretty much zero experience with c/c++
14:22:57dbussinkqrush: you can do a lot of things without touching the c/c++ stuff
14:28:30qrushI guess my only experience with ruby though is with rails. i need to play a bit with it first
14:28:57Fullmoon leaves the room.
14:29:29dbussinkqrush: did you clone the repository already? and ran some specs?
14:29:51lopex leaves the room.
14:29:54dctanner enters the room.
14:29:56qrushNot yet. i've got this though http://adam.blog.heroku.com/past/2008/6/12/quickstart_to_hacking_rubinius/
14:30:48qrushafter the keynote is over i will. i've got a little rails based app i can port over to just straight ruby with relative ease, and i'll look into the bugs from there.
14:31:54dbussinkqrush: cool!
14:32:15dbussinkqrush: that page is not completely up to date though
14:32:30dbussinkinstead of running ./shotgun/rubinius it's ./bin/rbx these days
14:32:39qrushWhat. it's barely a week old.
14:32:54dbussinkthat change is even younger ;)
14:33:25dbussinkwe're still a moving target, so stuff gets outdated pretty quick
14:34:14thehcdreamer leaves the room.
14:35:01dbussinkqrush: it's also in the first comment btw
14:36:17qrushI also need to pick up git
14:37:01qrushI've got it installed but not really sure about how to use it. i've got experience with svn/cvs mostly, and i've been reading about it, but no real experience using it yet.
14:44:43dbussinkah, well, a good first step is to forget everything you know about svn / cvs ;)
14:45:52dbussinkqrush: http://rubinius.lighthouseapp.com/projects/5089/using-git
14:46:39qrushThanks.
15:05:38michalw enters the room.
15:16:30Yurik enters the room.
15:18:58wyhaines leaves the room.
15:20:04rueWhat is this bin/rbx? When I was young, we had to type 18 characters with upslope /'s both ways!
15:20:51qrushi'm curious as to why it's not /rbs
15:21:10qrushnot sure where the 'x' comes from :P
15:31:07robertpostill leaves the room.
15:31:20michalw leaves the room.
15:32:35fbuilesv enters the room.
15:35:07dbussinkthe x is for the coolness factor ;)
15:37:42fbuilesv enters the room.
15:37:51fbuilesv enters the room.
15:38:18lstoll leaves the room.
15:43:45Fullmoon enters the room.
15:43:46qrushheh
15:46:45dctanner leaves the room.
15:54:41moofbong enters the room.
16:06:01dysinger enters the room.
16:11:42Yurik leaves the room.
16:19:31wvdschel leaves the room.
16:29:18yugui leaves the room.
16:34:26thehcdreamer enters the room.
16:55:55Rich_Morin__ enters the room.
16:56:41Rich_MorinIs there a pretty-printer for sexp's?
17:17:07brainopia enters the room.
17:29:44rueRich_Morin__: Yeah, look at the files in lib/compiler and lib/bin
17:31:14chris2 leaves the room.
17:42:49blakewatters enters the room.
17:54:08be9 leaves the room.
18:14:31brainopia leaves the room.
18:15:10brainopia enters the room.
18:15:19brainopia leaves the room.
18:15:57brainopia enters the room.
18:19:56thehcdreamer leaves the room.
18:20:43brainopia leaves the room.
18:21:15brainopia enters the room.
18:21:20brainopia leaves the room.
18:21:43enebo enters the room.
18:22:46atduskgreg enters the room.
18:23:07thehcdreamer enters the room.
18:24:34blakewatters leaves the room.
18:26:20Jzalae leaves the room.
18:37:46Fullmoon_ enters the room.
18:45:54thehcdreamer leaves the room.
18:45:57qrushi must say, git is a lot better than svn when it comes to file transfer. at least it lets you know the progress
18:48:49brainopia enters the room.
18:55:45Fullmoon leaves the room.
18:57:36headius enters the room.
19:03:30chris2 enters the room.
19:05:39chris2 leaves the room.
19:07:15qrushi suck at unix.
19:07:21qrushso i've got rubinius installed
19:07:31qrushi want to create a symlink for rbx
19:07:45qrushi tried sudo ln -s bin/rbx /usr/bin/rb
19:08:15qrusham i missing something here? :/
19:09:13qrushalright, got it. ln wants the full path.
19:16:52thehcdreamer enters the room.
19:23:07enebo leaves the room.
19:23:42enebo enters the room.
19:25:17michalw enters the room.
19:55:36thehcdreamer leaves the room.
19:56:14enebo__ enters the room.
19:57:40enebo leaves the room.
20:00:09zachad enters the room.
20:02:36yipstar enters the room.
20:05:35zachad enters the room.
20:07:33zachad leaves the room.
20:10:48thehcdreamer enters the room.
20:11:21enebo_ enters the room.
20:14:06Yurik enters the room.
20:14:36enebo__ leaves the room.
20:25:14headius leaves the room.
20:26:38atduskgreg leaves the room.
20:29:19ezmobius enters the room.
20:30:43obvio171 leaves the room.
20:34:27shame leaves the room.
20:34:52enebo_ leaves the room.
20:35:38shame enters the room.
20:36:05shame leaves the room.
20:42:23shame enters the room.
20:47:51evanHA! NestedVM is so cute.
20:48:12enebo enters the room.
20:50:51dbussinkevan: nestedvm?
20:51:49evanlook it up
20:52:06evanit's a JVM application that translates MIPS assembly to .java and .class files
20:52:13dbussinkah, cool!
20:52:18evanprobably the coolest part is that it's really straightforward
20:52:25dbussinkelegance of mips to the win :)
20:52:27evanif you look at the presentation .pdf
20:52:29evanyou'll laugh.
20:52:38evanwhen they show you the MIPS, then the .java code
20:53:38evanyeah, doing it on MIPS is the key
20:53:40headius_ enters the room.
20:53:42evansince MIPS is so nice and clean.
20:53:49</