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 <bg-ruby / infofiend.com>
 * Copyright (C) 2005, Ben Giddings
 *
 */

#include <stdio.h>
#include <ruby.h>

#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...
*/