From: Ben Giddings Date: 2005-08-17T03:08:01+09:00 Subject: Re: Building a REPL for Ruby On Monday 15 August 2005 10:11, Shalev NessAiver wrote: > Yes, I know ruby already has irb, but I have a friend who keeps > engaging me in these python vs. ruby wars and he recently submitted > the challenge to me to > > "Write a fully featured REPL for ruby in 70 lines or less. > Furthermore, it can't be written in ruby." I guess he means write it in C then? Maybe I misunderstand the problem, but here's one that's exactly 70 lines: /** * \file repl.c * * \author Ben Giddings * Copyright (C) 2005, Ben Giddings * */ #include #include #define INPUT_SIZE 0x100 int main(int argc, char **argv) { char input_buff[INPUT_SIZE]; int error; ruby_init(); ruby_script("repl"); /* ? */ while (1) { memset(input_buff, '\0', sizeof(input_buff)); printf("repl> "); // no newline on purpose fgets(input_buff, INPUT_SIZE-1, stdin); if (0 == strncmp("quit", input_buff, 4)) { break; } rb_p(rb_eval_string_protect(input_buff, &error)); if (error) { rb_p(ruby_errinfo); } } return error; } /* Hmm, line 42. Guess I gotta add another 28 lines to get to 70 He addresses a man standing behind a desk marked "Complaints". C: I wish to complain, British-Railways Person. Attendant: I DON'T HAVE TO DO THIS JOB, YOU KNOW!!! C: I beg your pardon...? A: I'm a qualified brain surgeon! I only do this job because I like being my own boss! C: Excuse me, this is irrelevant, isn't it? A: Yeah, well it's not easy to pad these python files out to 200 lines, you know. C: Well, I wish to complain. I got on the Bolton train and found myself deposited here in Ipswitch. A: No, this is Bolton. C: (to the camera) The pet shop man's brother was lying!! A: Can't blame British Rail for that. C: In that case, I shall return to the pet shop! He does. C: I understand this IS Bolton. O: (still with the fake mustache) Yes? C: You told me it was Ipswitch! O: ...It was a pun. C: (pause) A PUN?!? O: No, no...not a pun...What's that thing that spells the same backwards as forwards? C: (Long pause) A palindrome...? O: Yeah, that's it! C: It's not a palindrome! The palindrome of "Bolton" would be "Notlob"!! It don't work!! O: Well, what do you want? C: I'm not prepared to pursue my line of inquiry any longer as I think this is getting too silly! Sergeant-Major: Quite agree, quite agree, too silly, far too silly... */