From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id 814FD7EE25 for ; Fri, 7 Jun 2013 16:04:49 +0200 (CEST) Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of jdimino@janestreet.com) identity=pra; client-ip=38.105.200.229; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="jdimino@janestreet.com"; x-sender="jdimino@janestreet.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of jdimino@janestreet.com designates 38.105.200.229 as permitted sender) identity=mailfrom; client-ip=38.105.200.229; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="jdimino@janestreet.com"; x-sender="jdimino@janestreet.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of postmaster@tot-dmz-mxout1.janestreet.com) identity=helo; client-ip=38.105.200.229; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="jdimino@janestreet.com"; x-sender="postmaster@tot-dmz-mxout1.janestreet.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ap8AABDnsVEmacjlnGdsb2JhbABZgzm/Zh4OAQEBAQEGDQkJFCiCIwEtGQEBOCUKUxIBBQEjGogFAwmeYosJhEABBY4eBo4ThQiXQ4EpiHOFQRYphDaBaQ X-IPAS-Result: Ap8AABDnsVEmacjlnGdsb2JhbABZgzm/Zh4OAQEBAQEGDQkJFCiCIwEtGQEBOCUKUxIBBQEjGogFAwmeYosJhEABBY4eBo4ThQiXQ4EpiHOFQRYphDaBaQ X-IronPort-AV: E=Sophos;i="4.87,822,1363129200"; d="scan'208";a="17138409" Received: from mx5.janestreet.com (HELO tot-dmz-mxout1.janestreet.com) ([38.105.200.229]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-SHA; 07 Jun 2013 16:04:48 +0200 Received: from tot-oib-smtp1.delacy.com ([172.27.22.15] helo=tot-smtp) by tot-dmz-mxout1.janestreet.com with esmtp (Exim 4.76) (envelope-from ) id 1UkxHb-0004CK-Qy for caml-list@inria.fr; Fri, 07 Jun 2013 10:04:47 -0400 Received: from tot-dmz-mxgoog1.delacy.com ([172.27.224.14] helo=mxgoog2.janestreet.com) by tot-smtp with esmtps (TLSv1:AES256-SHA:256) (Exim 4.72) (envelope-from ) id 1UkxHb-0006h7-Pr for caml-list@inria.fr; Fri, 07 Jun 2013 10:04:47 -0400 Received: from mail-ie0-f177.google.com ([209.85.223.177]) by mxgoog2.janestreet.com with esmtp (Exim 4.76) (envelope-from ) id 1UkxHb-0007N6-Mr for caml-list@inria.fr; Fri, 07 Jun 2013 10:04:47 -0400 Received: by mail-ie0-f177.google.com with SMTP id u16so10608142iet.22 for ; Fri, 07 Jun 2013 07:04:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=google; h=mime-version:date:message-id:subject:from:to:content-type; bh=xA6fJtgq20FSokE/4qMrWZgnE5biuQU22mMewQKp5dw=; b=eavEqFoUyY8hKbumiwkFyiFGvDKrIXtc1TWA0Gif2mLeMyo5hwzH6AKGxK/BWIQuTy pyoBkHKpzEAmkcy4nhka15dIi6ZRAu1BlQheYqi7JsOdAKSWRrh8WzUaNhLmoL/pnSTy Lwh6m4DoTii7TzuscAJC1df2vFrvqjWmbFyVE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :x-gm-message-state; bh=xA6fJtgq20FSokE/4qMrWZgnE5biuQU22mMewQKp5dw=; b=HBRF5Cu8D6O4WylHHrThr6F5pnwYA+TyOGxNAsIL/FNMiSGBdTCjDsQiZ3K5ozeE7c cB1sIlbTLqJaq4ahhvpU9M2TovBU/fbE2GYqyjzvlFUZlJZMWUCJzR4N8GqZx8cpK0vG F0tUKYFcAWQQWNw1A5hXQQGJg839r4U1oE219V3gPHdDyzXVATO3QRMp7J/igbrNKkB1 vXGOMHjtyUI2luk9wHqxkgVWnYUuLrSn/qktW0MXIeGww/KzfHhWFiocEeKtkUn1aXpS 6K1RDCBEdkLov8IC1KhY7+GVJ/2ztEnWCzQta03Z0oSajD0x0AjiHDPHdU7waE+2kddL bTLA== X-Received: by 10.42.135.5 with SMTP id n5mr9968561ict.14.1370613887387; Fri, 07 Jun 2013 07:04:47 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.42.135.5 with SMTP id n5mr9968554ict.14.1370613887258; Fri, 07 Jun 2013 07:04:47 -0700 (PDT) Received: by 10.50.178.211 with HTTP; Fri, 7 Jun 2013 07:04:47 -0700 (PDT) Date: Fri, 7 Jun 2013 15:04:47 +0100 Message-ID: From: Jeremie Dimino To: ocaml-core@googlegroups.com, caml-list@inria.fr Content-Type: text/plain; charset=ISO-8859-1 X-Gm-Message-State: ALoCoQmR9BlL/j/wsKXIUF2KRCjG1iEKsDhXpk6fnXlipv21cIPIc8slrG2yfzGcGS2OTrFsVEzBZ2P5lBlOitnn4gtTUirx/jWfTr+5jurw5x6sgB/YsExAdbK6aUR6DLV1fDG3H6wJuMeJbcI/TskJQU6Wjznslg== Subject: [Caml-list] [ANN] Core Suite 109.27.00 + core_kernel I am pleased to announce the 109.27.00 release of the Core suite. The following packages were upgraded: - async - async_core - async_extra - async_parallel - async_unix - comparelib - core - core_bench - core_extended - custom_printf - jenga - pa_ounit - zero Starting with this release the "core" package is split into two packages: "core_kernel" and "core". core_kernel is a lightweight subset of core. It contains all the non-Unix parts, it should be easier to use with js_of_ocaml for example. We couldn't make it C-free since there is a strong depency to bin_prot which has C stubs. In addition core_kernel still contains a few C stubs for bigstrings and also arrays. Files and documentation for this release are available on our website and all packages are in opam: https://ocaml.janestreet.com/ocaml-core/109.27.00/individual/ https://ocaml.janestreet.com/ocaml-core/109.27.00/doc/ Here is the changelog since version 109.24.00: ## async_core - Fixed `Monitor.catch_stream` to prevent missing a synchronous exception. ## async_extra - Added function `Versioned_typed_tcp.Client.shutdown`. - Added new module `Sequencer_table`, which is a table of `Throttle.Sequencer`'s indexed by keys. ## async_unix - Fixed a performance problem in the scheduler due to repeated calls of `Timing_wheel.min_elt`. `Timing_wheel.min_elt` is an important part of async, since the scheduler calls it once per cycle to know when to timeout for `epoll` or `select`. This causes a problem if `min_elt` is slow and called repeatedly, which happens in an application where the next clock event is a second out, and yet there are lots of cycles per second. `Timing_wheel.min_elt` now caches the minimum element, which eliminates the problem. - Fixed async's clock to work on 32-bit machines. With the change to `Timing_wheel` in 109.22, async no longer worked on 32-bit machines, due to the clock overflowing. This is because it is initialized to `Time.epoch`, and can only handle 6 days. The fix now in place is to start the clock at `Time.now ()` rather than `Time.epoch`. - Added many functions to `Async.Sys` so that it looks more like `Core.Sys`. - Changed `Reader.read_one_chunk_at_a_time_until_eof` to not destroy the reader buffer. Destroying the buffer failed if user code held on to the buffer. ## comparelib - Changed how `with compare` treats `option`'s so that `None < Some`, like `Pervasives.compare`. Previously, `with compare` had treated `Some < None`. ## core - Disabled use of `recvmmssg`, which isn't available on CentOS 5 machines. - Defined `Option.compare` using `with compare` so that their comparisons are consistent. - Cleaned up the `Dequeue` module's interface and implementation. The interface now matches the conventions used elsewhere in `Core`. The new implementation is also cleaner and more efficient. - Reimplemented the `Stack` module to improve performance, and renamed the old implementation as `Linked_stack`. The new `Stack` is implemented with this type: ```ocaml type 'a t ` { dummy : 'a; mutable length : int; mutable elts : 'a array; } ``` `Linked_stack` is implemented with this type: ```ocaml type 'a t ` { mutable length : int; mutable elts : 'a list; } ``` Using an array rather than a linked list is a more efficient and traditional implementation. Pushing to the stack now does not require allocation, except in the rare case when the stack grows. One downside is that `Stack.clear` is now O(n) rather than O(1). This change also eliminates the `Stack.Empty` exception, so any code matching on that exception should fail to compile, and should be changed to depend on option-returning `top` and `pop` operations. - Improved `Lock_file.Nfs`. * Allowed an arbitrary message to be stored and retreived. * Fixed a case where `create` might throw an exception. * Delete both files used for locking when we unlock. - Split `Core` into `Core_kernel` and `Core`. - `Core_kernel` is composed of all modules of `Core` that do not depend on unix or threads, and `Core` contains the rest and depends on `Core_kernel`. The goal is to have a very portable standard library that can especially run on exotic environment such as Javascript. So that code that directly refers to `Core` (rather than `Core.Std`) for modules that have moved to `Core_kernel`, we included "proxy" modules in `Core` that simply include the corresponding module from `Core_kernel`. - Fixed `Core.Flags` to build on 32-bit machines. It had contained a unit test with an integer literal too large to be accepted by the compiler when building on a 32-bit machine. ## core_bench - Added R^2 error estimation. Adding this metric should give us a sense of how closely the given values fit a line. Even dots that are fairly scattered can give tight confidence intervals. We would like to have to number to have a sense of how much noise we have. ## core_extended - In module `Sexp`, changed and renamed `load_includes_in_sexp`. From: ```ocaml val load_includes_in_sexp : ?max_depth:int -> Sexp.t -> Sexp.t ``` to: ```ocaml val load_sexp_with_includes: ?max_depth:int -> ?buf:string -> string -> Sexp.t ``` - Added function `Sexp.Diff.to_string`. - Previously the only option was to print to `Out_channel`. ## custom_printf - Added missing registration of `custom_printf`'s Camlp4 filter so that it works in the toplevel. ## pa_ounit - Removed comments from test names displayed by `pa_ounit`. Before: ``` File "iobuf.ml", line 141, characters 0-34: <<(** WHEN YOU CHANGE THIS, CHANGE iobuf_fields `...`>> threw ("Iobuf.create got nonpositive len" 0). ``` After: ``` File "iobuf.ml", line 141, characters 0-34: <> threw ("Iobuf.create got nonpositive len" 0). ``` ## zero - Added new hashtable module, `Pooled_hashtbl`. `Pooled_hashtbl` is a drop-in replacement for `Core_hashtbl`, and has the same interface. `Pooled_hashtbl` is a linked-chain hashtbl implemented using the pooling features of `Zero`. In addition to pooling, by using `Flat_tuple_array` (and therefore `Obj_array`) it has much improved performance when working with immediate keys or values, as a test is performed and the `caml_modify` skipped when possible. The algorithm is a straightforward implementation, and as such will not perform well under heavy collisions that come from poor hash functions. Additionally, since the pool of Key/Data nodes are created up front, rapidly creating and releasing `Pooled_hashtbl`s will not perform well. For a well-thought-out hash with a long-lived table and immediate values as keys (or data), `Pooled_hashtbl` will very likely outperform `Core_hashtbl`. - Made pointers in `Pool.Obj_array` contain the unique id of the object they point to. This allows one to check in constant time check whether a pointer is valid. - Improved the performance of `Timing_wheel` by internally exposing `Priority_queue.Elt_.t ` private int`. This allows the compiler to eliminate some `caml_modify`'s. This made `nanoseconds_per_step` in the timing-wheel benchmark go from 96ns to 79ns. - Changed `Timing_wheel` to cache its minimum element. This is an important optimization for how async uses `Timing_wheel`. -- Jeremie Dimino, for the Core team