Index

Show enters and exits. Hide enters and exits.

03:13:26seydargood evening, home and french fries
03:14:51seydari have a question on the general construction of rubinius in its entirety (i'm trying to see where exactly it differs from a traditional compiler)
03:15:44seydarif a compiler has the phases: grammar, lexer, parser, symbol table, generation, emitting, assembly, and runtime
03:16:02seydarwhat does rubinius/an interpreter have?
03:31:10brixenseydar: an interpreter typically has a lexer, parser that generates a parse tree or AST, then the interpreter proper walks the tree and executes the nodes
03:32:40brixenrbx has a lexer, parser that generates a parse tree, the PT is converted to sexps, which are converted to an AST
03:33:20brixenbytecode is generated from that and executed (in the absence of the jit) by the bytecode interpreter
03:47:03seydarbrixen: thank you :-)
03:48:08seydarbrixen: what is added to the AST that the sexps don't have?
03:48:17seydaror is it just more easily traversable?
03:50:12brixenright, the latter
03:50:19brixenthe sexp step is going away very soon
03:50:25slavahttp://twitter.com/FactorBuilds
03:50:34seydargood, because it seems to make sense to drop it
03:50:42seydardudezor!
03:50:51seydarwill there be a to_ast method on things then?
03:50:55seydarpermission to add that method?
03:50:59brixenslava: cool
03:53:11seydarslava: dudezor! i just realized this: do you not need left recursion in your grammar since things flow oppositely?
03:53:32slavaI'm not sure what you mean
03:54:06seydarwell like normally when parsing math, for instance, you have to do: digits digit
03:54:17seydarso that things bind more tightly to the left of the equation
03:54:26seydarbut since it's opposite in factor
03:54:36seydaryou can use right recursion, right? digit digits
03:54:49seydaralthough i don't think anyone rights a grammar like that anymore
03:54:58seydarbut if you WERE
03:56:23slavaI don't have a hardcoded grammar
03:56:50seydarhow do you do that parsing?
03:57:57slavathe parser reads whitespace separated tokens and looks them up in the dictionary, if they have parsing behavior then they take over the parser until some end delimiter
04:26:19manveru:)
04:26:33manveruyay for simplicity
04:35:02tonylaa question for anyone
04:35:24tonylaI'm just starting to look at the rubinius code base and was wondering how you debug kernel methods
05:30:53brixentonyla_: mostly by code inspection
05:31:03brixenbut we have a debugger
05:31:05brixenhttp://gist.github.com/109866
05:31:32tonylaah!
05:31:32brixenit still needs some work since the change away from stackless execution model
05:31:41brixenyou can also do obj.__show__
05:31:51brixenwhich will bypass kernel methods
05:31:59brixenif you just need to confirm an object
05:32:27tonylathanks!
05:32:31brixensure
05:32:36tonylathat's exactly what i needed to poke around
05:32:46brixenexcellent
05:33:56brixenbtw, I don't believe stepping works right atm
05:39:11tonyla:) that's cool
05:40:10tonylabrixen: one more question:) is there a logger or anything that i can use to debug
05:41:29brixenhow do you mean?
05:52:46tonylai mean
05:52:54tonylaother then debugging is there a way
05:53:05tonylato output values of variables at runtime
05:53:49brixennot really, but see bin/rbx -h
05:53:59tonylaalright will do thanks for the help again :)
05:54:00brixenyou can do -d to show exceptions raised
05:54:11brixenand -dl to show files loaded/compiled
05:54:30brixenmostly you should be familiar with the code
05:54:38brixenthe debugger is for checking values
05:54:46brixenor add obj.__show__
05:55:05tonylawhat will that do?
05:55:10tonylaexactly
05:55:34brixenit uses the VM to display an #inspect-ish repr of the obj
05:55:43brixenif you want to avoid kernel methods
05:55:55brixenie, it works while the kernel is loading even
05:56:06brixenor you can do STDERR.write obj
05:56:13brixenor even p obj in some places
05:56:32brixenobviously, you have to be careful where you print stuff
05:56:52brixensince you could call methods that don't exist yet while the kernel is loading
05:59:59tonylanothing prints to console when i try any of those methods including __show__
06:00:32brixendid you type rake build after modifying the files in kernel/** ?
06:01:33tonylayup
06:01:42tonylathen i do a bin/rbx script.rb
06:02:13brixendoes the method you modified get called?
06:02:39tonylayup
06:02:42tonylaok
06:02:49tonylait must have been something
06:02:59tonylai did wrong on my end
06:03:03tonylabecause now it's showing up
06:03:03tonyla:)
06:03:05tonylasorry
06:03:13brixenn/p
06:05:46brixenbbiab..
06:20:33mkoukoullishey all. i cloned the repo and compiled rubinius for the first time yesterday. Avi Bryant inspired me at the JAOO conference. Looking into how I can contribute.
06:54:33brixenmkoukoullis: cool, tell Avi thanks :)
06:54:48brixenmkoukoullis: what are you interested in?
06:56:31evanmkoukoullis: did Avi mention Rubinius?
06:56:41evanif so, i might have to pay him a royalty :D
06:56:59brixenheh
06:57:31evanbrixen: how ya doin'?
06:57:51brixengood, about to push the profiler stuff
06:57:54brixenwriting docs
06:58:02evancoool
06:58:07brixenand then I'm going to finish the draft of the roadmap
06:58:15evannice
07:00:55evani'm watching that PHP compiler talk
07:01:06brixenis that a recent talk?
07:01:26brixenI thought I watched something about using llvm in php
07:01:39evani guess there is one, roadsend or something
07:01:44evanthis doesn't appear to use LLVM
07:01:48evanjust curious what they ran into
07:02:20brixenhm, what's the link again?
07:02:33evanhttp://www.youtube.com/watch?v=kKySEUrP7LA
07:02:38brixenthanks
07:02:41evanthey have the same issue as us
07:02:42evanie, no spec.
07:02:48evani'm curious if they wrote a spec
07:02:53evanala us
07:03:35brixenah, I had this in a tab
07:03:42brixenhadn't watched it
07:04:26evanhah
07:04:34evanhe just said our approach is impractical
07:04:35evansweet.
07:05:06evanwow thats fucked.
07:05:21evanin 5.2.1: 0x9fa0ff0b is an int
07:05:23brixenwhat exactly is our approach?
07:05:31evanin 5.2.3: 0x9fa0ff0b is a float
07:05:38brixenwow
07:06:26evanour approach == rewrite all the C functions
07:06:46evanPHP is worse, because so many are bindings to external libraries
07:06:48evanand they're builtin
07:07:14brixenahh
07:07:30brixenI don't think he knows what he's talking about
07:07:44evanhe's writing a PHP compiler as his PHd thesis
07:07:45brixenphp in php is almost a horrifying thought :P
07:07:51evanyeah
07:07:57evanhis system is almost all written in C++
07:08:01evanso that says a lot about PHP.
07:08:05brixenyeah
07:10:26evanoh fun
07:10:32evanthey're compiling PHP into C
07:10:39evanthen linking that with the existing PHP functions
07:10:49evan3) add crushed ice
07:10:51evan4) blend
07:10:52evan5) drink!
07:10:55brixenheh
07:11:01brixen6) code s'more
07:11:50evanyeah, but that drink better be an absinthe margarita!
07:13:02brixenhmm, I think I should limit the # of callers and callees in the graph output
07:13:09brixenit produces gobs of info
07:13:10evanprobably
07:13:19brixenmaybe the top 10?
07:13:27brixenI've already got it sorting
07:13:39evanpick a sensible default
07:13:43evanand add a config variable for it
07:14:01brixenI'll just reuse the rbx.profiler.full_report
07:14:22evank
07:15:00brixen10 looks pretty reasonable based on running rails -h
07:15:07evank
07:15:14brixenwith its 152 million method calls
07:15:44evanhehe
07:15:46evannoice
07:23:24brixenhttp://gist.github.com/109884
07:23:29evanhahahahah
07:23:34evanguess what
07:23:38brixenwhat?
07:23:38evan"5" + true
07:23:40evanis in PHP?
07:23:41evanguess
07:23:46brixen6
07:23:49evanyep!
07:23:53brixenoh god
07:24:05brixenI'm guessing php correctly
07:24:07brixenshoot me now
07:24:14evangotta love loose typing
07:24:20brixenor not
07:24:22brixen:)
07:24:22evanshoots brixen
07:24:30brixenfalls in his tea
07:24:35evanhehe
07:24:35brixendeath by green tea
07:24:38brixennot so bad
07:24:46evancould be a lot worse.
07:24:54brixencould be death by php!
07:25:10evanhuh
07:25:15evanyou can't redefine a function in PHP
07:25:22evanfor all the crazy dynamic shit
07:25:26evanthats pretty weird.
07:25:57brixengotta have a fixed point somewhere
07:26:36evanthats like wearing assless pants around the mall and saying "no way am I going to eat an icecream cone at the same time!"
07:26:49brixenhaha
07:27:13brixenso, the cool thing about this graph output, the lines about the "primary" line are callers
07:27:25evanafter you commit that
07:27:34evanlets have a quick video call to have you explain it to me
07:27:36brixenthe called field on the left adds up to the calls to the primary method in the entry
07:27:41brixenah ok
07:27:48evani think i get it
07:27:50evanbut I want to be sure
07:27:52brixenmaybe in the morning :)
07:27:54brixensure
07:27:58evansounds good.
07:28:29brixenI'm going to push it, you can read the docs, then we can clarify them after the call
07:28:37evansounds good.
07:28:40brixenk
07:28:56evani'm cleaning up our CallFrame a little
07:29:01evangot is_block removed
07:29:01evanyay
07:29:32brixencool
07:32:32brixeninteresting, take a look at that gist, 3rd entry from the top String#[]
07:32:41evanwhich gist?
07:32:46brixensec..
07:32:50brixenhttp://gist.github.com/109884
07:33:05brixenonly 7604 are calls to Rubinius::ByteArray#[]
07:33:58brixenmost of the calls to String#[] are from MatchData#pre_match_from
07:35:11boyscoutMake new_hash helper smarter. - bb46a59 - Brian Ford
07:35:11boyscoutAdded gprof-style graph output to profiler. - b28627e - Brian Ford
07:35:11boyscoutMore docs for the profiler. - 1143fb2 - Brian Ford
07:35:11boyscoutLimit the # of callers/callees in graph output. - d32a63e - Brian Ford
07:36:39brixenhm Array#compact
07:37:06brixenwell, it is obvious we need some serious algorithm audits in kernel
07:38:32brixenahh [18] Array#compact called from String#split
07:42:21boyscoutCI: d32a63e success. 2647 files, 10179 examples, 32469 expectations, 0 failures, 0 errors
07:45:00evanreally?
07:45:02evanyikes.
07:45:06brixenadded the flat output at the bottom for comparison http://gist.github.com/109884
07:45:08evani guess i shouldn't be too surprised.
07:45:32evanwhy is #push calling #each in Array...
07:45:44brixento avoid all the items on the stack
07:46:06brixenI had the same question
07:46:09evanah
07:46:11brixenbut I remember it
07:46:15evanbecause push takes any number of args.
07:46:18brixenright
07:46:26evanprobably a good idea to just do
07:46:29evanif args.size == 1
07:46:30brixenwe changed it during rails 1.0
07:46:33evan self << args[0]
07:46:34brixenyeah
07:46:34evanelse
07:46:39evan <use each >
07:46:39evanend
07:48:00brixenor use #concat
07:48:16evanyeah, that would be better.
07:48:43brixenwell, we've got the tools now to fix this stuff up
07:48:51evanyep
07:48:55brixenand the infrastructure it focus on it
07:48:57evanlike we were talking about with String
07:49:07brixens/it/to/
07:49:12evanmakes me wonder if doing Array via auto-flattening chunks would help
07:49:24brixenprobably
07:50:36evanwhat are the [] after the entries?
07:50:45brixenindex of the method
07:50:53evanindex?
07:50:54brixenso you can cross-reference
07:50:54evaninto what?
07:50:57evanoh oh
07:51:00evanin THIS output
07:51:02brixenyeah
07:51:08evanso [0] is "not listed"
07:51:12brixenif [0], the method is not listed
07:51:15brixenas a primary entry
07:51:27evanif it's [0], can we just not output it?
07:51:36brixencould
07:52:06brixenit would make the format more complicated
07:52:19evanok, nm.
07:52:20evanjust curious
07:52:50brixenthis highlights why we need realistic benchmarks too
07:53:07brixenall that Array optimizing dgtized did didn't hit any of this
07:53:40brixenwell, maybe not any, but definitely left a gap
07:54:57evanwhat did he optimize?
07:57:12brixenmm, dun recall specifics
07:57:15brixenstuff :)
07:57:20evan:D
07:57:23evangood enough!
07:57:27brixenheh
07:58:42brixenrunning the rdoc 2.4.3 tests, see how far they get
07:58:56evanneat
08:00:19brixenhm, not very far
08:00:26brixenwants miniunit/autorun
08:00:40evanit does?
08:00:40brixenminitest that is
08:00:41evanug.
08:00:44brixenyeah
08:00:46brixenlovely
08:00:48evanok
08:01:44brixenI thought we had minitest bundled?
08:02:47evani might have accidentally fully removed it
08:02:51evanrather than just removing it's test/unit shim
08:03:53brixen275 tests, 726 assertions, 0 failures, 0 errors, 0 skips
08:03:55brixen:D
08:04:33brixentook 4.778900 seconds to run and a minute to load everything
08:05:19brixenI installed the minitest gem
08:05:24evanyay
08:05:27evanthats even better.
08:06:16brixenyeah
08:11:19evanhey!
08:11:20evanwoo!
08:11:23evanhe mentioned Rubinius
08:11:37evanat about 53 minutes
08:18:07brixensweet
10:42:04mkoukoullisevan: brixen: sorry i've been pairing all day in the office on a client project. yeah Avi mentioned rubinius at JAOO in sydney. currently looking into the repo, reading about how you got about specing things. its a pleasant suprise to be reading ruby libraries written in ruby.
18:08:56evanslava: so, I watched that PHP compiler video
18:09:05evanslava: made me down right happy about ruby's semantics :D
19:17:16brixenall righty then
19:17:23brixenevan: roadmap draft sent!
19:17:24slavaWAKE UP SHEEPLE
19:17:32brixenlooking pretty sexy if I do say so myself
19:17:42brixenslava: yo yo
19:17:44slavame? sexy? thanks
19:17:52brixenthat too :)
19:19:53headiusyay roadmaps
19:21:45evanbrixen: it's awesome.
19:21:52brixencoool
19:21:58evanso where should we put it?
19:22:19brixenwebsite, I think I should work on that a bit
19:22:33evanwell, should we migrate it to github finally?
19:22:38brixenyeah
19:22:41brixendefinitely
19:22:49evanlets work on that after lunch today
19:22:52brixenok
19:24:42brixenI think we should wire up 3 benchmarks, too: matrix, rdoc, and core specs
19:24:48brixenand run these at least daily
19:25:08brixenwe're about the same distance behind mri in them
19:25:17brixenbut they do different stuff
19:25:39evansounds great
19:26:22brixenok, 4, rails -h too :)
19:26:41evanheh
19:32:16ezmobwhere's this roadmap?
19:32:38brixenezmob: we're going to put it on the website
19:32:45ezmobahh cool
19:32:49ezmobbnice getting to hang with you guys
19:32:52brixenit's a draft evan and I have been working on
19:32:55ezmobs/b/was/
19:32:56brixentotally
19:33:10evanezmob: yep! hope you're enjoying your winnings :D
19:33:18ezmob;)
20:01:37seydarOT: for those interested in RSA fun and factoring: http://preview.tinyurl.com/pt3ge9
20:05:46dgtizedbrixen: I'm pretty certain there are a lot more of benchmark cases for array and string that I did not test, most of the optimizations I applied were simple changes that either moved something into a primitive, or got rid of using a block when a faster loop construct would suffice
20:10:48dgtizedso they were basic optimizations that were not targeting edge cases
20:16:01evannew LLVM JIT code is in the llvm-jit branch
20:16:18evanthe build process is a little busted on it
20:16:25evanand it needs a custom LLVM patch applied
20:21:13macournoyeryeaaaaaaah!
20:23:30ezmobsweet
20:23:37marcandreexciting
20:23:52evan:D
20:23:59macournoyerbreathtaking
20:24:01evanit doesn't compile much yet
20:24:18evanbut it's well structured so I can add support for things easily
20:24:24evanwhich is my goal this week
20:30:29brixenholy crap, 726,000 line diff! :P
20:30:40evanreally?
20:30:45evanoh damnit.
20:30:48evanbecause I deleted llvm
20:30:52evanbecause I was using an svn version.
20:30:53evanack.
20:30:55brixenah
20:31:18brixenahh yeah, that's it
20:31:28evani'm not THAT productive
20:31:29evan:D
20:31:36brixenwhat version of llvm are you using?
20:31:44evani'm using svn
20:31:53brixenah head then
20:31:53evanwith http://github.com/evanphx/llvm-patches/blob/2c685dbc54ba109dc80af8e8337ce53eac6e558c/jit-info.diff applied
20:31:58evanyeah
20:32:24evanif we "vendor" llvm again, I think what I'll do is have it in a seperate project
20:32:33evanwith our patches applied or whatever
20:32:37brixenthat's a good idea
20:32:47evanand just wire our Rakefile to clone and build it seperately
20:32:51brixenyeah
20:32:52evanso it can be done once
20:33:16headiusdoes the order of the passes make a difference?
20:33:24headiusseems like it could
20:33:33evana LOT
20:33:37evanit makes a major difference
20:33:50evanthey're run in literally the order you see
20:33:52headiusyeah
20:33:53evanwhich is good
20:33:57evanbecause you can rerun them
20:34:03evanlike the simplifier pass is run multiple times
20:34:07headiusso potentially you may need to re-cycle through
20:34:33evanre-cycle?
20:34:52headiusrun through the full set of passes or subsets of them
20:35:00evansure
20:35:08evanthere will be a bit of tuning on them
20:35:17evanand the ability to introduce different sets
20:35:21evanbased on what semantics we need
20:35:25evanspeed/quality wise
20:35:56evanthe current set is just something I threw together based on looking at other people's sets
20:36:00evanand I added a few to the end
20:36:40headiussure
20:36:58headiushotspot does some number of passes as well
20:38:24headiushmm it occurs to me now I don't remember seeing macruby's compiler set up frame data anywhere
20:38:33headiusseeing it in your jit reminded me of that
20:38:35evanit doesn't
20:38:46evanat least, I didn't see it either
20:38:49headiusI'm not sure how that's going to continue working for them
20:39:05headiuswhat I've seen so far in roxor is very optimistic
20:39:41evanyeah
20:39:44evani dunno
20:39:54evani'm basically taking the interpreter and refactoring parts
20:40:00evanand then making the JIT emit them directly
20:40:05evanlike CallFrame
20:40:16evanand the argument handlers
20:40:19evanetc
20:40:31headiusyeah
20:40:54headiussome of that happens for us already, but we don't do any optimization pass on top of those VM operations ourselves
20:41:03headiusso it leaves too much up to hotspot to figure out
20:41:31evanright
20:41:31headiusi.e. it will happily inline a dozen calls to frame stuff in a row but the amount of code around them obscures whether they might be redundant
20:41:37evanthus your compiler stuff
20:41:40headiusyeah
20:42:43evanok! lunch time for me.
20:42:51evanI finally put together the dinning table last night
20:42:55evanso I actually have a place to eat now!
20:50:49slavahi evan, good to hear the jit is coming along well
21:29:21evanshoe: thanks!
21:29:23evaner.
21:29:25evanslava: thanks!
21:29:27evansilly keys.
21:47:29marcandreevan: if you have a second, can you change the obsolete topic in #ruby-core?
21:48:02evancan I change ruby-core topics?
21:48:19evanlooks like it!
21:54:18marcandreyeah, well, the old one was yours...
21:54:38brixenwhat is http://github.com/rubinius ?
21:54:58slavaevan: are you on a mac?
21:55:09marcandrehe he, no, it was something about a meeting last june...
21:55:36evanslava: yep
21:56:14brixenevan: do you know who own the github rubinius account?
21:56:18brixenowns*
21:56:24slavaevan: http://factorcode.org/terrain-demo/terrain.dmg
21:56:37evanumm
21:56:42slavatake a few hits of tarcieri's bong and give it a shot :)
21:57:58brixenslava: how do I move forward?
22:00:12slavaw
22:01:23brixenheh as in forWard, eh?
22:02:02slavathe wasd controls are standard for shooters
22:02:12brixenah
22:02:14slavaits from http://duriansoftware.com/joe/The-Factor-game-framework.html
22:02:20brixenwell, it doesn't do anything for me
22:02:44headiusI think I drove into the sky
22:02:47headiusnow I can't do anything
22:02:51slavahehe
22:03:16brixenahh, it's not respecting my keymap
22:03:22brixenI have to use the Qwerty w
22:04:44slavathat's how games work; otherwise anyone with drovak would get uselessly unergonomic defaults
22:04:55slavadvorak I guess
22:05:01brixenshows ya what I know about gaming :)
22:05:17brixenI'm traversing the edge of this 2-d terrain
22:05:20slavaits just a simple demo of opengl pixel shaders and game input
22:05:40slavathe terrain and sky are generated procedurally on the gpu
22:07:13brixenwhere are the people? I'm all alone in this alien world
22:09:31rueBack home.
22:09:57rueUnintentionally apropos
22:10:08slavalol
22:17:37drbrainI ran off the edge of the world :(
22:33:15boyscout1.9: Enumerable#each_with_object (new) - 672d5eb - Marc-Andre Lafortune
22:33:15boyscout1.8.7: Enumerable#find_index (rewrite) - 1a6f3d7 - Marc-Andre Lafortune
22:33:15boyscout1.8.7: Enumerable#first, #take (new) - 255efdc - Marc-Andre Lafortune
22:33:15boyscout1.8.7: Enumerable#group_by (fix) - b1677a5 - Marc-Andre Lafortune
22:33:15boyscout1.8.7: Enumerable#inject (accepts symbol) - 52076cb - Marc-Andre Lafortune
22:35:40boyscoutCI: 52076cb success. 2647 files, 10179 examples, 32469 expectations, 0 failures, 0 errors
22:54:48brixenevan: hah, I didn't realize you had gh.rubini.us working already
22:54:49brixenrock
22:55:14evan:)
22:55:44brixenso, I want to keep /doc in the regular repo, but I'll put a copy of it in gh-pages with the rest of the site
22:56:10brixenso it can serve under the rubini.us/doc url
22:56:58evanok
23:07:00evanbrixen: ok, lets work on the website
23:07:15evanjust finished submitting my first LLVM patch
23:08:27brixencool
23:08:48brixenso, I'm just creating the site in the gh-pages branch
23:09:34brixenI'll get the basics from the existing site in and we can update it
23:09:40brixenunless you want a radical departure
23:10:21evannope
23:10:23evango for it
23:10:27brixenk
23:10:29evanget it up there and commited
23:10:34evanthen we can bounce on editting it
23:11:24brixenyep
23:12:23brixenevan: btw, know who created http://github.com/rubinius ?
23:15:55evanbrixen: nope, but we should find out
23:17:36brixenyeah
23:17:48brixencus if it wasn't you, then it was a troll
23:17:54brixenprobably
23:18:11evanit's not me
23:18:52brixenoh look, I'll message them
23:41:30boyscoutFix calling via rbx_simple_send - 3409537 - Evan Phoenix (llvm-jit)
23:41:49slavaevan: does your jit compile everything or is there an interpeter fallback?
23:42:11evanit will compile everything
23:42:13evanit doesn't yet
23:52:22boyscoutImport of existing rubini.us site. - ee45dd2 - Brian Ford (gh-pages)
23:52:43brixenI like how that reports the branch
23:52:44brixenvery nice
23:53:28brixenevan: http://gh.rubini.us/
23:53:46brixenalthough, while importing that, I pretty much think it all should go ;)
23:54:10evansure
23:54:41brixenbut, we could now serve rubini.us from that content
23:54:48brixenonce you update the cname
23:55:02evanI can change it now
23:55:09brixensweet
23:58:20evanhm
23:58:23evanmaybe I can change it now....
23:59:44evanhrm.