Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] error messages to stdout?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Doug Bagley <doug@b...>
Subject: Re: [Caml-list] error messages to stdout?
John Malecki wrote:
> Doug Bagley wrote (2002-01-16T14:09:48-0600):
>  > 
>  > Anyway, I have a workaround, I wrote a "trampoline" program that can
>  > be used in place of the toplevel interpreter and does the compilation
>  > transparently for lazy persons such as myself.
>  > 
>  > It essentially turns any compiled language into a scripting language.
>  > If anyone is interested in it ... I could clean it up for public
>  > consumption.
> 
> Hi Doug,
> 
> I'd be interested in the trampoline program.

Well, it's pre-release, and uses some pre-requesite libs of mine that
are also pre-release :-)  And I haven't had anyone else test out the
build process yet, and so on and so forth, but if you are adventurous,
you are welcome to take a look and give me feedback, as long as you
realize it is a very raw work-in-progress :)

It is currently here:

 http://www.bagley.org/~doug/ocaml/scriptomatic/

It basically hands off the build work to make, and I have a very
simple makefile included whichs needs a lot of polishing, but the
basic idea seems sound, and I can write "scripts" that compile to
byte or optimized Ocaml, or even write "scripts" in C :) The built
executables are cached, and only rebuilt if the original script
changes.

> At the moment we are operating in a homogeneous computing environment.
> Sooner or later we will add some a different computer architecture to
> our pool and I was thinking about how to take advantage of compiling
> byte-code once and using it on all platforms.  This has the advantage
> that a developer can compile once, on any one platform, and make that
> program immediately available on all other machine architectures.
> 
> I'm not sure of the best way to do this.  I was thinking of using the
> bash MACHTYPE environment variable and then install the byte-code
> program in /usr/local/bin but have the 1st line of that file say
> 
>    #! /usr/local/bin/ocamlrun.$MACHTYPE
> 
> Unfortunately the loader does not perform environment variable
> expansion.  I tried other tricks but I couldn't find a simple "1
> liner".  I'm still looking for something simple.  If anyone has any
> ideas I'd like to hear them.

I think that simply doing what you want above is a little easier than
what I have implemented, and you may wish to use the simplest solution.
I've appended an idea for a replacement interpreter that is an "almost
one-liner" in C below. It switches the toplevel interpreter based on
the machine type environement variable. Maybe it will give you an idea.

(Note that on Linux, the program execed by the trampoline may not see
itself in argv[0], I sent a note to caml-bugs about an old fix (557),
which I think is related to the problem).

cheers,
doug
-- 
trampo.c:
/* gcc trampo.c -o trampo */
#include <stdio.h>
main (int argc, char **argv) {
    char exe[256];
    if (snprintf(exe, 256, "ocamlrun.%s", getenv("MACHTYPE")) > -1)
	execvp(exe, argv);
    else fprintf(stderr, "ouch\n");
}
/* end */

int the shell:
export MACHTYPE=MACLISA  # or whatever

tramptest:
#! ./trampo
let _ = print_endline "Hello World"
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr