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

Alan Schmitt alan.schmitt at polytechnique.org
Tue Jul 22 03:06:16 PDT 2008


Hello,

Here is the latest Caml Weekly News, for the week of July 15 to 22,  
2008.

As I will be moving from Italy to France next week, there
will not be a CWN. I will try the week after that if I have internet  
access.
Good vacations to all!

1) Profiling ocaml using gprof
2) ocaml-bitstring 1.9.6 (formerly known as ocaml-bitmatch)
3) Position
4) "OCaml Developers" group just created on LinkedIn
5) NW Functional Programming Interest Group
6) Name of currently executing function
7) Commercial Users of Functional Programming Workshop Call for  
Participation
8) Understanding monads

========================================================================
1) Profiling ocaml using gprof
Archive: <http://groups.google.com/group/fa.caml/browse_thread/thread/ba9fa49cb9b5e82a# 
 >
------------------------------------------------------------------------
** Arthur Chan asked and Richard Jones answered:

 > Is gprof better for profiling ocaml than ocaml's own profilers?

They are slightly different.  I use 'gprof' all the time because I
tend to only use natively compiled executables.  'gprof' is the
ordinary GNU profiling tool that tells you which function is being run
most often and some limited information about the call path into that
function.  It's pretty useful for simple profiling where you're
looking for obvious problems.

'ocamlprof' is a bit different.  Last time I used it [which was a few
years ago, so maybe it's different now], it only worked on bytecode.
It outputs your original code with annotations telling you how often
each expression was run.  So this isn't time taken (each expression
can take a different amount of time to execute, and this time isn't
shown), but how often a particular path through the code is taken.

 > How would you go about figuring out that that particular function  
stub is
 > string concat?
 >
 > 'camlPervasives__$5e_136'.

In 'gprof' there's a simple name mangling used to map OCaml function
names to assembler symbols.  Once you understand it, you'll find it
easy to follow.  First of all note that OCaml function names aren't
unique, eg in the following code:

  let f () = printf "this is the first f()\n"
  let f () = printf "this is the second f()\n"; f () ;;

  f ()

The assembler symbol is:

  "caml" ^ Modulename ^ "__" ^ functionname ^ "_" ^ uniquenumber

'uniquenumber' is just a counter added to function names by the
compiler to make sure that functions which have the same name will
have different symbols.

So when I compiled the code above in a file called 'test.ml' (hence a
module called Test), in my case I ended up with two symbols called:

  camlTest__f_77
  camlTest__f_78

where '77' and '78' are arbitrary.  You can check this by looking at
the assembler output from the compiler (ocamlopt -S).

If a function name contains an operator symbol (eg. (^) ) then a $xx
hex code is used.

I guess in theory one could write an OCaml symbol filter, similar to
c++filt [<http://sourceware.org/binutils/docs/binutils/c_002b_002bfilt.html 
 >]
			
========================================================================
2) ocaml-bitstring 1.9.6 (formerly known as ocaml-bitmatch)
Archive: <http://groups.google.com/group/fa.caml/browse_thread/thread/641efb4722fe4afb# 
 >
------------------------------------------------------------------------
** Richard Jones announced:

I'm please to announce version 1.9.6 of ocaml-bitstring (formerly
known as ocaml-bitmatch).  The home page has changed again, so please
update any bookmarks or links to point to the new home page here:

  <http://code.google.com/p/bitstring/>

Version 1.9.6 features 'check()', 'bind()' and 'save_offset_to()'
qualifiers which give you much greater control over the matching
process.  For example:

  bitmatch packet with
  | { len  : 16  : check (len > 0), bind (len*8);
      data : len : string;
      crc  : 32  : check (crc_ok data crc), save_offset_to (crc_offset)
    } ->
    printf "length of data (in bits) = %d\n" len;
    printf "offset of CRC in packet (in bits) = %d\n" crc_offset

  | { _ } -> printf "bad packet\n"

We have also fixed some bugs, clarified the licensing everywhere (for
Debian), and improved the META file.

A troublesome company sent my employer a Cease and Desist notice,
claiming that their trademark on the word "BitMatch" for "Computer
software for comparing and analyzing computer software"[sic] covered
ocaml-bitmatch.  No such thing is true, but because of the time and
expense of dealing with the legal process we have decided to rename
ocaml-bitmatch to ocaml-bitstring for their benefit (still very
time-consuming).  As a result, we are gradually moving the old
website, wiki etc. to the new home page above, and some internals will
change (code will be backwards-compatible, but you may need to make
some changes to build scripts).  Thanks to Sylvain Le Gall for
offering hosting.
			
========================================================================
3) Position
Archive: <http://groups.google.com/group/fa.caml/browse_thread/thread/36ae678aea07e38d# 
 >
------------------------------------------------------------------------
** Ihsan Ecemis announced:

We are a fast-paced, VC-funded, Boston-based startup currently  
building our
flagship product targeted at the scientific community. We need a few  
sharp
minds to help us.

We are using OCaml in our core simulation technology. We are looking for
someone who is mathematically minded, has fun with his work, takes  
pride in
its quality, and learns quickly.

If facing the challenges of building cutting-edge technologies is your  
idea of
a good time, then you are going to love working with us. We are  
solving hard
problems and having a lot of fun doing it. Join us.

Qualifications
* 3+ years of experience in functional programming, preferably in OCaml
* Strong CS fundamentals

The best candidates will have experience with:
* Dealing with a large code base, complex data structures, and intricate
   control loops
* Scalability and performance issues
* Simulations of complex systems
* Conducting research on basic algorithms, mathematics, agent-based  
models

Instructions
To apply for this position, submit your resume to jobs at plectix.com.
			
========================================================================
4) "OCaml Developers" group just created on LinkedIn
Archive: <http://upsilon.cc/~zack/blog/posts/2008/07/ocaml_linkedin_group/ 
 >
------------------------------------------------------------------------
** Stefano Zacchiroli announced:

In case you are in the LinkedIn professional network, you might be  
interested
in knowing that I've just created an OCaml group there:
<http://www.linkedin.com/groupInvitation?groupID=144434&sharedKey=57B54C413FE2 
 >.
It is called OCaml Developers and it is intended to provide yet  
another way
for the community of OCaml programmers to advertise themselves to the
professional world.

I was surprised by the fact there were no professional group related  
to OCaml
there, and that's why I created one. The only group I found mentioning  
OCaml
was a very narrow one about the usage of functional programming for  
financial
purposes, probably all Jane St employees are members

Feel free to join the new group. Also, if you want to spare the duty of
checking/accepting new people into the group drop me a line, you will  
be more
than welcome!
			
========================================================================
5) NW Functional Programming Interest Group
Archive: <http://groups.google.com/group/fa.caml/browse_thread/thread/e095762001b66bc6/c92942667fe4d502 
 >
------------------------------------------------------------------------
** Greg Meredith announced:

This is just a friendly reminder to Northwest functionally minded  
folks that
this month's meeting is to be held

The Seattle Public Library
5009 Roosevelt Way N.E.
Seattle, WA 98105
206-684-4063

from 18.30 - 19:45 on July 23rd.

We'll be getting a demo of a scala-lift-based application that  
compiles a
graphical rendition of functional expressions into expressions in a  
functional
language.

Hope to see you there.
			
========================================================================
6) Name of currently executing function
Archive: <http://groups.google.com/group/fa.caml/browse_thread/thread/25c9706b89196140# 
 >
------------------------------------------------------------------------
** Continuing the thread from last week, Dave Benjamin announced:

Thanks again for your help, blue storm. I condensed this technique  
into a
simple example for PLEAC, which I just committed here:

<http://pleac.cvs.sourceforge.net/pleac/pleac/pleac/pleac_ocaml.data?r1=1.151&r2=1.152 
 >

It allows you to write this:

(* An example named function. *)
let test_function () =
  let str = "Hello, world!" in
  let num = 42 in
  LOG "str=\"%s\", num=%d" str num;
  print_endline "test complete"

(* Some code to run at the toplevel. *)
let () =
  LOG "not in a function";
  test_function ()

And get the following output:

<toplevel>[main.ml]: not in a function
test_function[main.ml]: str="Hello, world!", num=42
test complete
			
========================================================================
7) Commercial Users of Functional Programming Workshop Call for  
Participation
Archive: <http://groups.google.com/group/fa.caml/browse_thread/thread/65a5babd008f588e# 
 >
------------------------------------------------------------------------
** Jim Grundy announced:

       Commercial Users of Functional Programming Workshop (CUFP) 2008

                Functional Programming As a Means, Not an End

                           Call for Participation

                            Sponsored by SIGPLAN
                          Co-located with ICFP 2008
     __________________________________________________________________

                              26 September 2008
                              Victoria, Canada

                   Registration opens in late July through
                   <http://www.icfpconference.org/icfp2008/>
     __________________________________________________________________

   Functional languages have been under academic development for over 25
   years, and remain fertile ground for programming language research.
   Recently, however, developers in industrial, governmental, and open
   source projects have begun to use functional programming successfully
   in practical applications. In these settings, functional programming
   has often provided dramatic leverage, including whole new ways of
   thinking about the original problem.

   The goal of the CUFP workshop is to act as a voice for these users of
   functional programming. The workshop supports the increasing
   viability of functional programming in the commercial, governmental,
   and open-source space by providing a forum for professionals to share
   their experiences and ideas, whether those ideas are related to
   business, management, or engineering. The workshop is also designed
   to enable the formation and reinforcement of relationships that
   further the commercial use of functional programming. Providing user
   feedback to language designers and implementors is not a primary goal
   of the workshop, though it will be welcome if it occurs.

Program

   CUFP 2008 will last a full day and feature a discussion session and
   the following presentations:

   Don Syme (Microsoft)
          Invited Presentation: Why Microsoft is Investing in Functional
          Programming

   David Balaban (Amgen)
          Minimizing the Immune Response to Functional Programming at
          Amgen

   Francesco Cesarini (Erlang Training and Consulting)
          The Mobile Messaging Gateway, from Idea to Prototype to Launch
          in 12 months

   Jake Donham (Skydeck)
          From OCaml to Javascript at Skydeck

   Nick Gerakines (Yahoo)
          Developing Erlang at Yahoo

   Tom Hawkins (Eaton Corporation)
          Controlling Hybrid Vehicles with Haskell

   Bob Ippolito (Mochimedia)
          Ad Serving with Erlang

   Anil Madhavapeddy (Citrix)
          Xen and the art of OCaml

   Howard Mansell (Credit Suisse)
          Quantitative Finance in F#

   Jeff Polakow (Deutsche Bank)
          Is Haskell ready for everyday computing?

   David Pollak (Lift web framework)
          Buy a Feature: an adventure in immutability and Actors

   Gregory Wright (Antiope)
          Functions to Junctions: Ultra Low Power Chip Design With Some
          Help From Haskell

   There will be no published proceedings, as the meeting is intended to
   be more a discussion forum than a technical interchange.

   See <http://cufp.galois.com> for more information, including
   presentation abstracts and the most recent schedule information.

Program Committee

     * Lennart Augustsson <lennart(dot)augustsson(at)gmail(dot)com>
     * Matthias Blume <blume(at)tti-c(dot)org>
     * Adam Granicz <granicz(dot)adam(at)intellifactory(dot)com>
     * Jim Grundy(co-chair)<jim(dot)d(dot)grundy(at)intel(dot)com>
     * Andy Martin <akmartin(at)us(dot)ibm(dot)com>
     * Yaron Minsky <yminsky(at)janestcapital(dot)com>
     * Simon Peyton Jones(co-chair)<simonpj(at)microsoft(dot)com>
     * Ulf Wiger <ulf(dot)wiger(at)ericsson(dot)com>

   This will be the fifth CUFP; see CUFP 2004 CUFP 2005, CUFP 2006, and
   CUFP 2007 for information about the earlier meetings, including
   reports from attendees and video of the most recent talks.
			
========================================================================
8) Understanding monads
Archive: <http://groups.google.com/group/fa.caml/browse_thread/thread/03e42ce999db1dd3# 
 >
------------------------------------------------------------------------
** Paolo Donadeo asked and Till Crueger answered:

 > I like functional programming, but monads [1] must be too little to  
be
 > grabbed by my mind. This time the interest in monads was aroused by
 > the interesting article of David Teller, Arnaud Spiwack and Till
 > Varoquaux [2] about the error monad, but for using the library they
 > wrote I need at least some knowledge about monads and the do- 
notation.

it might take a while, but it's worth the effort... It took me some time
to get the concept as well. Don't worry it doesn't have to do with  
your IQ.

 > I ask you all: can anyone make me a practical example, something
 > involving strings, files, the network, an image or sound processing
 > algorithm, something vaguely real? Not abstract mathematical
 > structures, beautiful algebraic properties and general statements,
 > please: the net is full of such tutorials, especially Haskell fan
 > sites ;-)

hmm, very informaly speaking, monads allow you to "wrap up" some other
value, or a set of those... Then of course there are lot's of way's to
wrap something up, so this is really abstract.

One good thing that helped me a lot, was to implement the monads  
myself in
OCaml, even though i hadn't understood them fully at that time. Try for
example to build your own I/O Monad and it will start to get more  
clearly
how it works.

 > [1] <http://en.wikipedia.org/wiki/Monad_(symbol)>

I suggest this one instead as a good starting point:
<http://en.wikipedia.org/wiki/Monads_in_functional_programming>

 > [2] <http://www.univ-orleans.fr/lifo/Members/David.Teller/publications/ml2008.pdf 
 >
			
** Fabrice Marchant then said:

 > I suggest this one instead as a good starting point:
 > <http://en.wikipedia.org/wiki/Monads_in_functional_programming>

Among the links appearing at the bottom of this document, this non
theoretical-one appears the coolest to understand for me. The "pure  
function
debugging" example allows simple OCaml experimentions :

<http://sigfpe.blogspot.com/2006/08/you-could-have-invented-monads-and.html 
 >
			
** Gabriel Kerneis answered the original question:

Xavier Leroy's lesson on monads [1] will certainly be too abstract for
you, but the accompanying Caml code [2] might help you to grasp the
concept. You will find there a lot of example of useful monads. You  
should
have read some tutorial before, though, not to get lost.

Another very concrete example is Lwt [3], a cooperative thread library
written in monadic style. Don't hesitate to follow the link, it's a
documentation targeted at programmers, without categorical issues and so
on. You will need to read a more general tutorial on monads then, to get
the general idea, but it could be a good starting point to "bind" and
"return" operators.

[1] <http://gallium.inria.fr/~xleroy/mpri/progfunc/monads.2up.pdf>
[2] <http://gallium.inria.fr/~xleroy/mpri/progfunc/monads.ml>
[3] <http://ocsigen.org/lwt>
			
========================================================================
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 --------------
An HTML attachment was scrubbed...
URL: http://lists.idyll.org/pipermail/caml-news-weekly/attachments/20080722/1c44b523/attachment-0001.html 
-------------- 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/20080722/1c44b523/attachment-0001.pgp 


More information about the caml-news-weekly mailing list