Browse thread
toplevel with pre-installed printers
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | code17 <code17@g...> |
| Subject: | Re: toplevel with pre-installed printers |
Andrej Bauer <Andrej.Bauer@andrej.com> writes:
> Sorry, I was not clear enough. I know about .ocamlinit. I am going to
> have several custom ocamltop's and they can't all share the same
> .ocamlinit. What now?
I recently worked on a problem about customized toplevel. I need a
generic toplevel with various kinds of preloaded modules and open them
beforehand. So I can't produce these toplevels statically using
ocamlmktop, I have to launch them with various configurations on the
fly. Maybe this is also your situation. Here are some results I've got
(especially from the beginner's list, hi Richard Jones :-)
Case 1:
Suppose your requirement is quite simple: pre-load variant modules,
open them, execute some evaluations and primitives without showing the
feedback ... and you don't have to do complex interpretation between
the user input as well as feedback from the real ocaml toplevel.
You would probably like to use the undocumented(why?) option "-init",
then wrap your executable as a shell script or programs. Use it like the
default .ocamlinit except now you can indicate who is the script for
initialization. E.g.
<code>
tmp/init.ml:
# load "bigarray.cma";;
open Bigarray.Genarray;;
(* You may even delete it after execution, maybe dangerous *)
Sys.command "rm tmp/init.ml";;
</code>
<command>
ocaml -init tmp/init.ml
</command>
<toplevel>
Objective Caml version 3.09.0
# create;;
- : ('a, 'b) Bigarray.kind ->
'c Bigarray.layout -> int array -> ('a, 'b, 'c) Bigarray.Genarray.t
= <fun>
#
</toplevel>
Obviously you can have different configuration for different toplevels
you want, and even produce the configuration on the fly.
Case 2:
If you want to do complex interpretation between your user and the
real ocaml toplevel, e.g. you want "My own topleve" instead of
"Objective Caml version 3.09" showing at the beginning, you want to
interpret the user's input secretly before feeding them to the
toplevel (maybe camlp4 help to do anything possible here?) and hide or
modify feedback from ocaml (maybe personalized pretty printer can
solve any problem here?).
Either you are quite familiar with toplevel source and hack by
yourself, or like me really provide a program acting as translator,
i.e. another process active between user and the background running
toplevel. Then you can do anything as you want. I've done so, and wish
to provide some of the generic functionality as library when I've got
time to clean my code.
Wish it helps!
code17