Show enters and exits. Hide enters and exits.
| 00:04:57 | brixen | evan: rad screen cast |
| 00:05:43 | evan | it's pretty funny |
| 00:05:44 | brixen | Defiler: yeah, fascinating |
| 00:05:54 | evan | since it's straight me debugging |
| 00:06:01 | evan | so there are the pauses where i'm thinking |
| 00:06:07 | evan | or sentenses that just end |
| 00:06:21 | brixen | Defiler: my response to scala is getting to be "*yawn* le'me know how that works out for ya" |
| 00:06:51 | brixen | evan: yeah, I've been there in person, but I think it's pretty effective to show others this |
| 00:06:56 | Defiler | brixen: to be honest that was my initial reaction after using it |
| 00:07:23 | Defiler | we built a pub/sub system out of it at work, stepped back, laughed, and deleted it |
| 00:08:01 | brixen | Defiler: hah, that's funny |
| 00:08:34 | Defiler | scala people need to learn about redis, is my take |
| 00:08:35 | brixen | Defiler: you obviously would rather document your work style and practices in minute detail |
| 00:08:54 | Defiler | absolutely |
| 00:09:03 | Defiler | I would hate to accidentally complete a project |
| 00:09:09 | evan | when you have static typing |
| 00:09:13 | evan | everything is crystal clear |
| 00:09:16 | evan | you didn't know that? |
| 00:09:18 | brixen | everything |
| 00:09:23 | evan | C++ is like reading poetry |
| 00:09:55 | evan | it doesn't read like an instruction manual for putting together jet engine in russian |
| 00:09:58 | evan | no, not at all. |
| 00:10:01 | Defiler | and Scala is like reading Vogon poetry |
| 00:10:33 | brixen | static typing: handling the easy bugs you mostly won't have so you can pull you're hair out on the hard ones. |
| 00:10:37 | brixen | (tm) |
| 00:10:49 | Defiler | every Scala developer needs to read The Black Swan |
| 00:11:02 | Defiler | hell, every static typing cheerleader |
| 00:11:14 | Defiler | I build for the bugs I will never hear about |
| 00:11:18 | Defiler | not the mistakes I plan to make |
| 00:11:30 | evan | I like to ask scala devs "thats amazing! everything works perfectly the as soon as it parses? never any bugs! awesome!" |
| 00:11:36 | evan | s/ask/tell/ |
| 00:11:40 | Defiler | haha that is awesome |
| 00:11:44 | Defiler | going to start doing that |
| 00:12:05 | Defiler | With a really wide-eyed earnest look |
| 00:12:10 | evan | totally |
| 00:12:24 | Defiler | I am here to pick up some tablets, Lord |
| 00:12:25 | evan | and be really hurt when they say "well, no, it doesn't always work perfectly." |
| 00:12:37 | Defiler | "Oh, are they working on fixing that?" |
| 00:12:54 | evan | Um, yeah, Moses, I've got ticket number 16, sorry I'm late there was traffic in the desert. |
| 00:13:05 | Defiler | I had to set fire to a bush |
| 00:13:12 | Defiler | long story |
| 00:13:16 | evan | heheheh |
| 00:14:04 | Defiler | If you made me use the JVM and told me I couldn't use JRuby, I would probably go with Clojure |
| 00:14:11 | Defiler | which is at least fun |
| 00:14:29 | Defiler | Scala is like peeling band-aids off hair, forever. |
| 00:17:54 | boyscout | CI: Commit 7a928de failed. http://github.com/evanphx/rubinius/commit/7a928de9828d69fd4fc0d320fe27d9a1405b90da |
| 00:18:40 | brixen | ahh the poetry spec |
| 00:18:51 | brixen | come to bid good day |
| 00:24:09 | evan | that spec keeps failing randomly |
| 00:24:13 | evan | I change it in hydra |
| 00:24:17 | evan | i should change it in master too. |
| 00:24:36 | evan | anyway |
| 00:24:39 | evan | brb. |
| 02:43:35 | drnic | if I require a file "foobar" and only the "foobar.rbc" file exists, should it find + load it ok? |
| 05:19:17 | dbussink | evan: hmm, looks like your vm_spawn addition breaks gdb here on my system |
| 05:19:53 | dbussink | evan: https://gist.github.com/4d3ccadc7fbfea907c06 |
| 16:40:10 | evan | dbussink: did you watch the video? |
| 16:40:35 | tarcieri | wtf @ precedence of ** |
| 16:40:41 | evan | eh? |
| 16:40:46 | tarcieri | -2 ** 2 is -4 ? |
| 16:41:16 | brixen | yep |
| 16:41:26 | tarcieri | that's... odd |
| 16:41:30 | evan | wow, that is weird. |
| 16:43:05 | boyscout | Keep reading if read(2) gets EINTR - 4a5227f - Evan Phoenix |
| 16:43:21 | boyscout | Keep reading if read(2) gets EINTR - b59b0fe - Evan Phoenix (hydra) |
| 16:48:24 | brixen | wtf? http://github.com/rubyspec/rubyspec/issues/#issue/22 |
| 16:48:40 | evan | *shrug* |
| 16:49:08 | evan | maybe he's saying that capi shouldn't be spec'd at all |
| 16:49:11 | evan | in which case |
| 16:49:14 | evan | *eyeroll* |
| 16:49:17 | brixen | exactly |
| 16:59:22 | brixen | evan: thoughts on http://github.com/evanphx/rubinius/issues/#issue/441 |
| 16:59:44 | evan | we can support it |
| 16:59:53 | evan | but we discussed it back when you were redoing require, as I recall |
| 17:00:02 | evan | and decided we didn't need it |
| 17:00:14 | brixen | yeah, I detail the 2 issues with supporting it in that ticket |
| 17:00:26 | brixen | but the bigger issue is you really get nothing from it |
| 17:01:27 | evan | so |
| 17:01:37 | evan | my position on this has always been leave the door open |
| 17:01:38 | brixen | what we have for loading the bytecode compiler would work for any case where you have a dir tree of compiled files |
| 17:01:41 | brixen | and you load the rood |
| 17:01:45 | brixen | er root |
| 17:02:43 | evan | i think all of those can be tabled while question 2 is considered |
| 17:03:03 | evan | namely: do .rbc files provide the level of obfustication that someone wants? |
| 17:03:31 | evan | until that question is answered to the users satisfaction, we don't need to worry about the other part |
| 17:03:31 | brixen | not at all, IMO |
| 17:03:54 | evan | ie, we shouldn't worry about shipping a car from europe if the user doesn't even want the car. |
| 17:03:57 | brixen | the bigger question for me is how this interacts with #require semantics and $L_F |
| 17:04:11 | brixen | if we have this facility, it will be used |
| 17:04:21 | evan | right, so we should get the semantics right |
| 17:04:25 | brixen | and the misunderstanding around it to this point means it will be misused |
| 17:04:28 | evan | but the semantics need to be driven by a user case |
| 17:04:39 | evan | i'm fine having drnic drive it that as a use case |
| 17:04:40 | brixen | we have a nominal use case |
| 17:04:42 | evan | if he'd like to. |
| 17:04:45 | brixen | obfuscation |
| 17:05:29 | brixen | regardless of the strategy used for obfuscation (ie loading .rbc or encrypted files), we still need to have the #require semantics correct |
| 17:05:37 | evan | right |
| 17:05:45 | brixen | we already side-step that with the special require that we have for the compiler |
| 17:05:48 | evan | so perhaps it should be a feature that can be turned on |
| 17:05:50 | evan | and is off by default |
| 17:06:01 | brixen | it's a completely different method |
| 17:06:02 | evan | here are the semantics that feature would create: |
| 17:06:10 | brixen | so we can't be incompatible with MRI |
| 17:06:39 | evan | are you saying it's a completely different method, so we should never do it? |
| 17:06:55 | brixen | no, I'm saying it does not use #require to load a .rbc file |
| 17:07:20 | brixen | we have the ability to load a tree of .rbc files that does not use #require |
| 17:07:26 | evan | so to support this, you'd require the users to use a different method to import code |
| 17:07:33 | brixen | I would, yes |
| 17:07:44 | evan | hm |
| 17:08:08 | evan | and this alternative import method would twiddle $L_F, so that a future call te require would return false |
| 17:08:08 | evan | ? |
| 17:08:23 | evan | or you'd require the user to remove all require lines |
| 17:08:39 | evan | all #require lines (to be clear) |
| 17:09:02 | brixen | I think the method would insert .rb files into #L_F instead of .rbc files |
| 17:09:43 | brixen | that's how it works now |
| 17:10:08 | evan | so given a directory precompiled/foo.rbc |
| 17:10:15 | evan | and Rubinius.import_tree("precompiled") |
| 17:10:25 | evan | require "foo" # => false |
| 17:10:26 | evan | yes? |
| 17:11:43 | boyscout | CI: rubinius: 4a5227f successful: 3515 files, 15106 examples, 42950 expectations, 0 failures, 0 errors |
| 17:11:55 | brixen | well, if require "foo" (through $:) were to resolve to the foo.rbc, then yes, #require would return false |
| 17:12:14 | evan | wait wait |
| 17:12:18 | evan | now you've confused me. |
| 17:12:22 | brixen | we have CodeLoader.require_compiled "root" already |
| 17:12:31 | brixen | look at $" in rbx |
| 17:13:12 | brixen | #require would return false (should) if you tried to require lib/compiler/ast/definitions.rb for example |
| 17:13:18 | evan | hold up. |
| 17:15:03 | evan | i have to go back and look at codeloader to figure out how we have it working now. |
| 17:16:30 | evan | ok, right. so require_compiled sets a flag saying that any call to require under here should consider lone .rbc files |
| 17:16:44 | brixen | yeah |
| 17:17:24 | evan | so what about setting that flag inside loader.rb if -Xallow_lone_rbc is set? |
| 17:17:25 | brixen | more than that |
| 17:17:33 | brixen | it changes how require code looks for extensions |
| 17:17:45 | evan | hmrm. |
| 17:17:52 | evan | i have to go look at that code now. |
| 17:18:04 | brixen | I can't say this enough, I really do not want #require to load .rbc files |
| 17:18:14 | evan | but we already have it doing that |
| 17:18:15 | evan | :) |
| 17:18:19 | brixen | specially |
| 17:18:20 | evan | as you just detailed |
| 17:18:30 | brixen | we are not just allowing #require to load .rbc files |
| 17:18:36 | evan | sure we can |
| 17:18:42 | evan | require_compiled does exactly that. |
| 17:18:47 | evan | it allows #require to load .rbc files. |
| 17:18:52 | brixen | I'm didn't say we can't |
| 17:19:07 | brixen | I'm saying, #require does not automatically load .rbc files |
| 17:19:56 | brixen | brb, I need to proof read this post |
| 17:19:57 | evan | unless explicitly instructed to |
| 17:20:01 | evan | so you're against it doing it by default |
| 17:20:03 | evan | is what you mean |
| 17:20:06 | brixen | yes |
| 17:21:32 | evan | so thougts on having an option to turn this on |
| 17:21:35 | evan | that a user could use |
| 17:21:45 | evan | knowing it changes the behavior of require |
| 17:22:15 | evan | i agree with you that we shouldn't have this be the default behavior of #require |
| 17:23:11 | brixen | well, we have that "flag" right now: CodeLoader.require_compiled "root" |
| 17:23:21 | brixen | they really aren't going to want that in development |
| 17:23:33 | evan | right |
| 17:23:35 | brixen | when they deploy, their code is loaded from a root file with that |
| 17:23:46 | evan | so my point is to have a flag set via -X that they'd use it production |
| 17:23:56 | evan | that would allow require to consider lone rbc files |
| 17:24:09 | evan | they wouldn't have to put require_compiled in the code base then. |
| 17:24:14 | brixen | it would only consider .rbc files unless the current implementation is changed |
| 17:24:35 | brixen | ie, in #require_compiled, no .rb file will even be considered |
| 17:25:02 | evan | i don't understand "unless the current implemention is changed" comment |
| 17:25:29 | brixen | #require will only load .rb files (in MRI) |
| 17:25:46 | brixen | when you call #require_compiled, #require will only load .rbc files (in rbx) |
| 17:25:50 | brixen | there is no mixing |
| 17:26:02 | evan | right |
| 17:26:02 | brixen | there is no "consider lone .rbc files" |
| 17:26:03 | evan | i know |
| 17:26:04 | brixen | ok |
| 17:26:12 | evan | i'm saying add new functionality |
| 17:26:19 | evan | that is triggered by the new -X option |
| 17:26:48 | brixen | well, I'm against #require mixing .rb and .rbc files |
| 17:26:49 | evan | i think you meant "if" and not "unless" |
| 17:26:58 | brixen | unless? |
| 17:27:01 | evan | nm. |
| 17:27:29 | evan | why are you against it? |
| 17:27:47 | evan | given that this new functionality would be turned on by a rbx specific flag to enable rbx specific behavior |
| 17:28:09 | evan | because it could cause breakages in production not seen in dev? |
| 17:28:32 | brixen | the semantics of mixing .rbc and .rb files is not yet defined |
| 17:28:40 | brixen | it will be confusing, yes |
| 17:28:44 | evan | well, it is a litle now |
| 17:28:48 | brixen | I don't see a compelling need for it |
| 17:28:51 | evan | we mix them to a certain degree atm. |
| 17:29:00 | brixen | only in the case of the compiler |
| 17:29:09 | evan | i think we need to define certain things |
| 17:29:13 | brixen | and it loads a tree of .rbc files "as if" they were .rb files |
| 17:29:25 | evan | i consider the fact that #require will load a .rbc file when there is a .rb there as "mixing" |
| 17:29:34 | evan | what do you define as "mixing" |
| 17:29:34 | evan | ? |
| 17:29:40 | brixen | ok, very different :) |
| 17:30:21 | brixen | "mixing" is that on one line, I have 'require "foo.rbc"' on anther I have 'reqire "foo"' or 'require "bar"' or whatever |
| 17:30:43 | brixen | basically, that require has to always be able to load a .rbc file |
| 17:30:52 | brixen | that is very different than what we have now |
| 17:31:10 | brixen | which again is that we can require a tree of .rbc files as if they were a tree of .rb files |
| 17:31:32 | evan | your last line lost me. |
| 17:31:55 | evan | actually, i don't get what you mean at all. |
| 17:31:58 | brixen | require_compiled makes #require think .rbc files are .rb files, basically |
| 17:31:58 | evan | lets switch to phone. |
| 17:32:13 | brixen | hold on |
| 17:32:16 | evan | this is getting frusterating because we're talking past eachother. |
| 17:32:21 | brixen | I need to finish proofing this for melissa |
| 17:32:26 | evan | k |
| 17:56:33 | brixen | evan: ok, back |
| 17:56:40 | brixen | want to do a call? |
| 17:56:45 | evan | yep |
| 17:58:29 | brixen | evan: erg, call back pls |
| 17:58:37 | evan | yep |
| 17:58:40 | brixen | I touched the spot |
| 17:58:42 | brixen | haha |
| 18:31:24 | evan | brixen: thoughts on how to deal with http://github.com/evanphx/rubinius/issues#issue/439 |
| 18:31:32 | evan | the DNS related specs suck ass. |
| 18:34:50 | brixen | I know :( |
| 18:35:15 | evan | seems like we should just make sure it returns a valid DNS name |
| 18:35:18 | evan | ie |
| 18:35:29 | brixen | sure, that would work |
| 18:35:54 | evan | /([A-Za-z]+\.?)*[A-Za-z]+/ |
| 18:36:00 | evan | actually, that should be |
| 18:36:05 | evan | /([A-Za-z]+\.)*[A-Za-z]+/ |
| 18:36:15 | brixen | yeah |
| 18:36:41 | brixen | probably a helper x.getnameinfo.should =~ valid_dns_name |
| 18:36:46 | evan | yeah. |
| 18:36:53 | brixen | ok |
| 18:37:50 | evan | we should look around, i'll bet there is a valid_dns_name regex already |
| 18:42:16 | brixen | k |
| 18:45:29 | dbussink | evan: this piece of code was masking the exception with that vm_spawn bug: https://gist.github.com/df57f4449dffed434ea7 |
| 18:45:45 | dbussink | evan: should i remove that or do we want that to gobble up all the errors there? |
| 18:45:46 | evan | sort of |
| 18:45:56 | evan | you can remove it |
| 18:46:55 | dbussink | evan: this was an assert that was caught there someone even |
| 18:47:04 | dbussink | evan: and the process just exited with status - |
| 18:47:06 | dbussink | status 0 |
| 18:47:09 | evan | huh? |
| 18:47:28 | evan | completely lost me. |
| 18:48:13 | dbussink | evan: well, i only saw this backtrace https://gist.github.com/4d3ccadc7fbfea907c06 after i made the following change https://gist.github.com/df57f4449dffed434ea7 |
| 18:48:37 | evan | ok.. and? |
| 18:48:48 | evan | i don't get your comment about asserts and someone even and whatever |
| 18:48:55 | dbussink | so that catch all there was masking that error and just printed "Unknown exception occured" and the process exited with status 0 |
| 18:49:17 | evan | right |
| 18:49:18 | evan | i know |
| 18:49:21 | evan | you can remove that. |
| 18:50:33 | dbussink | evan: i guess for completeness it also should return a non 0 exit state in the other catch blocks right? |
| 18:50:46 | evan | probably. |
| 18:53:00 | dbussink | evan: still need to watch your debug screencast, but i'm going to in a minute :) |
| 18:53:13 | evan | i made it just for you! |
| 18:53:38 | dbussink | different tz's :P |
| 18:55:53 | dbussink | evan: hah! i named the script thread_torture.rb :p |
| 18:56:01 | evan | :D |
| 18:58:58 | dbussink | evan: it's a bit weird though, because i did have the crash happening with a full dev mode build |
| 18:59:59 | evan | keep watching. |
| 19:00:09 | evan | it's a timing bug, so thats why it mattered. |
| 19:00:34 | evan | it wasn't related to optimizations breaking it |
| 19:00:38 | evan | only that optimizations changed the timing. |
| 19:00:45 | evan | and every machines timing is different. |
| 19:02:45 | dbussink | that's true yeah |
| 19:02:57 | dbussink | my laptop is getting a bit older already :P |
| 19:08:17 | dbussink | *burp* |
| 19:09:26 | evan | yeah, i was drinking coffee |
| 19:09:28 | evan | and it was post lunch |
| 19:09:28 | evan | :D |
| 19:09:43 | dbussink | evan: so yeah, i missed the implication of gc_indepedent |
| 19:09:48 | dbussink | after that it's an easy ride |
| 19:09:54 | evan | nope |
| 19:09:57 | evan | keep watching. |
| 19:11:00 | dbussink | evan: you mean the removing twice (already saw the changeset ;) ) |
| 19:11:12 | evan | removing twice? |
| 19:11:13 | evan | huh? |
| 19:11:14 | evan | no. |
| 19:14:12 | dbussink | evan: bless you! |
| 19:14:22 | evan | :D |
| 19:14:27 | evan | ok, i'm off to get some lunch. |
| 19:14:28 | evan | enjoy! |
| 19:17:40 | dbussink | evan: there's a * by the current thread in that thread list btw |
| 19:17:45 | dbussink | evan: or did you look over that? |
| 19:18:06 | dbussink | evan: ah, you did :P |
| 19:59:03 | dbussink | evan: it was the 0 after all too ;) |
| 20:11:01 | evan | dbussink: yep. |
| 20:17:59 | dbussink | evan: hmm, those llvm crashes aren't really useful right? |
| 20:18:08 | evan | generally no. |
| 20:29:47 | dbussink | evan: yay, got another one :) https://gist.github.com/4898242707d393fe2de2 |
| 20:30:25 | dbussink | evan: hmm, prune_handles there should be locked? |
| 20:30:29 | evan | no. |
| 20:30:33 | evan | it's running in the GC. |
| 20:30:38 | evan | get a backtrace of other threads. |
| 20:32:40 | dbussink | evan: hmm, not much running: https://gist.github.com/2425eb69697233c862fd |
| 20:32:46 | dbussink | this is in interpreted mode btw |
| 20:33:20 | dbussink | so that would mean they were corrupted before |
| 20:38:00 | dbussink | evan: hmm, is it right that there are locks around the global_handles? |
| 20:38:05 | dbussink | for the capi? |
| 20:38:11 | dbussink | are no locks i mean |
| 21:19:06 | evan | dbussink: ah! |
| 21:19:08 | evan | a good find! |
| 21:19:27 | evan | yes, we need to put locks around adding to global_handles |
| 21:19:35 | evan | and cached_handles |
| 22:02:17 | evan | so, i think for the time being |
| 22:02:26 | evan | i'm making some parts of capi handle management thread-safe |
| 22:02:34 | evan | but i'm going to put a lock around extensions |
| 22:02:48 | evan | so that there is no concurrent execution of extension methods for now. |
| 22:03:03 | evan | an extension GIL, if you will. |
| 22:03:32 | evan | it's a quiet thursday, so maybe i'm talking to myself. |
| 22:03:32 | brixen | ok |
| 22:03:38 | brixen | are you hitting an issue? |
| 22:03:45 | evan | dbussink did |
| 22:03:51 | evan | and it got me pondering |
| 22:04:01 | evan | i can make managing the list of handles thread safe |
| 22:04:18 | evan | but the business with cached_handles is another thing entirely. |
| 22:04:35 | evan | and we'll continue to hit issue with extensions using things that aren't thread safe |
| 22:04:41 | evan | things we can't control |
| 22:04:44 | evan | like strtok() |
| 22:04:56 | brixen | hmm, indeed |
| 22:05:37 | evan | i'll release the GEL (Global Extension Lock) whenever control transitions back into ruby land |
| 22:06:01 | evan | so that just code running in the extensions is serialized |
| 22:06:51 | brixen | you have to wait for your extensions to GEL |
| 22:06:58 | evan | exactly! |
| 22:07:00 | brixen | attempts humor |
| 22:07:42 | brixen | yeah, the calling to C functions with our pinned string is dicey |
| 22:07:50 | evan | right. |
| 22:07:50 | brixen | doesn't seem like that could ever be safe |
| 22:07:59 | evan | eh? which part |
| 22:08:01 | brixen | ie, we just can't know (tm) |
| 22:08:17 | brixen | well, if you have a ptr to it stashed somewhere |
| 22:08:29 | brixen | and something is writing to it while something else tries to |
| 22:08:38 | brixen | seems like it could always be a potential data race |
| 22:08:50 | evan | yeah, easi |
| 22:08:52 | evan | easy. |
| 22:09:03 | evan | thats the reason the GEL seems like the best solution |
| 22:09:07 | brixen | yeah |
| 22:09:11 | brixen | I'm seeing that |
| 22:09:28 | evan | it's a decent compromise for now too |
| 22:09:28 | brixen | I was mostly thinking about modifying other Ruby structures before |
| 22:09:35 | evan | ruby code == fast and safe and concurrent |
| 22:09:40 | brixen | or like you say, the handle management |
| 22:09:42 | evan | extension code == fast and unsafe and serial |
| 22:09:45 | brixen | yeah |
| 22:12:13 | evan | my thoughts on concurrent extensions: http://img.skitch.com/20100819-84xcwes6hwbatamigaiy5b32ax.png |
| 22:12:22 | brixen | hah |
| 22:12:30 | brixen | you were just waiting to use that :) |
| 22:12:42 | evan | all day! |
| 22:12:46 | evan | i've been working it in all day. |
| 22:12:47 | brixen | heh |
| 22:14:30 | brixen | hrm, not a fan of the moniker JRubyists :/ |
| 22:14:52 | brixen | I guess every group needs an identifier |
| 22:14:55 | evan | why aren't they just rubyists? |
| 22:15:01 | brixen | but I hope we can all stay rubyists |
| 22:15:04 | brixen | I dunnod |
| 22:15:05 | evan | i see people say "i'm using ruby/jruby!" |
| 22:15:08 | evan | which confuses me. |
| 22:15:12 | brixen | yeah |
| 22:15:27 | brixen | I don't like the suggestion that jrubyists do something rubyists don't |
| 22:15:36 | brixen | except maybe use Java? |
| 22:15:42 | evan | *shrug* |
| 22:15:43 | brixen | but we don't call them CRubyists |
| 22:15:53 | evan | i guess they feel like they've got unique issues? |
| 22:16:00 | brixen | perhaps |
| 22:16:05 | evan | dealing with java libraries does seem like a unique issue. |
| 22:16:12 | brixen | I'd just like Ruby to stay a community of rubyists |
| 22:16:23 | evan | yeah |
| 22:16:29 | brixen | IronRubyists |
| 22:16:37 | brixen | Maglevites |
| 22:16:45 | evan | heh |
| 22:16:49 | brixen | this way lies madness :) |
| 22:18:13 | brixen | JRuby folks seems less divisive than JRubyists |
| 22:26:03 | kronos_vano | Rubiniusists |
| 22:26:23 | evan | :) |
| 22:27:03 | brixen | or not :) |
| 22:30:08 | mjijackson | brixen: I personally made the Ruby/JRuby distinction in the tagline for a gem that I wrote that had some special advantages on JRuby, just to let folks know that special consideration had been made for the JRuby platform. |
| 22:31:29 | evan | mjijackson: what were the special considerations? |
| 22:31:49 | evan | mjijackson: i see you were already in the channel! |
| 22:32:07 | jakedouglas | at some point (not that long ago, really), people had to make conscious decisions about this stuff because not everything was supported seamlessly on mri, jruby, and rubinius. it may be a lot better or almost non-existent now, but lets not pretend like it was always so.. |
| 22:32:33 | evan | jakedouglas: we're not pretending |
| 22:32:46 | evan | mainly curious what jrubyists feel makes them different from rubyists. |
| 22:32:47 | evan | is all. |
| 22:33:08 | mjijackson | evan: it just used a jar under the hood. with JRuby i was able to import the Java classes directly. With MRI I needed to pipe I/O through the system shell. Naturally, the JRuby version ran quite a bit faster. |
| 22:33:20 | evan | ah |
| 22:33:21 | evan | gotcha |
| 22:33:24 | evan | sure, that makes sense. |
| 22:33:32 | jakedouglas | i duno, i prefer the term 'software developer' or similar language-agnostic thing |
| 22:33:37 | evan | thats one place where the conscience decision still exists |
| 22:33:41 | evan | and likely won't go away. |
| 22:34:24 | mjijackson | right. |
| 22:34:43 | jakedouglas | maybe 'jrubyists' do a lot of ruby <-> java integration. |
| 22:34:51 | evan | right |
| 22:36:00 | evan | right |
| 22:36:07 | evan | my guess is they don't give the label much thought actually |
| 22:36:14 | evan | "i'm using jruby, i'm a jrubyists." |
| 22:36:18 | evan | and leave it at that. |
| 22:36:59 | mjijackson | evan: perhaps they say it more to the Java crowd than to the Ruby crowd. |
| 22:37:29 | mjijackson | i know i would |
| 22:37:34 | jakedouglas | i don't really see anything wrong with saying you're committed to a particular platform |
| 22:38:08 | mjijackson | "ha! we're all working in java but *i'm* really using jruby!" |
| 22:39:11 | mjijackson | i dunno |
| 22:39:41 | brixen | mjijackson: I realize each platform has peculiarities and special considerations |
| 22:39:55 | brixen | mjijackson: I'm concerned with that moniker though |
| 22:40:06 | brixen | we don't say I'm a Windows Rubyists for example |
| 22:40:20 | jakedouglas | brixen: is it really so different from calling yourself a 'rubyist' in the first place? (which i think is equally silly) |
| 22:40:30 | brixen | admittedly, I'm pretty adamant about the whole "Ruby is Ruby" thing :) |
| 22:40:45 | brixen | jakedouglas: yep, I think it's quite different |
| 22:40:47 | mjijackson | brixen: i understand. the "jrubyist" term is a bit strange. |
| 22:47:57 | BrianRice-work | Reia is probably the only real edge case |
| 22:59:39 | evan | mjijackson: you playing with anything specific in rubinius? |
| 23:00:57 | mjijackson | evan: not really. just running the specs now and figuring out where work needs to be done. |
| 23:01:59 | mjijackson | languages are kind of a hobby of mine, and i've been wanting to take a closer look at the rubinius source for a while. |
| 23:02:47 | mjijackson | i'm interested in working towards 1.9 compatibility mainly. |
| 23:03:09 | brixen | excellent |
| 23:03:15 | brixen | we need encodings :) |
| 23:03:30 | brixen | and the rubyspecs have a nice with_feature guard |
| 23:03:39 | brixen | so you could actually start working on encodings in master |
| 23:03:43 | mjijackson | brixen: :) baptism of fire, eh? |
| 23:03:52 | brixen | it's not really a language feature |
| 23:04:02 | brixen | mjijackson: glory man :) |
| 23:04:16 | brixen | also, glory, man |
| 23:04:59 | krainboltgreene | flexes his design skillz. |
| 23:05:23 | brixen | krainboltgreene: hopefully you have on a stretchy t-shirt |
| 23:05:35 | brixen | you don't want to frighten folks with a shirt tearing off |
| 23:05:44 | krainboltgreene | A ripped stretchy t-shirt. With the _why foxes on it. |
| 23:05:45 | evan | Hulk style |
| 23:05:50 | brixen | heh |
| 23:05:52 | evan | HULK LIKE FOXES |
| 23:07:43 | evan | |Blaze|: Hulk is savvy with his word play. |
| 23:07:51 | brixen | or really big when they get angry hulk-like foxes |
| 23:09:10 | evan | see |
| 23:09:18 | evan | Hulk is clever. |
| 23:12:10 | mjijackson | Is the goal of RubySpec to be true to the bugs? For example, I'm looking at a bug that exists in 1.8 but was fixed in 1.9. There's a spec that was written to reproduce the bug. |
| 23:12:22 | mjijackson | under 1.8 |
| 23:12:49 | evan | which one? |
| 23:12:55 | evan | there is no hard and fast rule |
| 23:13:15 | mjijackson | Hash#merge! Inside Iterator Can Cause RuntimeError |
| 23:13:21 | mjijackson | http://redmine.ruby-lang.org/issues/show/1535 |
| 23:13:23 | brixen | rubyspec does not spec bugs, it always specs correct behavior |
| 23:13:36 | evan | oh that one. |
| 23:14:29 | mjijackson | i see. in this it's debatable whether or not this was a bug in 1.8, so the spec exists to ensure the same behavior. right? |
| 23:15:00 | brixen | which spec? |
| 23:15:58 | mjijackson | brixen: spec/ruby/core/hash/merge_spec.rb |
| 23:16:19 | mjijackson | line 63 |
| 23:16:36 | brixen | see the ruby_bug guard? |
| 23:16:43 | mjijackson | yup |
| 23:16:58 | brixen | that guard does not yield on MRI less than 1.8.8 |
| 23:17:09 | brixen | the spec is for the correct behavior |
| 23:17:16 | brixen | all alt impls are expected to pass it |
| 23:18:25 | mjijackson | why did it show up when i ran all the specs? |
| 23:18:37 | brixen | what did you use to run the specs? |
| 23:19:03 | mjijackson | bin/mspec tag --list fails :files |
| 23:19:11 | brixen | ok, so rbx |
| 23:19:25 | mjijackson | if rubinius currently targets 1.8.7, that spec should not have run, right? |
| 23:19:26 | brixen | rbx is an alt impl, it is expected to pass it, but it does not |
| 23:19:46 | brixen | um, let's start with the command you ran |
| 23:19:51 | brixen | have you read about rubyspec? |
| 23:20:01 | mjijackson | brixen: a little |
| 23:20:10 | brixen | ok, so this is probably confusing then |
| 23:20:18 | brixen | you should read up at rubyspec.org docs |
| 23:20:23 | mjijackson | k |
| 23:20:34 | brixen | but basically, mspec tag --list is listing tags for specs that fail |
| 23:20:47 | brixen | that's what you asked it to do |
| 23:21:06 | brixen | the spec is tagged because rbx does not pass it yet |
| 23:21:28 | brixen | the spec is *guarded* because it was considered a bug in MRI and is fixed in later versions |
| 23:21:46 | brixen | the guard prevents the spec from running on MRI versions that have the bug |
| 23:21:55 | brixen | but the spec is expected to pass on all alt impls |
| 23:24:11 | mjijackson | i don't understand. that spec will fail on versions that don't have the bug. |
| 23:24:35 | mjijackson | seems like it should run on versions that have the bug, and not run on versions after the bug was fixed |
| 23:25:52 | brixen | rubyspec contains specs for only valid behavior |
| 23:26:04 | brixen | we do not write specs that "pass" for bugs |
| 23:26:12 | brixen | make sense? |
| 23:26:28 | mjijackson | yes |
| 23:26:30 | brixen | ok |
| 23:26:45 | brixen | versions of MRI that have bugs have already been released |
| 23:26:55 | mjijackson | k |
| 23:27:03 | brixen | can't go back and fix a bug in an already released version |
| 23:27:05 | brixen | right? |
| 23:27:07 | mjijackson | k |
| 23:27:09 | brixen | ok |
| 23:27:27 | brixen | so, ruby_bug guard does not yield on versions with the bug |
| 23:27:49 | brixen | otherwise, the spec would fail, but there is nothing you can do to make it pass, so it's noise |
| 23:27:50 | mjijackson | right |
| 23:28:20 | brixen | the ruby_bug guard *always* yields if it is not running on MRI |
| 23:28:35 | brixen | ie, if it's running on rbx, the guard yields and the spec runs |
| 23:28:44 | brixen | the spec is expected to pass |
| 23:28:51 | brixen | because it's describing the correct ruby behavior |
| 23:29:08 | brixen | still make sense? |
| 23:29:31 | brixen | we have 2 more steps to go :) |
| 23:29:56 | mjijackson | got it |
| 23:30:07 | brixen | currently, rbx fails that spec |
| 23:30:17 | brixen | so we have it tagged so that CI process does not run it |
| 23:30:26 | brixen | so we can run a "known good" set of specs |
| 23:30:42 | brixen | mspec tag --list will list specs that are tagged |
| 23:30:49 | brixen | which is why it showed up for you |
| 23:30:57 | mjijackson | i see |
| 23:31:05 | brixen | if you run mspec core/hash, the spec will run and you'll see a failure |
| 23:31:11 | mjijackson | i told it to show me the specs that are tagged as failing |
| 23:31:15 | brixen | if you run mspec ci core/hash, the spec will not run |
| 23:31:19 | brixen | yep |
| 23:32:03 | brixen | the tags are a way to select a particular set of specs to run per implementation |
| 23:32:15 | brixen | ie, jruby has its own tags and may pass that spec |
| 23:32:33 | brixen | the guards are for stuff that has to work across implementations |
| 23:32:50 | brixen | platform, OS, endianness, word size, etc |
| 23:37:31 | mjijackson | brixen: i see. thx for your patience in explaining all this to me. there's a lot to learn coming from ruby userland. |
| 23:39:46 | brixen | absolutely |
| 23:39:49 | brixen | no problem |
| 23:40:02 | brixen | it's quite a complex topic as well |
| 23:40:13 | brixen | hard to make everyone play nice together :) |
| 23:40:29 | brixen | and even harder to figure out what the heck in "Ruby" sometimes |
| 23:40:35 | brixen | s/in/is/ |
| 23:41:47 | mjijackson | true. hence the need for rubyspec. |
| 23:43:30 | mjijackson | brixen: just curious: are you or evan working out of SF? |
| 23:43:50 | brixen | I'm typically in portland, or and evan is in LA |
| 23:44:05 | brixen | we're gonna be in SF mid next month |
| 23:44:32 | mjijackson | i see. telecommute! that's the way to do it. |
| 23:44:48 | brixen | heh, it can be nice |
| 23:45:09 | mjijackson | i'm actually moving to SF next month. i know EY is based there, so i was just wondering if you guys were around |
| 23:45:18 | brixen | ah cool |
| 23:45:28 | brixen | we try to get there about once a month |
| 23:45:51 | mjijackson | are either of you planning on speaking at RubyConf about rbx? |
| 23:46:04 | brixen | I've submitted a proposal |
| 23:46:19 | evan | it's very likely i will be |
| 23:46:31 | mjijackson | it would be totally awesome to have a talk geared toward getting rbx newbs involved in the project |
| 23:46:31 | evan | I gotta keep up my streak. |
| 23:46:50 | evan | mjijackson: what would ya like to hear about? |
| 23:49:10 | mjijackson | evan: would be awesome to see a walk through of the mechanics of actually working on rbx |
| 23:49:57 | mjijackson | highlight areas where people can make contributions |
| 23:50:11 | brixen | evan: btw, did you use a mic for your screencast? |
| 23:50:39 | brixen | mjijackson: we like people to do something they are really interested in, rather than us saying, "work on x, y, z" |
| 23:50:51 | evan | brixen: just the computer's builtin mic. |
| 23:50:52 | brixen | mjijackson: if you have a ruby project, run it on rbx |
| 23:51:00 | brixen | evan: ok, cool, cus it was really clear |
| 23:51:05 | mjijackson | brixen: that's a good strategy |
| 23:51:23 | brixen | I'll probably get a mic but maybe I should try a screencast without it |
| 23:51:27 | mjijackson | i've been testing all my gems on rbx before releasing |
| 23:51:30 | brixen | I could do a bunch on rubyspec |
| 23:51:35 | mjijackson | so far haven't had any problems with it |
| 23:51:38 | brixen | mjijackson: ah, cool! |
| 23:52:26 | mjijackson | brixen: the rubyspec project would be an excellent topic for rubyconf. |
| 23:52:56 | brixen | I did a talk a couple years ago |
| 23:54:11 | brixen | http://rubyconf2008.confreaks.com/what-does-my-ruby-do.html |
| 23:54:43 | mjijackson | awesome. i'll take a look |
| 23:55:35 | mjijackson | g2g for now. we'll talk more later |
| 23:55:38 | mjijackson | thanks again |
| 23:56:15 | brixen | n/p |