Hello
Here is the latest Caml Weekly News, for the week of November 18 to 25, 2008.
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.htmlAfter 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)
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.
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@mlstate.com
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.htmlAdrien 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.
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.htmlXavier 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.
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.
If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a look at the archive or the RSS feed of the archives.
If you also wish to receive it every week by mail, you may subscribe online.