Index

Show enters and exits. Hide enters and exits.

00:03:44brixencool
00:04:49brixenhmm
00:05:13brixenthat was weird
00:05:30brixennot sure what cmd+r is supposed to do in irssi
00:05:55brixenso, flash player using llvm jit http://lightspark.sourceforge.net/
00:07:09evanyeah
00:07:15evani was looking to try and find where they use LLVM
00:07:17evanhaven't found it yet.
00:08:59brixenheh
00:09:51brixenok, early dinner, online later, then tango!
00:10:10evansee ya!
00:10:17brixenlater!
00:17:30mpanettaHay guys :)
00:17:39evanhello
00:19:36mpanettaI keep getting this when trying to run the tests:
00:19:38mpanetta1)
00:19:38mpanettaUDPSocket.bind receives a hostname and a port FAILED
00:19:39mpanettaExpected "0.0.0.0" to equal "127.0.0.1"
00:19:46evanah yeah
00:19:50evani need to look at that.
00:20:08evanthat seems to be happened on linux sometimes.
00:20:15mpanettaI just commented out the one compare to make it pass, I assume its not really an issue
00:20:26evanlikely not, no.
00:21:26mpanettaOk cool, thanks.
00:21:30boyscoutMinor syntax cleanup - 492b582 - Evan Phoenix
00:21:30boyscoutAdd defered breakpoints to the debugger - 8532ebe - Evan Phoenix
00:22:57mpanettaHas anyone done any size comparisons on the core? I am wondering if rubinius would be any more portable to small embedded systems then say strait ruby...
00:23:06evanno
00:23:08evanvery likely not.
00:23:22evanwe have a lot more runtime data/memory used than MRI
00:23:27mpanettaKind of like how they embed Python in to some phone processors. I would rather use Ruby ;)
00:23:31mpanettaOh really? Ok
00:23:34evanbecause we implement so many methods in ruby
00:23:45evanand thusly those methods are in the GC heap
00:23:54evanwhere as MRI implements it's core in C
00:24:02evanand the methods are in shared code pages
00:24:17mpanettaHmm, si its because the runtime libs are written in ruby instead of C?
00:24:21mpanettaer so
00:24:26evanthats a big part, yeah.
00:24:30mpanettaAhh ok
00:24:32evanwe have a lot richer data than MRI
00:24:40evanwhich comes with a higher default memory footprint.
00:24:48boyscoutCI: rubinius: 8532ebe successful: bin/rbx [0x8180f51]
00:24:56evan:/
00:25:08mpanettaI just downloaded it for the first time, so I am still figuring out what it can do. :)
00:25:18mpanettaWhat do you mean by richer data?
00:25:56evanI mean that a lot more of what happens in the system is implemented in terms of Ruby objects
00:26:07evansay, for instance, a method.
00:26:22evanin MRI, you there is no accessible way to see a method itself.
00:26:27evanit's implementation, etc.
00:26:40evanParseTree extracts it in a way.
00:26:47evanbut in Rubinius, they're CompiledMethod objects
00:26:53evanthat you can call methods on and such.
00:27:20mpanettaAhh! So it has a deeper ability to self inspect?
00:27:29evanmuch, yes.
00:27:36evanfor instance, eval is implemented entirely in ruby.
00:27:50evanwell, 95% in ruby.
00:28:00evanthe VM runs the actual code.
00:28:53mpanettaoh wow
00:29:57mpanettaSounds like it makes it easier to instrument your code that way.
00:30:00boyscoutPut hook.rbc in the right load place - 32151bb - Evan Phoenix
00:30:05evanmpanetta: it can, yeah.
00:32:40mpanettaHmm, I should make an RPM of this.
00:32:54evanwe're going to be releasing 1.0.1 next week
00:33:03evanif you want to package an official release.
00:34:03mpanettaOk
00:37:59boyscoutCI: rubinius: 32151bb successful: 3462 files, 13795 examples, 41453 expectations, 0 failures, 0 errors
01:37:40boyscoutIntroduce -Xprofile to be used instead of -P - b69787a - Evan Phoenix
01:46:43boyscoutCI: rubinius: b69787a successful: 3462 files, 13795 examples, 41453 expectations, 0 failures, 0 errors
01:53:00brixenthat was awesome
01:53:13brixenjust ran into a guy I used to hang out with on weekends and hack on rbx
01:53:17brixenin like feb 2007
01:53:30brixenhe hadn't heard we released 1.0
01:53:51brixenthey were on their way to a scala talk :P
01:57:40evanbrixen: hehehe
01:57:52evanbrixen: so, defered breakpoints are in.
01:58:03evanyou can do -Xdebug and it will start the debugger in loader
01:58:13evandefered breakpoints are checked after every method is added
01:58:17evanand after every script is run
01:58:19brixenyeah, just looking at it
01:58:22brixenlooks sweet!
01:58:58brixensimplified code loading is paying dividends :)
01:59:11brixenwhat a joy to work with good code
01:59:33evanyeah.
01:59:58evanRubinius::Hook is a trivial observer style pattern
02:00:09evanyou create one and expose it
02:00:10brixenthe guy that was with the guy I knew said, "oh yeah, I installed rbx with rvm and ran our specs, everything passed, so cool"
02:00:12evanfor people to add and trigger
02:00:40brixenyeah, Hook is cool
02:07:37evanwowzers.
02:07:38evanin MRI
02:07:46evanReadline.readline stops everything COLD.
02:08:06evan1.9 too
02:08:07evangeez
02:08:08evan!
02:09:44evantehehehe
02:09:54evani found a use for rb_thread_blocking_region
02:09:55evan:D
02:09:59brixenheh
02:10:06evanworks great too.
02:10:10brixennice
02:11:42evanOH GOD
02:11:44evanLEBRON
02:11:46evanHELP ME.
02:11:56evanin irb:
02:11:59evan unless (class<<@io;self;end).include?(HistorySavingAbility)
02:13:17evanhonestly
02:13:23evani can't believe irb even works.
02:13:53brixenwow
02:15:18brixenhere's a good visual for early Ruby: folks in star trek uniforms wandering in an odd-looking foreign planet, phasering stuff, and poking it
02:15:26brixenand, of course, writing codez
02:16:08evanand we're somewhere in voyager times now?
02:16:28evanlib/ext/save-history.rb
02:16:35evanuses a FINALIZER on STDOUT to save the history
02:16:47evanguess what we don't run on shutdown.
02:16:49evan:/
02:17:08brixenwell, you don't want to save history until the last possible second
02:17:16brixenright before the lights go out
02:17:25brixen"last one out, turn off the lights!"
02:17:28evanhah
02:17:31brixen"sure thing, billy bob"
02:17:33evanwhen is tango?
02:17:36brixenheh
02:17:38brixen15 min
02:18:18evanwhy not use at_exit?
02:18:23evanwas this code written pre-at_exit?
02:18:29brixenhmm, could be
02:18:32evanredictifies.
02:19:22evanwho whould have thought!
02:19:27evanthat works better than a random finalizer!
02:19:28brixenbut when you think about it, someone could write during an at_exit handler, might as well wait till the end :)
02:19:31evan*eyeroll*
02:19:34brixenhehe
02:40:39boyscoutMake readline multithread aware and minor cleanup - 4574376 - Evan Phoenix
02:40:40boyscoutCheck for async events when returning from a native method - 660dbbf - Evan Phoenix
02:40:40boyscoutCleanup and fix irb's save history feature - 649f691 - Evan Phoenix
02:48:22toulmeanevan: so we were discussing a few days ago about rjb
02:48:33toulmeanand the problem to compile it as it sounds quite old
02:48:42boyscoutCI: rubinius: 649f691 successful: 3462 files, 13795 examples, 41453 expectations, 0 failures, 0 errors
02:48:50toulmeanin particular you told me rubinius did not support this construct: RHASH_TBL
02:49:21toulmeanit sounds like it is the last problem before we can compile the code.
02:49:29toulmeanSo it's worth banging against it
02:49:37toulmeanI'll google and will look for it around.
02:50:29toulmeanevan: would this be a possibility: http://www.mail-archive.com/libxml-devel@rubyforge.org/msg01196.html
02:56:27toulmeanok that doesn't work. Good to keep I guess, in case.
02:58:39toulmeanok got this now : http://jira.mongodb.org/browse/RUBY-109
02:58:42toulmeanevan: ^^
03:35:29toulmeanevan: got the code to compile but it fails when I load the rb with this error:
03:35:44toulmeanSystemCallError: dlopen(/usr/local/rubinius/1.0.0/site/x86_64-darwin10.3.0/rjbcore.bundle, 10): Symbol not found: _OBJ_FREEZE
03:35:51toulmeanI am committing my changes
03:54:25toulmeancremes: see my discussion above too ^^
03:54:34toulmeancremes: and the problem I hit now: SystemCallError: dlopen(/usr/local/rubinius/1.0.0/site/x86_64-darwin10.3.0/rjbcore.bundle, 10): Symbol not found: _OBJ_FREEZE
04:07:46toulmeancremes: ^^ if you don't have an insight, that's fine.
04:08:01cremestoulmean: still looking
04:08:12toulmeanah ok thx
04:11:06evantoulmean: that is supported now
04:11:16evanyou might have to try on git HEAD though
04:11:26toulmeanevan: oh fun stuff ok
04:12:24toulmeanevan: will try.
04:12:37evanok
04:13:42cremestoulmean: i clearly see the code in vm/capi/object.cpp but i'm on the latest master so...
04:13:51cremesfollow evan's advice; he da man
04:13:57evan:)
04:13:58toulmeancremes: thx
04:14:05toulmeanyeah
04:14:10toulmeanoops dinner served
04:14:26cremesdo some hacking for dessert!
04:14:41cremesand now, to bed
05:49:32toulmeanevan: building trunk
05:52:48brixensweet
05:52:57brixentoulmean: where do I get the source for rjb?
05:53:15toulmeanbrixen: github, atoulme, rjb
05:53:45toulmeanbrixen: http://github.com/atoulme/rjb/
05:53:59toulmeansorry mac a bit hosed by rake install
05:54:14toulmeanbrixen: a few more minutes and I will try with rbx
05:57:05toulmeanis wondering how long it takes to compile this thing ?
05:57:23brixenwonders if he should try...
05:57:53toulmeanI for sure will tell you how it goes.
05:58:40brixenfunny, I searched for it on gh and I was like, who's this atoulme? must be some random fork
05:58:44brixenheh
06:02:06toulmeanSystemCallError: dlopen(/Users/antoine/w/git/rubinius/lib/site/x86_64-darwin10.3.0/rjbcore.bundle, 10): Symbol not found: _rb_ary_delete
06:02:19toulmeanbrixen: evan: ^^ got this now
06:02:51brixentoulmean: I read readme.txt but it's not clear how to build this
06:03:02toulmeanBrixen: rake install
06:03:07toulmeanfirst ./configure
06:03:16toulmeanactually it didn't "install"
06:03:20brixenhttp://gist.github.com/408529
06:03:20toulmeanbut it created a bin dir
06:03:24toulmeanand I could use it
06:03:33toulmeanoh
06:03:36toulmeanJAVA_HOME not set
06:03:56brixenI'm on os x 10.5
06:03:58toulmeangets me _every_ _time_
06:04:08toulmeanyou need to export JAVA_HOME
06:04:27brixenok, readme said it assumed it was where it's at :/
06:04:36toulmeanya
06:04:55toulmeanI don't know. This code is weird
06:05:18brixenok, much better, config finished
06:06:32toulmeanbrixen: then load in irb
06:06:41toulmeanbrixen: require "rubygems"
06:06:44toulmeanrequire "rjb"
06:06:50toulmeanand you will reproduce my problem
06:09:17brixendo I need to install?
06:09:35toulmeanBrixen: setup.rb installed for you
06:09:46toulmeanyou should be all set.
06:10:28brixencool, got it
06:10:41toulmeanbrixen: reproducing ?
06:10:45toulmeanok
06:10:53toulmeannot sure. Sounds like a standard function.
06:10:58brixenyeah, I just need to add this capi function
06:11:02brixenand some specs for it
06:11:08brixenI'll work on this a bit...
06:11:23toulmeannot sure if there's more to it
06:11:28toulmeancool, thx
06:11:48toulmeanI need to blog about all this, it's pretty awesome
06:12:14brixenheh, well we should get it running before you do :)
06:13:59toulmeanbrixen: interesting. My C++ skills are so dusty, I'll try to grab your commit to understand it
06:14:08brixenok
06:14:45toulmeanbrixen: do you work for EY ?
06:14:56brixenyes
06:15:33toulmeancool
06:24:12toulmeanbrixen: so eventually... would it be possible to compile the code of Buildr to make it faster to read for the interpreter ?
06:24:23toulmeanbrixen: I mean, rubinius should be fast with this ?
06:24:41toulmeanBrixen: right now, we rely mainly on MRI
06:24:42brixenum, by compile you mean?
06:24:50toulmeanand we default to JRuby
06:25:26toulmeanbrixen: well, less overhead. The ruby code is interpreted. I tried to understand for example if there were ways to have the ruby code compiled in a jar for jruby
06:25:48brixenI'm actually looking at Buildr right now, I didn't know what it was :)
06:25:55brixenyou should just try some benchmarks
06:25:55toulmean:)
06:26:05brixenwe generally execute Ruby code much faster than MRI
06:26:05toulmeanbrixen: yes. That's the next step.
06:26:13toulmeancool
06:26:20brixenbut our core library (Array, Hash, String) is all in ruby
06:26:29brixenthis means it *may* be slower
06:26:49toulmeanas soon as we get rjb running, we can start playing.
06:26:51brixenbut, for instance, our Ruby hash with the JIT gets nearly as fast as MRI C code for some Hash ops
06:27:02brixenand the JIT is only going to get better
06:27:36brixenwe can inline Ruby core methods directly into your app code
06:28:09toulmeanok, that's awesome.
06:28:15brixenyes, it is :)
06:28:15toulmeansimply awesome.
06:28:25brixenand it is only going to get better, honestly
06:28:52brixenwhereas MRI is completely hobbled by its choice of technology, our ceiling is very high
06:29:07brixennot to brag or anything :)
06:29:13brixenit's all evan's fault really
06:29:49toulmeanblame evan, ok
06:30:01brixenheh
06:30:10brixenwell, he gets credit too, so I think it evens out
06:30:12toulmeanso rubinius has vaulted ceilings. Nice.
06:30:18brixenindeed
06:30:23brixennice analogy
06:30:24toulmeanok
06:30:46toulmeanso why the trouble of doing it ? To let people extend the core in ruby ? Or for perf ?
06:30:59toulmeanwhat was the reason why ?
06:31:23toulmeanis rubinius used in prod with rails somewhere ?
06:31:25brixentrouble of doing what?
06:32:07brixenI have heard there's some rails sites running on rbx, but not serious production sites yet
06:32:18brixenrubinius started as a hobby to write a vm for evan
06:32:26brixenthen he opened it up
06:32:43brixenhe's made some excellent architecture choices
06:32:50toulmeantrouble of doing rubinius I mean
06:32:50toulmeanok
06:32:52brixenand Ruby can just be a hell of a lot better
06:33:05toulmeaneven 1.9 is hobbled still ?
06:33:13brixenI started working on it because I love writing ruby code and I couldn't get into MRI
06:33:21brixenyes, 1.9 is terribly hobbled
06:33:40brixen1.9 has tons of C code
06:33:42brixenfor one
06:33:54brixenyou cannot simply inline that into app code
06:34:13brixenour core being written in Ruby means that it's all just bytecode
06:34:24brixenthe jit processes bytecode into machine code
06:34:32brixenalong the way, it can inline methods
06:34:38brixenright into your app code
06:34:48toulmeanok
06:34:49brixeninlining means that llvm has much more code to optimize
06:34:55brixenthat's where the win is
06:35:08brixenalso, rbx has an exact, generational garbage collector
06:35:22toulmeanI see. I thought ruby was a mere interpreter, but you guys got a full VM to do the job
06:35:26brixenby exact, that means it can see every object reference precisely
06:35:33toulmeanok.
06:35:40brixenmri 1.8 is an ast walking interpreter
06:35:45brixen1.9 is a bytecode vm
06:35:51brixenbut that is just the start of the story
06:35:57toulmeanok thx for explaining that
06:36:03brixenn/p :)
06:36:03toulmeanplease go on :D
06:36:07brixenit's really fun stuff
06:36:21brixenwell, you can see that 1.9 is already quite a bit faster than 1.8
06:36:31brixenthat's all to do with the switch to a bytecode vm
06:36:37brixenbut, what can the vm do?
06:36:41brixenjust execute your ruby code
06:36:51brixenall the C code underneath... the vm never sees that
06:37:00brixenfor rbx, it does
06:37:10brixenwhich means that in pure interpreter mode, it runs slower
06:37:18brixenbut let the jit operate on that, and voila
06:37:20brixenfast :)
06:37:24toulmeanhmm
06:37:26toulmeannice
06:37:33brixenalso, our gc is tons better
06:37:40brixenand we're not done with it yet
06:38:48toulmeanimpressive.
06:38:58toulmeanbrixen: so my trick question would be the installation story
06:39:21toulmeanI have worked with buildr for a while and in my experience all the native code was always the most troubled place
06:39:25toulmeanespecially RJB
06:39:48toulmeanit sucks big time. I hope the changes I made to make it compile with rubinius could help with stability.
06:39:51toulmeanIt's just a shame
06:40:11toulmeanit compiles against the JVM C headers, and against the MRI headers
06:40:31brixennative code is always problematic, sure
06:40:32toulmeanand sometimes it gives seg faults
06:40:39brixenplatform deps suck, etc
06:40:42toulmeanwe never were able to find out why or how or when
06:40:48brixenwe have better segfault protection
06:41:00brixenfirst off, our VM is more "type-safe"
06:41:15brixenin that, our primitive ops don't just operate on bit patterns in memory
06:41:26brixenwe use types in C++ so that we actually get type errors
06:41:34brixenbefore you start mucking with some bits
06:41:34toulmeanI got builds that stopped running, builds that worked, except when I changed the VM, or builds that always work but sometimes the GC of the JVM crashes
06:41:48toulmeanok.
06:41:52brixenrbx might help flush that out
06:42:01toulmeanbrixen: what's your coverage of OSes ?
06:42:11toulmeanmeaning, do you work on Windows 7 64 bits...
06:42:13brixenpretty much *nix atm
06:42:21toulmeanand do you need help with supporting those archs ?
06:42:32brixenwe have a couple contribs working on Windows, but it's very sporadic
06:42:39toulmeanfrankly Buildr 1.4 would be out a month ago wouldn't it be for Windows.
06:42:45brixenwe should be doing more with that now that 1.0 is out
06:42:51toulmeanok
06:43:10toulmeanI can setup a CI build for buildr on xp and one on win7 - maybe.
06:43:18toulmeanwe'll see.
06:43:51brixenwe are making some changes that will make building on Windows easier
06:43:58brixenprimarily the build system
06:44:02toulmeanoh
06:44:07toulmeanrake right ?
06:44:12brixenit uses rake now, yes
06:44:21toulmeanok. What would you change there ? gcc ?
06:44:25brixenbut it will be a pure Ruby (no rake) one soon
06:44:37brixenthe platform stuff will be specialized
06:44:42toulmeanwell I like rake, you should keep it :)
06:44:44toulmeanok
06:44:51brixenon Windows it will use whatever tool we need to use
06:44:52toulmeanbuildr is based on rake
06:44:55brixenrake sucks :)
06:45:01brixenI've battled with rake for years
06:45:04brixenno more
06:45:05toulmean:)
06:45:35toulmeanI can tell you, rake and buildr are so much mixed, it's hard to tell what's happening most of the time
06:45:45toulmeanAssaf Arkin started buildr as a DSL on top of Rake
06:45:50toulmeanI think he did a good job.
06:45:57toulmeanI need to try drake btw
06:46:26toulmeanso you didn't like the file tasks and ie ?
06:46:50brixenI do not like how rake resolves dependencies
06:46:57brixenrake clean build is impossible
06:47:00toulmeanthe good thing with buildr is that our code is quite complex but Assaf had set a good practice of doing specs all over the place.
06:47:23brixenbecause the deps are resolved, then clean runs and deletes them, then build fails because it does not know to build the stuff it needs
06:47:48toulmeanbrixen: oh ? ok, we don't have that in buildr
06:47:54brixenrules and file/dir tasks are great, but they are not tools to organize code
06:47:55toulmeanyou can do buildr clean package
06:48:12brixenall rakefiles I've ever seen are horrid
06:48:16toulmeanthey are not. They are pretty important to check on timestamps, build optionally, etc
06:48:21brixenthat is why things like Tap, Thor, and Boson are made
06:48:26brixenand they all suck as build tools
06:48:31toulmeanbrixen: tarpit ?
06:48:44brixenidk, I'll look at that
06:49:02brixenalso, file deps should be digest based, not mtime based
06:49:15brixenfinally, rake builds one dependency tree
06:49:34brixenthat makes it fundamentally impossible to use effectively in a project as complex as rbx
06:49:50toulmeanbrixen: http://github.com/intalio/cloud-orbit/blob/master/Buildfile is our latest Buildfile for a huge project
06:49:52brixenright now, we have to shell out to build all the c exts
06:50:08toulmeanhmm
06:50:24toulmeanbrixen: I was seeing someone on rake-devel who did a complex C++ build with it
06:50:33toulmeanbut no hope to open source the framework he used.
06:51:06toulmeanbrixen: ok for digest based - we have problems on windows with mtime
06:52:11toulmeananyways. What's the roadmap going forward ? Meaning, if we get buildr on top of rubinius running, will we get an official release of rubinius quickly ?
06:52:17toulmeanif we don't that's fine.
06:52:28toulmeanbut some people around here love MRI so much...
06:52:42brixenwe plan on a 1.0.1 release early next week
06:52:49brixenalso, our master branch is very sane
06:52:55brixenyou could run from it
06:53:01toulmeannice
06:53:05toulmeanyes I did that :)
06:53:12brixenbut we should be doing feature releases every 3-4 months
06:53:20toulmeanI mean, I did try running rjb with it.
06:53:20toulmeanok
06:53:28brixenour dev process is very different than MRI's
06:54:07brixenalso, we kinda wrote the book on rubyspec
06:54:17brixenand we'll be improving our assurance testing
06:54:26brixennow that we will have production users
06:54:33toulmeanrubyspec
06:54:50toulmean-> http://rubyspec.org/ ?
06:54:54brixenyes
06:55:01brixenthat started with rbx
06:55:06toulmeanok
06:55:30toulmeanbrixen. Ok, would it help if I fool proof your stuff on a xp machine somewhere ?
06:55:53toulmeanI mean, if I get rubinius to work on Windows, I can drop MRI, and sleep better at night.
06:56:07brixenwell, Windows support is still a bit out
06:56:16brixenbut we'll be working on it in the next couple months
06:56:20toulmeanbrixen: at least you would need what fails.
06:56:26toulmeanknow
06:56:31brixenfolks have it building
06:56:40toulmeangreat
06:56:45brixenif you want to help with windows, talk to luislavena
06:56:54brixenhe's the one-click maintainer for mri
06:57:04brixenand he's helping get rbx to cross-compile
06:57:15brixenbut we have to get it to actually run :)
06:57:17toulmeanbrixen: how about the windows installer ?
06:57:25brixenfor rbx?
06:57:32toulmeanI see you have an installer for mac
06:57:36toulmeannothing for windows ?
06:57:39toulmeanyep
06:58:07toulmeanok I'll open bugs to help with that - nsis could help you out. Low priority at best.
06:58:16toulmeanwill talk with Luis.
06:58:36toulmeanbrixen: for the CI build, rake ci is the way to go right ?
06:58:42brixenyeah, no installer for windows yet
06:58:53brixenjust rake will run the specs
06:58:57brixenand the vm tests
06:59:07brixenbin/mspec ci to run the specs
06:59:17toulmeanIf I set up a hudson instance that monitors evan's master, runs a CI job every night and sends an email, would that help ?
06:59:36brixenhelp with?
06:59:45brixenwe have a CI bot reporting here
06:59:49brixenyou mean on windows?
06:59:52toulmeanbrixen: help you. Get better with windows.
06:59:53toulmeanok
06:59:54toulmeanyes
07:00:03brixenhmm, probably would be cool
07:00:06brixenonce it runs :)
07:00:15toulmeanI can config the windows machine to do IRC too
07:00:28toulmeanthat bad, ok
07:01:02toulmeanwell. Think a Java dev can help you with supporting Windows ? :)
07:01:04toulmeanoh well.
07:01:11brixenheh
07:03:39toulmeanallright time to go to bed.
07:03:55boyscoutAdded rb_ary_delete specs. - 9820e43 - Brian Ford
07:03:55boyscoutAdded rb_ary_delete. - 18c45d0 - Brian Ford
07:03:58brixenok
07:04:09brixenyou can see what I did there with rb_ary_delete
07:04:17brixenI'll see how far I get now
07:04:21brixenbut I should get some sleep too
07:05:40brixenok, rb_class_inherited
07:06:08toulmeanthx
07:13:09boyscoutCI: rubinius: 18c45d0 successful: 3462 files, 13797 examples, 41457 expectations, 0 failures, 0 errors
07:28:10brixentoulmean: just fyi, I have the rest of the symbols resolved, need to write specs for everything
07:28:23toulmeanthx
07:28:23brixentoulmean: but I get a segfault loading :)
07:28:33brixentomorrow I'll look at it some more
07:28:36toulmeanhere we go...
07:28:38toulmeanok
07:28:39toulmeanthx
07:28:43brixenn/p
08:17:44dbussinkbrixen: http://blog.llvm.org/2010/05/clang-builds-boost.html
15:49:28marcandrebrixen: ping
16:19:31brixendbussink: woot
16:19:36brixenmarcandre: pong
16:19:49evanmorning.
16:19:58evanbrixen: so, we should talk releases.
16:20:06brixenevan: I'm working on the last couple symbols to get rjb loading
16:20:08brixenmorning
16:20:11evank
16:20:12brixenok, release
16:20:16brixenship it!
16:20:18toulmeanbrixen: you're my hero
16:20:19evan:)
16:20:26brixentoulmean: :)
16:21:00brixenevan: I thought you wanted to do 1.0.1 next week?
16:21:23evanI do.
16:21:43evanyou were remarking about why we should partition changes into bugfix/feature releases
16:21:49evanwe should continue that convo.
16:21:51brixenah yes
16:21:53brixenok
16:22:00brixenpor telefono?
16:22:05evansure
16:22:11brixenk
16:22:12evanyou wanna finish the rjb stuff first?
16:22:19brixennah whenever
16:22:25brixenI have a mouthful of bagel atm
16:22:26brixen:)
16:22:34evanhah
16:22:34brixenI'm typing with my mouth full
16:22:38evanok, i'll call in a few minutes.
16:22:41brixenok
16:33:37toulmeanbrixen: still hitting a segfault ?
16:33:42toulmeanjust wondering.
16:35:46brixenyeah, just starting to work on it though
16:42:22toulmeanok
16:53:54brixenhilarious http://www.centos.org/127_story.html?storyid=127
16:56:13brixenomg google.com folks
16:56:18brixenhow did I not see this
17:01:04evanbrixen: hah
17:01:09evanyeah, pacman!
17:03:47brixenheh
17:33:30dbussinkbrixen: so, is rbx more exotic than boost? ;)
17:33:49evani hope not!
17:33:52dbussinkevan: dunno if you saw it: http://blog.llvm.org/2010/05/clang-builds-boost.html
17:33:55dbussinkguess so :)
17:33:58evanI did.
17:35:04brixendbussink: depends what your taste in exotic is :)
17:40:54matthewdbrixen: RuntimeError: Don't know how to build C extensions with ruby1.8
17:41:48evanmatthewd: ?
17:42:12matthewdApparently my MRI's RUBY_NAME is 'ruby1.8', so capi/spec_helper doesn't like me
17:42:25matthewdObviously not an insurmountable issue :)
17:43:16evanhttp://vpri.org/pov/
17:48:45brixenevan: whoa, cool
17:57:10boyscoutAccommodate ruby exe naming. - 5715a35 - Brian Ford
17:57:32brixenmatthewd: ^^^
17:59:28matthewdbrixen: Thanks :)
17:59:35brixenn/p
17:59:50brixenthat all is hopefully getting a rework soon
18:00:22brixensince there is the rsoc jruby c ext project, I'll need to push c-api to rubyspec
18:04:51marcandrebrixen: hi!
18:05:03marcandreSo, what's up with floats? :-)
18:05:10boyscoutCI: rubinius: 5715a35 successful: 3462 files, 13797 examples, 41457 expectations, 0 failures, 0 errors
18:06:09brixenmarcandre: you tell me :)
18:06:14brixenmarcandre: we use gdtoa lib
18:06:26brixenand your spec fails, as I showed in that gist
18:06:37brixenweird thing is, last I looked, 1.9 used gdtoa too
18:06:39marcandregoogles up "
18:06:43marcandregdtoa"
18:07:42brixenmarcandre: just look in vm/external_libs/libgdtoa/README
18:08:28marcandreWhat's used for Float#to_s?
18:09:43marcandreI see stuff like "to_s_formatted "%#.15g""
18:10:01brixenmarcandre: snprintf
18:10:15brixenis used by the to_s_formatted primitive
18:10:17marcandreThe idea is that to accurately and minimally represent a float, you need anywhere between 15 and 17 decimals.
18:10:42brixenI think you need 55
18:11:10brixenbut I'm happy to be shown the error of my ways :)
18:11:32brixendid you look at my gist?
18:11:41marcandreI wrote before that I strongly disagree with the thinking that a float should be thought of as an exact value, I see a float as a small range of real numbers.
18:11:49marcandreBut that's not the issue here.
18:12:01marcandreCan you paste the ref again?
18:12:17brixenthinking about a float in any particular way doesn't change IEEE much ;)
18:12:38marcandreThat float I put in the specs is such that it needs 17 decimals to distinguish it from the next and previous float.
18:12:54brixenhttp://gist.github.com/407768
18:13:15marcandreIf #to_s outputs less than that, then #to_f will rightly convert it to some other float
18:13:17brixenmarcandre: I would accept that if there were a single canonical binary rep of a float
18:13:21brixenafaik, there is not
18:13:49marcandreWell, there is a single IEEE double rep of a float, no?
18:14:19brixenI'm not an expert
18:14:28marcandreDon't you agree that "any_float.to_s.to_f.should == any_float"?
18:14:35brixenI'm guessing the folks who wrote gdtoa lib are
18:14:46brixenno, I don't necessarily agree
18:15:03matthewdmarcandre: But you just said a float is a small range of real numbers ;)
18:15:05brixenI'm completely against roundtripping floats through strings that way
18:15:05evanseems like that can only be true if Float#to_s outputs absolute precision.
18:15:16marcandrePlease point me to the gdtoa library function that outputs a minimal string representation of a float.
18:15:20brixencompletely against
18:15:46brixenmarcandre: point me to where ieee says there must be that property?
18:15:57brixenI didn't write libgdtoa, I'm only a user of it
18:16:15marcandreevan: no, it can be true if #to_s outputs enough decimals for a given float, so that it does round trip. This number varies between 15 and 17 for IEEE doubles, as per the ref I gave on ruby-core
18:16:23brixenalso, where does MRI say that Float must have a minimal, exact string rep that can be roundtripped?
18:16:44marcandreI did, and it was accepted by ruby-core.
18:17:10marcandreSee page 4 of http://www.eecs.berkeley.edu/~wkahan/ieee754status/ieee754.ps
18:17:34brixenhmm, I'm looking at the ticket, I don't see that ref
18:17:46brixenlooks at ieee doc
18:18:08marcandreyeah, dunno why redmine didn't pick up my reply on the mailing list.
18:19:02marcandreYou'll see in the table that IEEE double have between 15 and 17 significant decimals
18:19:31marcandre(as well as other formats we don't use)
18:19:38evannot to throw a wrench in this discusion
18:19:40brixenthis does assume the float is a ieee double
18:19:48evanbut are we discussing Float#to_s behavior on 1.8 or 1.9?
18:19:57brixenboth
18:20:07evanwas there a change to Float#to_s in 1.8.7L
18:20:08evan?
18:20:16marcandreevan: ideally both. I don't think a change has been made to the 1.8 line though
18:20:41evanin which case, it's really just 1.9
18:20:50evanthat would have the expectation of that behavior.
18:21:29marcandreevan: you mean you'd like the specs to be "ruby_version" guarded instead of "ruby_bug" guarded?
18:21:42matthewdbrixen: If you have a moment, can I borrow an eyeball on [the specs in] http://gist.github.com/409207 ?
18:21:47evangiven the state of things, yes.
18:22:16evanif 1.8 has not change in any version
18:22:18matthewd(Incidentally, should CAPI specs still be split from the implementation for commit?)
18:22:27evanthen justifying it with ruby_bug is hard
18:22:41evanmatthewd: sure
18:22:50evanmatthewd: not really necessary, but might as well get in the habit
18:23:13marcandreevan: how about we consider it an open bug? I'll change the redmine issue to an open backport.
18:23:54brixenmatthewd: yes, split the specs
18:23:57evanthe issue with using ruby_bug in this case is that there is no version to say when it's fixed
18:24:01brixenmatthewd: the specs look good
18:24:05evanwhich is a requirement of ruby_bug
18:24:08evanso until it's backported
18:24:14evanit should probably remain a ruby_version issue
18:24:19brixenit's not really a bug, either
18:24:32brixenunless I missed where MRI said floats must roundtrip
18:24:33evanwhen it goes into 1.8, it could then be called a ruby_bug
18:24:34brixendid I miss that?
18:24:45evanbrixen: no need to be cheeky :)
18:24:51brixenI'm not
18:24:54evanit's not said, we know.
18:24:58brixenI'm being serious
18:25:01brixenno, I do not know
18:25:04evanbut if ruby-core would like to clarify in a future release
18:25:06evanthey may do so
18:25:11evanbut they have not done so in 1.8
18:25:19brixenthere was the whole discussion of Float#to_s and #inspect in 1.9
18:25:43brixenis it official now that Float must roundtrip through a #to_s or #inspect string?
18:25:54evanyeah, thats why I asked marcandre if that conversation governed 1.8
18:25:55brixenand are #to_s and #inspect now synonyms?
18:25:59evanhe indicated that ruby-core said it should
18:26:04brixenok
18:26:13evanbut ruby-core has not acted on that statement
18:26:16evanso it's empty atm.
18:26:28brixenlovely fun trying to find that explicitly anywhere
18:26:49evani'm infering from marcandre's statements
18:26:54evanmarcandre: do you have that rubymine bug?
18:27:04marcandreLook, all I care about is that Floats' decimal representation (1) round-trip and (2) be minimal. Unless anyone gives me a better definition, that's what should be, and if it's not, I believe it should be considered a bug. In any version. That's me.
18:27:07brixenanyway, libgdtoa behavior is clearly not consistent with this property
18:27:10marcandreChange the specs as you see fit.
18:27:23marcandrebrixen: I don't know that for a fact.
18:27:35brixenmarcandre: I'm trying the basis of you 1 and 2
18:27:53brixenmarcandre: I see this ieee doc, I've looked at it in the past
18:27:54marcandrebrixen: point me to the method that gives a minimal string representation in the lib. I suspect there isn't any.
18:28:08brixenbut it doesn't appear to conform to what libgdtoa does
18:28:26brixenand afaik, ieee double is not a CPU requirement
18:28:35brixenie, vendors are still free to choose their impl
18:28:45brixenwhich is *crazy*, I know!
18:28:47marcandreevan and brixen: what I'd like to understand is this: why are you not happy that there is a meaningful definition of the string representation of a float in Ruby? What would you like it to be?
18:29:01brixenmarcandre: see my last 4 sentences
18:29:20matthewdevan: Was my reading right that in CAPI, I need to `RBX_RTEST(x) ? Qtrue : Qfalse`, because of the differing values?
18:29:26evanmarcandre: i honestly have no opinion on it.
18:29:33marcandrebrixen: what is your proposal?
18:29:37evani'm strictly concerned with the behavior of 1.8
18:29:45evanas it pertains to these properties.
18:30:06brixenmarcandre: my simplest proposal is that no guarantee of roundtripping an exact binary rep is for a string is made
18:30:08evanthere are a number of things in 1.8 i would like to change
18:30:11marcandreevan: good. Well the behavior will hopefully change, in 1.8.7 or 1.8.8.
18:30:13evanbut we don't for a whole host of reasons.
18:30:23brixenmarcandre: consider this, I to_s a float to a string on my computer, and you to_f it on yours
18:30:35brixenmarcandre: there is no guarantee our computers use the same float binary rep
18:30:42brixenso, why impose this requirement?
18:31:23evanbrixen: one additional data point
18:31:33evanMRI runs on platforms with very different float representations
18:31:40brixenevan: that is my point
18:31:45brixenmy whole point really
18:31:54evani mean all the way down to ARM, M68k, etc.
18:31:55marcandreevan: which other float reps does MRI run on?
18:32:29evanmarcandre: i oversteped my point, which is that MRI runs on a lot of different platforms
18:32:47evanand, to my knowledge, there has never been any tests or verification that those platforms all use the same binary representation of a double
18:33:02evani can't speak to which platforms provide which behaviors
18:33:06evanonly that it's an unknown
18:33:10brixenafaik, C spec still does not require ieee 754 for double
18:33:21evanand thusly making a statement that it's a known is wrong unless a survey has been done
18:33:25brixenMRI is written in C using double, it therefore uses the libc double
18:33:42brixenthat is reason enough not to impose a Float must roundtrip in a String requirement
18:34:28marcandreWhen I asked for Float::INFINITY, this kind of discussion came up. Not all floating representations have infinities.
18:34:48evanah! interesting.
18:34:54brixenthe error of logic is that if ieee 754 says something, it must be true in all contexts
18:35:04brixenwe haven't established that yet
18:35:04evanmarcandre: so did they not inclued it because it's not possible to provide on all platforms?
18:35:07marcandreWe now have Float::INFINITY, though :-)
18:35:23evaneven though some platforms can't provide it?
18:36:03marcandreFrom what I remember, noone was able to provide examples of supported platforms that weren't IEEE
18:37:37evanok
18:38:02evanif ruby-core would like to clarify Float as saying that it's only support on platforms that are IEEE 754 compliant
18:38:05marcandreChecking wikipedia, I see that the Cray SV1 doesn't have IEEE floats
18:38:06evanthey're always welcome to do so
18:38:28evanbut I stand by the fact that 1.8 currently does not
18:38:51evannow, you can make the arguement that this is a terrible bug and should be fixed even if 1.8 has this behavior
18:38:59evanbut that is purely a judgement call on your behalf.
18:39:17evanand one that I am not required to follow.
18:40:01evanand, because rubyspec is defined in terms of "is" statements and not "should be" statements
18:40:15evanthe specs should be ruby_version guarded, not ruby_bug.
18:40:46evanagain, ruby-core is welcome to revise these properties and we'll adjust things
18:41:08evanmarcandre: cool?
18:43:01brixenmarcandre: also, could you show me Float::EPSILON in a string with 17-19 that roundtrips
18:43:08brixenmarcandre: or Float::MAX?
18:43:57brixenscratch Float::MAX
18:44:05brixenthats just equiv to a huge int
18:44:16marcandreDo as you wish. I have this sour taste in my mouth when I argue stuff like this. I just can't see what you guys are fighting for. I'm just trying to improve things. Having to justify things both on ruby-core and here doesn't feel like a great use of my time.
18:44:22brixenbut Float::EPSILON concerns me
18:44:29marcandrebrixen: rubydev -e "p Float::EPSILON.to_s.to_f == Float::EPSILON" # => true
18:44:34evanmarcandre: i'm not agrueing for or against the behaviro at all.
18:44:48evanmarcandre: i'm just trying to clarify what rubinius should do to be 1.8.7 compat.
18:45:18evanmarcandre: whats the output of #to_s look like?
18:45:37marcandreI say do what's best, which is to use 15-17 decimals. I put the issue as open and backport. But do as you feel is best.
18:45:46evanmarcandre: you don't need to justify it to me, I'll go the way that ruby-core does.
18:45:56dbussinkmarcandre: i think the problem is that there's no point in discussing here, because what rubinius will do is what ruby-core will do
18:46:30evanI wish ruby-core was more responsive about things like this
18:46:33dbussinkmarcandre: you can ask people here whether they would agree with ruby-core perhaps defining float as ieee, but that doesn't mean rubinius will implement that
18:46:58dbussinkmarcandre: because what rubinius implements depends completely on what ruby-core does
18:47:25brixenmarcandre: I'm still waiting for my 1.9 to rebuild, but do the core/float/constants specs pass for you?
18:48:00marcandredbussink: I'll repeat that, given any ieee representation system or not, my belief is that the only meaningful decimal string representation is the one that is both minimal and that round trips.
18:48:00brixenrubinius doesn't have a choice about whether the hardware uses ieee or not
18:48:30marcandreI've not heard of any other meaningful proposition, including today.
18:48:47brixenmarcandre: I could accept that if there were a single algorithm (or family of them) to guarantee that
18:48:57brixenmarcandre: do you think my position is unreasonable?
18:49:22brixenyou can't just say X is required, but in a field so obscure, not say how to show X is attainable
18:49:29evanbrixen: are the arguments to ruby_bug supposed to say when the bug is fixed?
18:49:54brixenruby_bug "#bug number", "last version with bug"
18:49:55brixenie
18:50:08brixenruby_bug "#1", "1.8.6.23"
18:50:14evanok
18:50:15marcandrebrixen: your proposition is that it doesn't necessarily round trips. I find that a very bad proposition. As for the algorithm, it is easily provable that there exists one.
18:50:17brixen1.8.6 p23 had the bug
18:50:45brixenmarcandre: so, your position is that libgdtoa is implemented wrongly?
18:50:56evanin the case of
18:50:56evan it "outputs the necessary number of digits to represent the float" do
18:50:58evanbeing guarded as
18:51:05evan ruby_bug "#3273", "1.8.7" do
18:51:07evanthat seems wrong
18:51:12evansince the bug is not fixed
18:51:19evan1.8.7 is not the last version it is present in
18:51:37evanright?
18:51:55brixenruby_bug guard is questionable period in this caes
18:52:02marcandrebrixen: I'm about to lose my temper, so I'll repeat for the third time: unless I'm mistaken, there is no method in libgdtoa which ouputs a minimal round-tripping decimal representation of a float. I suspect that you always have to specify how many decimals you want.
18:52:22brixenmarcandre: my gist is based on your spec
18:52:27brixenugh
18:52:34brixenno further discussion from me now
18:52:40marcandreby "there is no method that outputs", I mean that "there is no method whose contract is to output"
18:52:43brixenlose your temper elsewhere please
18:53:00evanboys boys.
18:53:06evanit's just floats.
18:53:11brixenno kidding
18:53:12brixenman
18:53:30marcandreI definitely do not want to lose my temper.
18:53:43evanmarcandre: i think for the time being, we'll have to agree to disagree then.
18:53:52evanonce again
18:53:56evantext chat makes people mad.
18:53:59evanDAMN YOU TEXT CHAT
18:54:03marcandreUnless you point to me a function in the lib that states it outputs a minimal representation, then I'll continue claiming the lib is fine, it's the usage of it that isn't
18:54:23brixenmarcandre: look at my gist, it's based on your spec, it fails
18:54:36brixenso, either the spec is wrong, or libgdtoa is wrong
18:54:53brixentrying to figure out which is the only question
18:55:10marcandreOups, LimeChat lost it :-)
18:55:21marcandreAnd I lost the gist too...
18:56:16brixenhttp://gist.github.com/407768
18:56:47brixenmarcandre: http://gist.github.com/409270
18:56:52marcandre0.21611564636388508.to_s #=> "0.21611564636388508"
18:56:53marcandre"0.21611564636388508".to_f #=> 0.21611564636388508
18:57:02marcandreWhat's the #to_s you're getting?
18:57:17marcandreOh, it has only 15 decimals, right?
18:57:52brixenI am copy-pasting from your spec
18:58:00marcandreIt is incorrect, it should use 17 in this case. As your gist shows. Ruby 1.9 does, Ruby 1.8 doesn't yet.
18:59:13marcandrebrixen: what's the question?
18:59:53brixenmarcandre: so, this spec is wrong?
18:59:59brixenit should use 17 digits?
19:00:56marcandreFor 0.21611564636388508, yes, to_s should output 17 digits, because 17 are not enough to distinguish it from the one before it.
19:01:11brixenlost
19:01:23evandid you mean "because 15 are not enough" ?
19:01:25brixenmarcandre: is the spec right or wrong?
19:02:04marcandreThe spec that "0.21611564636388508.to_s.to_f.should == 0.21611564636388508" ?
19:02:15brixenyes
19:02:29brixenI'm using exactly that and getting a failure
19:02:37brixenI'll remake the gist with each step, sec...
19:02:41marcandreIt is valid, although Ruby 1.8 doesn't respect it yet.
19:02:49brixenI'm not in mri, I'm in rbx
19:02:52brixenbear with me...
19:03:58marcandreMy ruby_bug guard for 0.56 doesn't make much sense, though. I'll remove it altogether, since that only appeared in 1.9
19:03:58matthewdNot really relevant, but interesting that my perl 5.10.1 doesn't round-trip that value either
19:04:23brixenmarcandre: ohhhkay, ready for this?
19:04:34brixenour #to_s returns 15 digits
19:04:42brixenso it is not libgdto
19:04:45brixenthankfully
19:05:02brixenso this spec should be more explicit
19:05:20brixenit needs to assert on the size of the string returned by #to_s
19:06:04brixenbetter, it needs to make an expectation with a literal string
19:06:08brixenlike all the other specs do
19:06:24marcandrematthewd: interesting. There might be other languages that make that mistake too, I don't know.
19:06:28brixenthe #to_f spec should assert that the value is the same
19:06:52brixenmarcandre: are you following me?
19:07:25marcandrebrixen: As you wish. I believe that spec is valid no matter what float representation is used, and also shows the intent, which is why I wrote it this way
19:09:10brixenyou can include the extra expectation on #to_f, but I insist the #to_s is compared to a literal string :)
19:10:04marcandreSure, you're welcome to change that.
19:10:20brixenof course I am, and you are as well :)
19:10:51brixenin general, the more explicit the spec, the better
19:11:03marcandreCool. I'll go back to work, then.
19:11:10brixenmarcandre: thanks
19:12:43cremesamazed at all the flames in rubinius and jruby channels the last 24 hours
19:13:02cremeschecking local water supply for contamination
19:15:56brixenthis still does not answer the question of Float::EPSILON
19:19:04brixenhmm
19:19:18dbussinkcremes: what were the jruby flames burning?
19:20:06cremesdbussink: it had to do with the nokogiri gem; the gem author and a user "had words" but they made up in the end
19:20:36brixenok, Float::EPSILON issue is again the number of decimal digits
19:20:43cremesit took place in channel but wasn't really a jruby flame fest :)
19:21:00brixenso, we need a set of specs covering common Float boundaries and their String representations
19:26:41matthewdHrmmm... is github confused, or did I just manage to do something silly?
19:27:14matthewdIn theory, I just pushed to master... but boyscout and the github web interface seem less convinced :/
19:27:43brixenI will venture that the conjunctive connective is perfectly plausible there :)
19:28:21brixenmatthewd: it pushed, I have it
19:28:40matthewdbrixen: ;)
19:31:39boyscoutImplement rb_is_{const,instance_class}_id() in CAPI. - 149a537 - Matthew Draper
19:31:39boyscoutSpec rb_is_{const,instance,class}_id() in CAPI. - 6086ae6 - Matthew Draper
19:35:29matthewdStill in CAPI... we define `VALUE rb_protect(VALUE (*func)(ANYARGS), VALUE data, int* status)`... but MRI says `VALUE rb_protect(VALUE (*func)(VALUE), VALUE data, int* status)`
19:36:53matthewdIs that just because we foolishly assumed that MRI would use the same signature for rb_protect as for rb_protect_inspect (ha ha, yeah right), or deliberate?
19:38:13dbussinkmatthewd: most likely the former :)
19:40:57boyscoutCI: rubinius: 6086ae6 successful: 3463 files, 13809 examples, 41469 expectations, 0 failures, 0 errors
19:44:38dbussinkclang error message are so much better :)
19:44:45dbussinkthey even have shiny colors!
19:45:27dbussinkof course rubinius doesn't get very far: https://gist.github.com/b93f162a9e1833bd6f19
19:46:04wayneeseguinevan / brixen Any idea what causes this? (configure error at the very end) http://gist.github.com/408992
19:47:21brixenwayneeseguin: configure script has a hash bang for env ruby ?
19:47:31brixenand you have no env ruby
19:47:32dbussinkwayneeseguin: looks like it wants ruby in the path
19:48:05dbussinkevan: that's what i got when trying to compile with clang (no illusion it would work, but wanted to try anyway)
19:48:06wayneeseguinbrixen: odd... it should have selected a 1.8.7...
19:48:17brixenwayneeseguin: hm, weird
19:49:09wayneeseguinI can't replace it locally so I'm trying to figure it out but that does help some
19:50:42brixenI can't wait to add configure.bat :)
19:56:15dbussinkbrixen: that sounds like fun!
19:57:22brixendbussink: heh :)
19:57:43brixenok, I think I have a function in libgdtoa to emit a shortest representation
19:57:51brixenbut I need some lunch first...
20:03:27evanwayneeseguin: ./configure is a ruby script
20:03:29evanis there no ruby?
20:03:50evanperhaps you meant to run configure under the ruby that rvm installs?
20:03:55evanrather than via /usr/bin/env ruby
20:04:05evandbussink: oh, that is a bug!
20:04:11evani have it declared differently
20:04:13evanoops!
20:04:21wayneeseguinevan: I have rvm installing and selecting 1.8.7 under rvm to install rbx
20:04:25wayneeseguinhence my confusion
20:04:36evanright, but i see it running configure as ./configure
20:04:44wayneeseguinyes
20:04:48wayneeseguinit does that in that selected env
20:04:49evannot explicitly via the 1.8.7 you also build
20:04:57wayneeseguinohhhh I should do 'ruby configure ...'
20:04:58wayneeseguin?
20:05:02evanexactly.
20:05:06wayneeseguinaha!!!!
20:05:08wayneeseguinbrilliant
20:05:18evanotherwise it uses the sheband
20:05:24evanshebang
20:05:28evanwhich is #!/usr/bin/env ruby
20:05:38evanand that system doesn't have a ruby in the PATH
20:06:48wayneeseguinwell 'rvm use 1.8.7' is supposed to set a ruby in the path though
20:06:49evanbrixen: when you get back
20:06:53evani don't mean to beat a dead horse
20:07:10evanbut we don't appear to use libgdtoa for printing for a double
20:07:24evanwe use snprintf, passing in .15g
20:07:42evanwayneeseguin: perhaps there is another bug then.
20:09:30wayneeseguinevan: I'm trying with the 'ruby configure ...' now
20:09:40evank
20:13:11brixenevan: yeah, we use snprintf, but instead of trying to port MRI's fix, i want to see if libgdtoa will do it for us
20:13:34brixenthe minimal vs exact repr of a double is quite the important idea
20:13:48evanok.
20:14:09brixenand hence why that spec was very misleading
20:14:40brixenI was off in the "libgdtoa is not converting binary -> string correctly" weeds
20:14:54brixenwhen in fact, we were not giving it the right string
20:15:16evanright
20:15:24evanit's a Float#to_s issue.
20:15:28evannot a String#to_f issue.
20:15:28brixenyeah
20:15:33brixenright
20:16:10evanso, I've added rbx console
20:16:18evanwhich connects to the query agent of another rbx
20:16:25brixenheh, nice!
20:16:32evanand i've got it setup so that when you start the query agent, it writes a file into $TMPDIR
20:16:36evanthat says where it's located
20:16:45evanand rbx console can read them to find where to connect to
20:17:03evanif you've only got one rbx running
20:17:08evan'rbx console' just works
20:17:22brixensweet
20:17:40evani'm going to add a backtrace command
20:17:48evanthat will gather up the ruby and C backtraces of all the threads
20:17:51evanand ship it across
20:18:01brixenoh happy times!
20:18:04brixenthat is excellent
20:18:43brixensay I have 2 rbx running (in specs), how do I say which to connect to?
20:19:05dwaitecould you make sigquit dump all the threads and any gc/ffi information to stderr before quitting? :)
20:19:23evandwaite: if you'd like.
20:19:29evanbrixen: it asks you
20:19:34brixenevan: ok cool
20:19:37evanit prints them out and you say which one you want
20:19:47evanthe tmp file has the contents of argv
20:19:52evanto help you figure out which you wanted.
20:19:56brixensuspects dwaite is an FBI agent, he shows up as soon as we start talking query agent
20:20:38brixendwaite: how's LL coming along?
20:20:39dwaitesomeone once told me that I would make an excellent NARC
20:20:45dwaiteLL?
20:20:52brixendwaite: Learning Lua :)
20:20:57dwaiteohhh
20:21:04dwaitenot too good so far
20:21:14brixenget stuck in a table?
20:21:17dwaiteI think I might need to quit WoW to become a productive member of society again
20:21:22brixenhaha
20:21:39dwaitebut my toon is so awesome now :'(
20:21:54brixenheh
20:22:34slavahi brixen
20:22:45evanslava: sup
20:23:19brixenhi slava
20:29:18brixendbussink: if you are still awake, I want you to know I am enjoying a delicious wafer filled with sweet, creamy caramel at this very moment
20:29:29brixendbussink: courtesy of Daelmans :)
20:30:53rueEwww..strawberry jam and (ice)? cream goes with waffles
20:31:34evanrue: yummy!
20:31:44brixenno doubt
20:32:14brixenthe thought of that is making my stroopwafel seem paltry
20:35:18slavaworking on DLS paper
20:41:00evanrad
20:41:11evanthe queryagent can halt all the other threads nice and easily
20:41:14evanbecause of the GIL
20:41:21evanand then gather info safely.
20:44:01brixenslava: DLS?
20:48:17slavadynamic languages symposium
20:48:30slavahttp://www.dynamic-languages-symposium.org/dls-10/
20:49:50evanoh my!
20:49:55evanoopsla changed it's named?
20:50:30evansort of.
20:51:30brixenoh interesting
20:51:49evanhm, i wonder how I can use backtrace() on another thread...
20:52:14brixenodd, this g_dfmt function wants the address of the double
20:52:18brixenI wonder why
20:53:13evandoes it change it?
20:53:48brixenheh, I don't know
20:56:09brixenI wouldn't expect it to, but fun code to trace https://gist.github.com/72e2b83303c628356ba5
20:56:12brixen:)
20:57:00evanbrixen: perhaps because it converts it to a ulong*
20:57:08evanso it can read the double's memory directly.
20:57:55brixenhmm
20:58:11brixenyou think pass by value to the function could change the bit patter?
20:58:14brixen+n
20:58:26brixenahh the pitter patter of little bits
20:59:27brixenthat was tweet-worthy :)
21:00:40evanbrixen: no, but he'd do it for efficience probably.
21:00:50brixenhmm
21:01:01brixenI guess passing an int would be faster, then?
21:01:12brixenit would fit in one reg
21:01:28brixenint == pointer word
21:02:31evansame though
21:02:37evanpassing as a double* is the same as passing as an int
21:02:48brixenright, that makes sense
21:03:08slavaan int is not a pointer word on 64-bit
21:03:22evanslava: he didn't mean int, the C type directly.
21:03:25evanjust an integer.
21:03:30slavaok
21:03:34brixenyeah
21:03:53slavaalso, don't use long as a synonym for a pointer-size int either
21:03:58slavabecause on win64, longs are 4 bytes
21:04:01brixenyeah, I know
21:04:04brixenfun stuff
21:04:11evanfucking win64
21:04:15slavaporting factor to win64 ws a bit painful because of that
21:04:23slavaalso SEH is really complicated
21:05:23evanrad. backtrace in console works.
21:05:27brixensweet, 0.21611564636388508.to_s_minimal => ".21611564636388508"
21:05:36brixenso hopefully I just need to touch up the repr
21:06:17brixenoh hells yeah, Float::EPSILON.to_s_minimal looks good
21:06:22brixenthank you libgdtoa
21:06:55brixennot that I don't trust MRI C code or anything <wink, wink, smile, wink>
21:09:47evanheh
21:12:50toulmeanbrixen: remember your thing about rake using mtime and not digest ?
21:13:03toulmeanbrixen: how more costly would it be to implement digest ?
21:13:18toulmeanwe have failures on win7 due to mtime
21:13:40brixentoulmean: depends on the digest function to some extent
21:13:52toulmeanbrixen: depends on the file size too ?
21:13:55brixentoulmean: I guess the cost depends on whether the build is more robust
21:13:58brixenyes
21:14:01brixenthat's what I mean
21:14:11toulmeanthat's unfortunate.
21:14:20toulmeanhmmm
21:14:27brixenit's probably not a big deal actually
21:14:36toulmeanmtime is O(1), we have a digest O(n) ?
21:14:38brixendo you have megabytes of source?
21:14:54evansha1 isn't O(n)
21:14:56evani don't believe.
21:15:19brixenseems like any digest would have to be O(n)
21:15:27brixenit's got to consider every byte
21:15:28toulmeanbrixen: more like buildr package will only recreate the package if the filetask for the war or jar it creates has a mtime different
21:15:31evani suppose.
21:15:49toulmeanwe have artifacts of 350 mb max
21:15:53toulmeanlet me see
21:16:05brixen350MB artifacts??
21:16:15evanyikes.
21:16:21brixenholy cow, are you building OS distros?
21:17:23toulmeanbrixen: dude, we're building the CLOUD
21:17:31toulmeannext thing you know we'll go to space
21:17:38brixenheh
21:17:43toulmeanand yes this is EE java. In all its beauty
21:17:46brixenohh, well when you put it like that...
21:17:51toulmeanit's actually very lean
21:17:54toulmean:)
21:17:59brixensounds like it
21:18:01brixen:)
21:18:09toulmeanif you could see the size of an IBM websphere download
21:18:10toulmean2 Gb
21:18:19brixenwowsers
21:18:27toulmeanor the JBoss server, as a .tar.gz, easily 300 mb
21:18:32toulmeanwithout any apps on it
21:18:35toulmeanjust for fun
21:18:52toulmeanok our zip is 70 mb and md5 needs 3s to consider it
21:19:00toulmeanwhat I can do: fork rake and try it out
21:19:03brixenI like reading how one reason the jvm was stack based is because it requires smaller bytecode, which was important when the bytecode is passed over the internet
21:19:03toulmeanwill report.
21:19:18brixenthen ppl build the most huge projects every with java
21:19:24brixen-y
21:19:30toulmeanya
21:19:40toulmeanwell I don't send bytecode over the tubes
21:19:42toulmeanthx much
21:19:50toulmeanI use REST or SOAP...
21:20:43brixentoulmean: so, easy way around this... file tasks take a option to use mtime vs digest
21:20:49brixenand you could set it globally too
21:20:59brixenyou could mtime your huge stuff like packages
21:21:10brixenand digest the source for compiling
21:21:21brixenpossibly
21:21:31brixenfrankly, it's a problem I do not have building rbx
21:22:48toulmeanyes
21:22:52toulmeanyes for the option I mean
21:22:58toulmeanfor the rest I am just jealous
21:25:08toulmeanfinally found a reason to fork rake!!
21:25:10dbussinkevan: clang is catching some more type errors :)
21:25:20evanoh?
21:25:24evangist?
21:26:00dbussinkevan: mostly struct / class intermixed
21:26:38evani saw it complaining about "void* body[]"
21:26:40evandid you fix that?
21:26:49dbussinkevan: and a few of those yeah
21:26:50toulmeanbrixen: did you make headway on the rjb stuff ? Just curious. I guess I should recontact you after the next release or so
21:26:58dbussinkevan: walking through it now, will show a gist if i'm through
21:27:03evanwhat did you to do fix them?
21:27:09evanuse 'void* body[0]' ?
21:27:20dbussinkevan: void** body
21:27:27brixentoulmean: I'll be back to it in just a bit
21:27:27evanthats wrong.
21:27:32evandbussink: thats not the same.
21:27:33brixentoulmean: fixing Float issues atm
21:27:47dbussinkevan: what's the difference exactly then?
21:27:58dbussinkbecause it wasn't complaining about accessing stuff
21:28:03evan"void* body[]" is "magic"
21:28:19dbussinki didn't know that :)
21:28:24dbussinkhow's it magic?
21:28:25toulmeanbrixen: plz, no pressure
21:28:26toulmean:)
21:28:27evanit says that you can access the memory of the enclosing structure directly
21:28:31evanso when you have
21:28:41evanstruct A { int a; int blah[]; }
21:29:02evanA* t = ....;
21:29:15evan&t->a == 0x0
21:29:24evan&t->blah[0] == 0x4
21:29:28evan&t->blah[1] == 0x8
21:29:52evanvoid** says that it stores a pointer that referes to some other memory that contains an array of voids
21:30:17dbussinkah ok, but should void* body[0] be the same?
21:30:20evanthe key thing is that 'int blah[]' doesn't actually count toward the size of A
21:30:32evanyeah, void* body[0] should be the same.
21:31:42dbussinkevan: sort of dynamically sized structs?
21:32:00dbussinkor class instances for that matter when having an ivar?
21:32:15evanyeah, dynamicly sized structs
21:32:31evanit's a common idiom
21:32:35dbussinkand that [0] is magic too then i guess?
21:32:40evanwhere the header is fixed size and the body is dynamic
21:32:41dbussinkbtw, uint8_t bytes[]; => uint8_t bytes[0]; ?
21:32:51evanand use the data in the header to know how much data is in the body
21:32:56dbussinkso you'd always have that one last i guess then?
21:32:59evanyeah, [0] should be the same.
21:33:01evanas []
21:33:08dbussinkcan't have multiple of those in one class / struct etc.
21:33:18evanwith [0], you just read past the end
21:33:20evansince the end is the start
21:33:36evanthe key, again, is that the C compiler doesn't allocate space for the array by default
21:33:41evanbecause the header could say that there is no body
21:33:46evanso you can't do [1], for instance
21:33:48dbussinkthat's manually managed then
21:33:58evanyes
21:33:59evan!
21:34:02evanyou can only have one
21:34:07evanand it must be the last struct member
21:34:27dbussinkand each allocation has to be allocated with the needed size
21:34:34dbussinkwhich determines how much room there actually is
21:35:45dbussinkanother fun one: vm/exception.cpp:52:22: error: variable length arrays are not permitted in C++
21:35:45dbussink void *stack_addrs[max_depth];
21:35:47rueevan: Going to go watch the race tomorrow?
21:35:47evanright
21:36:03evanyou use malloc() to allocate space for the header and the body
21:36:17dbussinki already like clang much better for the error messages :)
21:36:18evandbussink: ha
21:36:18evanok
21:36:22evanrue: which?
21:37:43dbussinkevan: should i calloc that?
21:37:52evanwhich?
21:38:05dbussinkevan: that variable length array?
21:38:14evansure
21:38:25evanbe sure to free() it at the end of the function
21:38:34evanor, rather, near the other free
21:42:12toulmeanbrixen: there is a problem with the digest approach, it requires each prerequisite to compute its digest when the application starts.
21:42:27dbussinkevan: also with calloc?
21:42:34evan?
21:42:35slavaevan: do you ever use alloca?
21:42:41evanslava: yeah
21:42:44toulmeanbrixen: rake executes a task when any of the prerequisites of a given task have a stamp higher than the stamp on the current task
21:42:48toulmeansee the diff ?
21:43:01dbussinkevan: nvm
21:43:10rueevan: Tour of California has an individual time trial in LA tomorrow
21:43:17evanoh right.
21:43:26evana friend from seattle is going
21:43:30evani'll see, maybe.
21:43:36toulmeanmtime actually serves to unify the system - only run the jar packaging if one or more classes are newer than the jar.
21:43:51dbussinkevan: something like this? https://gist.github.com/c1c356f5fa761547819a
21:43:51toulmeanyou can't keep track of that using digests
21:44:20evandbussink: thats calloc you're calling
21:44:21evannot malloc
21:44:27evaneven though you used the word "malloc"
21:44:30dbussinkevan: doh, that's not right no
21:44:44evanit's also wrong.
21:45:05evanreturn value of calloc should be cast to a void**
21:45:58brixentoulmean: I do not plan to duplicate how rake computes the dependencies
21:46:18toulmeanbrixen: well I was doing it :)
21:46:23dbussinkevan: any preference to calloc or malloc?
21:46:32brixeng_dfmt is such a lovely function, even getting +-Infinity and NaN string right, but has an aversion to 0
21:46:35brixen:(
21:46:37evandbussink: calloc
21:54:19dbussinkevan: it's slowly getting there :)
21:54:43evanheh
22:38:01brixenarg, this is giving me a case of the frownies
22:38:11evanuhoh!
22:38:14evanyou need a brownie!
22:38:14brixenmri starts using e notation when the whole part exceeds 14 digits
22:38:19evanto stave off the frownies!
22:38:23brixeng_dfmt when it exceeds 12 digits
22:38:31brixenI wish I had a brownie dessert
22:38:39brixenand some latte :)
22:41:40evanbrixen: almost got it sorted so the console lets you do
22:41:41evanbt --vm
22:41:54evanand it connects to the VM via gdb and gets a backtrace of all the threads
22:42:11brixenawesome
22:42:13evani've also got a gdb command to drop into gdb
22:42:15evanof course
22:42:16evan:)
22:42:19brixenhah
22:42:22brixenof course!
22:44:53dwaitemmm, latte and browny
22:44:55dwaitebrownie
22:45:01dwaiteyou guys know how to party
22:45:05dbussinkevan: w00t, it compiled all cpp files with clang :)
22:45:13evanwoop!
22:45:14evandoes it run?
22:45:20brixendbussink: sweet!
22:46:18dbussinkit's now some hybrid build though, linked with g++, some c extensions build with gcc, some with clang too
22:46:36dbussinkbut i can open irb :)
22:46:45brixendbussink: run the specs! :)
22:46:59dbussinkbrixen: already on it :)
22:47:03brixenheh
22:47:11brixenfun times ahead
22:47:21brixenthanks all the llvm devs
22:47:22dbussinklooking good
22:48:11dbussinksigv...
22:49:09evandbussink: could you gist your current diff?
22:49:40dbussinkevan: https://gist.github.com/c6409fbe016e7e95e797
22:51:05evanpretty simple
22:51:18evani'm curious why you moved that public: decl
22:51:33dbussinkevan: because stuff is accessing that
22:51:49evanlike?
22:51:55evanwhy would g++ allow it?
22:52:42dbussinkevan: vm/llvm/jit_runtime.cpp:32
22:52:47dbussinkevan: i don't know :)
22:57:13dbussinkhmm, didn't segfault the second run
22:57:28brixeneverything pass?
22:58:26dbussinkbrixen: yeah
22:58:53brixenvery nice
22:59:11brixendbussink: I see this has really captivated your interest :)
22:59:18brixenup late on a fri night
22:59:24dbussinkbrixen: i just like trying stuff ou
22:59:34brixenheh, yeah, the clang stuff is awesome
22:59:38dbussinkbrixen: semi watching tv a bit, it's a lot of waiting ;)
23:00:46dbussinkevan: shall i push this stuff?
23:00:48brixenmy new apt looks out at a church tower 2 blocks away in which a bell mercilessly tolls the passing of each half hour
23:00:53brixenit's really vicious
23:01:48evanbrixen: ug.
23:02:07evandbussink: sure
23:02:25dbussinkbrixen: also on sunday morning for a longer period when you're trying to sleep in?
23:02:27boyscoutwhitespace fix - 4d0a4e2 - Evan Phoenix
23:02:27boyscoutAdd backtrace and discover ability to QueryAgent - 058bc9f - Evan Phoenix
23:02:27boyscoutStarted on the console, pulled in our own copy of bert - c60543d - Evan Phoenix
23:02:28brixenI'm trying to modify g_dfmt to output the right format, rather than fixing it up post
23:02:51brixendbussink: heh, at 10! they have this really long tolling nonsense
23:03:03brixendbussink: but I'm already up preparing for my training rides
23:04:13brixenI love the comments in this code
23:04:42brixenlike /* Infinity or NaN */ right before it copies "NaN" and returns
23:04:55brixenand /*d == 0.*/, right before it returns "0"
23:05:12brixenbut um, think there's any comments before the crazy stuff?
23:05:16brixenget out of town...
23:05:49toulmeanyou could be debugging java code...
23:06:10brixentoulmean: *you* could be debugging java code... oh wait, nvm :)
23:06:59toulmeanI was trying to make you feel better...
23:07:04toulmean:)
23:07:18brixenheh, I know
23:07:24brixenit's not working :P
23:08:10boyscoutInitial work to enable compiling with clang - 6f92669 - Dirkjan Bussink
23:11:56boyscoutCI: rubinius: c60543d successful: 3463 files, 13809 examples, 41469 expectations, 0 failures, 0 errors
23:12:34toulmeanok I'll shut up.
23:18:47brixentoulmean: no worries, I'm just kidding
23:19:14toulmeanoh I'm good. I wish I could help, really
23:19:47brixenheh, well someone else already did the hard part, I just have to figure out what the hell they did :)
23:23:53toulmeanok, where is that stuff you're working on ?
23:25:01brixenwhich?
23:25:39toulmeanthe stuff you mention that needs doc
23:26:00toulmeanI guess you are looking at the MRI code and trying to replicate it inside rubinius with the optimizations you can afford
23:26:20toulmeanand you are telling me they did mostly the job, but they documented it in a parse way
23:26:29toulmeanso I'm asking where is that MRI code ?
23:26:58brixenI'm looking at vm/external_libs/libgdtoa/g_dfmt.c and fixing it to output a string in the same format as MRI
23:29:37toulmeanbrixen: and where do you go for MRI code ?
23:29:50toulmeanalso, don't you have a spec for it in your ruby test suite ?
23:31:17brixenindeed we do
23:32:33toulmeanbrixen: and that doesn't help you at all ?
23:32:49brixennot sure what ya mean
23:32:54toulmeanactually, I'm wondering if you work against the spec or the MRI code
23:33:02brixenthe spec
23:33:22toulmeanit looks like you refer to MRI: "output a string in the same format as MRI"
23:33:52toulmeanwhile I would expect you would say: "We are trying to be spec compliant by outputting a string in the appropriate format"
23:34:22brixenMRI is the "appropriate format"
23:34:36brixenin that MRI decides what that format is
23:35:11toulmeanno spec for it ?
23:35:22toulmeanhmm that code gives me a nosebleed
23:35:35brixenno spec for whatL
23:35:37brixen?
23:36:16toulmeanfor the format of the String ?
23:36:20toulmeanoh well.
23:36:30brixenthere are specs
23:36:38brixena little bit wonky atm, but there are specs
23:36:45brixenthat's what I'm trying to match
23:38:34evanbrixen: got any points charlie and I should hit in our railsconf talk about weird ruby stuff?
23:38:52boyscoutAllow for a random server port to be used - 436e637 - Evan Phoenix
23:38:57brixenhmm, not offhand
23:40:01evank
23:40:36evani'm looking for antipatterns
23:40:38evanif you have any
23:40:39evani've got a few.
23:40:59brixenhm
23:41:22brixennever can harp on the composition vs inheritance enough
23:41:30brixenif that qualifies as an anti-pattern
23:42:27evanoh it does.
23:42:34evanwell, maybe
23:42:38evanbut i'm bringing it up anyway
23:42:40evanthanks for reminding me
23:42:50evanalso, i'm thinking about renaming -Xagent.port
23:42:53evanperhaps -Xagent.start?
23:43:05evanbecause if you do just -Xagent.start
23:43:14evanit picks a random port that console can find in the temp file
23:43:19evanor -Xagent.start=<port>
23:43:27evanto assign one explicitly
23:43:34brixenthat seems reasonable
23:44:18evanis agent.start a good name?
23:44:33evanshould I be putting a rbx prefix on it?
23:44:43brixennah, just agent
23:44:47evan-Xus.rubini.agent.start
23:44:50brixenwe removed all the rbx.
23:44:54brixeneeww :P
23:44:58evanhehehe
23:44:58evank
23:50:48boyscoutCI: rubinius: 436e637 successful: 3463 files, 13809 examples, 41469 expectations, 0 failures, 0 errors
23:53:08boyscoutRename agent.port to agent.start - 8a4758c - Evan Phoenix
23:53:14evanheh, it's pretty rad
23:53:20evanjust throw -Xagent.start in there
23:53:23evanthen in another window
23:53:29evanrbx console
23:53:32evanand you're in.
23:53:41evanthere is no step 3
23:55:19brixensweet, I shall try it
23:56:51evannext step is to allow console to run ruby code in the target rbx
23:58:35brixenwait, what? it doesn't do that yet? :)
23:59:04brixen<3 git stash