Index

Show enters and exits. Hide enters and exits.

00:00:13nerdsharkhaha
00:00:15bakkdoornerdshark: it's still far from "done" (whatever that means :P)
00:00:23nerdsharkbakkdoor: if you really wanted it to be fancy, support spaces in symbol names :p
00:00:26nerdsharkj/k
00:00:33bakkdoorbut it has quite some stuff working already..
00:00:45nerdsharkactually it looks really cool
00:00:49bakkdoornerdshark: actually i've thought about that but hmmpf... naah :P kinda hard to parse i think
00:01:09nerdsharkhaha
00:01:13nerdsharkyeah, i wouldn't bother with it
00:01:21bakkdoorthanks :) although syntax is still very open for discussion.there are some things i haven't fully decided on yet
00:01:46nerdsharkare the .'s method call operators?
00:02:27nerdsharkas in "arr map: :doubled . inspect println;"
00:02:55bakkdoorno theyre grouping operators.. "." is the opposite to "$", the latter was copied from haskell. there's a short explanation on the github wiki here: http://wiki.github.com/bakkdoor/fancy/basic-syntax
00:03:02nerdsharkoic
00:03:05nerdsharkalso ew haskell :x
00:03:17bakkdoornerdshark: thats basically equivalent to: (arr map: :doubled) inspect println
00:03:39nerdsharkoic
00:03:42bakkdoornerdshark: "." interprets everything left of it as one expression and everything right of it as a message send to that expression
00:03:54nerdsharkahhhh okay now it it makes sense
00:04:05bakkdoornerdshark: $ does the opposite. reduces the overall amount of parenthesis you need in your code
00:04:06evanbakkdoor: have you started putting it on rubinius?
00:04:19nerdsharki see that the results of all expressiosn are objects, so "inspect println" is being sent to the result of the first expression
00:04:37nerdsharkexpressions*
00:04:47bakkdoorevan: not yet. whats missing is the codegeneration stuff.. which i'm going to port from ruby to fancy soon. i've got s-expression output for fancy code working
00:04:58evanbakkdoor: rad!
00:05:09evanis your plan to have it sort of working by next week?
00:05:27bakkdoorevan: i wish but i don't think i'll have the time to get it that far..
00:05:29bakkdoormaybe in parts
00:05:33evanok, just curious.
00:05:35evanat any rate
00:05:36bakkdoor:)
00:05:40evani'm thinking about making some more rubinius t-shirts
00:05:46evanif you port your language to rubinius
00:05:48evanyou get one for free.
00:05:49bakkdoorit kinda was my plan but i had lots of other stuff to do as well recently
00:05:54evanopen offer to anyone!
00:05:56bakkdoorcool :D
00:06:05bakkdoori'll gratefully take one :)
00:06:08evanbakkdoor: yeah, np, life is crazy that way.
00:06:15nerdsharkbakkdoor: okay, now i understand what's going on
00:06:16bakkdooryeah :)
00:06:18evani'm excited about it no matter what!
00:06:19nerdshark$ is awesome
00:06:20bakkdoornerdshark: great :)
00:06:53evanbakkdoor: i'm started adding some tools for building languages on rubinius
00:06:57evanthat we can talk about
00:06:58bakkdoornerdshark: yeah it helps :) haskell has it for the same reasons (function application uses space instead of parens.. which makes explicit grouping necessary)
00:07:03evanlanguages other than ruby
00:07:44bakkdoorevan: cool. btw, you live in l.a. right? i'll be in orange county visiting my family after oscon. if you'd like we could meet or whatever.
00:07:45nerdsharkso i guess rubinius is aiming to be a dynamic language VM on top of llvm, right?
00:08:03evanbakkdoor: what days?
00:08:13evannerdshark: we're not "on top of LLVM"
00:08:23slavanerdshark: "aiming" is a bit odd, it already is that
00:08:24bakkdoorevan: i'll be there from jul 24 - august 17th
00:08:24evanLLVM is just used for the JIT
00:08:30nerdsharkah okay
00:08:37nerdsharkis a noob to the project
00:08:39evanLLVM doesn't actually provide almost any VM features you'd expect
00:09:00evanbakkdoor: ah ok! so a little while. will you have a car?
00:09:15bakkdoorevan: probably not. but there are buses ;)
00:09:24evanLA to OC on the bus would be... not fun.
00:09:34evanwe'll work something out though.
00:09:43evanwe could work on getting fancy on rubinius
00:09:46bakkdoorevan: hm yeah but probably easier for me since i've never driven there by car before :P
00:09:54bakkdoorevan: great! would love to :)
00:10:30evanbakkdoor: maybe thursday in 2 weeks?
00:10:44evani could drive down to OC for the day, we'll need to figure out a nice place to work is all.
00:10:55evanabby works late thursday, so I can stay later.
00:12:15evanbakkdoor: let me know. i'm out of town the 4th to the 11th of august.
00:14:06bakkdoorevan: sure. we can make up a date once i'm there but thursday in two weeks seems fine for now
00:14:23evanok
00:14:25evancool.
00:14:28bakkdooryup :)
00:14:54evanare you doing fancy dev under OS X?
00:15:23bakkdoorno, linux (ubuntu). but fancy builds fine under os x, i have an older iMac here and tested it :)
00:15:36bakkdoorwhy? :)
00:16:20evanjust curious
00:16:42bakkdoorah ok
00:17:52evanyou live in germany, yes?
00:17:58bakkdooryeah, correct
00:18:10evani'm building a picture of you
00:18:15evana germany on a linux laptop
00:18:16evanthats it so far.
00:18:18evan:D
00:18:19evaner.
00:18:20evangerman.
00:18:23evanha.
00:18:37bakkdoorhaha lol :D
00:18:59bakkdoori think there's a picture of me up at the oscon site ;)
00:19:14evanruns to look
00:19:47bakkdoorhides
00:20:21evana mustached german!
00:20:25evanwe'll get along famously.
00:20:25bakkdoor:D
00:20:48bakkdooractually, i'm half german, half mexican (which is why i have family in oc) ;)
00:21:01evanand why you have a mustache!
00:21:05bakkdoorcorrect. :D
00:21:07evanI can say that since I live in LA.
00:21:15bakkdoorhehe yeah :)
00:22:42boyscoutAdd spec for IO.popen + stat - de23d68 - Evan Phoenix
00:22:42boyscoutCleanup IO.popen and IO::BidirectionalPipe - a14afd1 - Evan Phoenix
00:22:58bakkdoorbtw, if anyone dares to try out fancy himself, i'm happy for any feedback and criticism. sometimes it's hard to see the obvious problems when you're working on it all the time and don't have a newcomer's perspective on things..
00:23:05evanbakkdoor: I'm guessing you need to get your fill of real mexican food, and thus the trip to OC.
00:23:07evan:D
00:23:21bakkdoorevan: haha, right :P
00:23:28evanwhenever I travel outside southern california, i'm always craving real tacos after a couple weeks.
00:23:33bakkdoormy grandma can cook really good :)
00:23:44bakkdooryum
00:24:34slavaevan: are there real tacos in the bay area?
00:24:41bakkdooractually my grandma paid for my flight to portland so visiting her is the least i can do ;) besides, oregon and california are close by.
00:24:48evanslava: yeah, you can get them.
00:24:54slavaphew
00:24:56evannot as well as LA/OC/SD
00:24:59slavaheh
00:25:03evanhead up to the mission
00:25:12evanmission burritos are a thing there
00:25:19evanbut i'm betting there are some real taco places.
00:25:40evanabby and I go to a fish taco place in LA that is just a guy under a tarp
00:25:42evanit's awesome.
00:25:50bakkdoorsounds great :D
00:25:52evanhe's only know via twitter.
00:26:19evanhttp://twitter.com/rickysfishtacos
00:26:29evanthats how he's gotten like 95% of his business
00:26:44bakkdoor:D nice background picture :)
00:26:44evanhe's a florist on the weekdays, fish taco artist on the weekends.
00:27:33bakkdoorhttp://akaida.tumblr.com/post/791229318/rickysfishtacos
00:27:34bakkdoor!
00:27:51evanyep!
00:28:15evanthis is his new location
00:28:17evantoo
00:28:31evanhis old location was in front of some 2nd hand shop on the sidewalk
00:29:19evanif you drive up
00:29:20evanwe can go!
00:30:15bakkdoorevan: sure! a good reason for me to come visit you in l.a. :)
00:30:43evanif you drive on the autoban, you can drive from OC to LA :D
00:31:04boyscoutCI: rubinius: a14afd1 successful: 3500 files, 14324 examples, 42088 expectations, 0 failures, 0 errors
00:32:09bakkdoorevan: actually going by bus isn't that bad. 45m drive, costs only $8.50
00:32:21evansure, up to you
00:32:25evanyou could actually take the train up
00:32:29evanand i can pick you up at union station
00:32:31bakkdoorevan: problem is i don't have a international driver's license..
00:32:47evanthats probably easist and fastest
00:32:50bakkdoorso i think i'm not allowed to drive
00:32:54evanok
00:32:57bakkdooryeah, i'll see what's best :)
00:33:08slavaI've driven in the US and NZ with a Canadian license
00:33:16slavayou don't need an international one in some cases at least
00:33:19evani've driven in France with a US license
00:33:20slavamake surey ou check
00:33:23evanin a rental car.
00:33:24slavainstead of just assuming you can.t
00:33:46evani don't know if the rental car changes it. it might.
00:33:49slavaoh
00:33:56slavayou might be right
00:33:57evani've driven a lot in Canada with my US license
00:34:19bakkdoorslava: alright, i might. but i think taking bus or train makes things alot easier for me. i've never driven in the us before and have no idea which way to go etc. ^^
00:34:21evanbut that might be covered under NAFTA
00:34:26slavabakkdoor: public transport sucks in the US
00:34:51bakkdoorslava: yeah... well i'll see but thanks for the advice
00:35:02slavaunless you live in a heavily urbanized area, you need a car
00:35:23bakkdoortrue. but oc and la are heavily urbanized i'd argue :P
00:35:24evanslava: he can get from OC to LA on the train pretty easily
00:35:26evanslava: don't worry :D
00:35:32bakkdoori'll be fine :D
00:35:40evanbakkdoor: ^5
00:35:56bakkdoor^5 ?
00:36:03evanhigh five!
00:36:09bakkdoorah right :D
00:37:34bakkdoorthe greyhound bus for example leaves around every hour. don't know if the station is near your place though
00:37:48evanwell, if you get into LA proper
00:37:48slavadon't get shot at the grayhound bus station in LA
00:37:50evani can pick you up
00:37:52evanthats no problem.
00:37:56bakkdoorevan: alright, cool
00:38:06bakkdoorslava: get shot? oO
00:38:14bakkdoori've been there before, didn't get shot yet :P
00:38:53bakkdoorif i have to, i'll try to dodge the bullets :P
00:40:04evanslava just likes to poke fun at me.
00:40:05evan:)
00:40:17evanactually, violent crime wise, LA is doing great.
00:40:22evan30 year low
00:40:24slavaevan lives in compton
00:40:35evanno, i don't. i just eat there.
00:40:38evansometimes.
00:40:52slavais that where you get the best tacos?
00:40:53evanI live in hollywood.
00:41:02evannah
00:41:09evanbest taco is a subjective thing in LA
00:41:27evanrickys is in silverlake, a few miles east of me
00:45:06boyscoutMove Hash#setup to Hash#__setup__ to allow overriding - d066fa0 - Tim Carey-Smith
00:53:12bakkdoorbtw, rubinius has several concurrency related abstractions right? i remember reading something about actors and also channels (and of course threads). am i correct?
00:53:34boyscoutCI: rubinius: d066fa0 successful: 3500 files, 14324 examples, 42088 expectations, 0 failures, 0 errors
00:53:36brixenyes
00:53:41evanactors haven't recieved much love as of late
00:53:45brixenalthough, ... yes
00:53:46evanbut Channels and Threads work great
00:53:47brixenheh
00:54:09bakkdoorcool. just wondering.. are actors implemented using channels?
00:54:30evanthats a good question!
00:54:34evanlooks for the answer.
00:54:37evantarcieri wrote it
00:54:39bakkdoor:D
00:54:40evanwe should ask him!
00:54:49bakkdoorok!
00:54:51evanoh wait, no
00:54:55evanmentalguy did.
00:55:01evani think they both worked on it.
00:55:12bakkdooralright
00:55:49boyscoutReworked BasicBlock stack verification. - e85cdd1 - Brian Ford
00:55:49boyscoutFixed pack specs for 'Xx'. - 5eeb724 - Brian Ford
00:55:49boyscoutFixed pack specs for @. - 2b8dd45 - Brian Ford
00:56:23tarcieriI only wrote the inter-VM actors
00:56:28tarcieriMenTaLguY wrote the rest
00:56:35brixenevan: I wonder whether taking @generator out of BB would be good
00:56:36evanbakkdoor: looks like it should work fine
00:56:49evani didn't change the Rubinius::Channel API since it was written
00:56:57bakkdoorevan: alright cool. i'm looking at it right now as well
00:56:58evanand that appears to be the primary thing it needs.
00:56:58brixenevan: that change shave 2 of 105 young collections compiling all of lib
00:57:15evannice.
00:57:20evanwhy take it out?
00:57:29brixenevan: that change being not using [] for BB edges
00:57:38brixenreduce the size of a BB instance
00:57:47brixensince it should pack the ivars
00:57:54evanbakkdoor: oh, there are few things that won't work
00:57:59evanthat I need to fix
00:58:03evangive me a sec
00:58:08evanmaybe i can fix 'em real quick.
00:58:17bakkdoor:D
00:58:26tarcierido the inter-VM actors still work? :)
00:58:32brixenhalorgium: your nasty file will compile now
00:58:35tarcierisuppose I could try to find my spec and see if it's still there/not commented out
00:58:38evantarcieri: MVM is still busted
00:58:41tarcierioh
00:58:41tarcieriheh
00:58:41evantarcieri: i need to fix that.
00:58:42tarcieriok
00:58:57bakkdoorno need to hurry. just asked because i want fancy to have actors built-in. and it would be nice if i could just use whats there once it's running on rubinius ;)
00:59:12tarcieridid all of the Ruby implementers ever agree on a common MVM API?
00:59:16tarcierior did that just go by the wayside?
00:59:37evanbakkdoor: we'll get something nice working
00:59:44bakkdoorevan: great :)
00:59:51tarcierinow that you have native threads (if you ever get rid of the GIL) it's kind of moot though...
00:59:52evantarcieri: everyone was ok with my original API
00:59:56tarcierinice
01:00:00evanthere was a discussion about VM.fork
01:00:01ko1_awaytarcieri: maybe not agreed...
01:00:08evanko1_away: hi!
01:00:12tarcieriohai there ko1
01:00:14ko1_awayevan: hi
01:00:37tarcieriko1_away: do you have any plans to get rid of the GVL?
01:00:41ko1_awayi'm planing to restart mvm project on CRuby, including inter-VM communication
01:00:56evanko1_away: maybe we should discuss the ruby API again then
01:00:58evanit was pretty easy
01:01:10evanthere was really just VM#send and VM.receive
01:01:19ko1_awaytarcieri: no. my policy is that: parallel "Thread" is evil
01:01:22evanthe 2 discussion points were what kind of things could be passed
01:01:22tarcieriheh
01:01:23tarcieriok
01:01:30evanand if VM.fork could be implemented
01:01:37tarcieriko1_away: there are ways to make them less evil :) I should talk to MenTaLguY about that
01:02:04ko1_awayevan: I agree about "simple inter-VM communication API" such as Queue
01:02:15ko1_awayevan: i'm not sure about VM.fork
01:02:19evanyeah
01:02:20evanme neither
01:02:24tarcieriheh @ VM.fork
01:02:27ko1_awayevan: it's cool, but seems complex
01:02:28tarcierithat's just plain evil
01:02:31evanit would be a lot harder
01:02:34tarcieris/evil/crazy/
01:02:55evanvm = VM.new "-e '....'"
01:03:02evanis pretty easy.
01:03:03tarcieriwhere -e is eval?
01:03:07evanyeah
01:03:10tarcieriyeah cool
01:03:11evanthe string is the argv of the new VM
01:03:24tarcierithat's pretty much one of two interfaces Erlang gives you
01:03:27tarcierifor bootstrapping new nodes
01:03:31tarcierithe other is apply
01:03:31tarcieriheh
01:03:41evantarcieri: apply would be like fork
01:03:42evani'm assuming
01:03:47tarcieri?
01:03:51evanno?
01:03:58tarcierilike fork how?
01:04:05evannevermind
01:04:08evanwhat does apply do?
01:04:19tarcieriapply takes the name of a module, a function of that module to call, and the arguments
01:04:48evanand runs them in a new node?
01:04:55tarcieriyes
01:04:58evanwhere does it get the implementation of the function?
01:05:05evanloads it from a file?
01:05:15tarcieriif you use apply, it would have to be one of the functions in the load path of that node when it booted
01:05:24evangotcha
01:05:24tarcierii.e. a standard library function, or code that was already present on that node
01:05:32evansupporting that would be pretty easy
01:05:48ko1_awayevan: we already implement such creation API on CRuby, and queue model communication
01:05:54evanVM.new "foo.rb", "Blah", "run_this"
01:06:07evanko1_away: are they exposed in ruby methods?
01:07:05ko1_awayevan: yes
01:07:20tarcierievan: an example in Rubyland would be node.apply :Kernel, :load, "myfile.rb"
01:07:37boyscoutCI: rubinius: 2b8dd45 successful: 3502 files, 14347 examples, 42111 expectations, 0 failures, 0 errors
01:07:39evanko1_away: where at? i'd like to look at them
01:08:10ko1_awayhttp://github.com/nobu/ruby
01:08:19ko1_awayevan: but not documented :(
01:08:44evanko1_away: thats fine, what files are the methods defined?
01:08:56evani can follow the C code.
01:09:42ko1_awayevan: i'm searching now :)
01:09:45evanok!
01:12:17evanko1_away: is it mvm.c in the mvm branch?
01:13:52ko1_awayevan: i also thought so, and look first. but no ruby level method
01:14:05evanok
01:14:16evanwell, sounds like you are going to restart working on it anyway
01:14:24evanand seems like we agree on the API mostly
01:14:30evani'll probably play with adding it in again
01:14:37evanand we can go from there
01:16:18ko1_awayyea
01:20:55evanko1_away: do you have the summer off from being a professor?
01:22:21ko1_awayno
01:22:52ko1_awayhowever, i got chance to go foreign research institue in 2 months
01:23:24evanhas that been fun?
01:23:30ko1_awayso i hope to concentrate to VM implementation
01:23:41evanwhen do you go?
01:23:58ko1_awaymaybe > fun
01:24:06ko1_awayEngland
01:24:32ko1_awayI will go to help HornetsEye guy
01:24:58evaninteresting!
01:25:12evangoing to try and add VM features to make it better?
01:25:20ko1_awayYES
01:25:26evanfun!
01:25:40evanwhen do you start that?
01:25:50ko1_awayhe made a JIT with libjit on his DSL in Ruby
01:26:05evanoh yes! he talked about it at rubyconf I believe
01:26:06ko1_awaythis Sep to Oct
01:26:26ko1_awayyes, I get to know him at rubyconf
01:27:03evanwell, that should be fun :)
01:28:06ko1_awayyea
01:28:20ko1_away(1) parallel something
01:28:30ko1_away(1-1) parallel sweep (maybe easy)
01:28:40ko1_away(1-2) fine grain parallel execution support
01:28:50ko1_away(2) JIT compilation / VM introspection
01:28:58ko1_awayare topic i'm thinking
01:29:05ko1_aways/topic/topics/
01:29:13evanis 1-2 allowing ruby code to run with the GVL unlocked?
01:29:36ko1_awaysome heavy tasks like NArray manipuration, etc
01:29:55ko1_awayRuby programmer should not consider about parallel execution
01:29:59ko1_awayI believe
01:30:31evanso would this allow some C code within NArray to run in parallel?
01:30:42ko1_awayYES
01:30:48evanah!
01:30:50evancool.
01:31:02ko1_awayi want to make a framework to create in easy way
01:31:06evanhave you thought much about 2, the JIT, yet?
01:31:16ko1_awaynot yeat
01:31:33evanif you have questions, i'm happy to answer them about the Rubinius JIT
01:31:34ko1_awaywe are working on AOT compilation, ruby to C
01:31:49ko1_awayLLVM!
01:31:56evanyep!
01:32:07evancool!
01:32:13evanare you using LLVM in the AOT?
01:32:18ko1_awayno
01:32:36evanah ok. YARV bytecode to C I assume?
01:32:37ko1_awayYARV bytecode sequence to C source code
01:32:40ko1_awayYES
01:32:42evan:D
01:33:02ko1_awaybut no greate performance improvement,
01:33:18ko1_awayabout x1.5 speedup
01:33:24evanyes, method dispatch is probably the slowest part then
01:33:27ko1_awayin naive impl.
01:34:07ko1_awaywe'll try profiler/type inference approach to generate more optimized one
01:35:29evaninteresting!
01:35:34evanthats very much like the Rubinius JIT
01:35:51ko1_awayyou are doing profiler based one?
01:36:03evanyes, the current Rubinius JIT uses type feedback
01:36:16evaninterpreter builds profiling info about every method call site
01:36:20ko1_awayah, JIT compilation is profiler based. silly comment
01:36:23ko1_awaysorry
01:36:29evanno problem. :)
01:38:47ko1_awayour problem consciousness is portability
01:39:24ko1_awayLLVM is mostly portable, but not enough (in our research)
01:39:41halorgiumbrixen: w00t
01:39:49ko1_awayso we use C
01:40:28evanyes
01:40:39evanLLVM IR is not portable
01:40:57ko1_awayhowever, good for MacOSX environment :)
01:41:02evanmainly because of the integer size stuff
01:41:13evanyes!
01:41:31evanif you are careful, you can be portable
01:41:32ko1_awayinteger size stuff, heh
01:42:07ko1_awayLLVM is heavy for embedded devices (not smart phone :), i think
01:42:30evanLLVM is big, yes.
01:42:56evanto use at runtime, the JIT is very complete, but also not as fast as very simple JIT
01:43:07ko1_awayI see.
01:43:25evanbut the x86 code it outputs is great
01:43:28evanit's very smart.
01:43:46ko1_awayLLVM output? or your effort?
01:43:52evanLLVM output
01:44:02ko1_awayi see
01:44:08evanI give LLVM data as it's IR
01:44:16evanand it chews on it and spits out x86 machine code
01:47:36evanko1_away: soon I want to write some docs and diagrams of the Rubinius JIT system.
01:51:34ko1_awayevan: cool!
01:51:50ko1_awayi love to read it.
01:52:36evanwonderful!
01:52:46evanI saw http://harmony.apache.org/subcomponents/drlvm/JIT.html
01:52:52evanand got very jealous
01:53:37ko1_awaywhat is DRLVM Jitrino ?
01:54:08evanI guess it's a JVM that Apache has built
01:54:18evanthey have nice documents about the different parts
01:54:29ko1_awaywow
01:54:42ko1_awaythere are many many JVM impls.
01:54:55nerdsharkyep
01:55:35evanko1_away: yes! even more than ruby!
01:55:45ko1_away:)
02:05:51ko1_awayevan: http://github.com/nobu/ruby/blob/mvm/vm.c InitVM_VM
02:05:59ko1_awaynobu teach me
02:06:31evan:D
02:06:32evanah ok!
02:06:41evanI shall copy this API
02:07:02ko1_awaynot mature...
02:07:33evanthats ok
02:07:35evanit seems to be simple
02:07:37evanwhich is good.
02:07:44evanwe can always change it
02:07:51evanI see it using the queue
02:08:14ko1_awaywe need sample/killer application using MVM
02:08:31evanperhaps a webserver?
02:08:40evanthat can load balance connections between VMs
02:08:47evanthat seems natural.
02:08:54ko1_awayyes
02:10:22ko1_awayevan: BTW, you will not attend this year RubyKaigi?
02:10:43evansadly I do not think so right now
02:10:47evanbut that might change.
02:11:23ko1_awayevan: i see. i hope we can meet at RubyKaigi.
02:11:34evanyes, me too.
02:13:25evanko1_away: if you ever want to discuss these things, i'm always available by email
02:13:32evanI know it can be easier to discuss longer ideas via email
02:13:39evanskype too :D
02:13:46evanfor video chat
02:16:04ko1_awaythanks
02:16:50ko1_awayi want to summerize about it before discuss.
02:16:57evansure.
02:17:04evanoh, I see "How Did Yarv2llvm Fail" on the kaigi schedule.
02:17:08evani did not realize he had given up
02:17:51ko1_awayhehe
02:18:19ko1_awayhe have restarted his YARV JIT with LLVM project at scratch
02:18:47evanah
02:19:12evanI should ask him to help with the Rubinius JIT! :D
02:19:18ko1_awayhaha
02:19:52ko1_awayi will ask him
02:20:11evan:D
02:22:09evanko1_away: it has been great talking with you. I must go off to jog now.
02:22:33evani'll try to bring up more topics so we can talk more!
03:49:45jakedouglasevan: thanks for fixing the bidirectional pipe stuff
03:49:51evannp
03:50:39jakedouglasinterestingly, i was getting the uninitialized stream error intermittently, not all the time (using #sync=)
03:50:55jakedouglasdo you know why that would have been?
03:52:17evaneh?
03:52:24evanyou were getting it doing what?
03:52:28evan.stat?
03:52:37jakedouglasio.sync = true
03:52:51evanwhere did io come from?
03:53:02jakedouglasIO.popen(…) {|io| … }
03:53:08jakedouglasis this a separate issue?
03:53:18jakedouglasi just remember that it was succeeding some of the time
03:53:37jakedouglasits a script in my app
03:53:53evanno clue
03:53:54evanhonestly.
03:54:00evanit should always work or never work
03:54:13evanmaybe there was a timing issue with the process
03:54:18jakedouglasheh ok. ill let you know if its still a problem next time i rebuild rvm.
03:54:26evank
03:54:38jakedouglaserr
03:54:43jakedouglasrebuild rbx. with rvm. yeah.
03:55:07evanI gotcha.
04:06:11jakedouglasis there a way to determine the allocation site of an object in rbx?
04:06:50brixennot that I know of
04:07:08brixenyet :)
04:07:27evanno, not yet
04:07:28evansoon.
04:11:00jakedouglask. anything i can do to help that?
04:12:04evannot particularly, no.
04:12:07jakedouglask
04:12:16evani have to wire in some event framework into the allocation system of the VM
04:12:21evan100% C++
04:14:15jakedouglasi have written some C++. you probably don't want it in your codebase though :p
04:17:18evanheh
04:21:31jakedouglashmm. i am not sure where next to look with this TypeError i get in script/console
04:28:24jakedouglastold myself i wouldnt stay up late messing around with rubinius again tonight. see you guys in the morning :p
04:32:49evan:)
06:12:37evanrad. i've got unwind information being synthesized properly when calling out to uncommon_interpreter
06:12:48evanso we can deoptimize with an exception handler
06:15:01brixensweet!
06:15:12brixenthat's excellent
06:15:22brixenso now you can inline cm's with exceptions?
06:20:21evanthats the plan!
06:20:28brixenyay!
06:24:09evanbrixen: so, we've got ANOTHER interpreter now
06:24:09evan:)
06:24:15evani just can't stop!
06:24:19brixenno kidding
06:24:22evandebugging_interpreter_continue
06:24:32brixenwere goingto need a registry soon
06:24:45evanis used to continue a normal interpreted method in debugging mode
06:24:49brixenand probably an IntepreterFactoryInterpreter at some point
06:24:53evanhah
06:25:10evanif it have methods like #hola! then i'm fine with that.
06:25:16brixenheh
06:29:16evanman though
06:29:35evani've got to write some ridiculous code to put things on the stack when a begin starts
06:29:39evanlike
06:29:44evan10 + (begin .... end)
06:30:21brixenum, what?
06:30:34evanwhen we do setup_unwind
06:30:38evanwe record the stack depth
06:30:54evanso that when the rescue runs, we can restore the stack depth we were at before the begin code was run
06:31:07brixenah yes
06:31:09evanremember, i used to reset the stack to -1
06:31:14evanwhich breaks code like this
06:31:29evanbecause the rescue can leave a value
06:31:33evanand then the expression continues
06:31:41brixengotcha
06:31:51evan10 + (begin; raise "stupid"; rescue; 2; end) # => 12
06:32:13brixenyes, fascinating use cases for such code
06:32:20brixendon't let tarcieri see it
06:32:29brixenhe's on a roll tonight about twitter :)
06:32:29evanhah
06:32:34evanso i've noticed!
06:32:41evansomething in his coffee this evening
06:32:47brixenheh
06:35:41brixenevan: so, I parsed your sentence like this http://skitch.com/brixen/dc37r/brian-yumiko
06:36:21brixenI thought you were saying you had to write code like "10 + (begin...end)" to put things on the stack
06:36:23evanok..
06:36:35evani was!
06:36:41brixenand that was related somehow to debugging_interpreter_continue
06:36:45evanoh
06:36:46evanno.
06:36:47evanunrelated.
06:36:48brixenneedless to say, I was loling
06:36:50brixenheh
06:37:34evanwhat day is the ride?
06:37:49brixensat starting at about 5:45 am
06:37:52brixen100 mi
06:37:57brixensunday again
06:38:09evangotcha
06:38:16brixenwe're driving up tomorrow
06:38:17evanhow long you think 100m will take ya?
06:38:32evanwhat time you head up tomorrow?
06:38:33brixenI think I could do it in about 8 hrs, but we'll probably take ~11
06:38:55brixengetting the truck at 10, then some quick errands and we'll try to be in seattle before 4
06:39:02evannice
06:39:05brixenhopefully beat friday rush hour
06:39:07evanwell, don't kill yourself!
06:39:19evanoff to go read.
06:39:19brixendrop the bikes off and the truck
06:39:21brixenand chill
06:39:24evansounds good.
06:39:25brixenok!
06:39:29evansee ya on monday
06:39:34brixenok
06:39:37brixenhave a nice weekend
06:39:43evanunless you want to facetime me from the road :D
06:39:50evanoh, no wifi.
06:39:51brixenheh, I will if I get wifi
06:39:52evannevermind!
06:39:55evan:D
06:40:02evanok, see ya!
06:40:03brixenmaybe there will be at one of the stops
06:40:09brixenI'll post some pics to twitter
06:40:11brixensee ya!
12:42:04JamesKiltonIs there anything in Rubinius proper that uses st.h ? I see it included by mri/compat.h, but I don't see anything that includes *that* file
12:45:20kronos_vanoJamesKilton, I think gems can include the header
12:45:40JamesKiltonit doesn't compile
12:48:27JamesKiltonI'll have to go w/ what syck does, include st.h and st.c in my library directly
16:04:54brixenevan: this is the abort on ppc http://gist.github.com/478545
16:05:11brixendo we perhaps need to regen the llvm type info for the jit?
16:05:22evanyikes
16:05:24evanyeah
16:05:29evanwell
16:05:37evanor recompile llvm for ppc
16:05:43evanthat backtrace makes no sense
16:05:44brixenI did compile from source
16:05:52brixenok, le'me get a gdb one
16:06:14evanthere is no way llvm::SelectionDag::setRoot can call rubinius::ObjectMemory::new_object_typed
16:07:26brixenyeah, that was pretty odd
16:08:10brixenok, this one is in inflated header
16:08:30evanthats better
16:08:58brixenhttp://gist.github.com/478545
16:11:09JamesKiltonevan: Is there a RHash replacement in rbx or is it gone altogether?
16:11:17evanno
16:11:21evanit's gone altogether
16:11:25evanthere can be no replacement
16:11:44JamesKiltonthat's what I thought just wanted to be sure
16:11:48evanwe've tried to provide functions for all opuerations you'd do with RHASH()
16:12:40JamesKiltonya i'll need to reimplement this class completely then, it expects to BE an RHash
16:14:18goyox86oh man i just watched the Yehuda at RailsConf '10, is really motivational :]
16:14:28brixengoyox86: totally! :)
16:16:20goyox86brixen,evan: How long did you worked alone in rbx?
16:16:53brixengoyox86: I never worked alone on it, I had evan with me the whole time :)
16:16:54goyox86with no people's help?
16:17:19brixenI think evan worked on it almost a year before pushing the code public
16:17:23brixenmaybe less
16:17:58evangoyox86: i worked on rubinius solo from christmas 2005 til november 2006
16:19:31goyox86i say this, coz these days i was a litte down, coz rbx in pretty big stuff, i've been reading and reading and reading , and say readinga lot of rbx code, and i told myself: "wtf can do here?, there are pretty complex stuuf"
16:19:48jakedouglasyou too huh
16:20:25evangoyox86: you mean, rbx seems huge and complex and hard to help with?
16:21:02goyox86and recently i found out that, i needed to start with some easy, just fixing some specs, and everything started to be FUN!
16:21:20evanyeah!
16:21:24evanthats what I was going to suggest.
16:21:31evanthere are a lot of moving parts
16:21:36evanbecause it's a sophisticated program
16:21:46evanbut we've got a lot of easy doorways to walk through to get started
16:23:31goyox86evan: yup!, and heh i just submitted 2 patches :), no big stuff but i just wanted to be part of the implmentation of this project, from one way or another
16:24:27evanthats the best way to start
16:24:32evanthose little patches
16:24:46evanif you stick with it, the patches grow as your knowledge grows
16:25:53goyox86and i'm pretty sure rbx will become one of the most used ruby runtimes and as i was reading yesterday, become a platform to implement other languages on it!
16:26:01goyox86like fancy-lang!
16:26:08evan:D
16:26:18evanyeah, that delights me to no end
16:26:26evanthat people are seeing it as a fun playground.
16:26:31goyox86congrats all of you man!
16:26:49goyox86going to lunch!
16:26:54goyox86se yaa!
16:27:14evan:D
16:27:15evanbye!
20:23:05goyox86people i'm working on making pass File specs, but i need to do some ruby debug how do i achieve it?
20:24:03evangoyox86: what is your question?
20:24:05evanhow to debug?
20:24:10goyox86since i know the Debugger, is not finished, at least movement (step in, step out)
20:24:30evanyou can use the debugger
20:24:36evanmight work fine for your purposes
20:24:40goyox86yep ruby code, from kernel
20:24:41evanrequire 'debugger'
20:24:43evanDebugger.start
20:24:50evanthen you can set breakpoints and continue
20:24:52evanand inspect
20:25:20goyox86yep brixen explained me it, a few days ago :], ok
20:26:06goyox86you only use gdb for vm debug?
20:26:11evanyep
20:26:39goyox86ok thx evan
20:37:26dbussinkevan: i was looking at some tags, but how should we go about not allowing :initialize to be sent to an already initialized class?
20:37:41evanwe don't
20:37:43evanMRI doesn't.
20:38:17dbussinkwell, mri raises a typerror on stuff like Fixnum.send :initialize
20:38:20dbussinkrbx crashes on it
20:38:35evanthats not again
20:38:41evanoh wait
20:38:44evanTHE CLASS?
20:38:47evanor instances?
20:38:51dbussinkthe class :)
20:38:57dbussinkclass Obj; end
20:39:00evanthats just something Class#initialize should handle
20:39:04dbussinkObj.send :initialize => TypeError
20:39:19evanraising TypeError if it sees it's already initialized
20:39:32dbussinkbut is there any way to easily see if it's already initialized?
20:39:49dbussinkany flag / specific thing set up?
20:40:01evani'd just check if @method_table is a MethodTable
20:40:04evanif so, raise TypeError
20:41:10dbussinkok, i'll play with that then
20:41:20evank
20:42:56dbussinkevan: hmm, looks like method_table is already there at that point
20:44:31evanwell, use something
20:51:51dbussinkevan: this seems to work, makes sense to you? https://gist.github.com/72d4617b15533b502155
20:52:18evanshould be
20:52:31evanraise TypeError, "already initialize" if @instancetype
20:52:31evanraise TypeError, "already initialize" if @instance_type
20:52:45evandon't use Exception#new unless you really must.
20:53:12jakedouglasevan: why is that? just to be consistent?
20:53:15dbussinkevan: do you also prefer using @ instead of the accessor?
20:53:20evanjakedouglas: yep.
20:53:27evanalso
20:53:31evanraise Blah.new("")
20:53:48evanis less efficent than 'raise Blah, ""'
20:53:52evanbecause of teh protocol of rais
20:53:52evanraise
20:53:56jakedouglasi see
20:53:58evanalways sends #exception to the 1st argument
20:54:04evanwhich, in the case of Exception#exception
20:54:06evandups itself
20:54:13evanso you create an object, just to have it dup'd
20:54:32evandbussink: in this case, yes.
20:54:37evandbussink: because it's more foolproof.
20:54:43evansomeone can't come along and redifine instance_type
20:54:51dbussinkhehe, that's tru yeah
20:54:59dbussinksomeone otherwise probably will :P
20:55:05evanyep!
21:03:48dbussinkevan: do you know of any useful case where Class#initialize_copy would be useful in any wya?
21:04:00dbussinkthere's a spec that it should raise a TypeError too on an initialized class
21:04:03evanwhen copying a class
21:04:04evan?
21:04:10evanFoo = Blah.dup
21:04:12dbussinkbut i have a hard time imagining a useful case
21:04:17dbussinkand rubyspec also doesn't have one
21:04:55dbussinkah ok, guess there isn't a rubyspec for that then :)
21:05:27evanguess not!
21:05:30evanI disabled Class#dup actually for a bit
21:05:42evanbut there are, strangely, things that need it
21:05:45evanthe rails tests for one.
21:06:17dbussinkhmm, looks like Class#dup bypasses initialize_copy in mri
21:06:37evanRAD.
21:06:38evan:/
21:08:55dbussinkevan: hmm, looks it might go through it after all, but the @instance_type trick won't work here
21:08:59dbussinksince it's already copied
21:09:34evanfind out what MRI checks for
21:09:37evanto raise that exception
21:10:19dbussinkRCLASS(clone)->super
21:11:19evanok, you can check @superclass
21:12:52dbussinkhmm, already tried that but doesn't work, looks like it's already initialized in rbx at that point
21:13:17evanhm
21:14:21dbussinkthe object_copy_object is already executing, guess that also copies that information over
21:15:03evanit would, yeah
21:17:32slavawhat's a blow mage?
21:22:15boyscoutAdd support for uncommon exits inside exception handlers. - 4b4bd9a - Evan Phoenix
21:22:25evanfinally got rid of that wart.
21:27:06slavalooks like it was a lot of work
21:27:41evani suspect you're being facious.
21:27:49evanbut the internet is preventing me from knowing for sure.
21:27:58slavajust an observation, that's all :)
21:28:09slavahttp://github.com/evanphx/rubinius/commit/4b4bd9a07da4278c75cdf5d8a462bde39572c1ef
21:28:20slavalots of separate classes got updated with knowledge of exceptions
21:28:43evani had to propagate the exception type through
21:29:03evanthen arrange for some alloca space to write the unwind info
21:29:25evanthere is also a little cleanup in there
21:29:32evanof me nuking old commented out code
21:29:33dbussinkevan: any other idea how i could fix that Class#initialize_copy spec?
21:29:41evanwhich spec?
21:29:49evanis it commited?
21:30:02dbussinkyeah, it's tagged now
21:30:11evanlets see.
21:30:12dbussinkspec/core/ruby/class/initialize_copy_spec.rb
21:30:29dbussinklet me push the one i just fixed
21:30:34evank
21:30:41boyscoutDon't allow initializing a class twice - 24ef50e - Dirkjan Bussink
21:30:41boyscoutRemove tag for now passing Class#initialize spec - b9f796b - Dirkjan Bussink
21:31:01dbussinkso i though, fixing initialize_copy should be easy too
21:31:05dbussinkbut no luck :(
21:32:41evanlets see...
21:32:44boyscoutCI: rubinius: 4b4bd9a successful: 3502 files, 14347 examples, 42111 expectations, 0 failures, 0 errors
21:33:16evani guess that works for MRI because Object#dup doesn't copy ->super
21:33:59evandbussink: so, i think we should go non-standard a little here
21:34:30evanhm...
21:35:13evanhonestly, i don't know how to support this
21:35:27evanwe've got a much more unified object layout
21:35:27evanthat Object#dup understands
21:35:37evanso there isn't the case where the object is sort of half initialized
21:35:43evanwhich is the case that MRI is detecting.
21:35:57dbussinkyeah, although the spec hangs and keeps running at 100% cpu
21:36:03dbussinkso it's also not working ;)
21:36:11evanhuh?
21:36:18evanit just hangs?
21:36:22evanthats really odd.
21:36:38dbussinkif i run ./bin/mspec spec/ruby/core/class/initialize_copy_spec.rb it hangs
21:36:41evanit doesn't hanng for me.
21:36:55evanoh wait
21:36:57evanit does
21:37:00evanhow odd.
21:37:29dbussinkseems to end at some point though
21:37:36dbussinkbut looks like it crashed, because no output at all
21:37:41dbussinkno failed spec
21:37:50dbussinkor passed or anything for that matter
21:38:10evanyeah
21:38:18evanoh oh
21:38:23evanI've got it.
21:38:45evanraise TypeError, "already initialized" unless @method_table == other.method_table
21:39:12evanbecause dup will leave the original reference to orig's MethodTable object
21:39:18dbussinkah ok
21:39:20evanso if they're the same, you know you're there because dup just finished
21:39:27evanand if they're not, you know you shouldn't fuck with it.
21:39:35dbussinkah yeah, that makes sense :)
21:39:52dbussinkyou're fixing this or should i change it?
21:40:47evanyou go for it.
21:41:02evanI think the destabilization in doing
21:41:06evanObject.initialize_copy String
21:56:37halorgiumevan: brixen: time to profile this:
21:56:37halorgiumrbx -S bundle exec rbx -S merb -r 'puts Time.now' 223.09s user 6.20s system 86% cpu 4:23.80 total
21:57:01jakedouglasheh
21:58:06boyscoutAdd special Class#initialize_copy to protect it from harm - b73e717 - Dirkjan Bussink
21:58:06boyscoutRemove tag for now passing Class#initialize_copy spec - ed96648 - Dirkjan Bussink
21:58:06boyscoutTagged Enumerator#each spec looks stable - d9df3a1 - Dirkjan Bussink
21:58:06boyscoutRemove tags for passing String#gsub! specs - 811480e - Dirkjan Bussink
21:58:46dbussinkbedtime!
21:58:47dbussinknite
22:06:38boyscoutCI: rubinius: 811480e successful: 3502 files, 14350 examples, 42116 expectations, 0 failures, 0 errors