Re: [Caml-list] Pre-compiled ocaml binary for windows

2010-12-06 Thread Damien Doligez
Hello,

On 2010-12-03, at 21:06, José Romildo Malaquias wrote:

 Hello.
 
 I am looking for a binary release of the latest ocaml compiler for
 Windows. From the OCaml home page I can find only an older version
 (3.11.0).
 
 Where can I find the latest version?


It depends on which port you want.  For Cygwin, there is an up-to-date
cygwin package.  For the other ports, we are looking for volunteers to
compile and publish the binaries.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] OCaml GC [was Is OCaml fast?]

2010-12-02 Thread Damien Doligez

On 2010-11-29, at 23:27, Török Edwin wrote:

 This seems to be in concordance with the smaller minor heap = more
 minor collections = slower program observation, since it is:
 smaller minor heap = more minor collections = more major slices =
 major slices can't collect long-lived objects = slower program (long
 lived objects are sweeped too many times).
 So more minor collections = higher cost for a major slice

This is a bit naive, because the size of a major slice depends on the
amount of data promoted by the corresponding minor GC.  A smaller minor
heap promotes less data each time, so you get more major slices, but
they are smaller.  The total amount of work done by the major GC doesn't
change because of that.  It only changes because a bigger minor heap
gives more time for data to die before being promoted to the major heap.

 I think OCaml's GC should take into account how successful the last
 major GC was (how many words it freed), and adjust speed accordingly:
 if we know that the major slice will collect next to nothing there is
 no point in wasting time and running it.
 
 So this formula should probably be changed:
  p = (double) caml_allocated_words * 3.0 * (100 + caml_percent_free)
  / Wsize_bsize (caml_stat_heap_size) / caml_percent_free / 2.0;
 
 Probably to something that also does:
  p =  p * major_slice_successrate


The success rate is already taken into account by the major GC.  In fact
a target success rate is set by the user: it is
   caml_percent_free / (100 + caml_percent_free)
and the major GC adjusts its speed according to this target.  If the
target is not met, the free list is emptied faster than the GC can
replenish it, so it gets depleted at some point and the major heap
is then extended to satisfy allocation requests.  The bigger major
heap then helps the major GC meet its target, because the success rate
is simply (heap_size - live_data) / heap_size, and that gets higher
as heap_size increases.

I didn't do the math, but I think your modification would make the
major heap size increase without bound.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] zero-arity constructor

2010-12-01 Thread Damien Doligez

On 2010-11-28, at 12:13, Alain Frisch wrote:

 As I've been designated as the primary responsible for that uninspired change 
 (I plead guilty), I guess it is my responsibility to state here that frankly, 
 I don't give a damn. That said, enabling the warning by default sounds better 
 to me than reverting the change or introducing a new syntax.


I still like the change, because it gets rid of a special case.  I'll enable the
warning by default.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] zero-arity constructor

2010-12-01 Thread Damien Doligez

On 2010-11-27, at 11:21, David Allsopp wrote:

 and set Warning 28 to be on by default for [Foo _] - that would simply mean 
 that 3.11/3.12 code using that syntax would emit warnings in 3.13 rather 
 than actually breaking (unless you've including -warn-error - but that's 
 always seemed to me to be a development option, not a release option...)


Hear, hear!  This is in fact very important and bears repeating:
don't use -warn-error in released code.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Optimizing garbage collection

2010-11-22 Thread Damien Doligez

On 2010-11-21, at 20:26, Eray Ozkural wrote:

 I've been thinking whether some kind of doubling strategy would work for the 
 minor heap size. What do you think?

Sounds like an interesting idea, but what heuristic would you use?
When everything is smooth, the running time decreases something like
exponentially with the minor heap size, so you'd always want to
increase the size.  How do you tell when to stop?  And then, if the
program is not behaving uniformly, when do you decide to reduce
the size?

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] OCaml + mingw-w64

2010-11-22 Thread Damien Doligez

On 2010-11-22, at 13:04, Christoph Cullmann wrote:

 In ocaml 3.12, in byterun/major_gc.h, there is:
 
 intnat caml_major_collection_slice (long howmuch)
 
 whereas in the .c file that is:
 
 intnat caml_major_collection_slice (intnat howmuch)
 
 As intnat is with mingw-w64 long long, this doesn't match.
 Should not the header use intnat, too?


You're right.  This will be fixed in 3.12.1.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] How does OCaml update references when values are moved by the GC?

2010-10-29 Thread Damien Doligez

On 2010-10-28, at 23:48, Jon Harrop wrote:

 How does OCaml update references in the stacks and heap when values are
 moved by the GC?


They are updated by the GC, of course.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] C binding and GC interaction: storing values outside the heap

2010-09-07 Thread Damien Doligez

On 2010-09-07, at 22:58, Paolo Donadeo wrote:

 The problem is that, for several good reasons, I need a copy, or a reference, 
 to the OCaml value representing the lua_State (v_L in the code above) inside 
 the Lua state (I mean the C data structure).

That creates a cross-heap reference loop and it's very bad news for the GC.

 As a temporary workaround I removed the value state_value field from the 
 ocaml_data struct, replacing it with a reference counter:

Maybe you could try something similar, with a weak hash table to recover the
OCaml value corresponding to a given lua_State, thus eliminating the need for
a reference counter.  Use the address of the lua_State for hashing and for
comparison.

Drawback: the weak hash table has to be global.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Re: Segfaults with Dynlink with OCaml 3.11

2010-09-03 Thread Damien Doligez

On 2010-08-25, at 06:00, Paul Steckler wrote:

 Today, I found the culprit.  Here's the pattern:
 
   dynamically load .cmxs file
   query list mutated by .cmxs file  (* no problem *)
   Gc.set { (Gc.get()) with Gc.minor_heap_size = ...};
   Gc.set { (Gc.get()) with Gc.major_heap_increment = ... };
   query mutated list   (* segfault! *)
 
 If I move the Gc.set's to the program initialization code, before the
 loading of dynamic code, no segfaults occur.

I bet the second Gc.set doesn't matter, and if you replace them with
Gc.minor () you get the same behaviour.

 Is this expected behavior?

Definitely not.  You should file a bug report here, preferably with
a complete repro case:
 Bug reports: http://caml.inria.fr/bin/caml-bugs


-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Segfault with humongous heap size

2010-09-03 Thread Damien Doligez

On 2010-09-02, at 13:23, Paul Steckler wrote:

 If I enter this in my shell:
 
  declare -x OCAMLRUNPARAM=h=32
 
 every OCaml program I run yields a segfault.  I have OCaml 3.11.1+rc1 
 installed
 on Fedora 12 x64.
 
 Of course, that heap size, 3.2G words, is larger than the memory I
 have installed, but
 still, I shouldn't get a segfault.


That's due to a stupid bug in parsing OCAMLRUNPARAM, compounded by a missing
check for the error code returned.  It will be fixed in 3.12.1.  In the 
meantime,
just use multipliers:

   declare -x OCAMLRUNPARAM=h=3200M

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Converting variants with only constant constructors to integers

2010-08-23 Thread Damien Doligez
Hi Kaustuv,

On 2010-06-08, at 20:22, Kaustuv Chaudhuri wrote:

 Of course intify can cause a segmentation fault!
 
 # let arr = Array.of_list [intify 1.0; 0];;
 Segmentation fault
 
 This may be splitting hairs, but the reason that fails is that
 Array.of_list's ad hoc polymorphism heuristic assumes that if the
 first element of the list is allocated, then all elements are
 allocated. Merely changing the order works.


Then again, good old addition has the same kind of problem with
intify.

$ ocaml
Objective Caml version 3.12.0

# external intify : 'a - int = %identity;;
external intify : 'a - int = %identity
# let x = 1 + intify (1, 2);;
val x : int = 2147734445
# Gc.minor ();;  
ocamlrun(11589) malloc: *** mmap(size=184834061894270976) failed (error code=12)
*** error: can't allocate region


-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


[Caml-list] Objective Caml release 3.12.0

2010-08-02 Thread Damien Doligez
Dear OCaml users,

We have the pleasure of announcing the release of OCaml version 3.12.0.
This version brings many new features, see the list of changes below.

It is available here:  http://caml.inria.fr/download.en.html 

This is released as source for the time being, but the binary
versions should be available soon.

This release of OCaml is dedicated to the memory of Robin Milner.

-- the OCaml team.


=
Objective Caml 3.12.0:
--

(Changes that can break existing programs are marked with a *  )

Language features:
- Shorthand notation for records: in expressions and patterns,
{ lbl } stands for { lbl = lbl } and { M.lbl } for { M.lbl = lbl }
- Record patterns of the form { lbl = pat; _ } to mark that not all
  labels are listed, purposefully.  (See new warning below.)
- Explicit naming of a generic type; in an expression
  fun ... (type t) ... - e, the type t is considered abstract in its
  scope (the arguments that follow it and the body of the function),
  and then replaced by a fresh type variable. In particular, the type
  t can be used in contexts where a type variable is not allowed
  (e.g. for defining an exception in a local module).
- Explicit polymorphic types and polymorphic recursion. In let
  definitions, one can write an explicit polymorphic type just
  immediately the function name; the polymorphism will be enforced,
  and recursive calls may use the polymorphism.
  The syntax is the same as for polymorphic methods:
let [rec] ident : 'a1 ... 'an. typexp = ...
- First-class packages modules.
  New kind of type expression, for packaged modules: (module PT).
  New kind of expression, to pack a module as a first-class value:
(module MODEXPR : PT).
  New kind of module expression, to unpack a first-class value as a module:
(val EXPR : PT).
  PT is a package type of the form S or
  S with type t1 = ... and ... and type tn = ... (S refers to a module type).
- Local opening of modules in a subexpression.
  Syntax: let open M in e, or M.(e)
- In class definitions, method and instance variable override can now
  be made explicit, by writing method!, val! or inherit! in place of
  method, val and inherit. It is an error to override an
  undefined member (or to use overriding inheritance when nothing get
  overridden). Additionally, these constructs disactivate respectively
  warnings 7 (method override, code 'M') and 13 (instance variable
  override, code 'V'). Note that, by default, warning 7 is inactive
  and warning 13 is active.
- Destructive substitution in signatures.
  By writing signature with type t := typeconstr and
  signature with module M := module-path one replaces t and M
  inside the signature, removing their respective fields. Among other
  uses, this allows to merge two signatures containing identically
  named fields.
* While fixing PR#4824, also corrected a gaping hole in the type checker,
  which allowed instantiating separately object parameters and instance
  variables in an interface. This hole was here since the beginning of
  ocaml, and as a result many programs using object inheritance in a non
  trivial way will need to be corrected. You can look at lablgtk2 for an
  example.

Compilers and toplevel:
- Warnings are now numbered and can be switched on and off individually.
  The old system with letters referring to sets of warnings is still
  supported.
- New warnings:
  + 9 (code 'R') to signal record patterns without ; _ where
some labels of the record type are not listed in the pattern.
  + 28 when giving a wildcard argument to a constant constructor in
a pattern-matching.
  + 29 when an end-of-line appears unescaped in a string constant.
  + 30 when the same constructor or record field is defined twice in
mutually-recursive type definitions.
* The semantics of warning 7 (code 'M', method override) have changed
  (it now detects all overrides, not just repeated definitions inside
  the same class body), and it is now inactive by default.
- Better error report in case of unbound qualified identifier: if the module
  is unbound this error is reported in the first place.
- Added option '-strict-sequence' to force left hand part of sequence to have
  type unit.
- Added option '-no-app-funct' to turn applicative functors off.
  This option can help working around mysterious type incompatibilities
  caused by the incomplete comparison of applicative paths F(X).t.

Native-code compiler:
- AMD64: shorter and slightly more efficient code generated for 
  float comparisons.

Standard library:
- Format: new function ikfprintf analoguous to ifprintf with a continuation
  argument.
* PR#4210, #4245: stricter range checking in string-integer conversion
  functions (int_of_string, Int32.of_string, Int64.of_string,
  Nativeint.of_string).  The decimal string corresponding to
  max_int + 1 is no longer accepted.
- Scanf: to prevent confusion when mixing Scanf 

Re: [Caml-list] OCaml 3.12.0+rc1

2010-07-30 Thread Damien Doligez
Daniel,

On 2010-07-24, at 12:51, Daniel Bünzli wrote:

 report any problems with [...] installation on your favorite platform.
 
 Don't have the time right now to test it but if the BT is up to date this :
 
 http://caml.inria.fr/mantis/view.php?id=5093
 
 wasn't fixed.


I've fixed a number of problems with the ./build/fastworld.sh procedure,
but it's a moving target: every time a Makefile changes, it gets out of
sync.

The bottom line is: don't use ./build/fastworld.sh, at least until we
(the developers of OCaml) make a decision on whether to support it
seriously.  At any rate, it won't be fixed for 3.12.0.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


[Caml-list] OCaml 3.12.0+rc1

2010-07-23 Thread Damien Doligez
Dear OCaml users,

The release of OCaml 3.12.0 is imminent.  We have made a release candidate
3.12.0+rc1, available as source code at this address:
  http://caml.inria.fr/pub/distrib/ocaml-3.12/

Unless there is any show-stopping bug, this will become 3.12.0 next week,
so you'd better test it and report any problems with compilation and
installation on your favorite platform.

-- Damien Doligez for the OCaml team


Objective Caml 3.12.0:
--

(Changes that can break existing programs are marked with a *  )

Language features:
- Shorthand notation for records: in expressions and patterns,
{ lbl } stands for { lbl = lbl } and { M.lbl } for { M.lbl = lbl }
- Record patterns of the form { lbl = pat; _ } to mark that not all
  labels are listed, purposefully.  (See new warning below.)
- Explicit naming of a generic type; in an expression
  fun ... (type t) ... - e, the type t is considered abstract in its
  scope (the arguments that follow it and the body of the function),
  and then replaced by a fresh type variable. In particular, the type
  t can be used in contexts where a type variable is not allowed
  (e.g. for defining an exception in a local module).
- Explicit polymorphic types and polymorphic recursion. In let
  definitions, one can write an explicit polymorphic type just
  immediately the function name; the polymorphism will be enforced,
  and recursive calls may use the polymorphism.
  The syntax is the same as for polymorphic methods:
let [rec] ident : 'a1 ... 'an. typexp = ...
- First-class packages modules.
  New kind of type expression, for packaged modules: (module PT).
  New kind of expression, to pack a module as a first-class value:
(module MODEXPR : PT).
  New kind of module expression, to unpack a first-class value as a module:
(val EXPR : PT).
  PT is a package type of the form S or
  S with type t1 = ... and ... and type tn = ... (S refers to a module type).
- Local opening of modules in a subexpression.
  Syntax: let open M in e, or M.(e)
- In class definitions, method and instance variable override can now
  be made explicit, by writing method!, val! or inherit! in place of
  method, val and inherit. It is an error to override an
  undefined member (or to use overriding inheritance when nothing get
  overridden). Additionally, these constructs disactivate respectively
  warnings 7 (method override, code 'M') and 13 (instance variable
  override, code 'V'). Note that, by default, warning 7 is inactive
  and warning 13 is active.
- Destructive substitution in signatures.
  By writing signature with type t := typeconstr and
  signature with module M := module-path one replaces t and M
  inside the signature, removing their respective fields. Among other
  uses, this allows to merge two signatures containing identically
  named fields.
* While fixing PR#4824, also corrected a gaping hole in the type checker,
  which allowed instantiating separately object parameters and instance
  variables in an interface. This hole was here since the beginning of
  ocaml, and as a result many programs using object inheritance in a non
  trivial way will need to be corrected. You can look at lablgtk2 for an
  example.

Compilers and toplevel:
- Warnings are now numbered and can be switched on and off individually.
  The old system with letters referring to sets of warnings is still
  supported.
- New warnings:
  + 9 (code 'R') to signal record patterns without ; _ where
some labels of the record type are not listed in the pattern.
  + 28 when giving a wildcard argument to a constant constructor in
a pattern-matching.
  + 29 when an end-of-line appears unescaped in a string constant.
  + 30 when the same constructor or record field is defined twice in
mutually-recursive type definitions.
* The semantics of warning 7 (code 'M', method override) have changed
  (it now detects all overrides, not just repeated definitions inside
  the same class body), and it is now inactive by default.
- Better error report in case of unbound qualified identifier: if the module
  is unbound this error is reported in the first place.
- Added option '-strict-sequence' to force left hand part of sequence to have
  type unit.
- Added option '-no-app-funct' to turn applicative functors off.
  This option can help working around mysterious type incompatibilities
  caused by the incomplete comparison of applicative paths F(X).t.

Native-code compiler:
- AMD64: shorter and slightly more efficient code generated for 
  float comparisons.

Standard library:
- Format: new function ikfprintf analoguous to ifprintf with a continuation
  argument.
* PR#4210, #4245: stricter range checking in string-integer conversion
  functions (int_of_string, Int32.of_string, Int64.of_string,
  Nativeint.of_string).  The decimal string corresponding to
  max_int + 1 is no longer accepted.
- Scanf: to prevent confusion when mixing Scanf scanning functions and direct
  low level input, value Scanf.stdin has

[Caml-list] OCaml 3.12.0+beta1

2010-06-16 Thread Damien Doligez
Dear OCaml users,

We have the pleasure of celebrating Bloomsday by announcing the release of
OCaml version 3.12.0+beta1.

This is a beta release, available as source only and intended for power
users to test new features and report bugs (if any).  This release brings
a lot of new features, see the list included below.

It is available here:  http://caml.inria.fr/pub/distrib/ocaml-3.12/ ,
along with the updated reference manual.

Happy hacking,

-- Damien Doligez for the OCaml team.


--

(Changes that can break existing programs are marked with a *  )

Language features:
- Shorthand notation for records: in expressions and patterns,
{ lbl } stands for { lbl = lbl } and { M.lbl } for { M.lbl = lbl }
- Record patterns of the form { lbl = pat; _ } to mark that not all
  labels are listed, purposefully.  (See new warning below.)
- Explicit naming of a generic type; in an expression
  fun ... (type t) ... - e, the type t is considered abstract in its
  scope (the arguments that follow it and the body of the function),
  and then replaced by a fresh type variable. In particular, the type
  t can be used in contexts where a type variable is not allowed
  (e.g. for defining an exception in a local module).
- Explicit polymorphic types and polymorphic recursion. In let
  definitions, one can write an explicit polymorphic type just
  immediately the function name; the polymorphism will be enforced,
  and recursive calls may use the polymorphism.
  The syntax is the same as for polymorphic methods:
let [rec] ident : 'a1 ... 'an. typexp = ...
- First-class packages modules.
  New kind of type expression, for packaged modules: (module PT).
  New kind of expression, to pack a module as a first-class value:
(module MODEXPR : PT).
  New kind of module expression, to unpack a first-class value as a module:
(val EXPR : PT).
  PT is a package type of the form S or
  S with type t1 = ... and ... and type tn = ... (S refers to a module type).
- Local opening of modules in a subexpression.
  Syntax: let open M in e, or M.(e)
- In class definitions, method and instance variable override can now
  be made explicit, by writing method!, val! or inherit! in place of
  method, val and inherit. It is an error to override an
  undefined member (or to use overriding inheritance when nothing get
  overridden). Additionally, these constructs disactivate respectively
  warnings 7 (method override, code 'M') and 13 (instance variable
  override, code 'V'). Note that, by default, warning 7 is inactive
  and warning 13 is active.
- Destructive substitution in signatures.
  By writing signature with type t := typeconstr and
  signature with module M := module-path one replaces t and M
  inside the signature, removing their respective fields. Among other
  uses, this allows to merge two signatures containing identically
  named fields.
* While fixing PR#4824, also corrected a gaping hole in the type checker,
  which allowed instantiating separately object parameters and instance
  variables in an interface. This hole was here since the beginning of
  ocaml, and as a result many programs using object inheritance in a non
  trivial way will need to be corrected. You can look at lablgtk2 for an
  example.

Compilers and toplevel:
- Warnings are now numbered and can be switched on and off individually.
  The old system with letters referring to sets of warnings is still
  supported.
- New warnings:
  + 9 (code 'R') to signal record patterns without ; _ where
some labels of the record type are not listed in the pattern.
  + 28 when giving a wildcard argument to a constant constructor in
a pattern-matching.
  + 29 when an end-of-line appears unescaped in a string constant.
  + 30 when the same constructor or record field is defined twice in
mutually-recursive type definitions.
* The semantics of warning 7 (code 'M', method override) have changed
  (it now detects all overrides, not just repeated definitions inside
  the same class body), and it is now inactive by default.
- Better error report in case of unbound qualified identifier: if the module
  is unbound this error is reported in the first place.
- Added option '-strict-sequence' to force left hand part of sequence to have
  type unit.
- Added option '-no-app-funct' to turn applicative functors off.
  This option can help working around mysterious type incompatibilities
  caused by the incomplete comparison of applicative paths F(X).t.

Native-code compiler:
- AMD64: shorter and slightly more efficient code generated for 
  float comparisons.

Standard library:
- Format: new function ikfprintf analoguous to ifprintf with a continuation
  argument.
* PR#4210, #4245: stricter range checking in string-integer conversion
  functions (int_of_string, Int32.of_string, Int64.of_string,
  Nativeint.of_string).  The decimal string corresponding to
  max_int + 1 is no longer accepted.
- Scanf: to prevent

Re: [Caml-list] no_scan_tag and int array

2010-03-29 Thread Damien Doligez
Hello,

On 2010-03-06, at 10:26, ygrek wrote:

 So, as expected, setting No_scan_tag on the array of integers prevents GC 
 from uselessly 
 scanning the huge chunk of memory. Looks like polymorphic array functions 
 still work fine and
 GC correctly reclaims array memory when it is not referenced anymore.
 Apparantly this trick is not allowed for float array as they have a special 
 tag set.

The trick is not needed for float arrays, the GC already doesn't scan
them.

 The question is - how safe is this?

It's safe, and will be in the forseeable future.

BUT: you should use Abstract_tag and not No_scan_tag.  Abstract_tag means
don't make assumptions about the contents of this block, while
No_scan_tag is just the min of all the tags that the GC is not supposed
to scan.  Right now they are equal, but a future version of OCaml might
have No_scan_tag = Double_array_tag, which would break your code.

 And even more, could the compiler itself set this tag?

This is a bit tricky because you have to make sure that the static
type of the array is int array.  Unlike floats, a run-time test
at allocation will not work.

You should enter this as a feature wish in the BTS.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] out of memory error

2010-02-08 Thread Damien Doligez

Hello,

On 2010-02-02, at 14:31, Kihong Heo wrote:

Can't I use ocamlrun -v for my program such that it use foreign  
language interface with C.

If I couldn't, can you give me a good debugging methodology?
It's very difficult to find out that error because of using foreign  
language interface..



The OCaml runtime options are controlled by an environment variable:
OCAMLRUNPARAM.  You can set this variable with setenv or export
(depending on your shell) before running your program.  You do not
need to call ocamlrun explicitely with command-line arguments.

This feature is documented here:
http://caml.inria.fr/pub/docs/manual-ocaml/manual024.html#toc88

HTH,

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] A syntax extension to simplify List manipulation

2010-01-25 Thread Damien Doligez


On 2010-01-17, at 09:24, blue storm wrote:


2) The use of the Extlib module is hardcoded in the syntax extension.
I would find it nicer if you only referred to List.map instead of
Extlib.List.map, and let the user open Extlib if he wants to
override the stdlib. That would allow one to use other implementations
of List.



You can do this if you want to use the stdlib instead of extlib:

module Extlib = struct module List = List end;;

Rather ugly, but it should work...

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


[Caml-list] ANN: Objective Caml 3.11.2 released.

2010-01-20 Thread Damien Doligez

Dear OCaml users,

It is our pleasure to celebrate the birthday of Andre-Marie Ampere
by announcing the release of OCaml version 3.11.2.

This is mainly a bug-fix release, see the list of changes below.

It is available here:  http://caml.inria.fr/download.en.html .
It is source-only for the moment, but the binary versions will
be made available soon.

Note that there are still known problems under Windows with the
experimental procedure of building the system with ocamlbuild,
so you should build with make for the moment.


Happy hacking,

-- the OCaml team.

Objective Caml 3.11.2:
--

Bug fixes:
- PR#4151: better documentation for min and max w.r.t. NaN
- PR#4421: ocamlbuild uses wrong compiler for C files
- PR#4710, PR#4720: ocamlbuild does not use properly configuration  
information
- PR#4750: under some Windows installations, high start-up times for  
Unix lib

- PR#4777: problem with scanf and CRLF
- PR#4783: ocamlmklib problem under Windows
- PR#4810: BSD problem with socket addresses, e.g. in Unix.getnameinfo
- PR#4813: issue with parsing of float literals by the GNU assembler
- PR#4816: problem with modules and private types
- PR#4818: missed opportunity for type-based optimization of bigarray  
accesses

- PR#4821: check for duplicate method names in classes
- PR#4823: build problem on Mac OS X
- PR#4836: spurious errors raised by Unix.single_write under Windows
- PR#4841, PR#4860, PR#4930: problem with ocamlopt -output-obj under  
Mac OS X

- PR#4847: C compiler error with ocamlc -output-obj under Win64
- PR#4856: ocamlbuild uses ocamlrun to execute a native plugin
- PR#4867, PR#4760: ocamlopt -shared fails on Mac OS X 64bit
- PR#4873: ocamlbuild ignores thread tag when building a custom  
toplevel

- PR#4890: ocamlbuild tries to use native plugin on bytecode-only arch
- PR#4896: ocamlbuild should always pass -I to tools for external  
libraries
- PR#4900: small bug triggering automatic compaction even if  
max_overhead = 1M

- PR#4902: bug in %.0F printf format
- PR#4910: problem with format concatenation
- PR#4922: ocamlbuild recompiles too many files
- PR#4923: missing \xff for scanf %S
- PR#4933: functors not handling private types correctly
- PR#4940: problem with end-of-line in DOS text mode, tentative fix
- PR#4953: problem compiling bytecode interpreter on ARM in Thumb mode.
- PR#4955: compiler crash when typing recursive type expression with  
constraint
- Module Printf: the simple conversion %F (without width indication)  
was not

   treated properly.
- Makefile: problem with cygwin, flexdll, and symbolic links
- Various build problems with ocamlbuild under Windows with msvc

Feature wishes:
- PR#9: (tentative implementation) make ocamldebug use #linenum  
annotations

- PR#123, PR#4477: custom exception printers
- PR#3456: Obj.double_field and Obj.set_double_field functions
- PR#4003: destination directory can be given to Filename. 
[open_]temp_file

- PR#4647: Buffer.blit function
- PR#4685: access to Filename.dir_sep
- PR#4703: support for debugging embedded applications
- PR#4723: clear_rules function to empty the set of ocamlbuild rules
- PR#4921: configure option to help cross-compilers

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Re: [ANN] Release Candidate: 3.11.2+rc1

2010-01-12 Thread Damien Doligez


On 2010-01-12, at 11:30, Sylvain Le Gall wrote:


Is it this the problem you are talking about:


[...]

No.  We have a report of build problems with MSVC when building
with ocamlbuild that I need to investigate.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] problem creating .cma library

2010-01-05 Thread Damien Doligez


On 2009-12-31, at 00:30, Guillaume Yziquel wrote:


#include stdio.h
#include caml/mlvalues.h
#include ../mylib/mylib.h
CAMLprim value
my_print_stub(value v) {


 CAMLparam1(v);  /* is missing here, for garbage
collection purposes. */


   char* str = (char*)String_val( v );


 /* You do not need the right-hand side (char*) casting. */


   my_print( str );
   return Val_unit;
}


If you use CAMLparam1, you must use CAMLreturn instead of return.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] ocaml as editor extension language

2010-01-05 Thread Damien Doligez


On 2010-01-05, at 08:24, Joel Reymont wrote:

You cannot embed OCaml and use it as an editor extension language  
unless


1) your editor is open source, or

2) you are a member of the consortium and pay 2K EUR/year



  3k

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


[Caml-list] [ANN] Release Candidate: 3.11.2+rc1

2009-12-29 Thread Damien Doligez

Dear Ocaml Users,

It is our pleasure to announce that the release of 3.11.2 is imminent.
What we need now is your cooperation for testing the release candidate,
especially on Windows.

The release candidate is available as source code at this address:
ftp://ftp.inria.fr/INRIA/Projects/cristal/ocaml/ocaml-3.11/ocaml-3.11.2+rc1.tar.bz2

See the list of changes at the end of this mail.

After testing this release candidate, please send a mail to
damien.doli...@inria.fr and tell us what you tested and whether
it worked.


Notes for Windows users:
- A recent update to Vista seems to have broken cygwin version 1.5.
  You will need to install the new version 1.7.1 instead:
  http://www.cygwin.com/
- You will also need the latest version of Alain Frisch's flexdll,
  version 0.21: http://alain.frisch.fr/flexdll.html#download


Happy new year's eve to everyone,

-- The OCaml Team

Objective Caml 3.11.2+rc1:
--

Bug fixes:
- PR#4151: better documentation for min and max w.r.t. NaN
- PR#4421: ocamlbuild uses wrong compiler for C files
- PR#4710, PR#4720: ocamlbuild does not use properly configuration  
information
- PR#4750: under some Windows installations, high start-up times for  
Unix lib

- PR#4777: problem with scanf and CRLF
- PR#4810: BSD problem with socket addresses, e.g. in Unix.getnameinfo
- PR#4813: issue with parsing of float literals by the GNU assembler
- PR#4816: problem with modules and private types
- PR#4818: missed opportunity for type-based optimization of bigarray  
accesses

- PR#4821: check for duplicate method names in classes
- PR#4823: build problem on Mac OS X
- PR#4836: spurious errors raised by Unix.single_write under Windows
- PR#4841, PR#4860, PR#4930: problem with ocamlopt -output-obj under  
Mac OS X

- PR#4847: C compiler error with ocamlc -output-obj under Win64
- PR#4856: ocamlbuild uses ocamlrun to execute a native plugin
- PR#4867, PR#4760: ocamlopt -shared fails on Mac OS X 64bit
- PR#4873: ocamlbuild ignores thread tag when building a custom  
toplevel

- PR#4890: ocamlbuild tries to use native plugin on bytecode-only arch
- PR#4896: ocamlbuild should always pass -I to tools for external  
libraries
- PR#4900: small bug triggering automatic compaction even if  
max_overhead = 1M

- PR#4902: bug in %.0F printf format
- PR#4910: problem with format concatenation
- PR#4922: ocamlbuild recompiles too many files
- PR#4923: missing \xff for scanf %S
- PR#4933: functors not handling private types correctly
- PR#4940: problem with end-of-line in DOS text mode, tentative fix
- Module Printf: the simple conversion %F (without width indication)  
was not

   treated properly.
- Makefile: problem with cygwin, flexdll, and symbolic links

Feature wishes:
- PR#9: (tentative implementation) make ocamldebug use #linenum  
annotations

- PR#123, PR#4477: custom exception printers
- PR#3456: Obj.double_field and Obj.set_double_field functions
- PR#4003: destination directory can be given to Filename. 
[open_]temp_file

- PR#4647: Buffer.blit function
- PR#4685: access to Filename.dir_sep
- PR#4703: support for debugging embedded applications
- PR#4723: clear_rules function to empty the set of ocamlbuild rules
- PR#4921: configure option to help cross-compilers

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [***SPAM*** Score/Req: 10.1/8.0] Re: [Caml-list] Re: OCaml is broken

2009-12-21 Thread Damien Doligez


On 2009-12-20, at 13:21, Erik Rigtorp wrote:


The first step for OCaml would be to be able to run multiple
communicating instances of the runtime bound to one core each in one
process and have them communicate via lock free queues.



Does anyone know how to do lock-free queues in a weakly-consistent
memory model?

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] compiling OCaml program for supercomputer running SGI Propack 6?

2009-12-18 Thread Damien Doligez

Hi,

On 2009-12-17, at 19:28, Dave Lewis wrote:


[Apologies for duplication across mailing lists.]

Hi - I'd like to run this OCaml program: [...]
on the 3TB memory supercomputer described here
   http://www.ncsa.illinois.edu/UserInfo/Resources/Hardware/SGIAltix/Tec 
...


It appears that the OS, SGI ProPack 6 [...]

is a version of Linux, but the 64-bit Linux compilation we produced

using the OCaml 3.10 compiler gives this error message:

   Exec format error. Binary file not executable.


It looks like you are trying to run Pentium executables on an Itanium
machine.  If the supercomputer is available for compiling, you should
bootstrap and install OCaml on that machine, otherwise you'll need to
find a smaller Itanium-based machine to compile your program (and hope
the executables will be compatible), or make a cross-compiler to run
on your PC.

Making a cross-compiler is quite a lot harder than installing OCaml on
the target machine directly, but you have a how-to here:
  http://brion.inria.fr/gallium/index.php/CrossCompiler

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Gc.compact surprisingly helpful

2009-12-05 Thread Damien Doligez


On 2009-12-04, at 20:09, Aaron Bohannon wrote:


So in a 15 second run (with no
idle time, as I said), it now does about 130 heap compactions instead
of 3 and gets better total performance because of it, utterly defying
my GC intuition.



What is the size of your heap?  Have you tried compacting only once
every 2, 3, 5, or 10 loops?

One possible explanation is that compaction will also compact the
free list into a few large blocks, which makes allocation faster.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


[Caml-list] A warning about warnings

2009-11-10 Thread Damien Doligez

Hello World,

I've been compiling OCaml programs and libraries lately, and I've seen
this kind of things in make output:

   ocamlc -w A -warn-error A 

or even:

   ocamlc -w Ael -warn-error Ael 


You should not do that, because it means your build will break with
the next version of OCaml that adds a new warning, even if that
warning is disabled by default for compatibility reasons, as soon
as your code triggers the new warning (which it will do, due to
Murphy's law).

What you should do instead:

   ocamlc -w ELZ -warn-error A 

and

   ocamlc -w Z -warn-error A 

Or completely refrain from using -warn-error A and only activate
the error option on explicit sets of warnings.

Better yet, you could remove the -warn-error option from your
released Makefiles, and reserve it for development.

Happy hacking,

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] tip for tail recursive map

2009-11-02 Thread Damien Doligez


On 2009-10-23, at 21:55, pikatchou pokemon wrote:

I know this topic has been discussed several times, but I don't  
think I have seen the solution I use for functions of the List  
module which are not tail recursive.

I thought sharing the tip could be nice.
I will take an example, List.map.
When rewritten in CPS map becomes:

let rec map k f = function
  | []- k []
  | x :: rl - map (fun res - k ((f x) :: res)) f rl


You can do better with an ad-hoc encoding of the continuation
instead of using closures:

let rec map k f = function
  | [] - List.rev k
  | x :: rl - map (f x :: k) f rl
;;

The memory footprint is smaller, and you spend much less time
invoking closures.

Note that I haven't bothered benchmarking these two functions.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Cache algorithms: implementation or library available?

2009-09-23 Thread Damien Doligez


On 2009-09-23, at 09:54, Hugo Ferreira wrote:


Funny enough I was expecting complicated uses of the Weak module.


The Weak module is never the right tool for implementing a cache.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Understanding GC and Alarms

2009-08-05 Thread Damien Doligez

Hello,

On 2009-08-04, at 15:39, Björn Pelzer wrote:

With the alarm loop, the GC will only print the first part (Calling  
finalisation functions.) once at the start of the loop and then  
begin looping, starting new cycles but no new finalisations.


Yes, the GC calls the finalisation functions in order, so it waits for  
your

finalisation function to finish before starting the next one.  If your
function doesn't terminate...

The other (and to me more severe) oddity is that if the alarm  
function raises an exception, then the GC seems to remain in its  
special mode where it starts no finalisation calling - but now it  
will also refuse to do any alarms.


Yes, that is the essence of bug report 4742:
 http://caml.inria.fr/mantis/view.php?id=4742 

Is there a way to get the GC back to normal after an exception  
during the alarm?


That is the purpose of the Gc.finalise_release function: tell the GC  
to behave
as if the current finalisation function had finished.  Note that  
finalise_release
is also safe to call from outside a finalisation function, so you can  
call it

from your exception handler.

When bug 4742 is fixed (probably in 3.12.0), you won't need it any more.
Note that I wanted to fix it by ignoring the exception entirely, but
your use case made me change my mind.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


[Caml-list] OCaml 3.11.1 released

2009-06-12 Thread Damien Doligez

Dear OCaml users,

It is our pleasure to celebrate the 30th anniversary of the first
human-powered flight over the English channel by announcing the
release of OCaml version 3.11.1.  This is mainly a bug-fix release,
see the list of changes below.

It is available here:  http://caml.inria.fr/download.en.html 

Special thanks to Andres Varon, who tested RC1 on eight different
configurations.

Happy hacking,

-- The OCaml team.



Objective Caml 3.11.1:
--

Bug fixes:
- PR#4095: ocamldebug: strange behaviour of control-C
- PR#4403: ocamldebug: improved handling of packed modules
- PR#4650: Str.regexp_case_fold mis-handling complemented character  
sets [^a]

- PR#4660: Scanf.format_from_string: handling of double quote
- PR#4666: Unix.exec* failure in multithread programs under MacOS X  
and FreeBSD

- PR#4667: debugger out of sync with dynlink changes
- PR#4678: random out of memory error with systhreads
- PR#4690: issue with dynamic loading under MacOS 10.5
- PR#4692: wrong error message with options -i and -pack passed to  
ocamlc

- PR#4699: in otherlibs/dbm, fixed construction of dlldbm.so.
- PR#4704: error in caml_modify_generational_global_root()
- PR#4708: (ocamldoc) improved printing of infix identifiers such as  
lor.

- PR#4722: typo in configure script
- PR#4729: documented the fact that PF_INET6 is not available on all  
platforms

- PR#4730: incorrect typing involving abbreviation type 'a t = 'a
- PR#4731: incorrect quoting of arguments passed to the assembler on  
x86-64

- PR#4735: Unix.LargeFile.fstat cannot report size over 32bits on Win32
- PR#4740: guard against possible processor error in
   {Int32,Int64,Nativeint}.{div,rem}
- PR#4745: type inference wrongly produced non-generalizable type  
variables.

- PR#4749: better pipe size for win32unix
- PR#4756: printf: no error reported for wrong format '%_s'
- PR#4758: scanf: handling of \newline by format '%S'
- PR#4766: incorrect simplification of some type abbreviations.
- PR#4768: printf: %F does not respect width and precision  
specifications

- PR#4769: Format.bprintf fails to flush
- PR#4775: fatal error Ctype.Unify during module type-checking  
(temporary fix)

- PR#4776: bad interaction between exceptions and classes
- PR#4780: labltk build problem under Windows.
- PR#4790: under Windows, map ERROR_NO_DATA Win32 error to EPIPE Unix  
error.

- PR#4792: bug in Big_int.big_int_of_int64 on 32-bit platforms.
- PR#4796: ocamlyacc: missing NUL termination of string
- PR#4804: bug in Big_int.int64_of_big_int on 32-bit platforms.
- PR#4805: improving compatibility with the clang C compiler
- PR#4809: issue with Unix.create_process under Win32
- PR#4814: ocamlbrowser: crash when editing comments
- PR#4816: module abbreviations remove 'private' type restrictions
- PR#4817: Object type gives error Unbound type parameter ..
- Module Parsing: improved computation of locations when an ocamlyacc  
rule

  starts with an empty nonterminal
- Type-checker: fixed wrong variance computation for private types
- x86-32 code generator, MSVC port: wrong fld instruction generated.
- ocamlbuild: incorrectly using the compile-time value of $OCAMLLIB
- Makefile problem when configured with -no-shared-libs
- ocamldoc: use dynamic loading in native code

Other changes:
- Improved wording of various error messages
  (contributed by Jonathan Davies, Citrix).
- Support for 64-bit mode in Solaris/x86 (PR#4670).

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] OCaml 3.11.1 released

2009-06-12 Thread Damien Doligez


On 2009-06-12, at 14:46, Damien Doligez wrote:


It is our pleasure to celebrate the 30th anniversary of the first
human-powered flight over the English channel by announcing the
release of OCaml version 3.11.1.  This is mainly a bug-fix release,
see the list of changes below.



I forgot one important detail: the release is only available as
source for the moment.  Binaries will be made available shortly.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] OCaml 3.11.1 released

2009-06-12 Thread Damien Doligez


On 2009-06-12, at 15:02, Stéphane Glondu wrote:


The links to the sources seem to be broken.



Sorry about that.  It is fixed now.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


[Caml-list] JOB: post-doc at MSR-INRIA Joint Centre

2009-06-09 Thread Damien Doligez

Research team: Tools for Proofs, MSR-INRIA Joint Centre

The Microsoft Research-INRIA Joint Centre is offering a 2-year
position for a post-doctoral researcher to work on a proof development
environment for TLA+ in the Tools for Proofs project-team (see
http://www.msr-inria.inria.fr).

Research Context

TLA+ is a language for formal specifications and proofs designed by
Leslie Lamport.  It is based on first-order logic, set theory,
temporal logic, and a module system.  While the specification part of
TLA+ has existed for several years, the proof language is more recent,
and we want to develop tools for writing and checking proofs.

The main program of our development environment is called the Proof
Manager (PM).  The PM translates TLA+ source files to low-level proofs
that are checked by Isabelle.  To this end, the PM calls the Zenon
automatic theorem prover to fill in the trivial details omitted from
proofs at the source level.  Within the Isabelle framework we have an
axiomatization of TLA+ (Isabelle/TLA+).  Isabelle provides high
assurance by checking all the proofs provided by the user or by Zenon.
The PM also has an interface to CVC3, which provides a stronger
automatic prover, but with lower assurance of correctness.

The current version of the PM handles only the action part of TLA+:
first-order formulas with primed and unprimed variables; where a
variable is considered as unrelated to its primed version.  This
allows us to translate first-order formulas to first-order formulas,
without the overhead associated to an encoding of temporal logic into
first-order logic.  This part of TLA+ is already useful for proving
safety properties.

Description of the activity of the post-doc

The task devoted to the post-doc will be to extend the proof manager
to deal with the temporal part of TLA+.  To this end, he will
have to define a new translation into Isabelle to handle the temporal
operators, in a way that enables the re-use of non-temporal theorems
proved with the simple translation.  He will also have to implement
this new translation and the interface between the two translations.

Skills and profile of the candidate

We are looking for a candidate with skills in some or all of the
following subjects: parsing and compilation, logic and set theory,
Isabelle, OCaml, Eclipse and Java.  Moreover, the applicant must have
a good command of the English language.

Location

The Microsoft Research-INRIA Joint Centre is located on the Campus of
INRIA Futurs, in South part of Paris, near the Le-Guichet RER
station. The Tools for Proofs project-team is composed of Damien
Doligez, Leslie Lamport and Stephan Merz.

Contact

Candidates should send a resume and the name and e-mail address
of one or two references to Damien Doligez damien.doli...@inria.fr.

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


[Caml-list] ANN: OCaml 3.11.1+rc1

2009-06-03 Thread Damien Doligez

Dear OCaml users,

We fixed a few bugs from OCaml 3.11.1+rc0, and prepared a new release  
candidate.

The main changes from rc0 are the following.

- PR#4796: ocamlyacc: missing NUL termination of string
- PR#4798: compilation of ocamldoc.opt fails under windows
- PR#4804: bug in Big_int.int64_of_big_int on 32-bit platforms.
- PR#4805: improving compatibility with the clang C compiler
- PR#4809: issue with Unix.create_process under Win32

The changes from 3.11.0 are listed at the end of this mail.


If you haven't tested rc0, or if you had a problem with one of the above
bugs, please test rc1 now and send me some feedback.  This release
candidate is available in source code at
 ftp://ftp.inria.fr/INRIA/cristal/ocaml/ocaml-3.11/ocaml-3.11.1+rc1.tar.gz 
 


We seem to have a small problem remaining in build/install.sh.  It  
will be

fixed for the release.

Happy hacking,

-- Damien for the OCaml team


Objective Caml 3.11.1:
--

Bug fixes:
- PR#4095: ocamldebug: strange behaviour of control-C
- PR#4403: ocamldebug: improved handling of packed modules
- PR#4650: Str.regexp_case_fold mis-handling complemented character  
sets [^a]

- PR#4660: Scanf.format_from_string: handling of double quote
- PR#4666: Unix.exec* failure in multithread programs under MacOS X  
and FreeBSD

- PR#4667: debugger out of sync with dynlink changes
- PR#4678: random out of memory error with systhreads
- PR#4690: issue with dynamic loading under MacOS 10.5
- PR#4692: wrong error message with options -i and -pack passed to  
ocamlc

- PR#4699: in otherlibs/dbm, fixed construction of dlldbm.so.
- PR#4704: error in caml_modify_generational_global_root()
- PR#4708: (ocamldoc) improved printing of infix identifiers such as  
lor.

- PR#4722: typo in configure script
- PR#4729: documented the fact that PF_INET6 is not available on all  
platforms

- PR#4730: incorrect typing involving abbreviation type 'a t = 'a
- PR#4731: incorrect quoting of arguments passed to the assembler on  
x86-64

- PR#4735: Unix.LargeFile.fstat cannot report size over 32bits on Win32
- PR#4740: guard against possible processor error in
   {Int32,Int64,Nativeint}.{div,rem}
- PR#4745: type inference wrongly produced non-generalizable type  
variables.

- PR#4749: better pipe size for win32unix
- PR#4756: printf: no error reported for wrong format '%_s'
- PR#4758: scanf: handling of \newline by format '%S'
- PR#4766: incorrect simplification of some type abbreviations.
- PR#4768: printf: %F does not respect width and precision  
specifications

- PR#4769: Format.bprintf fails to flush
- PR#4775: fatal error Ctype.Unify during module type-checking  
(temporary fix)

- PR#4776: bad interaction between exceptions and classes
- PR#4780: labltk build problem under Windows.
- PR#4790: under Windows, map ERROR_NO_DATA Win32 error to EPIPE Unix  
error.

- PR#4792: bug in Big_int.big_int_of_int64 on 32-bit platforms.
- PR#4796: ocamlyacc: missing NUL termination of string
- PR#4804: bug in Big_int.int64_of_big_int on 32-bit platforms.
- PR#4805: improving compatibility with the clang C compiler
- PR#4809: issue with Unix.create_process under Win32
- Module Parsing: improved computation of locations when an ocamlyacc  
rule

  starts with an empty nonterminal
- Type-checker: fixed wrong variance computation for private types
- x86-32 code generator, MSVC port: wrong fld instruction generated.
- ocamlbuild: incorrectly using the compile-time value of $OCAMLLIB
- Makefile problem when configured with -no-shared-libs
- ocamldoc: use dynamic loading in native code

Other changes:
- Improved wording of various error messages
  (contributed by Jonathan Davies, Citrix).
- Support for 64-bit mode in Solaris/x86 (PR#4670).

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


[Caml-list] OCaml version 3.11.1+rc0

2009-05-19 Thread Damien Doligez

Dear OCaml users,

It is our pleasure to announce that release 3.11.1 is imminent.  We have
uploaded a release candidate at this address:

 http://caml.inria.fr/pub/distrib/ocaml-3.11/ocaml-3.11.1+rc0.tar.gz 

See the list of changes below.


We need you to test this on as many system types as possible.  Please
report success or failure to damien.doli...@inria.fr as usual.

-- Damien


Objective Caml 3.11.1:
--

Bug fixes:
- PR#4095: ocamldebug: strange behaviour of control-C
- PR#4403: ocamldebug: improved handling of packed modules
- PR#4650: Str.regexp_case_fold mis-handling complemented character  
sets [^a]

- PR#4660: Scanf.format_from_string: handling of double quote
- PR#4666: Unix.exec* failure in multithread programs under MacOS X  
and FreeBSD

- PR#4667: debugger out of sync with dynlink changes
- PR#4678: random out of memory error with systhreads
- PR#4690: issue with dynamic loading under MacOS 10.5
- PR#4692: wrong error message with options -i and -pack passed to  
ocamlc

- PR#4699: in otherlibs/dbm, fixed construction of dlldbm.so.
- PR#4704: error in caml_modify_generational_global_root()
- PR#4708: (ocamldoc) improved printing of infix identifiers such as  
lor.

- PR#4722: typo in configure script
- PR#4729: documented the fact that PF_INET6 is not available on all  
platforms

- PR#4730: incorrect typing involving abbreviation type 'a t = 'a
- PR#4731: incorrect quoting of arguments passed to the assembler on  
x86-64

- PR#4735: Unix.LargeFile.fstat cannot report size over 32bits on Win32
- PR#4740: guard against possible processor error in
   {Int32,Int64,Nativeint}.{div,rem}
- PR#4745: type inference wrongly produced non-generalizable type  
variables.

- PR#4749: better pipe size for win32unix
- PR#4756: printf: no error reported for wrong format '%_s'
- PR#4758: scanf: handling of \newline by format '%S'
- PR#4766: incorrect simplification of some type abbreviations.
- PR#4768: printf: %F does not respect width and precision  
specifications

- PR#4769: Format.bprintf fails to flush
- PR#4775: compiler crash on crazy types (temporary fix)
- PR#4776: bad interaction between exceptions and classes
- PR#4780: labltk build problem under Windows.
- PR#4790: under Windows, map ERROR_NO_DATA Win32 error to EPIPE Unix  
error.

- PR#4792: bug in Big_int.big_int_of_int64 on 32-bit platforms.
- Module Parsing: improved computation of locations when an ocamlyacc  
rule

  starts with an empty nonterminal
- Type-checker: fixed wrong variance computation for private types
- x86-32 code generator, MSVC port: wrong fld instruction generated.
- ocamlbuild: incorrectly using the compile-time value of $OCAMLLIB
- Makefile problem when configured with -no-shared-libs
- ocamldoc: use dynamic loading in native code

Other changes:
- Improved wording of various error messages
  (contributed by Jonathan Davies, Citrix).
- Support for 64-bit mode in Solaris/x86 (PR#4670).


___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Strange performance bug

2009-04-29 Thread Damien Doligez


On 2009-04-29, at 15:58, Markus Mottl wrote:


Note that the effect of not precompiling the regular expressions is
not just the overhead of this computation, but also vastly greater
GC-pressure.

The current GC-settings in Pcre will trigger a full GC-cycle every 500
regular expressions allocated, i.e. would perform a full major
collection every 500 lines in your case.  This setting works fine for
just about any application I've seen, because virtually nobody has to
create patterns dynamically at rates so high that this matters.



Markus, you put your finger right on the problem.  That program doesn't
suddenly start to get slow, it gets steadily slower as it runs.  The
heap also gets steadily bigger, and the major GC does way too much
work.

Alain's explanation (about why changing the last line changes the
speed of the rest of the program) looks right to me.  When you remove
that last line, the GC still does too much work, but the heap doesn't
grow, so it doesn't get slower.

To see the problem, you should play with the GC verbosity settings,
for example, see the difference between
  OCAMLRUNPARAM=v=1 ./problem slow
and
  OCAMLRUNPARAM=v=1 ./problem fast

Maybe PCRE should change its settings to trigger GCs less often but,
as Markus said, this doesn't look really important.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] First release of focalize, a development environment for high integrity programs.

2009-03-25 Thread Damien Doligez


On 2009-03-24, at 11:55, David MENTRE wrote:


For those interested in such details, FoCaLize seems to be under a
BSD-like license (I have not made a detailed review of the code). I
would be interested to know if knowledged people (e.g. Debian
developers ;-) consider this code Free Software or not.



In my (off-topic for this list) opinion, this whole licence business
is totally out of control because lawyers have succeeded in scaring
everyone witless about it.  For example, I don't understand why you
would need a detailed review of the code in order to notice that the
licence (which you quoted) is an exact copy of the new BSD licence
(straight from www.opensource.org, IIRC).

Whether you (or the Debian developers, Microsoft management, or
whoever else) choose to call it Free is a matter of political
opinion and debate on this topic is usually a waste of time.

This was my license rant for 2009.  Thanks for your attention.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] problems with Yahoo?

2009-03-10 Thread Damien Doligez


On 2009-03-04, at 14:39, Ed Keith wrote:

Something seems to be wrong with the list, this is the 18th copy of  
this one message I have received! I am receiving 2 to 4 copies of  
most messages.


   -EdK

Ed Keith
e_...@yahoo.com



Apparently, this happens only to (some) Yahoo users.  You should try  
to contact

Yahoo support.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] caml_atom_table bug still present in ocaml 3.11.0

2008-12-08 Thread Damien Doligez


On 2008-12-07, at 20:21, Alexy Khrabrov wrote:

Under the 2005 thread, the resolution, by John Skaller, was, it  
should go into the bugtracker; did it, and if not, should it now? :)



I don't think it dit, and yes you should add it, although it looks  
like a

strange gcc bug.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] OCaml version 3.11.0 released.

2008-12-05 Thread Damien Doligez

Hello,

On 2008-12-05, at 04:15, Rich Neswold wrote:

The link to the Mac .dmg, on your web page, file appears to be  
incorrect. It should be http://caml.inria.fr/pub/distrib/ocaml-3.11/ocaml-3.11.0.dmg 
.



Thanks.  It is fixed now.  I'm taking over part of the management of  
the Web

site, so this kind of problem is not entirely unexpected at this point.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


[Caml-list] OCaml version 3.11.0+beta1

2008-10-15 Thread Damien Doligez

Dear OCaml Users,

We are pleased to celebrate the birthday of Friedrich Nietzsche
by releasing OCaml version 3.11.0+beta1.  We need YOU to test
it thoroughly and report any problems you might have.  Does
your favorite software work with it?

It is available as a source release only (plus documentation),
from this address:
 http://caml.inria.fr/pub/distrib/ocaml-3.11/ 

It is also available from our CVS server at:
 http://camlcvs.inria.fr/ 
Use tag ocaml3110beta1 to get the beta release, and tag
release311 to track the bug fixes between this and the
final release of 3.11.0.

Have fun and PLEASE send us some feedback, positive or negative.


-- The OCaml team.


- Camlp5 HOW-TO 

Camlp5 version 5.09 does not work with OCaml 3.11.0+beta1 out of the
box.  A new version compatible with OCaml 3.11.0 should be released
very soon.  In the meantime you can use the following commands (in the
root directory of the Camlp5 5.09 sources) to compile Camlp5 5.09 with
OCaml 3.11.0+beta1.  Note that you will need to provide the path name
to a copy of the OCaml 3.11.0+beta1 sources at the line labelled
HERE.


cp -R ocaml_stuff/3.11 ocaml_stuff/3.11.0
cp ocaml_src/main/ast2pt.ml_3.11 ocaml_src/main/ast2pt.ml_3.11.0
ed main/ast2pt.ml -EOF
  g/OCAML_3_11/s// OR OCAML_3_11_0/
  wq
EOF
ed top/rprint.ml -EOF
  g/OCAML_3_11/s// OR OCAML_3_11_0/
  wq
EOF
./configure --transitional
make steal OCAML_SRC=path-to-ocaml-source-dir  # HERE
make core
make bootstrap_sources
./configure --transitional
make world.opt

That's all.  Now you can make install as usual.

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Manually triggering garbage collection

2008-07-29 Thread Damien Doligez

On 2008-07-29, at 15:39, Jean Krivine wrote:


OK great I' ll try,
For the moment I just set a Gc alarm that detects whether memory usage
is above a certain limit and if so, sets the overhead to 0, which
stops completely the memory leak.


Setting the overhead to 0 seems a bit overkill.  You might want to
do a Gc.compact() at this point.  Or you might just need to change
the max_overhead parameter: the lower it is, the more often the
GC will compact the heap.

Do you think that would improve to increase the size of the major  
heap?


Yes, sometimes it helps with fragmentation.  Also, increasing the
heap_increment may help.


Also, do you know how often the alarm is tested? is it each time a
major collection is performed?


The GC alarms are triggered at the end of each major collection.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] New Ocaml Plug-in for NetBeans

2008-07-29 Thread Damien Doligez


On 2008-07-26, at 17:22, Jon Harrop wrote:

For example, I cannot even jump to the definition of an identifier  
reliably.


OCaml 3.11 has extended .annot files that will allow external tools
to do that.  Also, it tells you which function calls are tail calls
and which are normal calls.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Re: Where's my non-classical shared memory concurrency technology?

2008-05-28 Thread Damien Doligez


On 2008-05-27, at 11:34, Martin Berger wrote:


Here I disagree. Shared  memory concurrency is a specific form
of message passing: Writing to a memory cell is in fact sending
a message to that cell carrying two items, the new value and a
return channel that is used to inform the writer that sending
has succeeded, and likewise for reading.





[...]


But broadcasting is a form of message-passing too!


That wasn't my point.  My point was that there is no return channel.
If you want to know when your write is done, you have to use a lock
or a memory barrier.  Both are very expensive.

-- Damien

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs