Show enters and exits. Hide enters and exits.
| 00:13:10 | headius | evan: just thought of something else that will probably be next-to-impossible for macruby to support |
| 00:13:29 | headius | non-native-thread fibers and fiber-related Enumerator stuff |
| 00:13:33 | headius | we're all in the same boat now |
| 00:14:37 | headius | though...I suppose you guys could both play setjmp tricks, but that doesn't seem like it would be compatible with your memory models |
| 00:15:02 | evan | well, don't even need setjmp |
| 00:15:08 | evan | we can play the same tricks 1.9 does |
| 00:15:23 | headius | what tricks are those? |
| 00:15:29 | evan | in the case of Rubinius, it's a matter of copying the C stack AND the CallFrame chain thats layer on top of it |
| 00:15:39 | headius | ahh right you still have bytecode |
| 00:15:45 | headius | so you could freeze execution |
| 00:15:53 | evan | in 1.9, it's just a memcpy of the C stack |
| 00:15:59 | evan | bytecode or not, it doesn't matter |
| 00:16:20 | headius | sure it does...unless you can add in the ability to freeze execution in jitted code too |
| 00:16:22 | evan | it's all about rewinding the stack |
| 00:16:33 | evan | freeze how? |
| 00:16:39 | headius | fibers need to be resumable |
| 00:16:45 | headius | so you need to return to them too |
| 00:17:09 | headius | so yeah, you have to save off the whole stack and then replay it to continue |
| 00:18:04 | evan | yeah |
| 00:18:09 | evan | it's a big copy of data |
| 00:18:12 | evan | no way around that |
| 00:18:39 | evan | and it's still ridiculous that they mandate continuation support now |
| 00:24:33 | headius | it is |
| 00:24:59 | headius | I'll have to add project #276 to my list to try to implement continuation support atop MLVM continuations |
| 00:25:17 | evan | heh |
| 01:16:34 | dgtized | how is it that scheme efficiently implements continuations? |
| 01:17:14 | dgtized | is it just easier for it to capture the correct extent of scope? |
| 01:18:37 | tarcieri | CPS vs SSA? |
| 01:18:52 | boyscout | Added roadmap. - ef8c0c0 - Brian Ford (gh-pages) |
| 01:18:57 | tarcieri | loves making totally laymen guesses |
| 01:28:01 | dgtized | tarcieri: perhaps I'm simplifying, but it seems like SSA and CPS form should both reduce the amount you need to save on the stack |
| 01:28:51 | dgtized | in terms of being aware of what contexts should be saved |
| 01:29:07 | tarcieri | doesn't know |
| 01:29:18 | tarcieri | I wish I implemented my own calls and stuff |
| 01:32:31 | brixen | there's a very good paper on the topic |
| 01:32:45 | brixen | implementation strategies for first-class continuations |
| 01:33:16 | brixen | and of course, there are open-source scheme implementations |
| 01:33:27 | brixen | other than that, I wouldn't know off-hand |
| 01:37:13 | tarcieri | doesn't understand why people <3 continuations so much |
| 01:37:25 | tarcieri | I'd rather have... a decent strategy for concurrency |
| 01:37:35 | tarcieri | which affords practically the same thing without confusing control flows |
| 01:38:52 | brixen | yeah, I'd rather have screaming fast and comprehensible concurrency |
| 01:42:28 | brixen | tarcieri: have you played with Fortress? |
| 01:42:39 | tarcieri | nope, although I've seen several people referencing it |
| 01:42:51 | tarcieri | I should really have a lookeroo |
| 01:42:57 | brixen | me neither, thought you might have |
| 01:43:09 | brixen | I should play with scala a bit too |
| 01:43:47 | brixen | just, you know, to see what they're all missing :) |
| 01:43:52 | tarcieri | heh |
| 01:43:58 | tarcieri | metaprogramming/class bodies/dsls |
| 01:44:03 | brixen | heh |
| 01:44:17 | tarcieri | just like Groovy |
| 01:44:45 | tarcieri | except Scala's design goal wasn't "Let's make a Ruby-like language for the JVM!" |
| 01:47:10 | tarcieri | I've had people keep telling me if I keep pressing forward with Scala I'll see how its design is actually coherent in some manner |
| 01:47:22 | tarcieri | everything really does play nicely together! |
| 01:47:40 | tarcieri | but my gut reaction to it is it has a hodge podge of features which are somewhat poorly crammed together into a single language |
| 01:47:56 | brixen | hm, that was my very naive impression too |
| 01:48:05 | brixen | maybe I'll keep pushing a bit |
| 01:48:05 | tarcieri | the replies I get to that argument are so strange too |
| 01:48:15 | tarcieri | "Scala isn't an actor language, it has an actor library, therefore it's ok!" |
| 01:48:24 | tarcieri | ooooookay |
| 01:48:28 | brixen | heh |
| 01:48:45 | brixen | you want your coffee in a cup *and* hot, c'mon |
| 01:48:45 | tarcieri | "The !? operator isn't an operator, it's a method name, Scala fooled you!" |
| 01:48:46 | brixen | :) |
| 01:49:04 | tarcieri | okay great maybe !? isn't the world's greatest method name |
| 01:49:23 | tarcieri | just semantic bullshit like that |
| 01:49:28 | tarcieri | nobody ever addresses the meat of my argument |
| 01:50:21 | tarcieri | "Your argument is wrong because it was not phrased in the exact terminology we expect it to be phrased in!" |
| 01:50:38 | tarcieri | gets that out of the Erlang crowd too |
| 01:50:44 | brixen | well, I'm gonna go hang with some haskell/ocaml snobs :) |
| 01:50:46 | brixen | bbl... |
| 01:50:48 | tarcieri | lol |
| 01:50:50 | tarcieri | have fun! |
| 03:20:46 | boyscout | Add support for push_self and send_stack - 0ac6ad6 - Evan Phoenix (llvm-jit) |
| 07:24:02 | boyscout | 1.8.7: Enumerable#min_by, #max_by, #minmax, #minmax_by - 18a399b - Marc-Andre Lafortune |
| 07:24:02 | boyscout | 1.8.7: Enumerable#take_while (new) - b5bb4dd - Marc-Andre Lafortune |
| 07:24:02 | boyscout | 1.8.7: Fixnum#fdiv (and Float) - 8f10203 - Marc-Andre Lafortune |
| 07:24:02 | boyscout | 1.8.7: Hash#delete_if, #each, #each_key, #each_pair, #each_value, #reject!, #select (optional block) - 4e7e661 - Marc-Andre Lafortune |
| 07:24:02 | boyscout | 1.8.7: Hash.[], .try_convert - f2234a1 - Marc-Andre Lafortune |
| 07:24:03 | boyscout | 1.9: Hash#default=, #key (new) - 8d042db - Marc-Andre Lafortune |
| 07:55:44 | brixen | hm, I'm not a fan of the TARGET_IS stuff |
| 07:58:31 | slava | howdy brixen |
| 07:59:40 | brixen | hey slava |
| 08:01:10 | brixen | slava: saw a talk by the author of this book tonight http://tinyurl.com/automated-reasoning |
| 08:01:30 | brixen | told him I was thinking about doing the code examples in Factor :) |
| 08:01:44 | evan | brixen: TARGET_IS? |
| 08:01:54 | brixen | evan: yeah, grep for it in kernel |
| 08:02:21 | brixen | the 1.8.7 stuff needs to be in their own files completely |
| 08:02:30 | evan | nothing here |
| 08:02:56 | brixen | http://gist.github.com/110359 |
| 08:03:08 | evan | huh. |
| 08:03:11 | evan | why don't i see that. |
| 08:03:31 | evan | that absolutely must all go though |
| 08:03:35 | brixen | dunno, but I think it's pretty gross |
| 08:03:38 | brixen | yeah |
| 08:03:47 | evan | why don't I see it... |
| 08:04:08 | evan | gr. |
| 08:04:34 | evan | ug |
| 08:04:36 | evan | ok, i see it now |
| 08:04:41 | evan | marcandre: we need to talk |
| 08:04:43 | evan | pronto |
| 08:04:48 | marcandre | hi! |
| 08:04:57 | evan | whats all this TARGET_IS stuff in the kernel? |
| 08:05:03 | marcandre | ah ah! |
| 08:05:09 | evan | i really don't like it. |
| 08:05:18 | marcandre | Yeah, I'm not surprised. |
| 08:05:21 | marcandre | Here's the deal |
| 08:05:35 | marcandre | There are about 60 methods with optional enumerator in 1.8.7 |
| 08:06:03 | marcandre | Either I copy paste all of them, or else I add 1 line to each with a test for block_given? |
| 08:06:18 | marcandre | followed by the || Target stuff. |
| 08:06:20 | evan | i'd rather you cut and paste them. |
| 08:06:39 | marcandre | You realize that any change to any of them will have to be duplicated |
| 08:06:40 | evan | than clutter 2 implementations in the same method |
| 08:06:46 | evan | i do realize. |
| 08:07:00 | evan | TARGET_IS is not a solution i'm comfortable with |
| 08:07:33 | marcandre | Is there anything that would be RUBY_VERSION dependant you would be comfortable with? |
| 08:07:46 | evan | not much no |
| 08:08:01 | evan | because thats not at all how 1.8.7 will be supported |
| 08:08:05 | evan | you've got it backwards |
| 08:08:14 | marcandre | How will 1.8.7 be supported? |
| 08:08:15 | evan | 1.8.7 support provides RUBY_VERSION |
| 08:08:18 | evan | not the other way around |
| 08:08:35 | slava | evan: have you thoguht of doing visitors using templates instead of virtual methods? |
| 08:08:46 | evan | slava: one sec |
| 08:08:57 | marcandre | Sorry, I don't follow you |
| 08:09:34 | evan | no code in kernel should depend on the contents of RUBY_VERSION |
| 08:10:15 | marcandre | OK. Can they depend on anything internal, like my Rubinius.target_is ? |
| 08:10:31 | evan | thats pretty much the same problem |
| 08:11:06 | evan | hm |
| 08:11:12 | evan | there are 2 problems |
| 08:11:18 | evan | 1) MASSIVE DRY violation |
| 08:11:21 | evan | in my eyes |
| 08:11:37 | marcandre | Just to be clear: only methods that have trivial modifications between 1.8.6 and .7 are done with the TARGET_IS thing |
| 08:11:45 | marcandre | All the others are in /lib/1.8.7 |
| 08:12:17 | brixen | they are not trivial in sum |
| 08:12:28 | brixen | the 1.8.7 stuff should live in the 1.8.7 lib |
| 08:12:32 | brixen | same with 1.9 |
| 08:12:32 | evan | yes 60 of them scattered around is non-trivial |
| 08:12:36 | brixen | and 1.8.6 |
| 08:12:39 | marcandre | ? You mean that doing what I'm doing is DRY, right? Coz duplicating 100s of lines of code instead of allowing a couple of TARGET is not very dry |
| 08:13:30 | evan | marcandre: loading up all these long conditionals all over the code base smells bad |
| 08:13:41 | evan | i'll agreed, having duplicate versions has another smell |
| 08:13:53 | evan | but i'm just not satisified with the current usage of TARGET_IS |
| 08:14:09 | marcandre | yeah, I don't _love_ the TARGET_IS, but I believe it's better than duplicating all that code. |
| 08:14:22 | marcandre | I've kept the conditions simple so if we want to change them it'll be trivial |
| 08:14:39 | evan | it's not trivial for anyone else |
| 08:14:43 | evan | which is the problem |
| 08:15:02 | marcandre | I mean if you'd rather have a method, that's not a problem, etc. |
| 08:15:58 | evan | hm. |
| 08:16:26 | evan | something like |
| 08:16:37 | evan | Rubinius.require_block <name> unless block_given? |
| 08:16:40 | evan | would be a lot better |
| 08:16:57 | evan | because in 1.8.6, the version of require_block would raise an exception |
| 08:16:59 | brixen | marcandre: side note, if you use to_enum, define to_enum and alias enum_for |
| 08:17:11 | evan | and in 1.8.7, could call to_enum |
| 08:17:13 | brixen | marcandre: that way you can easily grep for the def of the use |
| 08:17:21 | ddub | finds he is unable to jump into the conversation halfway through, so he just starts to knod his head approvingly |
| 08:17:27 | evan | that cleans it up a bunch |
| 08:17:58 | evan | that makes me less uneasy about there being version dependencies layer in methods |
| 08:17:58 | marcandre | Yeah, something like that would be nice. |
| 08:18:08 | evan | rather, one method now is switched out in different versions |
| 08:18:42 | marcandre | Would it be ok to use Rubinius.return_enumerator instead? |
| 08:18:48 | evan | nope |
| 08:18:59 | evan | because thats not what it does in 1.8.6 |
| 08:19:04 | marcandre | I know you guys think in 1.8.6, but really, isn't the ultimate target to go with 1.8.7 and up? |
| 08:19:11 | evan | no |
| 08:19:13 | marcandre | Alright, require_block it'll be |
| 08:19:19 | evan | rather, it might be |
| 08:19:27 | evan | but i can't hit 3 targets at once |
| 08:19:42 | evan | and I don't want the code suddenly misbehaving because brian and I are trying to hit 1.8.6 |
| 08:19:42 | marcandre | he he, I know, that's why I'm handling one all by myself! ;-) |
| 08:20:02 | evan | thats why I was so serious about isolating the changes |
| 08:20:45 | marcandre | OK. I'll clean things up tomorrow (it's 3 am here...) |
| 08:21:17 | evan | ok |
| 08:21:25 | evan | sounds like we need to have a longer conversation about this too |
| 08:21:29 | evan | but this is a step in the right direction |
| 08:21:47 | marcandre | OK. What else is up? |
| 08:22:19 | evan | well, it would be better to not have that code in the 1.8.6 versions at all |
| 08:22:31 | evan | so i'd like to see if we can come up with a solution for that |
| 08:22:43 | marcandre | You mean the require_block thing? |
| 08:22:50 | evan | that doesn't require having full reimplementations in the 1.8.7 code if we don't need to |
| 08:22:55 | evan | yeah, the require_block thing. |
| 08:24:12 | marcandre | Well, if you have a way to dynamically recompile methods, the require_block could be prepended where needed/ |
| 08:24:28 | evan | no reason we can't add one |
| 08:25:38 | marcandre | Well, it's really up to you! |
| 08:26:13 | evan | then i'd like them removed entirely for now |
| 08:26:23 | evan | until we can come up with a better solution |
| 08:26:30 | brixen | marcandre: out of curiosity, where is code that uses the to_enum "feature"? |
| 08:26:58 | brixen | I really don't get the use case |
| 08:27:07 | marcandre | brixen: you want an example? There are a couple in Array and Enumerable, in particular |
| 08:27:12 | brixen | (but then, I don't get the use case of 1.8.7 period) |
| 08:27:14 | marcandre | Oh, like in real code? |
| 08:27:18 | brixen | yeah |
| 08:27:29 | marcandre | Well, I personally love enumerators. |
| 08:27:40 | evan | so you're writing |
| 08:27:41 | marcandre | An example I've used is to implement the Array#product method |
| 08:27:45 | evan | e = [1,2].map |
| 08:27:46 | brixen | and... there is #to_enum |
| 08:27:54 | evan | while i = e.next |
| 08:27:55 | evan | ... |
| 08:27:55 | evan | end |
| 08:27:59 | evan | ? |
| 08:28:33 | marcandre | More like you have an enumerator and you want to do a "map_with_index". |
| 08:28:50 | marcandre | enum.each_with_index.map{ |elem, index| ... } |
| 08:29:06 | brixen | so for composition |
| 08:29:16 | marcandre | yeah |
| 08:29:25 | brixen | fair enough |
| 08:29:29 | marcandre | If you implement an enumerable, it's quite nice. |
| 08:29:57 | marcandre | My tool to analyse FLVs uses that. Each "processor" is an enumerator, and you can pipe them. |
| 08:30:00 | brixen | we should write a compiler plugin for enumerables then |
| 08:30:10 | marcandre | You use them only when you need them. |
| 08:30:35 | slava | I must be a blub programmer because I don't really get the use case either :) |
| 08:31:10 | marcandre | I think that once you start using them you'll get to use them more and more. |
| 08:31:42 | brixen | there's just not that many iterators though |
| 08:31:52 | evan | marcandre: part of the reason I don't like the current code is that my brain just can not easily do unless and || in the same expression |
| 08:31:53 | brixen | why not map_with_index |
| 08:32:24 | marcandre | we don't need map_with_index, inject_with_index, etc..., when we have enumerators! |
| 08:32:39 | evan | we don't need inject, period. |
| 08:33:14 | brixen | slava: you have nice enumerables, what do you do? |
| 08:33:37 | slava | brixen: factor doesn't have any kind of iterator/enumerator/cursor abstraction |
| 08:33:52 | brixen | it accomplishes it though, yes? |
| 08:33:56 | slava | brixen: there's a sequence abstraction (O(1) random access) and lazy lists |
| 08:34:03 | scoopr | it's stacks all the way down? ;) |
| 08:34:04 | brixen | ahh |
| 08:34:07 | marcandre | evan: I agree these conditions are ugly. |
| 08:34:55 | slava | brixen: there isn't much polymorphism over collections other than amongst sequences and associative mappings |
| 08:35:17 | marcandre | The problem is that block_given? can't be called from a method (since it's not the same scope) |
| 08:35:32 | evan | thats why I proposed |
| 08:35:41 | slava | brixen: so for sequences I have each-index and map-index for the specific case mentioned |
| 08:35:43 | evan | return Rubinius.require_block(:delete_if) unless block_given? |
| 08:35:50 | evan | I can at least read that |
| 08:36:00 | marcandre | Yeah that looks better, I agree |
| 08:36:07 | brixen | slava: I see |
| 08:36:12 | slava | brixen: but they're defined in terms of 2each and 2map, which iterate over two sequences at once |
| 08:36:21 | evan | marcandre: so your choise is 1) remove them all together |
| 08:36:27 | evan | 2) use the require_block style |
| 08:36:32 | evan | choice |
| 08:36:46 | marcandre | The kind of choice my father gave me when I was a kid! ;-) |
| 08:36:52 | slava | brixen: the use-case for 2map is something like { 1 2 3 } { 4 5 6 } [ + ] 2map |
| 08:36:57 | marcandre | Easy, I pick 2 :-) |
| 08:37:01 | slava | brixen: does ruby have anything similar? |
| 08:37:06 | slava | brixen: its like zip followed by map |
| 08:37:17 | evan | marcandre: ok, do that |
| 08:37:18 | brixen | yeah, zip followed by map |
| 08:37:24 | brixen | slava: ^^^ |
| 08:37:26 | brixen | :) |
| 08:37:27 | evan | marcandre: but we might remove them all together soon |
| 08:37:39 | evan | brixen and I are going to discuss a better way to handle this case |
| 08:37:44 | evan | tomorrow |
| 08:37:48 | slava | brixen: each-index calls 2each with one of the sequences being an integer range |
| 08:37:57 | marcandre | Well, then, I'll wait for your decision... |
| 08:37:58 | slava | brixen: the integer range gets unboxed at compile time :) |
| 08:38:03 | evan | marcandre: ok |
| 08:38:03 | slava | brixen: so its a lot better than zip + map |
| 08:38:14 | brixen | slava: makes sense |
| 08:38:23 | slava | brixen: at least simulating map-index using zip + map |
| 08:38:31 | brixen | slava: I remember some of this from browsing, seems elegant |
| 08:39:00 | slava | I built the whole thing around a sequence abstraction with random access, so length nth set-nth because I hate linked lists |
| 08:39:22 | slava | and all operations boil down to relatively efficient integer loops even if the type of the sequence is not known at compile time |
| 08:40:01 | slava | the problem with cursors and enumerables is that you need fancy analysis to eliminate the unnecessary allocation and indirection. my escape analysis pass is a bit too simplistic to handle the enumerators case |
| 09:18:11 | boyscout | Implement meta_send_op_plus (yay for LLVM overflow instrinsics!) - 12a2cc6 - Evan Phoenix (llvm-jit) |
| 17:32:17 | marcandre | brixen: I've been wondering if there was a way to have a magic "require_block" method that would be nicer. |
| 17:32:21 | marcandre | I see how I can access the block of the sender, its method name. Is there a way to access the arguments and to "return" as from the sender's scope? |
| 17:32:26 | marcandre | I thought MethodContext would give me the answer about the arguments passed but it's not defined; |
| 17:32:29 | marcandre | as for the return, I tried to change the scope of a block but got a bus error. I feel like a clue less alchemist playing with fire :-) |
| 17:35:20 | brixen | marcandre: generally, I think that monkeying is a losing proposition |
| 17:35:32 | brixen | I think 1.8.7 should be totally separate at the file level |
| 17:35:46 | brixen | first of all, it has nothing to do with dry |
| 17:36:06 | brixen | you are not factoring out common functionality in a single application space |
| 17:36:22 | brixen | 1.8.6 is absolutely separate from 1.8.7 at run time |
| 17:36:46 | brixen | it's a fabrication that they share anything |
| 17:37:45 | marcandre | I must be misreading... Don't they share exactly everything except a small bunch of new methods and another bunch of slightly modified methods? |
| 17:38:09 | brixen | well, in my mind, that's the fabrication |
| 17:38:17 | brixen | they look like they share that |
| 17:38:23 | brixen | and at the file level they do |
| 17:38:39 | brixen | but in terms of execution, they are completely separate |
| 17:38:47 | brixen | the conditional always has one value |
| 17:39:10 | brixen | it's never sometimes 1.8.6 and sometimes 1.8.7 |
| 17:39:22 | marcandre | oh, you mean that the modified methods don't really share anything. |
| 17:39:28 | brixen | of course |
| 17:39:33 | marcandre | k. |
| 17:39:46 | brixen | trying to handle this with execution level conditions is madness :) |
| 17:39:52 | brixen | it's an scm problem |
| 17:39:53 | marcandre | Yeah, sure. |
| 17:40:30 | brixen | since 1.8.7 is progressing fairly well, we probably need to rethink our 1.8.6 mentality |
| 17:40:30 | marcandre | Isn't that why a 'require_block' method that gets overridden in 1.8.7 is a better solution? |
| 17:40:40 | brixen | not in my mind |
| 17:40:54 | brixen | it requires too much dispersion of what is 1.8.7 |
| 17:41:15 | brixen | I should look at a single file for eg Hash |
| 17:41:20 | brixen | not multiple |
| 17:41:33 | marcandre | yeah, that's definitely true |
| 17:41:57 | marcandre | but if you want to do that, then there has to be some kind of conditional define, no? |
| 17:41:59 | brixen | these versions don't coexist, they replace one another |
| 17:42:15 | brixen | I don't think so |
| 17:42:25 | brixen | once you load 1.8.7, that's the version |
| 17:42:30 | brixen | there's nothing conditional about it |
| 17:42:40 | marcandre | because I think we agree we don't want to have two hash.rb files, one for 1.8.6 and one for 1.8.7, no? |
| 17:42:55 | brixen | I prefer 2, managed with git |
| 17:43:21 | marcandre | ...processing... |
| 17:43:22 | brixen | I don't see multiple ruby versions coexisting for long |
| 17:43:45 | brixen | if we move forward with 1.8 line, we aren't going to support 1.8.6 indefinitely |
| 17:43:56 | brixen | I don't think |
| 17:44:16 | marcandre | that's your choice entirely. But I see 1.8.6, 1.8.7 and 1.9 as 3 different targets. |
| 17:44:20 | marcandre | Saddly. |
| 17:44:33 | brixen | well, 1.8.7 is not stationary |
| 17:44:41 | brixen | 1.8.6 is in maintenance |
| 17:44:55 | brixen | and some sort of haphazard MRI end-of-life process |
| 17:45:11 | brixen | 1.9 is volatile |
| 17:45:15 | marcandre | what does that mean, "1.8.7 is not stationary" |
| 17:45:40 | brixen | it's moving to 1.8.8 and beyond |
| 17:46:03 | brixen | with haphazard adoptions from 1.9 |
| 17:46:11 | marcandre | Urgh. |
| 17:46:31 | marcandre | I somehow thought they wouldn't add anymore methods to the 1.8 line. |
| 17:46:41 | brixen | 1.8 head already has 1.8.8 version number |
| 17:46:54 | brixen | ruby 1.8.8dev (2009-04-29 revision 23306) [i386-darwin9.6.0] |
| 17:47:21 | marcandre | Have they added stuff to it? |
| 17:47:42 | brixen | I'd have to read the changelog |
| 17:47:53 | brixen | for some reason they've changed the version to 1.8.8 :) |
| 17:48:48 | marcandre | I sincerely hope it's just a bug fix release. I disagree with adding many features in a 0.0.1 release, personally. |
| 17:49:27 | brixen | in terms of managing this as simply as possible, I'd have the canonical 1.8.6 library, with 1.8.6+ methods segregated, and completely copied/modified versions in 1.8.7 files |
| 17:49:59 | brixen | well, MRI has changed features in a patchlevel release, so that discussion is totally moot |
| 17:50:10 | brixen | there is no hope of consistency with MRI versioning |
| 17:50:19 | marcandre | Yeah :-( |
| 17:50:20 | brixen | 1.8.7 was a 0.0.1 release |
| 17:50:25 | brixen | it's insane :) |
| 17:51:02 | marcandre | I know, and I agree. I blogged about how I didn't quite get it, at least as to how it's been done... |
| 17:51:39 | brixen | yeah, it's really a pain |
| 17:51:45 | marcandre | My git-fu is nowhere need good enough to have an idea of how to duplicate the files and keep track of changes. |
| 17:52:30 | brixen | well, we could start by segregating 1.8.6 methods and copy that file to modify for 1.8.7 |
| 17:52:52 | brixen | I'm not saying git will always handle the merge if we need to mod the 1.8.6 file |
| 17:53:05 | brixen | but in those cases, it would be easier to handle manually |
| 17:53:10 | brixen | and pretty easy to diff |
| 17:53:26 | brixen | and then the files are completely one version or the other |
| 17:54:23 | marcandre | Anyways, I'll let you guys decide on the way to go. I'm just overly eager to fix things. Evan seemed kind of upset and I'm a bit ashamed of the current state of affairs... |
| 17:54:41 | brixen | well, it's really a complicated thing |
| 17:54:51 | brixen | lots of moving parts, so we're all learning |
| 17:54:57 | erikh | hey, maybe someone in here will know; is 1.8.7's flock broken? |
| 17:55:07 | erikh | I knwo this isn't a support channel, so I won't pester further. |
| 17:55:16 | brixen | erikh: no idea off hand |
| 17:55:20 | erikh | ok, thanks. |
| 17:55:21 | brixen | do we have specs for it? |
| 17:55:47 | erikh | I imagine it'd be troublesome to test. |
| 17:55:59 | brixen | heh, probably |
| 17:57:01 | brixen | marcandre: I'm trying to think of this in terms of supporing ruby users |
| 17:57:27 | brixen | marcandre: if we have a maintained 1.8.6 mri, then users who have to migrate slowly are somewhat secure |
| 17:57:53 | marcandre | Sure. I think it is a great goal to support 1.8.6 |
| 17:57:56 | brixen | if rails etc are working well with 1.8.7+, then there is a clear (simple?) upgrade path |
| 17:58:13 | brixen | and we may need to change our focus |
| 17:58:24 | marcandre | Oh, I know they are. Major hosting places have already upgraded to 1.8.7 |
| 17:58:25 | brixen | in which case we'd have 1.8.7+ and 1.9 to deal with |
| 17:58:33 | brixen | right |
| 17:58:40 | brixen | so, this is something for us to discuss |
| 17:58:52 | brixen | when we started, there was no 1.8.7 |
| 17:58:58 | evan | enters the room |
| 17:59:02 | marcandre | Of course |
| 17:59:07 | evan | when we started, 1.8.2 was out. |
| 17:59:11 | brixen | heh |
| 17:59:17 | evan | well, when *I* started |
| 17:59:22 | brixen | evan: you might have a read back |
| 17:59:29 | brixen | we'll wait for you to catch up :) |
| 18:00:03 | evan | ok |
| 18:00:06 | evan | give me a sec |
| 18:00:11 | brixen | yeah, rubyspec started at 1.8.4 with some folks still using 1.8.2 iirc |
| 18:00:42 | marcandre | The thing is, the api differences between 1.8.4 to 1.8.6 were minuscule. |
| 18:00:56 | marcandre | 1.8.7 is a different target altogether. |
| 18:01:29 | marcandre | I do think that supporting 1.8.6 is the way to go, but I think the focus should be switch to 1.8.7, personally, because it's what most rubyist are going to use, if that's not already the case. |
| 18:02:52 | brixen | right |
| 18:03:30 | brixen | what I'm thinking is that if EY is maintaining the 1.8.6 mri sources, then ruby users who are really stuck on 1.8.6 have some security |
| 18:04:06 | marcandre | Sure. By stuck you mean their codebase won't work on 1.8.7, or they don't want to install 1.8.7? |
| 18:04:12 | brixen | and if the 1.8 line is for the vast part forward compatible, then maybe we should support 1.8 stable (currently 1.8.7) |
| 18:04:21 | brixen | either of those |
| 18:04:24 | evan | ok, catched up |
| 18:04:35 | evan | well, staying with 1.8.6 is a security thing too |
| 18:04:46 | evan | the changeset between 1.8.7 and 1.8.6 is unknown |
| 18:04:52 | brixen | right |
| 18:04:53 | marcandre | Coz afaik, there is basically no backward incompatibility between 1.8.7 and 1.8.6 |
| 18:04:54 | evan | so that makes people itchy to upgrade |
| 18:05:02 | evan | because they've got no clue what will break suddenly |
| 18:05:21 | evan | marcandre: i'm not upset with ya btw |
| 18:05:43 | evan | i'm super happy you're willing to travail on 1.8.7 |
| 18:05:50 | marcandre | evan: :-) I'm still not proud of my "solution" |
| 18:05:51 | evan | (vocab word of the day!) |
| 18:06:10 | marcandre | The only "major" thing I heard that broke was some gem that checked the arity of a method that had changed. |
| 18:06:27 | evan | broken in rubinius or in MRI? |
| 18:06:37 | marcandre | In production for some people. |
| 18:06:47 | evan | ah ah |
| 18:07:03 | marcandre | Because some hosting companies just switched from 1.8.6 to 1.8.7 and a couple of rails app stopped working because of it. |
| 18:07:25 | evan | well, it's this one of those things thats almost competely about people |
| 18:07:32 | evan | if 1.8.7 gives them no benefits |
| 18:07:36 | evan | and only stress |
| 18:07:38 | evan | they're not going to upgrade |
| 18:07:40 | evan | period. |
| 18:08:14 | marcandre | Personally, I see a huge benefit to 1.8.7. So much so I took time to write my backports gem. |
| 18:08:47 | marcandre | But I realize that many people don't use the api for all it's worth. I even blogged about that! |
| 18:09:07 | marcandre | Anyways... I'm eager to fix things :-) |
| 18:09:25 | evan | whether or not the features are useful sadly doesn't factor in |
| 18:09:27 | marcandre | Maybe we can find an intermediate solution today, awaiting for a better one later. |
| 18:09:32 | evan | it was just the wrong place to make major API changes |
| 18:09:45 | evan | anyway, yes, back to rubinius |
| 18:10:52 | marcandre | I was trying to do some alchemy this morning with Rubinius::VariableScope.of_sender and stuff, just to see if my ugly line could become "Rubinius.require_block" |
| 18:11:18 | evan | right. |
| 18:11:31 | evan | playing those tricks is fine for prototyping |
| 18:11:37 | evan | but they won't pay off in the end |
| 18:12:10 | marcandre | k. So I'll go the "return require_block :method, *args unless block_given?" route, then? |
| 18:12:16 | evan | brixen: so, we'd prefer for the 1.8.6 kernel to have no trace of 1.8.7, yes? |
| 18:12:24 | evan | marcandre: well, let brixen and I discuss |
| 18:12:32 | evan | marcandre: i'm just getting to my morning coffee :D |
| 18:12:38 | marcandre | Or else "return Rubinius.require_block(self, :method, *args) unless block_given? |
| 18:12:50 | marcandre | OK, just let me know then :-) |
| 18:13:00 | marcandre | I'll try to be patient... |
| 18:13:09 | evan | :D |
| 18:13:14 | evan | we'll try to be quick |
| 18:13:22 | evan | pokes brixen |
| 18:13:23 | malumalu | mh, in the roadmap you stated, arrays and strings would need better algorithms. now i would like to know what you specificly thought about? |
| 18:13:53 | marcandre | Well, there's not much competition! Just got a "yes" from Matz after more than 3 weeks... ;-) |
| 18:14:08 | evan | marcandre: a yes to do what? |
| 18:14:15 | evan | malumalu: it's wide sweeping |
| 18:14:38 | evan | malumalu: everything from better algorithms in specific methods (thing a better way of doing Array#compact) |
| 18:14:44 | brixen | evan: yeah, I'd prefer to segregate 1.8.6 methods that are overridden in 1.8.6+ and have separate versions of them |
| 18:14:50 | marcandre | evan: A yes to the question "is the feature Hash[[[1, 2], [3,4]]] that is not documented _anywhere_ an official feature" |
| 18:14:52 | evan | to a completely different overlaying datastructure (VList for Array, for instance) |
| 18:15:04 | evan | marcandre: ah heheh |
| 18:15:06 | marcandre | http://redmine.ruby-lang.org/issues/show/1385 |
| 18:15:21 | evan | brixen: so, duplicate the whole method |
| 18:15:30 | brixen | I would, yes |
| 18:15:33 | evan | and leave it up to the future editors to fix it both places |
| 18:15:40 | evan | complete quarantine |
| 18:15:40 | brixen | in a way that is easier to diff with git |
| 18:16:20 | brixen | so, maybe even hash-1.8.6.rb in kernel, and a cooresponding file in 1.8.7 dir |
| 18:16:25 | evan | so, in order to diff |
| 18:16:41 | evan | should we move the methods that changed in 1.8.6 into their own file |
| 18:16:45 | evan | copy that file to the 1.8.7 dir |
| 18:16:45 | brixen | yeah |
| 18:16:47 | evan | edit it |
| 18:17:02 | evan | so, in the case of array, we'de have kernel/common/array-186.rb |
| 18:17:11 | brixen | right |
| 18:17:29 | evan | we'd be using straight up diff for this then |
| 18:17:31 | brixen | if you have to patch 1.8.6, git may be able to merge that for you in 1.8.7. |
| 18:17:38 | brixen | if not, then the manual apply is not so hard |
| 18:18:00 | evan | at the very least, it would be possible to edit one and ask the question "what changes to I need to port to the other" |
| 18:18:08 | brixen | right |
| 18:18:17 | brixen | and to run the specs against both versions |
| 18:18:26 | brixen | which is ultimately what we should be leaning on |
| 18:18:38 | evan | yeah, it better be |
| 18:19:02 | evan | ok, this solution is not invasive and keeps a clear seperate |
| 18:19:06 | evan | separation |
| 18:19:13 | evan | at the expense of multiple versions of the same code |
| 18:19:31 | evan | computer science being simply the study of infinite tradeoffs |
| 18:19:34 | evan | i'm happy with it |
| 18:19:34 | brixen | yeah |
| 18:19:54 | evan | marcandre: come back into the room |
| 18:19:58 | brixen | it's multiple versions at the scm level, which is where multiple versions belong |
| 18:20:09 | marcandre | I'm here |
| 18:20:31 | brixen | heh |
| 18:20:46 | evan | marcandre: do ya follow that? |
| 18:21:13 | evan | basicly, any methods that need to be changed are moved into a file that contains just that set of methods |
| 18:21:25 | evan | that file is copied to 1.8.7 and editted |
| 18:21:27 | marcandre | Not sure. We'd have /common/array.rb for common stuff, and divergences would be /common/array186.rb and /common/array187.rb |
| 18:21:39 | evan | marcandre: yes |
| 18:21:47 | evan | well, no |
| 18:21:58 | evan | we'd have kernel/common/array-186.rb |
| 18:22:13 | evan | and lib/1.8.7/array-187.rb |
| 18:22:15 | evan | or something |
| 18:22:43 | evan | dealing with conditional loads of files in common isn't a realm I want to enter atm |
| 18:23:09 | evan | git has a lowlevel command called "git merge-file" which takes 2 files and a common base |
| 18:23:11 | marcandre | even for the methods that differ only because they return an enumerator instead of raising a LocalJumpError? |
| 18:23:26 | evan | so I could wipe up a rake task to extract the base and run merge-file |
| 18:23:30 | evan | to show the differences |
| 18:23:40 | evan | marcandre: yep |
| 18:23:41 | evan | even for that |
| 18:23:53 | evan | the idea is 2 fold |
| 18:24:15 | evan | by having the methods in a specific file in kernel, the editor knows that they need to edit the 1.8.7 version too |
| 18:24:22 | evan | and we have write a quick tool to show the differences |
| 18:25:00 | evan | i know it seems pretty unDRY |
| 18:25:03 | evan | but it's a trade off |
| 18:25:03 | marcandre | it might be the 1.9 version they need to modify. |
| 18:25:17 | marcandre | Seems quite wet from where I stand! :-) |
| 18:25:43 | evan | we're just pretty risk averse in having all these version dependent things in kernel |
| 18:25:47 | evan | as you can tell |
| 18:25:54 | marcandre | I understand. |
| 18:26:02 | evan | since this doesn't impact kernel much, it's good in my eyes |
| 18:26:17 | evan | and if in 2 weeks we decide it totally sucks |
| 18:26:18 | evan | we'll change it |
| 18:26:19 | marcandre | The fact that 1.8.6 needs to do one thing (always the same thing) and 1.8.7 needs to do another thing (always the same thing) |
| 18:26:31 | evan | you know how many times we're rearchitectured stuff around here? |
| 18:26:36 | evan | we're practically experts at it now |
| 18:27:00 | marcandre | and that for about ~50 methods, I just feel there would be a good case for a method there, and only that methods gets overridden by 1.8.7 |
| 18:27:25 | headius | you could just wait until after 1.0 too :) |
| 18:27:46 | evan | headius: i'm trying to allow us to do so :) |
| 18:27:49 | headius | but I'm glad this is shaking loose some 1.8.7 specs...we may switch 1.8 mode to 1.8.7 soon |
| 18:27:59 | headius | maybe in 1.5 |
| 18:27:59 | evan | marcandre: i know, again it's a trade off. |
| 18:28:00 | headius | er |
| 18:28:02 | headius | 1.4 |
| 18:28:07 | evan | marcandre: it's just a sticky problem |
| 18:28:14 | evan | and i'm trying to keep the mess in one room of the house |
| 18:29:02 | marcandre | From a PR perspective, having 1.8.7 compatibility seems like a good thing. I mean saying you're getting close to a version that's not the current one (although that's 99.5% of the work!) is not as good as emulating the last one... |
| 18:30:00 | marcandre | evan: I'm just wondering how much it's going to hurt my brain and fingers. I'm so adverse to copy pasting stuff around like this... My blood is dry :-) |
| 18:30:14 | evan | thats not good! |
| 18:30:20 | evan | you should get that looked at! |
| 18:30:21 | evan | :D |
| 18:30:59 | headius | marcandre: how are you planning to handle things like Enumerator#next? |
| 18:31:08 | headius | in MRI they're either green-threaded or fibers |
| 18:31:15 | evan | marcandre: well, this is one place where you're pain is my eased worry |
| 18:31:24 | evan | and you're eased worry is my pain |
| 18:31:26 | evan | your |
| 18:31:41 | evan | since it's a tradeoff |
| 18:31:59 | marcandre | headius: I'm using /lib/generator... and that calls continuations that are not implemented... |
| 18:32:09 | evan | EEW |
| 18:33:10 | marcandre | Well, there is no magic. Unless rubinius implements fibers/continuations, there is no 'next' |
| 18:33:31 | marcandre | Or else I'm missing something. |
| 18:33:35 | evan | fucking #next |
| 18:33:41 | evan | curses the sky |
| 18:34:00 | evan | it's so fucking wrong to implement #next on top of #each |
| 18:34:01 | lopex | Sky#next |
| 18:34:02 | marcandre | He he. I think people know that it's a "use only if you absolutely need to" |
| 18:34:03 | evan | it's completely backwards |
| 18:34:16 | marcandre | agrees |
| 18:34:53 | evan | headius: how about this |
| 18:35:02 | evan | lets backdoor a new API |
| 18:35:48 | evan | for Enumerators, the method __for_next__ is called on the object |
| 18:35:58 | evan | and is required to return an object that has #next |
| 18:36:11 | evan | to use for this |
| 18:36:19 | evan | Array and such can use this API |
| 18:36:24 | evan | and we'll just forget to close the gate |
| 18:36:25 | evan | so anyone can |
| 18:36:37 | lopex | heh |
| 18:37:17 | evan | i'd probably end up doing this anyway to support #next on Array, Hash, etc |
| 18:37:26 | lopex | sure |
| 18:37:33 | lopex | first thing to do |
| 18:39:49 | marcandre | evan: Alright. So it's official, there is no way I can convince you to not duplicate the code of the ~50 methods that return an enumerator? |
| 18:40:19 | evan | not right now, no. |
| 18:40:20 | evan | sorry. |
| 18:40:23 | marcandre | Naming convention: /common/array.rb, /common/array_186.rb, /lib/1.8.7/array.rb, /lib/1.9/array.rb? |
| 18:40:41 | evan | yeah, thats fine |
| 18:41:10 | marcandre | k. Thanks |
| 18:42:57 | brixen | evan: you changed the dns for rubini.us? |
| 18:43:12 | evan | no |
| 18:43:16 | brixen | hm |
| 18:43:16 | evan | i need to talk to the GH guys |
| 18:43:22 | evan | I can't set a CNAME for a toplevel domain |
| 18:43:26 | evan | only a subdomain |
| 18:43:28 | brixen | ahh |
| 18:43:46 | brixen | ok, I'm getting this for rubini.us: http://guide.opendns.com/?url=rubini.us&servfail |
| 18:43:51 | evan | :? |
| 18:44:02 | evan | i fucked it up last night |
| 18:44:04 | evan | it should have recovered |
| 18:44:27 | brixen | could be my dns then |
| 18:44:39 | macournoyer | I get it too |
| 18:44:54 | evan | blah. |
| 18:44:55 | evan | ok |
| 18:45:27 | evan | what about other parts of rubini.us? |
| 18:45:29 | evan | gh. |
| 18:45:30 | evan | etc |
| 18:45:35 | brixen | gh works for me |
| 18:45:39 | evan | k |
| 18:52:28 | evan | ok, i've updated the DNS |
| 18:52:35 | evan | it should recover here once the caches time out |
| 19:12:11 | boyscout | Handle all of push_literal and string_dup - 535ba09 - Evan Phoenix (llvm-jit) |
| 19:46:41 | rue | Reading backlog still, but could we do a bytecode substitution from the 1.8.7 libraries? |
| 19:46:48 | rue | Or -insertion. |
| 19:48:39 | evan | perhaps |
| 19:52:05 | boyscout | Add send_method - 822d4db - Evan Phoenix (llvm-jit) |
| 19:52:06 | boyscout | Fix resetting allow_private_ - b7d7405 - Evan Phoenix (llvm-jit) |
| 19:52:06 | boyscout | Add create_block and send_stack_with_block - eb19e18 - Evan Phoenix (llvm-jit) |
| 20:20:05 | boyscout | Updated CI frozen specs to RubySpec 6bfa11f6. - 8fa8c14 - Brian Ford |
| 20:20:05 | boyscout | Updated CI tags for merged specs. - eaea59c - Brian Ford |
| 20:22:51 | boyscout | CI: eaea59c success. 2679 files, 10335 examples, 32880 expectations, 0 failures, 0 errors |
| 20:27:02 | boyscout | Do full VariableScope setup via a function - 1e527b1 - Evan Phoenix (llvm-jit) |
| 20:33:40 | rue | evan: Method#patch ? |
| 20:35:31 | rue | `Enumerable.instance_method(:each_with_index).patch "return" => "return unless block_given?; yield"` |
| 20:36:03 | rue | Generate an AST/bytecode to 'grep' it and replace it |
| 20:36:57 | evan | where do we patch it? |
| 20:37:00 | evan | er. |
| 20:37:00 | evan | when |
| 20:37:52 | rue | When loading whichever file contains the instruction, ie in this case lib/1.8.7/enumerable.rb (or whatever) |
| 20:38:13 | rue | Could make it Rubinius.patch or something, of course |
| 20:39:13 | evan | so every VM load |
| 20:39:14 | evan | hm. |
| 20:39:38 | rue | Yeah, unless we do some sort of copyover support |
| 20:40:00 | rue | (The existence of .patch opens up some more neat macroish options too, obviously) |
| 20:43:09 | rue | evan: Also, wrt. Github, set it up for www. and then CNAME that |
| 20:44:11 | evan | already got it figured out |
| 20:44:15 | evan | you can use an A rec |
| 20:44:34 | rue | Aha, goodies |
| 20:44:49 | evan | lunch time! |
| 20:51:53 | boyscout | 1.8.7: IO#each, each_byte, each_line (optional block) - e867f23 - Marc-Andre Lafortune |
| 20:51:53 | boyscout | 1.8.7: Segregated methods that get overriden in array_186, etc... - 8a9a010 - Marc-Andre Lafortune |
| 20:52:26 | marcandre | clean up done :-) |
| 20:52:54 | brixen | sweet :) |
| 20:53:00 | marcandre | Only thing I haven't thought about is how to deal with changed lib, i.e. "require 'io_string'" |
| 20:53:11 | marcandre | stringio I mean |
| 20:54:29 | brixen | while you think about that, I'm grabbing some lunch :) |
| 20:54:54 | rue | marcandre: Changed? |
| 20:55:13 | marcandre | rue: ? |
| 20:55:56 | rue | What do you mean by "changed lib"? |
| 20:56:31 | marcandre | Well, stringio is changed in 1.8.7. So require 'stringio' must load an additional file '1.8.7/stringio'. |
| 20:56:38 | marcandre | I think autoload might do the trick |
| 20:56:49 | boyscout | CI: 8a9a010 success. 2679 files, 10335 examples, 32880 expectations, 1 failure, 0 errors |
| 20:57:04 | marcandre | Oups, 1 failure? |
| 20:57:25 | marcandre | Is there a way to know which one, coz on my machine I have no failure... |
| 20:59:06 | rue | marcandre: No, just put lib/1.8.7 *first* in the load path :) |
| 20:59:43 | rue | Think Mr. CI is busted again. It should give an URL for failures |
| 21:00:09 | marcandre | loading path: cute |
| 21:00:35 | rue | The newer version knows it will have to load the old one, so it works simpler |
| 21:13:13 | brixen | marcandre: http://ci.rubini.us/rubinius |
| 21:13:28 | brixen | might be a spurious failure |
| 21:13:56 | brixen | ah, it does use enumerable... maybe not spurious |
| 21:14:38 | brixen | hm, that's probably mspec though |
| 21:19:16 | marcandre | He he, it look like the system clock changed of second between two calls, which is why it's complaining. |
| 21:21:21 | marcandre | I fixed the specs to allow for a 1 second difference. |
| 21:40:25 | evan | marcandre: autoload isn't allow in kernel or any code produced by us |
| 21:46:59 | marcandre | evan: don't worry, rue found the perfect solution. |
| 21:47:08 | marcandre | without autoload |
| 22:06:28 | brixen | evan: now rubini.us is landing on github.com, should I update the CNAME file? |
| 22:07:24 | evan | yes |
| 22:07:33 | brixen | k |
| 22:09:18 | boyscout | Change CNAME to rubini.us. - 48f3a35 - Brian Ford (gh-pages) |
| 22:09:30 | evan | i love that website changes show up in here |
| 22:09:37 | brixen | yeah :) |
| 22:09:52 | brixen | the branch reporting is sweet |
| 22:10:19 | brixen | what's the plan for merging in the jit branch? |
| 22:10:43 | brixen | I was thinking of doing Tap after Hash, but I could do Tap first |
| 22:10:58 | dgtized | rubini.us just goes to the github homepage for me now, not our files |
| 22:11:07 | dgtized | is that just cause it hasn't propegated the change yet? |
| 22:11:36 | evan | dgtized: it might take a sec |
| 22:12:04 | evan | brixen: well, once i've got coverage for it to compile all methods i'm going to merge it in |
| 22:12:13 | brixen | ok |
| 22:12:24 | evan | i'm going at a pretty good pace now |
| 22:12:33 | brixen | yeah |
| 22:12:47 | brixen | I was just thinking how to coordinate the Tap change |
| 22:12:53 | evan | don't worry about it |
| 22:12:54 | boyscout | Add send_stack_with_splat - 2722fac - Evan Phoenix (llvm-jit) |
| 22:12:54 | brixen | I'll just make a parallel process |
| 22:12:59 | evan | i'm on a side branch |
| 22:13:03 | evan | so i'll manage the merge |
| 22:13:04 | brixen | yeah |
| 22:13:08 | evan | thats the cost of using a branch |
| 22:13:16 | evan | if you want to do it on a branch too |
| 22:13:24 | evan | then we'll just coordinate to figure out who should merge in first |
| 22:13:35 | brixen | I shouldn't need a branch |
| 22:13:39 | evan | ok |
| 22:13:39 | brixen | I'll leave rake in place |
| 22:13:42 | evan | go for it |
| 22:13:46 | brixen | k |
| 22:13:48 | evan | full steam ahead! |
| 22:14:06 | brixen | yeah :) |
| 22:14:25 | brixen | looks like rubini.us is working |
| 22:14:57 | evan | rad |
| 22:15:10 | evan | maybe a little later i'll work on redoing it with jekyll |
| 22:15:23 | brixen | you should work on the jit :) |
| 22:15:26 | evan | :D |
| 22:15:31 | evan | my brain needs a break sometimes |
| 22:15:37 | brixen | ah true |
| 22:15:44 | brixen | jekyll is sweet |
| 22:15:52 | brixen | it will be easy to incrementally fix it up |
| 22:15:56 | evan | yep |
| 22:16:11 | brixen | I just wget'd the old site and fixed links |
| 22:16:45 | evan | well, the old site is what's in gh-pages now, yes? |
| 22:16:50 | brixen | yeah |
| 22:17:06 | brixen | so, I would start converting to markdown |
| 22:17:10 | brixen | and using templates |
| 22:17:14 | evan | yep |
| 22:17:24 | evan | i figured i'd convert it to layouts first |
| 22:17:29 | brixen | yeah |
| 22:17:32 | evan | then each page one at a time |
| 22:17:43 | brixen | cool |
| 22:17:51 | rue | Jekyll is a bit iffy, but then so are all the other statics. |
| 22:18:15 | evan | rue: it's better than straight static though |
| 22:18:38 | rue | Certainly, for anything with more than two pages |
| 22:30:46 | rue | Jekyll is pretty blog-centric, insofar as I know. Nanoc and Webby are a bit more versatile albeit with the corresponding additional complexity/configurability |
| 22:39:34 | brixen | rue: you had me at Jekyll is pretty |
| 22:44:28 | rue | I was biased in favour of it, courtesy of my Barbarian/Rogue (Assassin) Halfling character "Yeahkill An' Hide", but it is not quite all that one might hope for. |
| 23:08:10 | boyscout | Add send_super_*, push_block - bebbbb9 - Evan Phoenix (llvm-jit) |
| 23:08:19 | evan | thats a weird SHA1 |
| 23:08:27 | slava | heh |
| 23:08:27 | evan | SHA1's are like a roullete game |
| 23:08:37 | evan | roulette |
| 23:08:57 | evan | and when you win, it's 1 to 100 trillion odds |
| 23:09:26 | dgtized | anyone see the contest to find the MD5 key where MD5(key) = key? |
| 23:09:54 | slava | haha |
| 23:10:18 | slava | evan: so can the jit run any code yet? |
| 23:10:38 | rue | It can push a block ;) |
| 23:11:44 | dgtized | so is llvm going to be in a submodule in the repo now? |
| 23:12:40 | rue | LLVM on git now? |
| 23:12:48 | evan | dgtized: not sure yet, but not a submodule |
| 23:12:51 | evan | rue: no |
| 23:13:01 | rue | Well, then no.. :P |
| 23:13:04 | dgtized | so what is the problem with submodules out of curiosity? |
| 23:13:07 | rue | Could make it a subtree |
| 23:13:10 | evan | they're a pain. |
| 23:13:18 | dgtized | even if we don't pull them ever? |
| 23:13:23 | evan | slava: yeah, it has been running code for days |
| 23:13:23 | rue | Submodules are just fine |
| 23:13:26 | evan | slava: just not all code :) |
| 23:14:12 | rue | If you are both modifying the submodule AND have the ability to use rsync or some similar mechanism instead, then submodules are not necessarily ideal. |
| 23:14:58 | rue | Modifying the submodule from within the supermodule, that is to say. |