From: christopher diggins (cdiggins_at_[hidden])
Date: 2005-01-07 14:42:23


----- Original Message -----
From: "Rob Stewart" <stewart_at_[hidden]>
To: <boost_at_[hidden]>
Cc: <boost_at_[hidden]>
Sent: Friday, January 07, 2005 2:00 PM
Subject: Re: [boost] Any interest in a library for supporting program reuse?

>> What would you suggest the name of the class be instead? It is intended
>> to
>> provide the main entry point for a program, so that the program can be
>> easily reused separately.
>
>>From what I see, you're packaging functions, not system() calls
> to executables or separate processes connected by some IPC.

I am trying to describe a way to write a C++ program by packaging the entire
thing (entry point, global functions, global variable) in a single object.

So what I propose is that rather than write a program in a single cpp file
as follows:

 /////////////////
 // my_prog.cpp

 #include <iostream>
 char const* s = "hello world\n"
 int main() {
   std::cout << s << std::endl;
   return 0;
 }

Instead what I propose is that instead you write the programs in two files
as:

  /////////////////
  // my_prog.hpp

  #include "programs.hpp"
  #include <iostream>
  class MyProgram : Program {
    const char* s;
  protected:
    virtual void Main() {
      std::cout << s << std::endl;
    }
  };
  char const* MyProgram::s = "hello world\n";

  /////////////////
  // my_prog.cpp

  #include "my_prog.hpp"
  int main() {
    MyProgram().Run();
    return 0;
  }

Now having done that, the entire program can now be treated as a single
object which can be redirected or piped.

  /////////////////
  // my_prog3.hpp

  #include <fstream>
  #include "programs.hpp"
  #include "my_prog.hpp"
  #include "my_prog2.hpp"

  class MyProgram3 : Program {
  protected:
    virtual void Main() {
      MyProgram() > MyProgram2() > filestream("c:\\tmp.txt");
    }
  };

My desire is to make it trivial to reuse the entire source code from
programs, using a simple syntax as if they were shell scripts, and in a
completely portable manner from within C++. This foregoes any kind of
process call or whatever, because in C++ the notion of threads or process
doesn't exist. I have written a small blog entry on the subject as well at
http://www.artima.com/weblogs/viewpost.jsp?thread=87459

Is it more clear what I am trying to get at? Am I missing something about
Jonathan's iostreams library, that makes it trivial to achieve the same
thing?

CD