From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: ** X-Spam-Status: No, score=2.1 required=5.0 tests=AWL,SPF_NEUTRAL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by yquem.inria.fr (Postfix) with ESMTP id 234C0BBAF for ; Tue, 20 Jan 2009 04:57:05 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtYAAJnadElIDtyckGdsb2JhbACTRz4BAQEBCQkMBxEDqmeNDQEDAQOFcIJ+ X-IronPort-AV: E=Sophos;i="4.37,293,1231110000"; d="scan'208";a="33984581" Received: from fg-out-1718.google.com ([72.14.220.157]) by mail4-smtp-sop.national.inria.fr with ESMTP; 20 Jan 2009 04:57:04 +0100 Received: by fg-out-1718.google.com with SMTP id l27so1352223fgb.43 for ; Mon, 19 Jan 2009 19:57:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:sender:message-id:from:to :content-type:content-transfer-encoding:mime-version:subject:date:cc :x-mailer; bh=iKnMlv58/+qRSNSEUgABEfGpSXNzRWFVPpXp4xGoZO8=; b=dSxsAqqEbRA8j11RoKFjp0E1gHP8jFZVliO+ggzESeYcw5zxtrTxVl2LrIsyFsq1X6 JZIGRa8erhKImY/h6H3ZS/hZUdkmw1x2MzUoWIWpqd2RMR4La10WMzvu9NZBMwon/Kl+ tsxXIE5yz4cqB9AN0Kv/TkkLDxnSi2YDvFaKY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:message-id:from:to:content-type:content-transfer-encoding :mime-version:subject:date:cc:x-mailer; b=kGkk6YqSdQs/l1e6VmG8UhEH2F2biXuX/dKT7O8NCWfE0txn0l547o4dCRZ95F5DcP QrCDWcTg7oCZ5vay9XCuK91s/fS+89wqkBh8ju7rJWaBDWsDw7Mr2h4r+BVK+lt9+ArT 5ZdJ2HxqQBzolcusV8Jq2BUUipQOMXfdVr4bA= Received: by 10.86.59.2 with SMTP id h2mr2270295fga.30.1232423823454; Mon, 19 Jan 2009 19:57:03 -0800 (PST) Received: from ?192.168.1.34? (30-249.76-83.cust.bluewin.ch [83.76.249.30]) by mx.google.com with ESMTPS id 12sm1955152fgg.36.2009.01.19.19.57.02 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 19 Jan 2009 19:57:02 -0800 (PST) Sender: =?UTF-8?Q?Daniel_B=C3=BCnzli?= Message-Id: <896DDB16-4E74-4B57-ADE6-4B068928871D@erratique.ch> From: =?ISO-8859-1?Q?Daniel_B=FCnzli?= To: OCaml List Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: [ANN] React 0.9.0 Date: Tue, 20 Jan 2009 04:56:27 +0100 Cc: caml-hump@inria.fr X-Mailer: Apple Mail (2.930.3) X-Spam: no; 0.00; bunzli:01 buenzli:01 ocaml:01 applicative:01 modular:01 constructors:01 pointers:01 dependencies:01 booleans:01 ocaml:01 runtime:01 interfacing:01 corresponds:01 hashtable:01 subtleties:01 Hello, I'd like to announce the following module. React is an OCaml module for functional reactive programming (frp). It provides support to program with time varying values : applicative events and signals. React doesn't define any primitive event or signal, this lets the client chooses the concrete timeline. React is made of a single, independent, module and distributed under the new BSD license. Project home page : http://erratique.ch/software/react Although the code is feature complete and has been tested it has not been in large scale programs yet. A stable 1.0.0 will be published once I feel we have the right api. Your reactions are welcome, Daniel P.S. Various incarnations of frp (frtime, yampa, flapjax, ocamlrt, reactive) helped to implement React, thanks to their authors for sharing their source. P.P.S. Here's the answer to the forthcoming question about how React compares to ocamlrt. Following are the points I think are different and worth mentioning. But as I don't claim to have a thorough understanding of how ocamlrt works feel free to correct me or make additions. ocamlrt used to be located at http://users.wpi.edu/~squirrel/repos/ocamlrt2 but recently vanished. The version at http://code.google.com/p/ocamlrt seems to be an older one. * React doesn't use the object system. ocamlrt uses it internally. * React doesn't use any global data structures. Care is still needed in multithreaded environments (see docs), but React is more thread and modular friendly. * React treats constant signals separately via smart constructors, they are not part of the dataflow graph. * React uses weak pointers in the dataflow graph's forward dependencies and in the update queue to prevent space leaks. ocamlrt leaks. * React uses client provided functions to test signal value equality. ocamlrt doesn't deal correctly with effectful signals. Correctly means no value change (according to equality), no update, no effect. * React has most of pervasives' functions on ints, floats and booleans already lifted in specific modules that may be opened in a given context. * React is (and will be) only a pure OCaml reactive runtime. Interfacing with primitive events, signals or real time is left to React's clients. In other words React corresponds to the functionality provided by the library fr of ocamlrt. * React has a precise description of the combinators' semantic in the documentation. * React doesn't depend on extlib. * Performance ? I don't really know. Some aspects may make React faster : doesn't leak, doesn't use a global datastore (which involves a hashtable and universal types). Some aspects may make it slower : use of weak references, subtleties in signal creation, correct treatment of equality. * Being inavailable ocamlrt seems to be a dead project.