[cwn] Attn: Development Editor, Latest Caml Weekly News

Alan Schmitt alan.schmitt at polytechnique.org
Tue Nov 13 00:50:23 PST 2007


Hello,

Here is the latest Caml Weekly News, for the week of November 06 to  
13, 2007.

1) Ocaml-related jobs, Boston area
2) 2D graphing and charting
3) A sound semantics for OCaml light
4) Scanf and segfaults
5) Wink releases caching library
6) debugging memory leaks
7) Findlib-1.2 released

========================================================================
1) Ocaml-related jobs, Boston area
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
040d19f72889f6ab/5b78b05fb13803d6#5b78b05fb13803d6>
------------------------------------------------------------------------
** Matteo Frigo announced:

I apologize for spamming this list to which I do not usually
participate, but I would like to make you aware that Cilk Arts is
hiring and that a good chunk of our development is done in Objective
Caml.  We are based in Lexington, MA, USA.

Cilk Arts is a venture-backed startup originally founded by
prof. Charles Leiserson and myself to bring to the marketplace the
large body of research done at MIT on Cilk in the past 15 years.  Some
long-timers may remember that our Cilk team won the first
International Contest on Functional Programming in 1998.  We are big
fans of ocaml (some of you may be familiar with my own work on FFTW).

Our website <http://www.cilk.com> gives details about the company,  
products,
and job positions.  I would appreciate if you could forward this
announcement to anyone whom you think could be interested.
			
========================================================================
2) 2D graphing and charting
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
86a047f1fb096038/1a26a6e323e9c1d8#1a26a6e323e9c1d8>
------------------------------------------------------------------------
** Jon Harrop asked:

I've been using Mathematica to render the graphs on our site, like  
the ray
tracer language comparison:

   <http://www.ffconsultancy.com/languages/ray_tracer/results.html>

What free OCaml software might I use to do the same thing?
			
** Till Varoquaux suggested:

There is an interface to gnuplot. I've never tried it:
<http://sourceforge.net/projects/ocaml-gnuplot/>
			
** Hezekiah M. Carty also answered:

There is at least one partial plplot (<http://plplot.sourceforge.net/>)
binding already in existence
(<http://vityok.org.ua/cgi-bin/odd.cgi/Ocaml-plplot>), and I'm working
on another one using camlidl rather than Swig.

I haven't put my code out yet because I'd like to finish up some of
the 3D plotting function wrappers first, but if you're interested in
having something sooner I could put out what I have currently.  There
is enough there to do 2D plots, and the naming follows the C-library
quite closely.

The already-mentioned gnuplot binding seems to work reasonably as
well, though I've only made very basic 2D plots with it.

PsiLab (<http://psilab.sourceforge.net/>) is older, and based on OCaml
3.01 or 3.02 I think.  But I've been able to get it to build on recent
Linux distributions.  It has a fairly high-level binding to the plplot
libraries which is quite easy to use.  I have dreams of some day
updating it to work with recent OCaml releases.  It might also be a
decent start for a Mathematica-like toplevel with inline plots and so
on if the toplevel customizations could be tied in to labltk or
lablgtk.  I don't know how possible this is though.
			
** Peng Zang also answered and Paul Pelzl added:

 > I've used mlgrace in the past:
 >
 >   <http://www.eecs.umich.edu/~pelzlpj/mlgrace/>
 >
 > Although I've never tried labelled points before...  I also have a  
convenience
 > interface to it that I've written so I can do stuff like:
 >
 >   Plot.plotfun (( ** )2.) 0. 10. 0.1 "ro-";;
 >
 > and have it plot x^2 from 0 to 10 in 0.1 steps with a red line and  
dotted data
 > points.  It's not packaged up nice at all, but I'm happy to share  
it if
 > you're interested.

mlGrace does not currently expose an API to create point labels, but the
xmgrace GUI can do this (under Plot->Set Appearance->Ann. values).  So
something similar to Jon's example plot could be generated using
grace_view#plot_many, with a small amount of touch-up work from the GUI.
			
========================================================================
3) A sound semantics for OCaml light
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
c53f6edf70705a1e/39f41ff630bc451c#39f41ff630bc451c>
------------------------------------------------------------------------
** Scott Owens announced:

We are pleased to announce the public release of OCaml light, a
formal semantics for a substantial, practical subset of the Objective
Caml language. It is written in Ott, generating proof assistant
definitions for HOL-4 and (in draft form) Coq and Isabelle/HOL. It
comprises a small-step operational semantics and a syntactic, non-
algorithmic type system. A type soundness theorem has been proved and
mechanized using the HOL-4 proof assistant. To ensure that the
operational semantics accurately models Objective Caml, an executable
version of the semantics has been created (and proved equivalent in
HOL to the original, relational version) and tested on a number of
small test cases.

For more information please visit <http://www.cl.cam.ac.uk/~so294/ 
ocaml>.
			
========================================================================
4) Scanf and segfaults
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
180889107dce82e5/03588893d7852376#03588893d7852376>
------------------------------------------------------------------------
** Deep into this controversial thread, Oliver Bandel said and Pierre  
Weis replied:

 > Segfaults in OCaml are seldom, but nevertheless
 > those seldom seen segfaults should be fixed.

 > The original poster stated out that the bug he
 > posted was four months on status "new".

 > This was a littlebid astonishing, and possibly
 > the reason why this thread was started.


I think this is my fault: I implemented Scanf in the first place.

May be some of you missed the point in the segfault example involving  
Scanf
that was given on this list: the example involves using positional  
parameters
in the string argument passed to sscanf and using meta format  
specifications
in the format string argument.

Positional parameters:
----------------------

Positional parameters are parameters number specifications that  
allows format
strings to refer to another parameter than the next in the presentation
order. This is supposed to be useful for internationalization where  
you can
change the printing order of the parameters to reflect the translation.

This new feature has only been introduced in the documentation for  
Printf
just after the successful correction of the long standing strange  
behaviour
of printf with respect to partial evaluation. Positional parameters have
never been mentioned in the Scanf documentation and Scanf is not  
supposed
to supported them.

To say the least, this feature is still experimental and not yet  
completely
implemented in the current sources of the compiler. In fact, the  
typechecker
abruptely rejects format strings with positional parameters, as  
exemplify
here:

# Printf.printf "%2$i %1$s" "toto" 1;;
Bad conversion %$, at char number 0 in format string ``%2$i %1$s''

As mentioned above, Scanf is not supposed to handle positional  
parameters,
and indeed rejects them at runtime in the format string (this could seem
overkill, given that the type-checker rejects positional parameters  
in the
first place, but well, 2 checks are better than one!).

Meta format specifications:
---------------------------

However, Scanf is still capable to read a format string lexem given  
in the
input, provided the format used to read this lexem involves a meta  
format
that properly describes the format string lexem to be read. For  
instance:
Scanf.sscanf s "%{ %i %f %}" is supposed to read in the input (the  
string s)
a format string that specify to read first an integer, then a  
floating point
number.

A more practical working example could be:

# let fmt =
     Scanf.sscanf "\"Reference: %i      Price : %f\"" "%{%i%f%}"
       (fun fmt -> fmt);;
val fmt : (int -> float -> '_a, '_b, '_c, '_d, '_d, '_a) format6 =  
<abstr>
# string_of_format fmt;;
- : string = "Reference: %i      Price : %f"

This features allows a procedure to read the format string it has to  
use to
read a file: the procedure just reads the format as the first line of  
the
file.

The example seg-fault analysis:
-------------------------------

So, the seg-faulting example given is quite involved, since it uses  
scanf's
capability to read a format string in the input, in order to create a  
format
string with positional specification. This was clearly unexpected,  
given the
``axiom'' that says "the type checker will prevent that in the first  
place
since it rejects any positional parameter!". In this case, the  
typechecker
cannot reject the format string given in the program, since it has no
positional specification; and it cannot reject the format read, since  
this
format is unknown at compile time!

This simply means that there is a bug in the type compatibility  
runtime test
for format strings that fails to properly reject positional  
parameters. This
is not difficult to correct, if not at all satifactory.

The corrections or problem suppression:
---------------------------------------

I once thought that introducing positional parameters in Scanf,  
Printf, and
Format, would be a piece of cake in comparison to correcting the hard  
bug of
printf's treatment of partial evaluation (this ``misfeature'' stood  
there for
more than 10 years, before a correction can be figured out).  
Unfortunately, I
was wrong, positional parameters are not at all easy, even when the  
printf
behaviour is corrected: admittedly, the runtime implementation for  
positional
parameters was not too hard for Printf and it has been done quickly;  
on the
other hand, the type checking of format strings with positional  
parameters
proved to be untrivial: you need a deep breath to dig into the old  
code, you
need once more understand it in depth, and basically you must rewrite  
it with
a new logic that supports positional parameters. This has not yet  
been done,
unfortunately.

In conclusion, I have to correct the runtime compatibility check for  
formats
to suppress the problem, and remove any mention of positional  
parameters from
the documentation, until I achieve the new type checking stuff for  
format
strings.

Or just give up on this complex feature that has already upset too  
many people.

I agree with any one who cares that I was wrong to introduce a not yet
properly baked feature in Caml. The natural over optimistic tendancy  
of my
researcher's enthousiasm caught me there ...

[...]

 > I for myself have only stated that I hope the bugs will be fixed.

I hope them to be fixed as well. Sometimes it's difficult. Sometimes  
we lack
the time and concentration to find the solution. Even worse,  
sometimes we
never find the solution for years...

Best regards,

PS: You can check in the bug tracking system that there are more than  
one
message concerning positional parameters in format strings, and that I
already answered to a lot of them.
			
========================================================================
5) Wink releases caching library
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
854f70b8d026eebe/0ef0a41a80ce6070#0ef0a41a80ce6070>
------------------------------------------------------------------------
** Gerd Stolpmann announced:

Wink Technologies, Inc., the makers of the soon-to-be-famous people
search engine (<http://wink.com>), have just released another OCaml
library, this time for caching data:

"Cache implements a caching service for storing arbitrary strings that
can be located by string keys. The caching service is reachable over
TCP. The cache can be distributed over several nodes. The cache can be
saved to disk in regular intervals. A client module is included. Both
synchronous and asynchronous access methods are defined."

Downloadable at <http://oss.wink.com/cache/>. There is also a manual:
<http://oss.wink.com/cache/cache-1.0/doc/html/index.html>

There is also a GODI package for it (godi-cache).

N.B. The library has been in production for more than a year. It's
rock-stable and fast, and runs 24x7 without any problems.
			
** Joel Reymont asked and Gerd Stolpmann answered:

 > Why did you guys roll your own instead of using memcached?

We considered using memcached. However, there is no client for OCaml,
and especially no asynchronous client, so we would have had to write
one. I looked at the protocol, and it turned out to be weird, ad-hoc,
and not very extensible. It would have been no fun developing such a
client.

In contrast, for developing our own caching server, it was not necessary
to write any new networking code: By using the SunRPC library of
Ocamlnet we got the whole communication stuff for free, and the protocol
is now well-structured and easily extensible. Furthermore, we could
tailor the features to our requirements, and have the guarantee that we
can adapt the server to any changes.

Actually, we needed only 1 day for developing the library, and another
day for integrating it. This is what other companies spend for
evaluating external software they might want to use. So the costs were
justified, and we now have exactly the software we wanted.

So the essence is: By using good tools (OCaml, Ocamlnet, etc.) we can
develop the software ourselves with the same costs as the integration of
an external component would have taken. Plus, we have perfectly adapted
software, and are on the safe side for the future. Sounds like a good
deal, right?
			
========================================================================
6) debugging memory leaks
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
2f1bb3ebffbb1d0d/4900981c06315681#4900981c06315681>
------------------------------------------------------------------------
** Chris Waterson asked and Pierre Etchemaïté answered:

 > I have a fairly substantial OCaml application that leaks memory.
 > What tools or techniques do people use to track down memory leaks?
 > Minimally, is there a way to enumerate the live objects in the heap?

There's ocaml-memprof, a compiler patch that adds memory profiling
features to ocaml programs;

Latest update of the patch itself, as far as I know:
<http://www.pps.jussieu.fr/~smimram/docs/ocaml-3.09.3-memprof.patch>

Readme:
<http://www.pps.jussieu.fr/~smimram/docs/README.memprof>
			
========================================================================
7) Findlib-1.2 released
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
7b216410ed1cd2f3/1a3e6a592f700c65#1a3e6a592f700c65>
------------------------------------------------------------------------
** Gerd Stolpmann announced:

findlib-1.2 is available. This version focuses on supporting Camlp4-3.10
properly, and making it work on Win32. There are also a few other fixes
and enhancements.

For Camlp4 there are now special packages that match the available
extensions on O'Caml 3.10. For example, you can now request -package
camlp4.listcomprehension to enable the list comprehension extension.

The Win32 fixups have only been tested with the mingw port of O'Caml.
Please read the INSTALL instructions carefully.

For general information about findlib, see
<http://www.ocaml-programming.de/programming/findlib.html>

A full list of changes can be found inside
<http://www.ocaml-programming.de/packages/documentation/findlib/ 
README.html>

The new tarball is available under
<http://www.ocaml-programming.de/packages/findlib-1.2.tar.gz>
			
========================================================================
Using folding to read the cwn in vim 6+
------------------------------------------------------------------------
Here is a quick trick to help you read this CWN if you are viewing it  
using
vim (version 6 or greater).

:set foldmethod=expr
:set foldexpr=getline(v:lnum)=~'^=\\{78}$'?'<1':1
zM
If you know of a better way, please let me know.

========================================================================
Old cwn
------------------------------------------------------------------------

If you happen to miss a CWN, you can send me a message
(alan.schmitt at polytechnique.org) and I'll mail it to you, or go take  
a look at
the archive (<http://alan.petitepomme.net/cwn/>) or the RSS feed of the
archives (<http://alan.petitepomme.net/cwn/cwn.rss>). If you also wish
to receive it every week by mail, you may subscribe online at
<http://lists.idyll.org/listinfo/caml-news-weekly/> .

========================================================================


-- 
Alan Schmitt <http://alan.petitepomme.net/>

The hacker: someone who figured things out and made something cool  
happen.
  .O.
  ..O
  OOO


-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 186 bytes
Desc: This is a digitally signed message part
Url : http://lists.idyll.org/pipermail/caml-news-weekly/attachments/20071113/9e180dbd/attachment.pgp 


More information about the caml-news-weekly mailing list