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 6C12B7F30A for ; Thu, 28 Feb 2013 17:37:41 +0100 (CET) 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: AlABAN2GL1EmacjlmWdsb2JhbABFwx4eDgEBAQEBCAsLBxQngk0ZAQEyBiVdEgEFASOIJQMJo1SKcoQ7AQWOQgaNVIUHiG2KFoNBgR6EWINthSUWKYRJ X-IPAS-Result: AlABAN2GL1EmacjlmWdsb2JhbABFwx4eDgEBAQEBCAsLBxQngk0ZAQEyBiVdEgEFASOIJQMJo1SKcoQ7AQWOQgaNVIUHiG2KFoNBgR6EWINthSUWKYRJ X-IronPort-AV: E=Sophos;i="4.84,755,1355094000"; d="scan'208";a="3789540" 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; 28 Feb 2013 17:37:40 +0100 Received: from [172.27.22.15] (helo=tot-smtp) by tot-dmz-mxout1.janestreet.com with esmtp (Exim 4.76) (envelope-from ) id 1UB6UD-0001vZ-Qs for caml-list@inria.fr; Thu, 28 Feb 2013 11:37:37 -0500 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 1UB6UC-0003F0-8s for caml-list@inria.fr; Thu, 28 Feb 2013 11:37:36 -0500 Received: from mail-ie0-f197.google.com ([209.85.223.197]) by mxgoog2.janestreet.com with esmtp (Exim 4.76) (envelope-from ) id 1UB6UC-0004cT-5w for caml-list@inria.fr; Thu, 28 Feb 2013 11:37:36 -0500 Received: by mail-ie0-f197.google.com with SMTP id k14so12610713iea.8 for ; Thu, 28 Feb 2013 08:37:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=google; h=x-received:mime-version:x-received:date:message-id:subject:from:to :content-type; bh=NLNKRF2TSBXpU+oS2Ogf0qt8OMT0OWwkvDlQdNkmeFM=; b=jixhsA+ZJafFPi5VB7ZuxUore67PJQMvTsnE9I60YWAG5PIZFELmzVOvWKCVTyAu/p npyr/UCy6/uhhG+A/evdci02yAKidms4/n4+qGCclBWy1AhuAnD33axFw0N2uhxHKTRm ulAB4RURyeD0gSefNnMA3YR5vF4tIDgfnn4e8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:mime-version:x-received:date:message-id:subject:from:to :content-type:x-gm-message-state; bh=NLNKRF2TSBXpU+oS2Ogf0qt8OMT0OWwkvDlQdNkmeFM=; b=b34iT6VRKSbIRJlru//T1CAQn6kQFd+ys7XN0zXmtC7fl8o5W3+3CeAYZCIqxZ10p5 ivyr5seXQOyBhdZpPKRMYfkIHvi3rRM9uuz6oheKy5eiiApYG1kIiIcrmoNBcKfU9Ec5 Yr+A2hZvFYK2uP00UW+037eAlpQKJleX25s0Eiw/oFlJPlRXiAHVRgcthY5YZ0H7v4ez ndXgCqSeD7IQxkcf3kwCQT9UVOydN+Nm2zF+RDHOq5iu8PdBKcIMaLTG7mBePCmdIJOA 3Nx15fNmSoLsObyU/WkQ9t2DdiPzIFZyoZX7PaNe5EHFVMq5uWV8ZikXZLwWyfWZjQPS Ck2Q== X-Received: by 10.50.40.225 with SMTP id a1mr1724291igl.104.1362069455891; Thu, 28 Feb 2013 08:37:35 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.50.40.225 with SMTP id a1mr1724276igl.104.1362069455690; Thu, 28 Feb 2013 08:37:35 -0800 (PST) Received: by 10.50.70.6 with HTTP; Thu, 28 Feb 2013 08:37:35 -0800 (PST) Date: Thu, 28 Feb 2013 11:37:35 -0500 Message-ID: From: Jeremie Dimino To: caml-list@inria.fr, ocaml-core@googlegroups.com Content-Type: text/plain; charset=ISO-8859-1 X-Gm-Message-State: ALoCoQmLOynHx4k00DAzK0DTxb5RnK2yy53tYxa8bwcbLnks37Eb2PUCKJP+FC5mdWXJq6/zlhkabcOUy1rb/bVV1P838lbR1MYWCc2MRfmhmPtxUTl9RgvwYOSv5pc0lyvE95cly0jH+zSX7jl0GqgYszZe1QNibg== Subject: [Caml-list] [ANN] Core Suite 109.11.00 released + ocaml_plugin I'm pleased to announce the 109.11.00 release of the Core suite. We are now distributing the ocaml_plugin project, which aims at making dynlink more easier. It offers a high-level API where the user can get a first class module out of a few ml source files, the compilation being handled automatically. ocaml_plugin has been tested only on Linux, but we plan to make it usable on other platforms as well. Files and documentation are available on our website and all packages are in opam: https://ocaml.janestreet.com/ocaml-core/109.11.00/individual/ https://ocaml.janestreet.com/ocaml-core/109.11.00/doc/ Changelogs for versions 109.08.00 to 109.11.00: # 109.08.00 ## async_extra - Added module `Async.Command` This is `Core.Command` with additional async functions. In particular it contains a function `async_basic` that is exactly the same as `Core.Command.basic`, except that the function it wraps returns `unit Deferred.t`, instead of `unit`. `async_basic` will also start the async scheduler before the wrapped function is run, and will stop the scheduler when the wrapped function returns. ## async_unix - Added module `Async.Process` This is a new module for creating and dealing with child processes. - For `Writer.save`, replaced the `temp_prefix` argument with `temp_file`. - Added `Ivar.invariant` function. - Added value `Scheduler.fold_fields` This lets one fold over the fields in the scheduler, eliminates an annoying place in catalog browser that reached into the internals of async to compute the sizes of the scheduler fields ## core - Cleaned up and updated the `README`. - Changed executables to enable backtraces if `OCAMLRUNPARAM` is not set. - Changed `Command` so that executables show build info and version info This happens when an executatble is called as: foo.exe version Before this change, rather than display build info, executables would display the not-so-helpful: (no option given - printing version) - Added back `Float` rounding functions with a hardcoded direction. - Exposed `with bin_io` and `with compare` for the =sexp_bool= type. - Added value `Core.Never_returns.sexp_of_t`. - Added values `Or_error.tag{,_arg}` These are analogous to `Error` functions of the same name. - Added functor `Sexpable.Of_sexpable` This is for serializing values of one type as though it were some other isomorphic type. - Added module `Backtrace.Exn` This exposes OCaml stdlib's `Printexc` functions for backtraces. - Added module `Flags` This implements Unix-style sets of flags that are represented as an `int` with various bits set, one bit for each flag, e.g., `Linux_ext.Epoll.Flag`. - Added module `Uuid` This module implements universally unique identifiers based on version 3 of the UUID specification. It used to be in `Core_extended=` - Added module `Type_equal`, which defines the "equality" GADT. ## type_conv - Fixed type_conv to stop dropping parens in arguments such as: type t = { a : int with default(1), sexp_drop_if(fun x -> (x + 1) * 2 = 4) } with sexp # 109.09.00 ## async - Switched `Async.Std`'s toplevel bindings for `Deferred.Or_error`'s `bind` and `map` to use `Deferred.Result`. This allows them to be used with any `'error` type, rather than just `Error.t`. ## async_core - Fixed bug in `Async.Throttle`, in which jobs weren't started in order. ## async_unix - Added module `Thread_safe_pipe`, for streaming data outside async into async. This a more efficient and feature-ful way to send a sequence of values from outside async into async than `Thread_safe.pipe`, which has been eliminated. - Changed functions in `Thread_safe` to always wake up the scheduler. Changed `Thread_safe.run_in_async{,_exn}` to not run a cycle, and instead rely on the scheduler to run the cycle. ## core - In `Core.Std`, exposed `Or_error.ok_exn` and `Or_error.error` - Removed some values exported by `Core.Std`. Removed some values from `Core.Std` that weren't widely used, or we didn't think should be exposed, including `ascending`, `descending`, and `equal`, which use polymorphic comparison, and we want to discourage. Here's a guide to some of what was removed, and what one should now use instead. | removed | replace with | |-----------------------------------+---------------------------------------| | `Int_replace_polymorphic_compare` | `Int.Replace_polymorphic_compare` | | `ascending` | `Polymorphic_compare.ascending` | | `descending` | `Polymorphic_compare.descending` | | `equal` | `Polymorphic_compare.equal` | | `ifprintf` | `Printf.ifprintf` | | `sscanf` | `Scanf.sscanf` | | `Scan_failure` | `Scanf.Scan_failure` | | `string_of__of__sexp_of` | `Sexplib.Conv.string_of__of__sexp_of` | | `of_string__of__of_sexp` | `Sexplib.Conv.of_string__of__of_sexp` | | `type vec` | `type float64_vec` | - Disallowed `<:sexp_of<` with two underscores; using a single underscore instead. - Added `Command.Spec.Arg_type.of_alist_exn` as an alternative for `of_map`. This captures the common pattern to create the map from an alist. - Improved the performance of `Hashtbl`. Constrained hashtbl size to a power of two and used a bitmask rather than mod operation for finding hash buckets. - Improved the performance of `Univ`, using the `Type_equal` GADT. The new implementation improves the run-time and space usage over the old one. In the old implementation, a `Univ.t` was represented as record with three fields: an exception, a string, and a closure. Creating a univ required allocating three heap blocks, the exception (3 words), the closure (3 words), and the three-field record (4 words). In the new implementation, a `Univ.t` is represented as a 2-field heap block containing the `Constr.t` and the value. Creating a univ allocates that single 3-word block, improving on the 10 words needed previously. Matching on univs is also faster. In the old implementation, matching on a univ required making a function call, testing exception equality, and allocating a `Some` block. Now, it does just the test and allocation. Furthermore, it is possible to use `does_match` and `match_exn` to avoid the allocation. - Added `Version_util.build_info_as_sexp`. - Added `_squelch_unused_module_warning_` to `Comparable.S.Replace_polymorphic_compare`. ## sexplib - Fixed an `unused rec` warning in the code generated by `pa_sexp` in rare cases. # 109.10.00 ## async_extra - Fixed a race condition in `Pipe_rpc` and `State_rpc`. This race could cause an exception to be raised on connection closing. ## async_unix - Added `Shutdown.do_not_finish_shutdown_before`. This allows one to add `unit Deferred.t`'s that will delay the `shutdown` from finishing. The implementation is more efficient than using `at_shutdown`. ## bin_prot - Improved error messages in presence of GADTs. ## comparelib - Improved error messages in presence of GADTs. ## core - Added `|>`, which means the same as `|!`, but is likely to replace it someday. This is mostly because `|>` is an accepted notation elsewhere, particularly in F#. In the future, we will consider eliminating `|!` in favor of `|>`, so as to avoid the duplication. - Made `module Lazy` into a monad. - Renamed `List.stable_dedup_involving_an_application_of_the_set_functor` as `List.stable_dedup_staged`. Made it use `Staged.t` to make explicit the expectation of partial application. - Added pretty printers for the toplevel to `Error` and `Info`. ## fieldslib - Changed `with fields` on `private` types to not expose mutators or creators. ## pa_ounit - Rewrote `pa_ounit` to simplify execution order and work better with functors. Rewrote `pa_ounit` to solve its shortcomings with functors, namely that functors need to be applied with `TEST_MODULE` for their tests to be registered. The order of execution is also much simpler: tests are executed inline, at the toplevel (or functor application time). There is still a limitation: when a library doesn't have any occurrence of `TEST`, `TEST_UNIT`, or `TEST_MODULE` inside of it, the test runners are not set up, so tests inside of functors (from other libraries) will not be executed. Running `inline_test_runner.exe` is not going to run tests anymore; people should run the `inline_test_runner` script instead. Backtraces are now properly shown when exceptions are thrown. ## sexplib - Improved error messages in presence of GADTs. - Made `with sexp` work with types containing `as` in signatures. ## variantslib - Improved error messages in presence of GADTs. # 109.11.00 ## async_core - Extended `Deferred.Or_error` to parallel almost all of the `Core.Or_error` interface. - Improved the performance of `Clock.at`, and added a more efficient version, `Clock.run_at`. Reworked the async heap of clock alarms to use async jobs as alarms. Reworked `Clock.at` to use this and to not use abortable events, which is a performance improvement. Added a more efficient version of `Clock.at`, for the common situation when one doesn't need a deferred. ```ocaml (*** [run_at time ~f] is a more efficient version of [at time >>> f]. *) val run_at : Time.t -> f:(unit -> unit) -> unit ``` ## async_extra - Exposed a `version` function in `Pipe_rpc` and `State_rpc`. ## async_unix - Added a check to fail if `Scheduler.go` is called more than once. ## core - Added module `Interned_string` This has a functor for creating modules of interned strings. It uses the very simple mechanism of mapping distinct strings to consecutive ints. - Added value `Hashtbl.find_and_remove`. ## fieldslib - `with fields`, for a type `u` that isn't named `t`, creates module `Fields_of_u` rather than module `Fields`. This allows one to us `with fields` on several types in the same structure. -- Jeremie Dimino, for the Core team