Dear Member of the OCaml mailing list,
The problem about which I reported on
this reflector around two weeks ago (array index violation after around
4 days) has in the mean time been solved thanks to the great native function
call backtrace for the ocamlopt compiler due to Markus Mottl. Given that
my program crashed after 3.7 days, and my program ran around 30x slower
in byte code, debugging using byte code was not an option (this slowdown
had been similar if I had used _DEBUG mode of a C++ program instead of
_RELEASE version). Also, as reported earlier, putting "try ... with
" around all attempts to index an array is not feasbile in standard
OCaml for array elements in the left hand sides of assignments. A static
unhandled exception checker provided on a web page, ran into dead HTML
links.
Hence, the native function call, which
comes at minimal runtime overhead cost, mainly the cost of -inline 0, is
a great new feature that would give OCaml another advantage over C++ when
added to the OCaml language in a next release. Below I give a toy example
:
--- nlv13512/TestProgram ---> ls
attempt.ml*
--- nlv13512/TestProgram ---> cat
att*
let a = Array.make 2 0;;
let f i = i*i;;
let g i = a.(i);;
let b = f 2;;
let c = g 2;;
--- nlv13512/TestProgram ---> ocamlopt
-inline 0 -gb attempt.ml
--- nlv13512/TestProgram ---> a.out
Fatal error: exception Invalid_argument("index
out of bounds")
Native function backtrace:
camlAttempt__g_60
camlAttempt__f_58
--- nlv13512/TestProgram --->
=Andries
PS The attached patch was provided to
me by Markus Mottl for the 3.09.1. release.
------------------------------------------------------------------------
Dr. Ir. Andries P. Hekstra
Philips Research
High Tech Campus 27 (WL-1-4.15)
5656 AG Eindhoven
Tel./Fax/Secr. +31 40 27 42048/42566/44051
* Good open source anti-RSI software : http://www.workrave.org