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

Alan Schmitt alan.schmitt at polytechnique.org
Tue Nov 25 01:18:44 PST 2008


Hello,

Here is the latest Caml Weekly News, for the week of November 18 to  
25, 2008.

1) Wanted: your feedback on the hierarchy of OCaml Batteries Included
2) Notes from testing OCaml 3.11.0+beta1 on Fedora
3) Jobs
4) Manipulating xml files withing ocaml
5) Kaputt 1.0 alpha

========================================================================
1) Wanted: your feedback on the hierarchy of OCaml Batteries Included
Archive: <http://groups.google.com/group/fa.caml/browse_thread/thread/9b398e9b774dce81# 
 >
------------------------------------------------------------------------
** David Teller said, spawning a huge thread:

As you know, we've been working for several months of OCaml Batteries
Included. Early in the development, it appeared to us that, with the
large number of modules involved, we would need a hierarchy of modules.

For instance, for the moment, we have a module [System] containing
among other submodules [IO] (definition of i/o operations), [File]
(definition of operations on files), [Sys] (the usual OCaml [Sys]
module, soon to be expanded), etc.  Therefore, before one may open and
manipulate files, one has to do

open System.IO;;
open System.File;;

or, with the syntax extension we developed to alleviate this,

open System, IO, File

The syntax extension does a few other things which we're not going to
detail here -- for one thing, it allows local opening of modules.


Now, we've decided that our current hierarchy is perhaps somewhat clumsy
and that it may benefit from some reworking. Before we proceed, we'd
like some feedback from the community. For this purpose, I have posted a
tree of the current hierarchy on my blog [1]. The documentation is
available online, as usual [2]

Thank you for your feedback,
For the Batteries Pack,
   David


[1]
<http://dutherenverseauborddelatable.wordpress.com/2008/11/18/batteries-hierarchy/ 
 >
[2]
<http://batteries.forge.ocamlcore.org/doc.preview/batteries-alpha2/doc/batteries/html/api/index.html 
 >
			
** After many messages, David Teller said:

Feedback from active members of the list (and a few other shy people
who seem to prefer answering off-list:)) seems to indicate that
Batteries shouldn't have a general hierarchies of modules but rather a
flat list of modules with a few submodules here and there, along with a
documentation allowing navigation by topics. While that's not my
personal judgement, I'm willing to go along.

So here's a reworked map of the library, along with a few placeholders
to get an idea of where upcoming modules will fit. Text version follows
and html version available on-line:
<http://dutherenverseauborddelatable.wordpress.com/2008/11/20/ocaml-batteries-included-the-hierarchy-reloaded/ 
 >
.. While I personally find this solution a little clumsier than the
previous hierarchy, ymmv. Again, feedback is appreciated.


If anyone is willing to work on a solution for linking documentation
from third-party libraries into one transparent source, as suggested by
Richard Jones, please contact me. I'm sure it is feasible, with a
(un)healthy dose of JavaScript, but I'm not sure that current members of
Batteries have enough brainpower available to work on this on top of
Batteries.

Cheers,
David

Batteries (pack)
     1. Standard (automatically opened)
     2. Legacy
             A. Arg
             B. Array
             C. ...
     3. Future (things that should become standard eventually)
             A. Lexers
                     I. C
                    II. OCaml

        =====  I. Control =====
     4. Exceptions
     5. Return
     6. Monad (Interfaces for monadic operations )
              ==== I.1. Concurrency ====
     7. Concurrency (Interfaces for concurrency operations)
              === I.1.i. Built-in threads ===
     8. Condition
     9. Event
    10. Mutex
    11. RMutex
    12. Thread
    13. Threads (A module containing aliases to Condition, Event...)
              === I.1.ii. coThreads ===
    14. CoCondition
    15. CoEvent
    16. CoMutex
    17. CoRMutex
    18. CoThread
    19. CoThreads (as Threads but with implementations coming from
        coThreads)
              === I.1.iii. Shared memory ===
    20. Shm_* (Placeholders)
              ===== II. IO =====
    21. IO
             A. BigEndian
    22. Codec (common interfaces for compressors/decompressors)
    23. GZip
    24. Bz2
    25. Zip
    26. Transcode  (Unicode transcoding)
              ===== III. Mutable containers =====
    27. Array
             A. Cap
                     I. ExceptionLess
                    II. Labels
             B. ExceptionLess
             a. Labels
    28. Bigarray
             A. Array1
             B. Array2
             a. Array3
    29. Dllist
    30. Dynarray
    31. Enum
             A. ExceptionLess
             a. Labels
    32. Global
    33. Hashtbl
             A. Make
                     I. ExceptionLess
                     i. Labels


        =====  IV. Persistent containers ======


    34. Lazy
    35. List
             A. ExceptionLess
             B. Labels
    36. Map
             A. Make
                     I. ExceptionLess
                    II. Labels
    37. Option
             A. Labels
    38. PMap
    39. PSet
    40. RefList
             A. Index
    41. Queue
    42. Ref
    43. Set
             A. Make
                     I. ExceptionLess
                    II. Labels
    44. Stack
    45. Stream
              ===== V. Data =====
    46. Unit
              ==== V.1. Logical ====
    47. Bool
    48. BitSet
              ==== V.2. Numeric ====
    49. Numeric (Interfaces for number-related stuff)
    50. Big_int
    51. Common
    52. Complex
    53. Float
    54. Int
    55. Int32
    56. Int64
    57. Native_int
    58. Num
    59. Safe_float (placeholder)
    60. Safe_int
              ==== V.3 Textual data ====
    61. Text (Definition of text-related interfaces)
    62. Buffer
    63. Char
    64. UTF8
    65. Rope
    66. UChar
    67. String
    68. StringText (A module containing aliases to String and modified
        Char)
    69. RopeText (As StringText but with implementations from Rope and
        UChar
    70. UTF8Text (As StringText but with implementations from UTF8 and)
        UChar
             A. Labels

              ===== V. Distribution-related stuff =====
    71. Packages
    72. Compilers
              ===== VI. Internals =====
    73. Gc
    74. Modules
    75. Oo
             A. Private
    76. Weak
             A. Make

              ===== VIII. Network (placeholders) =====
    77. URL
    78. Netencoding
             A. Base64
             B. QuotedPrintable
             a. Q
             b. URL
             A. Html

              ==== VIII.1. Http ====
    79. Http
    80. Http_client
    81. Cgi_*
    82. Httpd_*
    83. MIME
              ==== VIII.2. Ftp ====
    84. Ftp_client
              ==== VIII.3. Mail ====
    85. Netmail
    86. Pop
    87. Sendmail
    88. Smtp
              ==== VIII.4. Generic server ====
    89. Netplex_*
              ==== VIII.5. RPC ====
    90. Rpc_*
              ==== VIII.6. Languages ====
    91. Genlex
    92. Lexing
    93. CharParser
    94. UCharParser
    95. ParserCo
             A. Source
    96. Parsing
    97. Format
    98. Printf
    99. Str
   100. PCRE (placeholder)
   101. Scanf
             A. Scanning
   102. SExpr
              ===== IX. System =====
   103. Arg
   104. File
   105. OptParse
             A. Opt
             a. OptParser
             b. StdOpt
   106. Path
   107. Shell
   108. Unix
             A. Labels
   109. Equeue
              X. Unclassified
   110. Digest
   111. Random
             A. State
   112. Date (placeholder)
			
========================================================================
2) Notes from testing OCaml 3.11.0+beta1 on Fedora
Archive: <http://groups.google.com/group/fa.caml/browse_thread/thread/bfa761bb8c3de400# 
 >
------------------------------------------------------------------------
** Richard Jones said:

Fedora compiled most of our OCaml packages for 3.11.0+beta1 now.  Here
are my notes on this, which I hope prove helpful for anyone else
trying out 3.11.

Firstly you can get any of the packages / patches we are using through
our CVS repo here: <http://cvs.fedoraproject.org/viewvc/devel/>

Packages _other_ than those listed below built without any problems
and are available from my temporary repository
(<http://www.annexia.org/tmp/mingw/fedora-10/x86_64>).  They will
eventually get built in Fedora 11.  Fedora 10 (released next week)
will continue to be based on OCaml 3.10.2.


Base ocaml package
------------------------------

Here are the patches we are carrying (NB especially patch 6):

Patch0:         ocaml-3.11.0-rpath.patch
Patch1:         ocaml-user-cflags.patch
# Support for PPC64 platform by David Woodhouse:
Patch3:         ocaml-3.11.0-ppc64.patch
# This is a patch from upstream which fixes PR#4637, PR#4582.
# <http://camlcvs.inria.fr/cgi-bin/cvsweb/ocaml/stdlib/string.ml.diff?r1=text&tr1=1.29&r2=text&tr2=1.28 
 >
# commonly manifested as errors thrown saying:
# Invalid_argument("String.index_from")
Patch6:         ocaml-3.11.0-string-index-from.patch

These are the patches we have removed since 3.10.2, which we believe
are no longer necessary:

# Patch to work with new TCL versions:
#Patch2:         ocaml-3.10.0-tclver.patch
# Not needed because the GC allocator was completely rewritten:
#Patch4:         ocaml-3.10.1-map32bit.patch
# A similar fix went upstream in 3.11.0:
#Patch5:         ocaml-3.11-dev12-no-executable-stack.patch


cduce
------------------------------

Camlp4 parsing problem:

Build runtime/print_xml.cmx
File "runtime/print_xml.ml", line 110, characters 35-37:
Parse error: [expr level ;] expected after "in" (in [expr])
File "runtime/print_xml.ml", line 1, characters 0-1:
Error: Preprocessor error
make:
*** [runtime/print_xml.cmx] Error 2


cmigrep
------------------------------

Small patch required, sent upstream (see our CVS).


coq
------------------------------

Strange camlp4 problem, not yet resolved.  Maybe just a missing
BuildRequires:

OCAMLC    lib/pp.mli
OCAMLC4   lib/pp.ml4
sh: camlp4o: command not found
File "lib/pp.ml4", line 1, characters 0-1:
Error: Preprocessor error


freetennis
------------------------------

Since we upgraded to camlimages 3.0.1, freetennis is looking for a
library called ci_core.cmxa which no longer appears to exist.
Upstream seems to be dead on this one.


ocaml-bitstring
------------------------------

Small patch required to fix a camlp4 parsing problem, not yet upstream
(see our CVS).


ocaml-cil
------------------------------

Build system failure - I didn't look very closely at this yet.


ocaml-ocamlgraph
------------------------------

There seem to be a number of build problems with the 1.0 release of
ocamlgraph.  I'm not sure if these are related to 3.11.0 or not.


ocaml-omake
------------------------------

Undefined reference to caml_sync.  Not looked into this yet.


ocaml-pa-monad
------------------------------

Stricter module naming restrictions in 3.11:

ocamlc -warn-error AX -g  -pp 'camlp4orf -I . pa_monad.cmo' -c  
pythagorean-triples.ml
File "pythagorean-triples.ml", line 1, characters 0-1:
Warning X: bad source file name: "Pythagorean-triples" is not a valid  
module name.
File "pythagorean-triples.ml", line 1, characters 0-1:
Error: Error-enabled warnings (1 occurrences)


type-conv & sexplib
------------------------------

These work fine, but you must upgrade to the latest versions.


virt-df
------------------------------

camlp4 parsing problem, not yet resolved.
			
========================================================================
3) Jobs
Archive: <http://groups.google.com/group/fa.caml/browse_thread/thread/0158c84c8e8de6e2# 
 >
------------------------------------------------------------------------
** Julien Sylvestre announced:

MLstate - currently in stealth mode - is an IT company, whose functional
programming approach to SaaS and cloud computing has been recently
recognized by the French Ministry of Research Innovation Award.

We are research-oriented, we value technical excellence and innovation
and we believe our technology has a potential to dramatically change the
way web applications are being built.

MLstate opens several new permanent positions to meet this challenge:

- Senior Developers: Outstanding PhDs with at least 3 years of research
experience in functional languages and/or formal verification and the
ability to manage a small technical team.

- Developers: PhDs with strong FP skills. Applications from PhD students
defending their thesis soon and who should not be reading the caml list
right now... are welcome.

Jobs are based in Paris and include a competitive compensation package.

Please send a (link to your) CV to julien.sylvestre at mlstate.com
			
========================================================================
4) Manipulating xml files withing ocaml
Archive: <http://groups.google.com/group/fa.caml/browse_thread/thread/33d55f34d4c7f9ec# 
 >
------------------------------------------------------------------------
** Jean Krivine asked and Romain Beauxis replied:

 > Just a quick question, I would like to open and access easily an xml
 > file within my ocaml program. Does someone have a small library that
 > would help me doing that?  All the things I found for now are
 > libraries that help me construct xml and check for consistency which
 > is not what I want.

If the xml you intend to parse is not too broken (like html for  
instance),
you can try to use xml-light, whose APIis very simple.
The link:
   <http://tech.motion-twin.com/xmllight.html>
			
** Adrien Nader then said and Dario Teixeira replied:

 > PXP may be a better choice. It's harder at first, but
 > not much and
 > could be worth the five additionnal minutes required to
 > learn it. It
 > handles unicode and is still maintained (among others).

Indeed.  If you find yourself routinely having to deal with XML,
and if you need more advanced features such as validating very
complex DTDs, than learning PXP is well worth it (Xml-light
will choke on all but the simplest DTDs).

If you are doing heavy manipulation of XML and wished for a
more "native" support in the language, then take a look at
Cduce/Ocamlduce.

Finally, if you just need to parse a simple XML file and this
is a one-off event, then Xml-light is indeed the simplest option.
			
** Jake Donham then added:

One more choice is Xmlm:

  <http://erratique.ch/software/xmlm>

It is simpler than pxp and more complete/correct than xml-light.
			
========================================================================
5) Kaputt 1.0 alpha
Archive: <http://groups.google.com/group/fa.caml/browse_thread/thread/1b1a340f05978568# 
 >
------------------------------------------------------------------------
** Xavier Clerc announced:

This post announces the 1.0 alpha version of Kaputt.
Kaputt is a testing tool for the Objective Caml language.
Home page: <http://kaputt.x9c.fr>

Features:
  - assertion-based tests (inspired by the xUnit tools):
     the developer writes assertions by explicitly stating
     input and waited output values for the tested function;
  - specification-based tests (inspired by the QuickCheck tool):
     the developer writes (using combinators) a specification
     of the tested function and asks the library to randomly generate
     tests cases.

Dependencies:
  - Objective Caml 3.10.2

Planned features:
  - more combinators and predicates (e.g. over Map, Set, etc.);
  - generalization of generator to accept other sources (e.g. streams).


This is clearly alpha work, so any suggestion/criticism will be
welcome in order to enhance/correct it.
			
** Stefano Zacchiroli then said:

You are probably aware of oUnit [1] which, AFAIK, was the only testing
library available for OCaml thus far. Hence I guess you developed
Kaputt to achieve something which was not possible with oUnit or to
achieve it somehow differently.

Can you please comment over the differences between Kaputt and oUnit?

I'm quite sure it would be interesting for a lot of us.

TIA,
Cheers.

[1] <http://www.xs4all.nl/~mmzeeman/ocaml/ounit-doc/OUnit.html>
			
** Xavier Clerc then said and Stefano Zacchiroli replied:

 > I was indeed aware of oUnit when I started working on Kaputt.
 > The initial intent was to provide OCaml with something along
 > the lines of the QuickCheck library developed for Haskell
 > (<http://www.cs.chalmers.se/~rjmh/QuickCheck/>). Clones of QuickCheck
 > exist for various languages (<http://en.wikipedia.org/wiki/ 
Quickcheck>)
 > but not for OCaml,

Actually I posted a few years ago a small module imitating parts of  
quicheck:

<http://aryx.kicks-ass.org/~pad/ocaml/quickcheck.ml>

Apparently they even now use my ugly file in the Janet Street Core  
Library.

 > even if a QuickCheck equivalent is provided by the Reins library
 > (<http://ocaml-reins.sourceforge.net/>).

I didn't find much in this ocaml reins library ... and it
looks quite heavy in functors ...

Your library looks very good, very clean. I just noticed you missed
the 'pair' and 'tuple' random generators.

One criticism is that like many other libraries, such as oUnit,
ocamlcalendar, they seem a little bit heavyweight. You got hundreds
of functions, 5 modules ...


 > Put shortly, the idea of QuickCheck is to encode the specification
 > of a function using predicates and to ask the framework to generate
 > random test cases to check that the function adheres to its  
specification.
 >
 > After designing this part of the library, I realized that it would
 > be quite annoying (at least for me, the very first user) to have
 > two libraries to code my tests. That's why I decided to add to Kaputt
 > the functionalities found in oUnit.
 >
 > In summary: Kaptt = oUnit + {QuickCheck part of Reins}.
 > People may get angry at such effort duplication, and I would  
understand
 > it. My point is to put forward a unique library specialized in  
testing.
			
========================================================================
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/20081125/48482754/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/20081125/48482754/attachment-0001.pgp 


More information about the caml-news-weekly mailing list